hypostasis 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hypostasis/document.rb +6 -0
- data/lib/hypostasis/document/belongs_to.rb +18 -0
- data/lib/hypostasis/document/has_many.rb +17 -0
- data/lib/hypostasis/document/has_one.rb +16 -0
- data/lib/hypostasis/version.rb +1 -1
- data/test/column/has_many_spec.rb +19 -19
- data/test/column/has_one_spec.rb +16 -16
- data/test/document/has_many_spec.rb +49 -0
- data/test/document/has_one_spec.rb +44 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8387e1e541c4ca78130142d9914854c617f649c5
|
4
|
+
data.tar.gz: 6fbbd5c6083322414331dc05990e7cc46936c706
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61f5efaa755e97ab2d88e63760a46c2008d9d5e54da3d4dc38a30a6be627ae20f29c8992cf7df14df785501c07c4ee198035bbb1eb91d28ef0f45678b0db1418
|
7
|
+
data.tar.gz: e6b367b9111bd0537c37c3198387ba347510becddb0cab4524f8f57640541894d8573864444a9d2a28f67212bed3adec40b45cd00cd974258fb55acde4395e52
|
data/lib/hypostasis/document.rb
CHANGED
@@ -5,6 +5,9 @@ require 'hypostasis/shared/indexes'
|
|
5
5
|
|
6
6
|
require 'hypostasis/document/persistence'
|
7
7
|
require 'hypostasis/document/findable'
|
8
|
+
require 'hypostasis/document/belongs_to'
|
9
|
+
require 'hypostasis/document/has_one'
|
10
|
+
require 'hypostasis/document/has_many'
|
8
11
|
|
9
12
|
module Hypostasis::Document
|
10
13
|
extend ActiveSupport::Concern
|
@@ -16,6 +19,9 @@ module Hypostasis::Document
|
|
16
19
|
|
17
20
|
include Hypostasis::Document::Persistence
|
18
21
|
include Hypostasis::Document::Findable
|
22
|
+
include Hypostasis::Document::BelongsTo
|
23
|
+
include Hypostasis::Document::HasOne
|
24
|
+
include Hypostasis::Document::HasMany
|
19
25
|
|
20
26
|
attr_reader :id
|
21
27
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Hypostasis::Document
|
2
|
+
module BelongsTo
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def belongs_to(klass)
|
7
|
+
field_name = "#{klass.to_s}_id"
|
8
|
+
accessor_name = klass.to_s
|
9
|
+
parent_klass = klass.to_s.classify
|
10
|
+
self.class_eval do
|
11
|
+
field field_name.to_sym
|
12
|
+
index field_name.to_sym
|
13
|
+
define_method(accessor_name) { parent_klass.constantize.find(self.send(field_name.to_sym)) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -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
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hypostasis::Document
|
2
|
+
module HasOne
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def has_one(klass)
|
7
|
+
accessor_name = klass.to_s
|
8
|
+
child_klass = klass.to_s.classify
|
9
|
+
self_klass = "#{self.to_s.underscore}_id".to_sym
|
10
|
+
self.class_eval do
|
11
|
+
define_method(accessor_name) { child_klass.constantize.find_where(self_klass => @id).first }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/hypostasis/version.rb
CHANGED
@@ -1,49 +1,49 @@
|
|
1
1
|
require 'minitest_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class HasManyOwnerColumnGroup
|
4
4
|
include Hypostasis::ColumnGroup
|
5
5
|
|
6
|
-
use_namespace '
|
6
|
+
use_namespace 'hasmany_columns'
|
7
7
|
|
8
8
|
field :name
|
9
9
|
field :age
|
10
10
|
|
11
|
-
has_many :
|
11
|
+
has_many :has_many_child_column_groups
|
12
12
|
end
|
13
13
|
|
14
|
-
class
|
14
|
+
class HasManyChildColumnGroup
|
15
15
|
include Hypostasis::ColumnGroup
|
16
16
|
|
17
|
-
use_namespace '
|
17
|
+
use_namespace 'hasmany_columns'
|
18
18
|
|
19
19
|
field :name
|
20
20
|
field :age
|
21
21
|
|
22
|
-
belongs_to :
|
22
|
+
belongs_to :has_many_owner_column_group
|
23
23
|
end
|
24
24
|
|
25
25
|
describe 'ColumnGroup has_many Relationship' do
|
26
26
|
before do
|
27
|
-
Hypostasis::Connection.create_namespace '
|
28
|
-
@owner =
|
27
|
+
Hypostasis::Connection.create_namespace 'hasmany_columns', data_model: :column_group
|
28
|
+
@owner = HasManyOwnerColumnGroup.create(name: 'John', age: '25')
|
29
29
|
@children = []
|
30
|
-
@children <<
|
31
|
-
@children <<
|
32
|
-
@children <<
|
30
|
+
@children << HasManyChildColumnGroup.create(name: 'James', age: '6', has_many_owner_column_group_id: @owner.id)
|
31
|
+
@children << HasManyChildColumnGroup.create(name: 'Susie', age: '4', has_many_owner_column_group_id: @owner.id)
|
32
|
+
@children << HasManyChildColumnGroup.create(name: 'Blake', age: '2', has_many_owner_column_group_id: @owner.id)
|
33
33
|
@child = @children.shuffle.first
|
34
34
|
end
|
35
35
|
|
36
36
|
after do
|
37
|
-
Hypostasis::Connection.destroy_namespace '
|
37
|
+
Hypostasis::Connection.destroy_namespace 'hasmany_columns'
|
38
38
|
end
|
39
39
|
|
40
|
-
it { @owner.must_respond_to :
|
41
|
-
it { @child.must_respond_to :
|
40
|
+
it { @owner.must_respond_to :has_many_child_column_groups }
|
41
|
+
it { @child.must_respond_to :has_many_owner_column_group }
|
42
42
|
|
43
|
-
it { @owner.
|
44
|
-
it { @owner.
|
45
|
-
it { @owner.
|
43
|
+
it { @owner.has_many_child_column_groups.is_a?(Array).must_equal true }
|
44
|
+
it { @owner.has_many_child_column_groups.first.is_a?(HasManyChildColumnGroup).must_equal true }
|
45
|
+
it { @owner.has_many_child_column_groups.collect {|doc| doc.id}.must_include @child.id }
|
46
46
|
|
47
|
-
it { @child.
|
48
|
-
it { @child.
|
47
|
+
it { @child.has_many_owner_column_group.is_a?(HasManyOwnerColumnGroup).must_equal true }
|
48
|
+
it { @child.has_many_owner_column_group.id.must_equal @owner.id }
|
49
49
|
end
|
data/test/column/has_one_spec.rb
CHANGED
@@ -1,44 +1,44 @@
|
|
1
1
|
require 'minitest_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class HasOneOwnerColumnGroup
|
4
4
|
include Hypostasis::ColumnGroup
|
5
5
|
|
6
|
-
use_namespace '
|
6
|
+
use_namespace 'hasone_columns'
|
7
7
|
|
8
8
|
field :name
|
9
9
|
field :age
|
10
10
|
|
11
|
-
has_one :
|
11
|
+
has_one :has_one_child_column_group
|
12
12
|
end
|
13
13
|
|
14
|
-
class
|
14
|
+
class HasOneChildColumnGroup
|
15
15
|
include Hypostasis::ColumnGroup
|
16
16
|
|
17
|
-
use_namespace '
|
17
|
+
use_namespace 'hasone_columns'
|
18
18
|
|
19
19
|
field :name
|
20
20
|
field :age
|
21
21
|
|
22
|
-
belongs_to :
|
22
|
+
belongs_to :has_one_owner_column_group
|
23
23
|
end
|
24
24
|
|
25
25
|
describe 'ColumnGroup has_one Relationship' do
|
26
26
|
before do
|
27
|
-
Hypostasis::Connection.create_namespace '
|
28
|
-
@owner =
|
29
|
-
@child =
|
27
|
+
Hypostasis::Connection.create_namespace 'hasone_columns', data_model: :column_group
|
28
|
+
@owner = HasOneOwnerColumnGroup.create(name: 'John', age: '25')
|
29
|
+
@child = HasOneChildColumnGroup.create(name: 'James', age: '6', has_one_owner_column_group_id: @owner.id)
|
30
30
|
end
|
31
31
|
|
32
32
|
after do
|
33
|
-
Hypostasis::Connection.destroy_namespace '
|
33
|
+
Hypostasis::Connection.destroy_namespace 'hasone_columns'
|
34
34
|
end
|
35
35
|
|
36
|
-
it { @owner.must_respond_to :
|
37
|
-
it { @child.must_respond_to :
|
36
|
+
it { @owner.must_respond_to :has_one_child_column_group }
|
37
|
+
it { @child.must_respond_to :has_one_owner_column_group }
|
38
38
|
|
39
|
-
it { @owner.
|
40
|
-
it { @owner.
|
39
|
+
it { @owner.has_one_child_column_group.is_a?(HasOneChildColumnGroup).must_equal true }
|
40
|
+
it { @owner.has_one_child_column_group.id.must_equal @child.id }
|
41
41
|
|
42
|
-
it { @child.
|
43
|
-
it { @child.
|
42
|
+
it { @child.has_one_owner_column_group.is_a?(HasOneOwnerColumnGroup).must_equal true }
|
43
|
+
it { @child.has_one_owner_column_group.id.must_equal @owner.id }
|
44
44
|
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
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
class HasOneOwnerDocument
|
4
|
+
include Hypostasis::Document
|
5
|
+
|
6
|
+
use_namespace 'hasone_docs'
|
7
|
+
|
8
|
+
field :name
|
9
|
+
field :age
|
10
|
+
|
11
|
+
has_one :has_one_child_document
|
12
|
+
end
|
13
|
+
|
14
|
+
class HasOneChildDocument
|
15
|
+
include Hypostasis::Document
|
16
|
+
|
17
|
+
use_namespace 'hasone_docs'
|
18
|
+
|
19
|
+
field :name
|
20
|
+
field :age
|
21
|
+
|
22
|
+
belongs_to :has_one_owner_document
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Document has_one Relationship' do
|
26
|
+
before do
|
27
|
+
Hypostasis::Connection.create_namespace 'hasone_docs', data_model: :document
|
28
|
+
@owner = HasOneOwnerDocument.create(name: 'John', age: '25')
|
29
|
+
@child = HasOneChildDocument.create(name: 'James', age: '6', has_one_owner_document_id: @owner.id)
|
30
|
+
end
|
31
|
+
|
32
|
+
after do
|
33
|
+
Hypostasis::Connection.destroy_namespace 'hasone_docs'
|
34
|
+
end
|
35
|
+
|
36
|
+
it { @owner.must_respond_to :has_one_child_document }
|
37
|
+
it { @child.must_respond_to :has_one_owner_document }
|
38
|
+
|
39
|
+
it { @owner.has_one_child_document.is_a?(HasOneChildDocument).must_equal true }
|
40
|
+
it { @owner.has_one_child_document.id.must_equal @child.id }
|
41
|
+
|
42
|
+
it { @child.has_one_owner_document.is_a?(HasOneOwnerDocument).must_equal true }
|
43
|
+
it { @child.has_one_owner_document.id.must_equal @owner.id }
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hypostasis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fdb
|
@@ -139,7 +139,10 @@ files:
|
|
139
139
|
- lib/hypostasis/data_models/key_value.rb
|
140
140
|
- lib/hypostasis/data_models/utilities.rb
|
141
141
|
- lib/hypostasis/document.rb
|
142
|
+
- lib/hypostasis/document/belongs_to.rb
|
142
143
|
- lib/hypostasis/document/findable.rb
|
144
|
+
- lib/hypostasis/document/has_many.rb
|
145
|
+
- lib/hypostasis/document/has_one.rb
|
143
146
|
- lib/hypostasis/document/persistence.rb
|
144
147
|
- lib/hypostasis/errors.rb
|
145
148
|
- lib/hypostasis/ext/bson/date.rb
|
@@ -158,6 +161,8 @@ files:
|
|
158
161
|
- test/column/has_one_spec.rb
|
159
162
|
- test/column_group_spec.rb
|
160
163
|
- test/connection_spec.rb
|
164
|
+
- test/document/has_many_spec.rb
|
165
|
+
- test/document/has_one_spec.rb
|
161
166
|
- test/document/indexing_spec.rb
|
162
167
|
- test/document_spec.rb
|
163
168
|
- test/key_path_spec.rb
|
@@ -198,6 +203,8 @@ test_files:
|
|
198
203
|
- test/column/has_one_spec.rb
|
199
204
|
- test/column_group_spec.rb
|
200
205
|
- test/connection_spec.rb
|
206
|
+
- test/document/has_many_spec.rb
|
207
|
+
- test/document/has_one_spec.rb
|
201
208
|
- test/document/indexing_spec.rb
|
202
209
|
- test/document_spec.rb
|
203
210
|
- test/key_path_spec.rb
|