module ElasticRecord::FromSearchHit
Public Instance Methods
from_search_hit(hit)
click to toggle source
# File lib/elastic_record/from_search_hit.rb, line 4 def from_search_hit(hit) hit = hit['_source'].merge('id' => hit['_id']) attrs = value_from_search_hit_object(hit) if respond_to?(:instantiate) instantiate(attrs) else self.new.tap do |record| attrs.each do |k, v| record.send("#{k}=", v) if record.respond_to?("#{k}=") end end end end
Private Instance Methods
value_for_date_range(value)
click to toggle source
# File lib/elastic_record/from_search_hit.rb, line 58 def value_for_date_range(value) Date.parse(value['gte'])..Date.parse(value['lte']) end
value_for_range(value)
click to toggle source
# File lib/elastic_record/from_search_hit.rb, line 52 def value_for_range(value) value['gte'] = -Float::INFINITY if value['gte'].nil? value['lte'] = Float::INFINITY if value['lte'].nil? value['gte']..value['lte'] end
value_from_search_hit(value)
click to toggle source
# File lib/elastic_record/from_search_hit.rb, line 41 def value_from_search_hit(value) case value['gte'] # the gte lower bound is never nil when String value_for_date_range(value) when Integer value_for_range(value) else # type: 'object' value_from_search_hit_object(value) end end
value_from_search_hit_object(hit)
click to toggle source
# File lib/elastic_record/from_search_hit.rb, line 22 def value_from_search_hit_object(hit) hit.each do |field, value| next unless value case value when Hash hit[field] = value_from_search_hit(value) when Array # type: 'nested' value.each do |element| if element.is_a? Hash value_from_search_hit_object(element) end end end end hit end