Class: StoresInMongo::Builder
- Inherits:
-
Object
- Object
- StoresInMongo::Builder
- Defined in:
- lib/stores_in_mongo/builder.rb
Instance Method Summary collapse
- #build ⇒ Object
- #build_document_methods_module ⇒ Object
-
#initialize(model, field, data_type) ⇒ Builder
constructor
A new instance of Builder.
Constructor Details
#initialize(model, field, data_type) ⇒ Builder
Returns a new instance of Builder.
4 5 6 7 8 |
# File 'lib/stores_in_mongo/builder.rb', line 4 def initialize(model, field, data_type) @model = model @field = field.to_s @data_type = data_type end |
Instance Method Details
#build ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/stores_in_mongo/builder.rb', line 10 def build @model.class_attribute :mongo_data_field @model.mongo_data_field = @field document_methods = build_document_methods_module @model.instance_exec(document_methods, @data_type) do |document_methods, data_type| const_set("MongoDocumentMethods", document_methods) include self::MongoDocumentMethods before_save :save_document before_destroy :destroy_document mongo_klass = const_set("MongoDocument", Class.new) mongo_klass.include Mongoid::Document mongo_klass.include Mongoid::Timestamps mongo_klass.field self.mongo_data_field.to_sym, :type => data_type, default: data_type.try(:new) end end |
#build_document_methods_module ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/stores_in_mongo/builder.rb', line 29 def build_document_methods_module mod = Module.new mod.include(StoresInMongo::DocumentMethods) mod.instance_exec(@model) do |model| define_method(model.mongo_data_field) do |reload = false| document(reload)[model.mongo_data_field] end define_method(model.mongo_data_field + "=") do |data| document[model.mongo_data_field] = data end end return mod end |