stores_in_mongo 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/base.rb +1 -20
  3. data/lib/builder.rb +44 -0
  4. metadata +23 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f358c17127a0af455506fbbcd4b0174bb8103462
4
- data.tar.gz: 07aa5ad59c2f3cf4dc1a2cf840ca7d592bfbb2c1
3
+ metadata.gz: d133e1bb324308e0b917c2d02f529b2e45cfc4cb
4
+ data.tar.gz: 14728962506a368394f4f2154c78c56e8661aade
5
5
  SHA512:
6
- metadata.gz: b6e0c68b15a11c835fa0d007b2ca754c44daa719689dbd05e59db9fa9297f13dc1d0d309f2431be5e1c3ce3f10110d89c7d409e4b90f20ce2c1fb95129716406
7
- data.tar.gz: 31134763f3bf829ebcee4a8274f780d04e3394848ac9a0ced4d504924b645d6401c6cfd0ad67f6880fe02ce715b1b2059515ca73c02ed533bacc7dedde2e834e
6
+ metadata.gz: 1d71b54e687957bb3ba3768c754457e6e692821f4d2764a3544d266b12ab092f064ac6345ce1d3b0b44a2a042e072f6a863d86c0c1e686b96cfef5c61e323531
7
+ data.tar.gz: 8061cb775c3bbd4b0a142b20b23da0a5b1f9a3d842d89540b82c739605f936567ce588c297fad88e9d306954f343de99d45628b13d2a8fedb410dfe6bdfc8e0f
data/lib/base.rb CHANGED
@@ -1,26 +1,7 @@
1
1
  module StoresInMongo
2
2
  module Base
3
3
  def stores_in_mongo(field)
4
- class_attribute :mongo_data_field
5
- self.mongo_data_field = field.to_s
6
- include StoresInMongo::DocumentMethods
7
-
8
- before_save :save_document
9
- before_destroy :destroy_document
10
-
11
- klass = const_set("MongoDocument", Class.new)
12
- klass.include Mongoid::Document
13
- klass.include Mongoid::Timestamps
14
- klass.field self.mongo_data_field.to_sym, :type => Hash, default: {}
15
-
16
- # TODO: allow customization `document` name
17
- define_method(self.mongo_data_field) do |reload = false|
18
- document(reload)[self.mongo_data_field]
19
- end
20
-
21
- define_method(self.mongo_data_field + "=") do |data|
22
- document[self.mongo_data_field] = data
23
- end
4
+ ::StoresInMongo::Builder.new(self, field).build
24
5
  end
25
6
  end
26
7
  end
data/lib/builder.rb ADDED
@@ -0,0 +1,44 @@
1
+ module StoresInMongo
2
+ class Builder
3
+
4
+ def initialize(model, field)
5
+ @model = model
6
+ @field = field.to_s
7
+ end
8
+
9
+ def build
10
+ @model.class_attribute :mongo_data_field
11
+ @model.mongo_data_field = @field
12
+
13
+ document_methods = build_document_methods_module
14
+ @model.instance_exec(document_methods) do |document_methods|
15
+ const_set("MongoDocumentMethods", document_methods)
16
+ include self::MongoDocumentMethods
17
+
18
+ before_save :save_document
19
+ before_destroy :destroy_document
20
+
21
+ mongo_klass = const_set("MongoDocument", Class.new)
22
+ mongo_klass.include Mongoid::Document
23
+ mongo_klass.include Mongoid::Timestamps
24
+ mongo_klass.field self.mongo_data_field.to_sym, :type => Hash, default: {}
25
+ end
26
+ end
27
+
28
+ def build_document_methods_module
29
+ mod = Module.new
30
+ mod.include(StoresInMongo::DocumentMethods)
31
+ mod.instance_exec(@model) do |model|
32
+ define_method(model.mongo_data_field) do |reload = false|
33
+ document(reload)[model.mongo_data_field]
34
+ end
35
+
36
+ define_method(model.mongo_data_field + "=") do |data|
37
+ document[model.mongo_data_field] = data
38
+ end
39
+ end
40
+ return mod
41
+ end
42
+
43
+ end
44
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stores_in_mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Schwartz
@@ -9,7 +9,27 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-05-04 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mongoid
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.0.0
13
33
  description: Use stores_in_mongo <field> in an ActiveRecord object, use it as if it
14
34
  were local. Includes ActiveRecord-like caching behavior.
15
35
  email: ozydingo@gmail.com
@@ -18,6 +38,7 @@ extensions: []
18
38
  extra_rdoc_files: []
19
39
  files:
20
40
  - lib/base.rb
41
+ - lib/builder.rb
21
42
  - lib/document_methods.rb
22
43
  - lib/stores_in_mongo.rb
23
44
  homepage: https://github.com/ozydingo/stores_in_mongo