rasti-db 1.3.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,14 +30,19 @@ describe 'Relations' do
30
30
  relation.many_to_one?.must_equal false
31
31
  relation.many_to_many?.must_equal false
32
32
  relation.one_to_one?.must_equal false
33
+
34
+ relation.from_one?.must_equal true
35
+ relation.from_many?.must_equal false
36
+ relation.to_one?.must_equal false
37
+ relation.to_many?.must_equal true
33
38
  end
34
39
 
35
40
  it 'Graph' do
36
41
  user_id = db[:users].insert name: 'User 1'
37
- 1.upto(2) { |i| db[:posts].insert user_id: user_id, title: "Post #{i}", body: '...' }
42
+ 1.upto(2) { |i| db[:posts].insert user_id: user_id, title: "Post #{i}", body: '...', language_id: 1 }
38
43
  rows = db[:users].all
39
44
 
40
- Users.relations[:posts].graph_to rows, db
45
+ Users.relations[:posts].fetch_graph environment, rows
41
46
 
42
47
  rows[0][:posts].must_equal posts.where(user_id: user_id).all
43
48
  end
@@ -72,14 +77,19 @@ describe 'Relations' do
72
77
  relation.many_to_one?.must_equal true
73
78
  relation.many_to_many?.must_equal false
74
79
  relation.one_to_one?.must_equal false
80
+
81
+ relation.from_one?.must_equal false
82
+ relation.from_many?.must_equal true
83
+ relation.to_one?.must_equal true
84
+ relation.to_many?.must_equal false
75
85
  end
76
86
 
77
87
  it 'Graph' do
78
88
  user_id = db[:users].insert name: 'User 1'
79
- db[:posts].insert user_id: user_id, title: 'Post 1', body: '...'
89
+ db[:posts].insert user_id: user_id, title: 'Post 1', body: '...', language_id: 1
80
90
  rows = db[:posts].all
81
91
 
82
- Posts.relations[:user].graph_to rows, db
92
+ Posts.relations[:user].fetch_graph environment, rows
83
93
 
84
94
  rows[0][:user].must_equal users.first
85
95
  end
@@ -120,12 +130,17 @@ describe 'Relations' do
120
130
  relation.many_to_one?.must_equal false
121
131
  relation.many_to_many?.must_equal true
122
132
  relation.one_to_one?.must_equal false
133
+
134
+ relation.from_one?.must_equal false
135
+ relation.from_many?.must_equal true
136
+ relation.to_one?.must_equal false
137
+ relation.to_many?.must_equal true
123
138
  end
124
139
 
125
140
  it 'Graph' do
126
141
  user_id = db[:users].insert name: 'User 1'
127
142
 
128
- 1.upto(2) { |i| db[:posts].insert user_id: user_id, title: "Post #{i}", body: '...' }
143
+ 1.upto(2) { |i| db[:posts].insert user_id: user_id, title: "Post #{i}", body: '...', language_id: 1 }
129
144
 
130
145
  1.upto(4) { |i| db[:categories].insert name: "Category #{i}" }
131
146
 
@@ -136,7 +151,7 @@ describe 'Relations' do
136
151
 
137
152
  rows = db[:posts].all
138
153
 
139
- Posts.relations[:categories].graph_to rows, db
154
+ Posts.relations[:categories].fetch_graph environment, rows
140
155
 
141
156
  rows[0][:categories].must_equal categories.where(id: [1,2]).all
142
157
  rows[1][:categories].must_equal categories.where(id: [3,4]).all
@@ -172,6 +187,11 @@ describe 'Relations' do
172
187
  relation.many_to_one?.must_equal false
173
188
  relation.many_to_many?.must_equal false
174
189
  relation.one_to_one?.must_equal true
190
+
191
+ relation.from_one?.must_equal true
192
+ relation.from_many?.must_equal false
193
+ relation.to_one?.must_equal true
194
+ relation.to_many?.must_equal false
175
195
  end
176
196
 
177
197
  it 'Graph' do
@@ -186,7 +206,7 @@ describe 'Relations' do
186
206
 
187
207
  rows = db[:users].all
188
208
 
189
- Users.relations[:person].graph_to rows, db
209
+ Users.relations[:person].fetch_graph environment, rows
190
210
 
191
211
  2.times do |i|
192
212
  rows[i][:person].must_equal people.find("document_#{i}")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rasti-db
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-29 00:00:00.000000000 Z
11
+ date: 2020-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -113,33 +113,47 @@ dependencies:
113
113
  - !ruby/object:Gem::Version
114
114
  version: '1.0'
115
115
  - !ruby/object:Gem::Dependency
116
- name: bundler
116
+ name: hierarchical_graph
117
117
  requirement: !ruby/object:Gem::Requirement
118
118
  requirements:
119
119
  - - "~>"
120
120
  - !ruby/object:Gem::Version
121
- version: '1.12'
122
- type: :development
121
+ version: '1.0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '1.0'
129
+ - !ruby/object:Gem::Dependency
130
+ name: hash_ext
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '0.5'
136
+ type: :runtime
123
137
  prerelease: false
124
138
  version_requirements: !ruby/object:Gem::Requirement
125
139
  requirements:
126
140
  - - "~>"
127
141
  - !ruby/object:Gem::Version
128
- version: '1.12'
142
+ version: '0.5'
129
143
  - !ruby/object:Gem::Dependency
130
144
  name: rake
131
145
  requirement: !ruby/object:Gem::Requirement
132
146
  requirements:
133
147
  - - "~>"
134
148
  - !ruby/object:Gem::Version
135
- version: '11.0'
149
+ version: '12.3'
136
150
  type: :development
137
151
  prerelease: false
138
152
  version_requirements: !ruby/object:Gem::Requirement
139
153
  requirements:
140
154
  - - "~>"
141
155
  - !ruby/object:Gem::Version
142
- version: '11.0'
156
+ version: '12.3'
143
157
  - !ruby/object:Gem::Dependency
144
158
  name: minitest
145
159
  requirement: !ruby/object:Gem::Requirement
@@ -263,7 +277,8 @@ files:
263
277
  - lib/rasti-db.rb
264
278
  - lib/rasti/db.rb
265
279
  - lib/rasti/db/collection.rb
266
- - lib/rasti/db/helpers.rb
280
+ - lib/rasti/db/data_source.rb
281
+ - lib/rasti/db/environment.rb
267
282
  - lib/rasti/db/model.rb
268
283
  - lib/rasti/db/nql/invalid_expression_error.rb
269
284
  - lib/rasti/db/nql/nodes/binary_node.rb
@@ -293,7 +308,7 @@ files:
293
308
  - lib/rasti/db/nql/syntax.treetop
294
309
  - lib/rasti/db/query.rb
295
310
  - lib/rasti/db/relations/base.rb
296
- - lib/rasti/db/relations/graph_builder.rb
311
+ - lib/rasti/db/relations/graph.rb
297
312
  - lib/rasti/db/relations/many_to_many.rb
298
313
  - lib/rasti/db/relations/many_to_one.rb
299
314
  - lib/rasti/db/relations/one_to_many.rb
@@ -1,16 +0,0 @@
1
- module Rasti
2
- module DB
3
- module Helpers
4
- module WithSchema
5
-
6
- private
7
-
8
- def with_schema(table, field=nil)
9
- qualified_table = schema ? Sequel[schema][table] : Sequel[table]
10
- field ? Sequel[qualified_table][field] : qualified_table
11
- end
12
-
13
- end
14
- end
15
- end
16
- end
@@ -1,60 +0,0 @@
1
- module Rasti
2
- module DB
3
- module Relations
4
- class GraphBuilder
5
- class << self
6
-
7
- def graph_to(rows, relations, collection_class, db, schema=nil)
8
- return if rows.empty?
9
-
10
- parse(relations).each do |relation_name, nested_relations|
11
- relation = get_relation collection_class, relation_name
12
- relation.graph_to rows, db, schema, nested_relations
13
- end
14
- end
15
-
16
- def joins_to(dataset, relations, collection_class, schema=nil)
17
- ds = recursive_joins dataset, recursive_parse(relations), collection_class, schema
18
- qualified_collection_name = schema ? Sequel[schema][collection_class.collection_name] : Sequel[collection_class.collection_name]
19
- ds.distinct.select_all(qualified_collection_name)
20
- end
21
-
22
- private
23
-
24
- def get_relation(collection_class, relation_name)
25
- raise "Undefined relation #{relation_name} for #{collection_class}" unless collection_class.relations.key? relation_name
26
- collection_class.relations[relation_name]
27
- end
28
-
29
- def parse(relations)
30
- relations.each_with_object({}) do |relation, hash|
31
- tail = relation.to_s.split '.'
32
- head = tail.shift.to_sym
33
- hash[head] ||= []
34
- hash[head] << tail.join('.') unless tail.empty?
35
- end
36
- end
37
-
38
- def recursive_parse(relations)
39
- parse(relations).each_with_object({}) do |(key, value), hash|
40
- hash[key] = recursive_parse value
41
- end
42
- end
43
-
44
- def recursive_joins(dataset, joins, collection_class, schema, prefix=nil)
45
- joins.each do |relation_name, nested_joins|
46
- relation = get_relation collection_class, relation_name
47
-
48
- dataset = relation.join_to dataset, schema, prefix
49
-
50
- dataset = recursive_joins dataset, nested_joins, relation.target_collection_class, schema, relation.join_relation_name(prefix) unless nested_joins.empty?
51
- end
52
-
53
- dataset
54
- end
55
-
56
- end
57
- end
58
- end
59
- end
60
- end