Class: Tire::Results::Item
- Inherits:
-
Object
- Object
- Tire::Results::Item
show all
- Extended by:
- ActiveModel::Naming
- Includes:
- ActiveModel::Conversion
- Defined in:
- lib/tire/results/item.rb
Instance Method Summary
collapse
Constructor Details
#initialize(args = {}) ⇒ Item
Create new instance, recursively converting all Hashes to Item
and leaving everything else alone.
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/tire/results/item.rb', line 11
def initialize(args={})
raise ArgumentError, "Please pass a Hash-like object" unless args.respond_to?(:each_pair)
@attributes = {}
args.each_pair do |key, value|
if value.is_a?(Array)
@attributes[key.to_sym] = value.map { |item| @attributes[key.to_sym] = item.is_a?(Hash) ? Item.new(item.to_hash) : item }
else
@attributes[key.to_sym] = value.is_a?(Hash) ? Item.new(value.to_hash) : value
end
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *arguments) ⇒ Object
Delegate method to a key in underlying hash, if present, otherwise return +nil+.
25
26
27
|
# File 'lib/tire/results/item.rb', line 25
def method_missing(method_name, *arguments)
@attributes[method_name.to_sym]
end
|
Instance Method Details
#[](key) ⇒ Object
Also known as:
read_attribute_for_serialization
33
34
35
|
# File 'lib/tire/results/item.rb', line 33
def [](key)
@attributes[key.to_sym]
end
|
#as_json(options = nil) ⇒ Object
75
76
77
78
|
# File 'lib/tire/results/item.rb', line 75
def as_json(options=nil)
hash = to_hash
hash.respond_to?(:with_indifferent_access) ? hash.with_indifferent_access.as_json(options) : hash.as_json(options)
end
|
#class ⇒ Object
Let's pretend we're someone else in Rails
87
88
89
90
91
|
# File 'lib/tire/results/item.rb', line 87
def class
defined?(::Rails) && @attributes[:_type] ? @attributes[:_type].camelize.constantize : super
rescue NameError
super
end
|
#errors ⇒ Object
52
53
54
|
# File 'lib/tire/results/item.rb', line 52
def errors
ActiveModel::Errors.new(self)
end
|
#id ⇒ Object
40
41
42
|
# File 'lib/tire/results/item.rb', line 40
def id
@attributes[:_id] || @attributes[:id]
end
|
#inspect ⇒ Object
93
94
95
96
|
# File 'lib/tire/results/item.rb', line 93
def inspect
s = []; @attributes.each { |k,v| s << "#{k}: #{v.inspect}" }
%Q|<Item#{self.class.to_s == 'Tire::Results::Item' ? '' : " (#{self.class})"} #{s.join(', ')}>|
end
|
#persisted? ⇒ Boolean
48
49
50
|
# File 'lib/tire/results/item.rb', line 48
def persisted?
!!id
end
|
#respond_to?(method_name, include_private = false) ⇒ Boolean
29
30
31
|
# File 'lib/tire/results/item.rb', line 29
def respond_to?(method_name, include_private = false)
@attributes.has_key?(method_name.to_sym) || super
end
|
#to_hash ⇒ Object
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/tire/results/item.rb', line 64
def to_hash
@attributes.reduce({}) do |sum, item|
if item.last.is_a?(Array)
sum[ item.first ] = item.last.map { |item| item.respond_to?(:to_hash) ? item.to_hash : item }
else
sum[ item.first ] = item.last.respond_to?(:to_hash) ? item.last.to_hash : item.last
end
sum
end
end
|
#to_json(options = nil) ⇒ Object
Also known as:
to_indexed_json
80
81
82
|
# File 'lib/tire/results/item.rb', line 80
def to_json(options=nil)
as_json.to_json(options)
end
|
#to_key ⇒ Object
60
61
62
|
# File 'lib/tire/results/item.rb', line 60
def to_key
persisted? ? [id] : nil
end
|
#type ⇒ Object
44
45
46
|
# File 'lib/tire/results/item.rb', line 44
def type
@attributes[:_type] || @attributes[:type]
end
|
#valid? ⇒ Boolean
56
57
58
|
# File 'lib/tire/results/item.rb', line 56
def valid?
true
end
|