Sha256: 9befe04e066d48cc323c30dd467c3a5e60e78f730539f831fb16c9a5b2d86b3d

Contents?: true

Size: 1.53 KB

Versions: 25

Compression:

Stored size: 1.53 KB

Contents

module Elastics
  class Result

    #  adds sugar to documents with the following structure:
    #
    #    {
    #        "_index" : "twitter",
    #        "_type" : "tweet",
    #        "_id" : "1",
    #    }

    module DocumentLoader

      module ModelClasses
        extend self
        # maps all the index/types to the ruby class
        def map
          @map ||= begin
                     map = {}
                     (Conf.elastics_models + Conf.elastics_active_models).each do |m|
                       m       = eval("::#{m}") if m.is_a?(String)
                       indices = m.elastics.index.is_a?(Array) ? m.elastics.index : [m.elastics.index]
                       types   = m.elastics.type.is_a?(Array)  ? m.elastics.type  : [m.elastics.type]
                       indices.each do |i|
                         types.each { |t| map["#{i}/#{t}"] = m }
                       end
                     end
                     map
                   end
        end
      end

      # extend if result has a structure like a document
      def self.should_extend?(result)
        result.is_a? Document
      end

      def model_class
        @model_class ||= ModelClasses.map["#{index_basename}/#{self['_type']}"]
      end

      def load
        model_class.find(self['_id']) if model_class
      end

      def load!
        raise DocumentMappingError, "the '#{index_basename}/#{self['_type']}' document cannot be mapped to any class." \
              unless model_class
        model_class.find self['_id']
      end

    end

  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
elastics-models-1.3.3 lib/elastics/result/document_loader.rb
elastics-models-1.3.2 lib/elastics/result/document_loader.rb
elastics-models-1.3.1 lib/elastics/result/document_loader.rb
elastics-models-1.3.0 lib/elastics/result/document_loader.rb
elastics-models-1.2.1 lib/elastics/result/document_loader.rb
elastics-models-1.2.0 lib/elastics/result/document_loader.rb
elastics-models-1.1.11 lib/elastics/result/document_loader.rb
elastics-models-1.1.10 lib/elastics/result/document_loader.rb
elastics-models-1.1.9 lib/elastics/result/document_loader.rb
elastics-models-1.1.8 lib/elastics/result/document_loader.rb
elastics-models-1.1.7 lib/elastics/result/document_loader.rb
elastics-models-1.1.6 lib/elastics/result/document_loader.rb
elastics-models-1.1.5 lib/elastics/result/document_loader.rb
elastics-models-1.1.4 lib/elastics/result/document_loader.rb
elastics-models-1.1.3 lib/elastics/result/document_loader.rb
elastics-models-1.1.2 lib/elastics/result/document_loader.rb
elastics-models-1.1.1 lib/elastics/result/document_loader.rb
elastics-models-1.1.0 lib/elastics/result/document_loader.rb
elastics-models-1.0.10 lib/elastics/result/document_loader.rb
elastics-models-1.0.9 lib/elastics/result/document_loader.rb