Class: Tire::Results::Item

Inherits:
Object
  • Object
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.

Raises:

  • (ArgumentError)


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



33
34
35
# File 'lib/tire/results/item.rb', line 33

def [](key)
  @attributes[key.to_sym]
end

#as_json(options = nil) ⇒ Object



68
69
70
71
# File 'lib/tire/results/item.rb', line 68

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

#classObject

Let's pretend we're someone else in Rails



80
81
82
83
84
# File 'lib/tire/results/item.rb', line 80

def class
  defined?(::Rails) && @attributes[:_type] ? @attributes[:_type].camelize.constantize : super
rescue NameError
  super
end

#errorsObject



49
50
51
# File 'lib/tire/results/item.rb', line 49

def errors
  ActiveModel::Errors.new(self)
end

#idObject



37
38
39
# File 'lib/tire/results/item.rb', line 37

def id
  @attributes[:_id]   || @attributes[:id]
end

#inspectObject



86
87
88
89
# File 'lib/tire/results/item.rb', line 86

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

Returns:

  • (Boolean)


45
46
47
# File 'lib/tire/results/item.rb', line 45

def persisted?
  !!id
end

#respond_to?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (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_hashObject



61
62
63
64
65
66
# File 'lib/tire/results/item.rb', line 61

def to_hash
  @attributes.reduce({}) do |sum, item|
    sum[ item.first ] = item.last.respond_to?(:to_hash) ? item.last.to_hash : item.last
    sum
  end
end

#to_json(options = nil) ⇒ Object Also known as: to_indexed_json



73
74
75
# File 'lib/tire/results/item.rb', line 73

def to_json(options=nil)
  as_json.to_json(options)
end

#to_keyObject



57
58
59
# File 'lib/tire/results/item.rb', line 57

def to_key
  persisted? ? [id] : nil
end

#typeObject



41
42
43
# File 'lib/tire/results/item.rb', line 41

def type
  @attributes[:_type] || @attributes[:type]
end

#valid?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/tire/results/item.rb', line 53

def valid?
  true
end