module Elastics::Result::Document

adds sugar to documents with the following structure (_source is optional):

{
    "_index" : "twitter",
    "_type" : "tweet",
    "_id" : "1",
    "_source" : {
        "user" : "kimchy",
        "postDate" : "2009-11-15T14:12:12",
        "message" : "trying out Elastics Search"
    }
}

Public Class Methods

should_extend?(obj) click to toggle source

extend if result has a structure like a document

# File lib/elastics/result/document.rb, line 20
def self.should_extend?(obj)
  %w[_index _type _id].all? {|k| obj.has_key?(k)}
end

Public Instance Methods

index_basename() click to toggle source

used to get the unprefixed (by live-reindex) index name

# File lib/elastics/result/document.rb, line 49
def index_basename
  @index_basename ||= self['_index'].sub(/^\d{14}_/, '')
end
method_missing(meth, *args, &block) click to toggle source

exposes _source and readers: automatically supply object-like reader access also expose meta readers like _id, _source, etc, also callable without the leading '_'

Calls superclass method
# File lib/elastics/result/document.rb, line 31
def method_missing(meth, *args, &block)
  smeth = meth.to_s
  case
  # field name
  when readers.has_key?(smeth)
    readers[smeth]
  # result item
  when has_key?(smeth)
    self[smeth]
  # result item called without the '_' prefix
  when has_key?("_#{smeth}")
    self["_#{smeth}"]
  else
    super
  end
end
respond_to?(meth, private=false) click to toggle source
Calls superclass method
# File lib/elastics/result/document.rb, line 24
def respond_to?(meth, private=false)
  smeth = meth.to_s
  readers.has_key?(smeth) || has_key?(smeth) || has_key?("_#{smeth}") || super
end

Private Instance Methods

readers() click to toggle source
# File lib/elastics/result/document.rb, line 56
def readers
  @readers ||= begin
                 readers = (self['_source']||{}).merge(self['fields']||{})
                 # flattened reader for multi_readers or attachment readers
                 readers.keys.each{|k| readers[k.gsub('.','_')] = readers.delete(k) if k.include?('.')}
                 readers
               end
end