hypostasis 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e9fbd57ef0554f4b251ba9e9f0a93bfe87e06b5
4
- data.tar.gz: e8b6b94f4a7dc94715f3738c6cb84083731b2d79
3
+ metadata.gz: 6caf9a586e59a87fa6af2c7403f8f6a111367f45
4
+ data.tar.gz: acb363691d0bede7084ae87720b35ed7eee871d9
5
5
  SHA512:
6
- metadata.gz: 7063a5209d6b7e529314c3918474a05b289e19bee7f0801468c9793e5ebb68605ce37b304cf94fa67f3056ca9bcaa97b078b6e5dd4d8f43f725d8b24d4b456d5
7
- data.tar.gz: c328c728d3f64e507cbba577350b1a294555e41bc647154b24a2de60c4636eb8f59deeb091c21807219495a298c20f453dca2542c80a6a9edf7a64ca1494f726
6
+ metadata.gz: 461374040933e42113e95cfb5c3f31746df9a9c99732cf5cb72f4781ad0bcc40f8f909d5c5ddc9007f8937f66652d6e63388498212c366771e849284af3da417
7
+ data.tar.gz: 1811b054f4ffd51b3aa17d01615bc49aeec934adf50b19ef9d6bdbdf009cad40eb334f381cfdc6782a69dd10c2b2d41ae008326ba8b56c21bcdf3f76e92903a7
@@ -8,6 +8,7 @@ require 'hypostasis/document/persistence'
8
8
  require 'hypostasis/document/findable'
9
9
  require 'hypostasis/document/belongs_to'
10
10
  require 'hypostasis/document/has_one'
11
+ require 'hypostasis/document/has_many'
11
12
 
12
13
  module Hypostasis::Document
13
14
  extend ActiveSupport::Concern
@@ -20,6 +21,7 @@ module Hypostasis::Document
20
21
 
21
22
  include Hypostasis::Document::BelongsTo
22
23
  include Hypostasis::Document::HasOne
24
+ include Hypostasis::Document::HasMany
23
25
 
24
26
  attr_reader :id
25
27
 
@@ -0,0 +1,17 @@
1
+ module Hypostasis::Document
2
+ module HasMany
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def has_many(klass)
7
+ singular_klass = klass.to_s.singularize
8
+ accessor_name = klass.to_s
9
+ child_klass = singular_klass.to_s.classify
10
+ self_klass = "#{self.to_s.underscore}_id".to_sym
11
+ self.class_eval do
12
+ define_method(accessor_name) { child_klass.constantize.find_where(self_klass => @id) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Hypostasis
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -0,0 +1,49 @@
1
+ require 'minitest_helper'
2
+
3
+ class HasManyOwnerDocument
4
+ include Hypostasis::Document
5
+
6
+ use_namespace 'hasmany_docs'
7
+
8
+ field :name
9
+ field :age
10
+
11
+ has_many :has_many_child_documents
12
+ end
13
+
14
+ class HasManyChildDocument
15
+ include Hypostasis::Document
16
+
17
+ use_namespace 'hasmany_docs'
18
+
19
+ field :name
20
+ field :age
21
+
22
+ belongs_to :has_many_owner_document
23
+ end
24
+
25
+ describe 'Document has_many Relationship' do
26
+ before do
27
+ Hypostasis::Connection.create_namespace 'hasmany_docs', data_model: :document
28
+ @owner = HasManyOwnerDocument.create(name: 'John', age: '25')
29
+ @children = []
30
+ @children << HasManyChildDocument.create(name: 'James', age: '6', has_many_owner_document_id: @owner.id)
31
+ @children << HasManyChildDocument.create(name: 'Susie', age: '4', has_many_owner_document_id: @owner.id)
32
+ @children << HasManyChildDocument.create(name: 'Blake', age: '2', has_many_owner_document_id: @owner.id)
33
+ @child = @children.shuffle.first
34
+ end
35
+
36
+ after do
37
+ Hypostasis::Connection.destroy_namespace 'hasmany_docs'
38
+ end
39
+
40
+ it { @owner.must_respond_to :has_many_child_documents }
41
+ it { @child.must_respond_to :has_many_owner_document }
42
+
43
+ it { @owner.has_many_child_documents.is_a?(Array).must_equal true }
44
+ it { @owner.has_many_child_documents.first.is_a?(HasManyChildDocument).must_equal true }
45
+ it { @owner.has_many_child_documents.collect {|doc| doc.id}.must_include @child.id }
46
+
47
+ it { @child.has_many_owner_document.is_a?(HasManyOwnerDocument).must_equal true }
48
+ it { @child.has_many_owner_document.id.must_equal @owner.id }
49
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hypostasis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
@@ -106,6 +106,7 @@ files:
106
106
  - lib/hypostasis/document/belongs_to.rb
107
107
  - lib/hypostasis/document/fields.rb
108
108
  - lib/hypostasis/document/findable.rb
109
+ - lib/hypostasis/document/has_many.rb
109
110
  - lib/hypostasis/document/has_one.rb
110
111
  - lib/hypostasis/document/indexes.rb
111
112
  - lib/hypostasis/document/namespaced.rb
@@ -117,6 +118,7 @@ files:
117
118
  - lib/hypostasis/version.rb
118
119
  - provision.sh
119
120
  - test/connection_spec.rb
121
+ - test/document/has_many_spec.rb
120
122
  - test/document/has_one_spec.rb
121
123
  - test/document_spec.rb
122
124
  - test/key_path_spec.rb
@@ -151,6 +153,7 @@ specification_version: 4
151
153
  summary: A layer for FoundationDB providing multiple data models for Ruby.
152
154
  test_files:
153
155
  - test/connection_spec.rb
156
+ - test/document/has_many_spec.rb
154
157
  - test/document/has_one_spec.rb
155
158
  - test/document_spec.rb
156
159
  - test/key_path_spec.rb