Module: Elasticsearch::Model::Proxy
- Defined in:
- lib/elasticsearch/model/proxy.rb
Overview
This module provides a proxy interfacing between the including class and Elasticsearch::Model, preventing the pollution of the including class namespace.
The only “gateway” between the model and Elasticsearch::Model is the ‘__elasticsearch__` class and instance method.
The including class must be compatible with [ActiveModel](github.com/rails/rails/tree/master/activemodel).
Defined Under Namespace
Modules: Base Classes: ClassMethodsProxy, InstanceMethodsProxy
Class Method Summary collapse
-
.included(base) ⇒ Object
Define the ‘__elasticsearch__` class and instance methods in the including class and register a callback for intercepting changes in the model.
Class Method Details
.included(base) ⇒ Object
The callback is triggered only when ‘Elasticsearch::Model` is included in the module and the functionality is accessible via the proxy.
Define the ‘__elasticsearch__` class and instance methods in the including class and register a callback for intercepting changes in the model.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/elasticsearch/model/proxy.rb', line 38 def self.included(base) base.class_eval do # {ClassMethodsProxy} instance, accessed as `MyModel.__elasticsearch__` # def self.__elasticsearch__ &block @__elasticsearch__ ||= ClassMethodsProxy.new(self) @__elasticsearch__.instance_eval(&block) if block_given? @__elasticsearch__ end # {InstanceMethodsProxy}, accessed as `@mymodel.__elasticsearch__` # def __elasticsearch__ &block @__elasticsearch__ ||= InstanceMethodsProxy.new(self) @__elasticsearch__.instance_eval(&block) if block_given? @__elasticsearch__ end # Register a callback for storing changed attributes for models which implement # `before_save` and `changed_attributes` methods (when `Elasticsearch::Model` is included) # # @see http://api.rubyonrails.org/classes/ActiveModel/Dirty.html # before_save do |i| i.__elasticsearch__.instance_variable_set(:@__changed_attributes, Hash[ i.changes.map { |key, value| [key, value.last] } ]) end if respond_to?(:before_save) && instance_methods.include?(:changed_attributes) end end |