Class: Elasticsearch::Model::Adapter::Adapter

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticsearch/model/adapter.rb

Overview

Contains an adapter for specific OxM or architecture.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ Adapter

Returns a new instance of Adapter.



54
55
56
# File 'lib/elasticsearch/model/adapter.rb', line 54

def initialize(klass)
  @klass = klass
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



52
53
54
# File 'lib/elasticsearch/model/adapter.rb', line 52

def klass
  @klass
end

Class Method Details

.adaptersHash

Return the collection of registered adapters

Examples:

Return the currently registered adapters


Elasticsearch::Model::Adapter.adapters
# => {
#  Elasticsearch::Model::Adapter::ActiveRecord => #<Proc:0x007...(lambda)>,
#  Elasticsearch::Model::Adapter::Mongoid => #<Proc:0x007... (lambda)>,
# }

Returns:

  • (Hash)

    The collection of adapters



103
104
105
# File 'lib/elasticsearch/model/adapter.rb', line 103

def self.adapters
  @adapters ||= {}
end

.register(name, condition) ⇒ Object

Registers an adapter for specific condition

Examples:

Register an adapter for DataMapper


module DataMapperAdapter

  # Implement the interface for fetching records
  #
  module Records
    def records
      klass.all(id: @ids)
    end

    # ...
  end
end

# Register the adapter
#
Elasticsearch::Model::Adapter.register(
  DataMapperAdapter,
  lambda { |klass|
    defined?(::DataMapper::Resource) and klass.ancestors.include?(::DataMapper::Resource)
  }
)

Parameters:

  • name (Module)

    The module containing the implemented interface

  • condition (Proc)

    An object with a ‘call` method which is evaluated in #adapter



87
88
89
# File 'lib/elasticsearch/model/adapter.rb', line 87

def self.register(name, condition)
  self.adapters[name] = condition
end

Instance Method Details

#adapterObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the adapter module



135
136
137
138
139
140
# File 'lib/elasticsearch/model/adapter.rb', line 135

def adapter
  @adapter ||= begin
    self.class.adapters.find( lambda {[]} ) { |name, condition| condition.call(klass) }.first \
    || Elasticsearch::Model::Adapter::Default
  end
end

#callbacks_mixinObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the module with Default::Callbacks interface implementation



119
120
121
# File 'lib/elasticsearch/model/adapter.rb', line 119

def callbacks_mixin
  adapter.const_get(:Callbacks)
end

#importing_mixinObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the module with Default::Importing interface implementation



127
128
129
# File 'lib/elasticsearch/model/adapter.rb', line 127

def importing_mixin
  adapter.const_get(:Importing)
end

#records_mixinObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the module with Default::Records interface implementation



111
112
113
# File 'lib/elasticsearch/model/adapter.rb', line 111

def records_mixin
  adapter.const_get(:Records)
end