class Tire::Results::Item

Public Class Methods

new(args={}) click to toggle source

Create new instance, recursively converting all Hashes to Item and leaving everything else alone.

# 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

Public Instance Methods

[](key) click to toggle source
# File lib/tire/results/item.rb, line 33
def [](key)
  @attributes[key.to_sym]
end
as_json(options=nil) click to toggle source
# 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() click to toggle source

Let's pretend we're someone else in Rails

# File lib/tire/results/item.rb, line 87
def class
  defined?(::Rails) && @attributes[:_type] ? @attributes[:_type].camelize.constantize : super
rescue NameError
  super
end
errors() click to toggle source
# File lib/tire/results/item.rb, line 52
def errors
  ActiveModel::Errors.new(self)
end
id() click to toggle source
# File lib/tire/results/item.rb, line 40
def id
  @attributes[:_id]   || @attributes[:id]
end
inspect() click to toggle source
# 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
method_missing(method_name, *arguments) click to toggle source

Delegate method to a key in underlying hash, if present, otherwise return nil.

# File lib/tire/results/item.rb, line 25
def method_missing(method_name, *arguments)
  @attributes[method_name.to_sym]
end
persisted?() click to toggle source
# File lib/tire/results/item.rb, line 48
def persisted?
  !!id
end
read_attribute_for_serialization(key) click to toggle source
Alias for: []
respond_to?(method_name, include_private = false) click to toggle source
# 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() click to toggle source
# 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_indexed_json(options=nil) click to toggle source
Alias for: to_json
to_json(options=nil) click to toggle source
# File lib/tire/results/item.rb, line 80
def to_json(options=nil)
  as_json.to_json(options)
end
Also aliased as: to_indexed_json
to_key() click to toggle source
# File lib/tire/results/item.rb, line 60
def to_key
  persisted? ? [id] : nil
end
type() click to toggle source
# File lib/tire/results/item.rb, line 44
def type
  @attributes[:_type] || @attributes[:type]
end
valid?() click to toggle source
# File lib/tire/results/item.rb, line 56
def valid?
  true
end