rasti-db 2.2.0 → 3.0.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/lib/rasti/db.rb +16 -5
  4. data/lib/rasti/db/collection.rb +10 -10
  5. data/lib/rasti/db/data_source.rb +1 -1
  6. data/lib/rasti/db/model.rb +3 -104
  7. data/lib/rasti/db/nql/filter_condition_strategies/base.rb +17 -0
  8. data/lib/rasti/db/nql/filter_condition_strategies/postgres.rb +21 -0
  9. data/lib/rasti/db/nql/filter_condition_strategies/sqlite.rb +21 -0
  10. data/lib/rasti/db/nql/filter_condition_strategies/types/generic.rb +49 -0
  11. data/lib/rasti/db/nql/filter_condition_strategies/types/pg_array.rb +32 -0
  12. data/lib/rasti/db/nql/filter_condition_strategies/types/sqlite_array.rb +34 -0
  13. data/lib/rasti/db/nql/filter_condition_strategies/unsupported_type_comparison.rb +22 -0
  14. data/lib/rasti/db/nql/nodes/array_content.rb +21 -0
  15. data/lib/rasti/db/nql/nodes/binary_node.rb +1 -1
  16. data/lib/rasti/db/nql/nodes/comparisons/base.rb +10 -0
  17. data/lib/rasti/db/nql/nodes/comparisons/equal.rb +0 -4
  18. data/lib/rasti/db/nql/nodes/comparisons/greater_than.rb +0 -4
  19. data/lib/rasti/db/nql/nodes/comparisons/greater_than_or_equal.rb +0 -4
  20. data/lib/rasti/db/nql/nodes/comparisons/include.rb +0 -4
  21. data/lib/rasti/db/nql/nodes/comparisons/less_than.rb +0 -4
  22. data/lib/rasti/db/nql/nodes/comparisons/less_than_or_equal.rb +0 -4
  23. data/lib/rasti/db/nql/nodes/comparisons/like.rb +0 -4
  24. data/lib/rasti/db/nql/nodes/comparisons/not_equal.rb +0 -4
  25. data/lib/rasti/db/nql/nodes/comparisons/not_include.rb +0 -4
  26. data/lib/rasti/db/nql/nodes/constants/array.rb +17 -0
  27. data/lib/rasti/db/nql/nodes/constants/base.rb +17 -0
  28. data/lib/rasti/db/nql/nodes/constants/false.rb +1 -1
  29. data/lib/rasti/db/nql/nodes/constants/float.rb +1 -1
  30. data/lib/rasti/db/nql/nodes/constants/integer.rb +1 -1
  31. data/lib/rasti/db/nql/nodes/constants/literal_string.rb +1 -1
  32. data/lib/rasti/db/nql/nodes/constants/string.rb +1 -1
  33. data/lib/rasti/db/nql/nodes/constants/time.rb +1 -1
  34. data/lib/rasti/db/nql/nodes/constants/true.rb +1 -1
  35. data/lib/rasti/db/nql/nodes/parenthesis_sentence.rb +1 -1
  36. data/lib/rasti/db/nql/syntax.rb +229 -11
  37. data/lib/rasti/db/nql/syntax.treetop +24 -11
  38. data/lib/rasti/db/relations/base.rb +3 -3
  39. data/lib/rasti/db/relations/graph.rb +15 -15
  40. data/lib/rasti/db/relations/many_to_many.rb +4 -4
  41. data/lib/rasti/db/relations/many_to_one.rb +4 -4
  42. data/lib/rasti/db/relations/one_to_many.rb +2 -2
  43. data/lib/rasti/db/type_converters/postgres.rb +32 -36
  44. data/lib/rasti/db/type_converters/postgres_types/array.rb +11 -9
  45. data/lib/rasti/db/type_converters/postgres_types/hstore.rb +10 -9
  46. data/lib/rasti/db/type_converters/postgres_types/json.rb +17 -14
  47. data/lib/rasti/db/type_converters/postgres_types/jsonb.rb +17 -14
  48. data/lib/rasti/db/type_converters/sqlite.rb +62 -0
  49. data/lib/rasti/db/type_converters/sqlite_types/array.rb +34 -0
  50. data/lib/rasti/db/type_converters/time_in_zone.rb +1 -1
  51. data/lib/rasti/db/version.rb +1 -1
  52. data/rasti-db.gemspec +2 -0
  53. data/spec/collection_spec.rb +36 -28
  54. data/spec/minitest_helper.rb +4 -2
  55. data/spec/nql/filter_condition_spec.rb +19 -2
  56. data/spec/nql/filter_condition_strategies_spec.rb +112 -0
  57. data/spec/nql/syntax_parser_spec.rb +24 -0
  58. data/spec/query_spec.rb +89 -0
  59. data/spec/relations_spec.rb +17 -17
  60. data/spec/type_converters/sqlite_spec.rb +66 -0
  61. data/spec/type_converters/time_in_zone_spec.rb +1 -1
  62. metadata +46 -4
  63. data/spec/model_spec.rb +0 -90
@@ -0,0 +1,112 @@
1
+ require 'minitest_helper'
2
+
3
+ describe 'NQL::FilterConditionStrategies' do
4
+
5
+ let(:comments_query) { Rasti::DB::Query.new collection_class: Comments, dataset: db[:comments], environment: environment }
6
+
7
+ def sqls_where(query)
8
+ "#<Rasti::DB::Query: \"SELECT `comments`.* FROM `comments` WHERE (#{query})\">"
9
+ end
10
+
11
+ def sqls_where_not(query)
12
+ "#<Rasti::DB::Query: \"SELECT `comments`.* FROM `comments` WHERE NOT (#{query})\">"
13
+ end
14
+
15
+ def nql_s(nql_query)
16
+ comments_query.nql(nql_query).to_s
17
+ end
18
+
19
+ describe 'Generic' do
20
+
21
+ it 'Equal' do
22
+ nql_s('text = hola').must_equal sqls_where("`comments`.`text` = 'hola'")
23
+ end
24
+
25
+ it 'Not Equal' do
26
+ nql_s('text != hola').must_equal sqls_where("`comments`.`text` != 'hola'")
27
+ end
28
+
29
+ it 'Greather Than' do
30
+ nql_s('id > 1').must_equal sqls_where("`comments`.`id` > 1")
31
+ end
32
+
33
+ it 'Greather Than or Equal' do
34
+ nql_s('id >= 1').must_equal sqls_where("`comments`.`id` >= 1")
35
+ end
36
+
37
+ it 'Less Than' do
38
+ nql_s('id < 1').must_equal sqls_where("`comments`.`id` < 1")
39
+ end
40
+
41
+ it 'Less Than or Equal' do
42
+ nql_s('id <= 1').must_equal sqls_where("`comments`.`id` <= 1")
43
+ end
44
+
45
+ it 'Like' do
46
+ nql_s('text ~ hola').must_equal sqls_where("UPPER(`comments`.`text`) LIKE UPPER('hola') ESCAPE '\\'")
47
+ end
48
+
49
+ it 'Include' do
50
+ nql_s('text: hola').must_equal sqls_where("UPPER(`comments`.`text`) LIKE UPPER('%hola%') ESCAPE '\\'")
51
+ end
52
+
53
+ it 'Not Include' do
54
+ nql_s('text!: hola').must_equal sqls_where_not("UPPER(`comments`.`text`) LIKE UPPER('%hola%') ESCAPE '\\'")
55
+ end
56
+
57
+ end
58
+
59
+ describe 'SQLite Array' do
60
+
61
+ it 'Equal' do
62
+ nql_s('tags = [notice]').must_equal sqls_where("`comments`.`tags` = '[\"notice\"]'")
63
+ end
64
+
65
+ it 'Not Equal' do
66
+ nql_s('tags != [notice]').must_equal sqls_where_not("`comments`.`tags` LIKE '%\"notice\"%' ESCAPE '\\'")
67
+ end
68
+
69
+ it 'Like' do
70
+ nql_s('tags ~ [notice]').must_equal sqls_where("`comments`.`tags` LIKE '%notice%' ESCAPE '\\'")
71
+ end
72
+
73
+ it 'Include' do
74
+ nql_s('tags: [notice]').must_equal sqls_where("`comments`.`tags` LIKE '%\"notice\"%' ESCAPE '\\'")
75
+ end
76
+
77
+ it 'Not Include' do
78
+ nql_s('tags!: [notice]').must_equal sqls_where_not("`comments`.`tags` LIKE '%\"notice\"%' ESCAPE '\\'")
79
+ end
80
+
81
+ end
82
+
83
+ describe 'Postgres Array' do
84
+
85
+ before do
86
+ Rasti::DB.nql_filter_condition_strategy = Rasti::DB::NQL::FilterConditionStrategies::Postgres.new
87
+ Sequel.extension :pg_array_ops
88
+ end
89
+
90
+ after do
91
+ Rasti::DB.nql_filter_condition_strategy = Rasti::DB::NQL::FilterConditionStrategies::SQLite.new
92
+ end
93
+
94
+ it 'Equal' do
95
+ nql_s('tags = [notice]').must_equal sqls_where("(`comments`.`tags` @> ARRAY['notice']) AND (`comments`.`tags` <@ ARRAY['notice'])")
96
+ end
97
+
98
+ it 'Not Equal' do
99
+ nql_s('tags != [notice]').must_equal sqls_where("NOT (`comments`.`tags` @> ARRAY['notice']) OR NOT (`comments`.`tags` <@ ARRAY['notice'])")
100
+ end
101
+
102
+ it 'Include' do
103
+ nql_s('tags: [notice]').must_equal sqls_where("`comments`.`tags` && ARRAY['notice']")
104
+ end
105
+
106
+ it 'Not Include' do
107
+ nql_s('tags!: [notice]').must_equal sqls_where_not("`comments`.`tags` && ARRAY['notice']")
108
+ end
109
+
110
+ end
111
+
112
+ end
@@ -213,4 +213,28 @@ describe 'NQL::SyntaxParser' do
213
213
 
214
214
  end
215
215
 
216
+ describe 'Array' do
217
+
218
+ it 'must parse array with one element' do
219
+ tree = parse 'column = [ a ]'
220
+ tree.proposition.argument.value.must_equal ['a']
221
+ end
222
+
223
+ it 'must parse array with many elements' do
224
+ tree = parse 'column = [ a, b, c ]'
225
+ tree.proposition.argument.value.must_equal ['a', 'b', 'c']
226
+ end
227
+
228
+ it 'must parse array respecting content types' do
229
+ tree = parse 'column = [ true, 12:00, 1.1, 1, "literal string", string ]'
230
+ tree.proposition.argument.value.must_equal [true, Timing::TimeInZone.parse('12:00').to_s, 1.1, 1, "literal string", 'string']
231
+ end
232
+
233
+ it 'must parse array with literal string allowing reserved characters in conflict with array' do
234
+ tree = parse 'column = [ ",", "[", "]", "[,", "],", "[,]", "simple literal" ]'
235
+ tree.proposition.argument.value.must_equal [ ',', '[', ']', '[,', '],', '[,]', 'simple literal' ]
236
+ end
237
+
238
+ end
239
+
216
240
  end
data/spec/query_spec.rb CHANGED
@@ -462,6 +462,95 @@ describe 'Query' do
462
462
 
463
463
  end
464
464
 
465
+ describe 'Filter Array' do
466
+
467
+ def filter_condition_must_raise(comparison_symbol, comparison_name)
468
+ error = proc { comments_query.nql("tags #{comparison_symbol} [fake, notice]") }.must_raise Rasti::DB::NQL::FilterConditionStrategies::UnsupportedTypeComparison
469
+ error.argument_type.must_equal Rasti::DB::NQL::FilterConditionStrategies::Types::SQLiteArray
470
+ error.comparison_name.must_equal comparison_name
471
+ error.message.must_equal "Unsupported comparison #{comparison_name} for Rasti::DB::NQL::FilterConditionStrategies::Types::SQLiteArray"
472
+ end
473
+
474
+ it 'Must raise exception from not supported methods' do
475
+ comparisons = {
476
+ greater_than: '>',
477
+ greater_than_or_equal: '>=',
478
+ less_than: '<',
479
+ less_than_or_equal: '<='
480
+ }
481
+
482
+ comparisons.each do |name, symbol|
483
+ filter_condition_must_raise symbol, name
484
+ end
485
+ end
486
+
487
+ it 'Included any of these elements' do
488
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake","notice"]'
489
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice 2', tags: '["notice"]'
490
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice 3', tags: '["fake_notice"]'
491
+ expected_comments = [
492
+ Comment.new(id: 4, text: 'fake notice', tags: ['fake','notice'], user_id: 5, post_id: 1),
493
+ Comment.new(id: 5, text: 'fake notice 2', tags: ['notice'], user_id: 5, post_id: 1)
494
+ ]
495
+
496
+ comments_query.nql('tags: [ fake, notice ]')
497
+ .all
498
+ .must_equal expected_comments
499
+ end
500
+
501
+ it 'Included exactly all these elements' do
502
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake","notice"]'
503
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice 2', tags: '["notice"]'
504
+ comments_query.nql('tags = [fake, notice]')
505
+ .all
506
+ .must_equal [Comment.new(id: 4, text: 'fake notice', tags: ['fake','notice'], user_id: 5, post_id: 1)]
507
+ end
508
+
509
+ it 'Not included anyone of these elements' do
510
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake","notice"]'
511
+ db[:comments].insert post_id: 1, user_id: 5, text: 'Good notice!', tags: '["good"]'
512
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake"]'
513
+ expected_comments = [
514
+ Comment.new(id: 1, text: 'Comment 1', tags: [], user_id: 5, post_id: 1),
515
+ Comment.new(id: 2, text: 'Comment 2', tags: [], user_id: 7, post_id: 1),
516
+ Comment.new(id: 3, text: 'Comment 3', tags: [], user_id: 2, post_id: 2),
517
+ Comment.new(id: 5, text: 'Good notice!', tags: ['good'], user_id: 5, post_id: 1)
518
+ ]
519
+ comments_query.nql('tags !: [fake, notice]')
520
+ .all
521
+ .must_equal expected_comments
522
+ end
523
+
524
+ it 'Not include any of these elements' do
525
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake","notice"]'
526
+ db[:comments].insert post_id: 1, user_id: 5, text: 'Good notice!', tags: '["good"]'
527
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake"]'
528
+ expected_comments = [
529
+ Comment.new(id: 1, text: 'Comment 1', tags: '[]', user_id: 5, post_id: 1),
530
+ Comment.new(id: 2, text: 'Comment 2', tags: '[]', user_id: 7, post_id: 1),
531
+ Comment.new(id: 3, text: 'Comment 3', tags: '[]', user_id: 2, post_id: 2),
532
+ Comment.new(id: 5, text: 'Good notice!', tags: ['good'], user_id: 5, post_id: 1),
533
+ Comment.new(id: 6, text: 'fake notice', tags: ['fake'], user_id: 5, post_id: 1)
534
+ ]
535
+ comments_query.nql('tags != [fake, notice]')
536
+ .all
537
+ .must_equal expected_comments
538
+ end
539
+
540
+ it 'Include any like these elements' do
541
+ db[:comments].insert post_id: 1, user_id: 5, text: 'fake notice', tags: '["fake","notice"]'
542
+ db[:comments].insert post_id: 1, user_id: 5, text: 'this is a fake notice!', tags: '["fake_notice"]'
543
+ expected_comments = [
544
+ Comment.new(id: 4, text: 'fake notice', tags: ['fake','notice'], user_id: 5, post_id: 1),
545
+ Comment.new(id: 5, text: 'this is a fake notice!', tags: ['fake_notice'], user_id: 5, post_id: 1)
546
+ ]
547
+ comments_query.nql('tags ~ [fake]')
548
+ .all
549
+ .must_equal expected_comments
550
+ end
551
+
552
+ end
553
+
465
554
  end
466
555
 
467
556
  end
@@ -8,15 +8,15 @@ describe 'Relations' do
8
8
 
9
9
  it 'Implicit' do
10
10
  relation = Rasti::DB::Relations::OneToMany.new :posts, Users
11
-
11
+
12
12
  relation.target_collection_class.must_equal Posts
13
13
  relation.foreign_key.must_equal :user_id
14
14
  end
15
15
 
16
16
  it 'Explicit' do
17
- relation = Rasti::DB::Relations::OneToMany.new :articles, Users, collection: 'Posts',
17
+ relation = Rasti::DB::Relations::OneToMany.new :articles, Users, collection: 'Posts',
18
18
  foreign_key: :id_user
19
-
19
+
20
20
  relation.target_collection_class.must_equal Posts
21
21
  relation.foreign_key.must_equal :id_user
22
22
  end
@@ -41,9 +41,9 @@ describe 'Relations' do
41
41
  user_id = db[:users].insert name: 'User 1'
42
42
  1.upto(2) { |i| db[:posts].insert user_id: user_id, title: "Post #{i}", body: '...', language_id: 1 }
43
43
  rows = db[:users].all
44
-
44
+
45
45
  Users.relations[:posts].fetch_graph environment, rows
46
-
46
+
47
47
  rows[0][:posts].must_equal posts.where(user_id: user_id).all
48
48
  end
49
49
 
@@ -55,15 +55,15 @@ describe 'Relations' do
55
55
 
56
56
  it 'Implicit' do
57
57
  relation = Rasti::DB::Relations::ManyToOne.new :user, Posts
58
-
58
+
59
59
  relation.target_collection_class.must_equal Users
60
60
  relation.foreign_key.must_equal :user_id
61
61
  end
62
62
 
63
63
  it 'Explicit' do
64
- relation = Rasti::DB::Relations::ManyToOne.new :publisher, Posts, collection: 'Users',
64
+ relation = Rasti::DB::Relations::ManyToOne.new :publisher, Posts, collection: 'Users',
65
65
  foreign_key: :publisher_id
66
-
66
+
67
67
  relation.target_collection_class.must_equal Users
68
68
  relation.foreign_key.must_equal :publisher_id
69
69
  end
@@ -102,7 +102,7 @@ describe 'Relations' do
102
102
 
103
103
  it 'Implicit' do
104
104
  relation = Rasti::DB::Relations::ManyToMany.new :categories, Posts
105
-
105
+
106
106
  relation.target_collection_class.must_equal Categories
107
107
  relation.source_foreign_key.must_equal :post_id
108
108
  relation.target_foreign_key.must_equal :category_id
@@ -110,11 +110,11 @@ describe 'Relations' do
110
110
  end
111
111
 
112
112
  it 'Explicit' do
113
- relation = Rasti::DB::Relations::ManyToMany.new :tags, Posts, collection: 'Categories',
114
- source_foreign_key: :article_id,
115
- target_foreign_key: :tag_id,
113
+ relation = Rasti::DB::Relations::ManyToMany.new :tags, Posts, collection: 'Categories',
114
+ source_foreign_key: :article_id,
115
+ target_foreign_key: :tag_id,
116
116
  relation_collection_name: :tags_articles
117
-
117
+
118
118
  relation.target_collection_class.must_equal Categories
119
119
  relation.source_foreign_key.must_equal :article_id
120
120
  relation.target_foreign_key.must_equal :tag_id
@@ -165,15 +165,15 @@ describe 'Relations' do
165
165
 
166
166
  it 'Implicit' do
167
167
  relation = Rasti::DB::Relations::OneToOne.new :person, Users
168
-
168
+
169
169
  relation.target_collection_class.must_equal People
170
170
  relation.foreign_key.must_equal :user_id
171
171
  end
172
172
 
173
173
  it 'Explicit' do
174
- relation = Rasti::DB::Relations::OneToOne.new :person, Users, collection: 'Users',
174
+ relation = Rasti::DB::Relations::OneToOne.new :person, Users, collection: 'Users',
175
175
  foreign_key: :id_user
176
-
176
+
177
177
  relation.target_collection_class.must_equal Users
178
178
  relation.foreign_key.must_equal :id_user
179
179
  end
@@ -197,7 +197,7 @@ describe 'Relations' do
197
197
  it 'Graph' do
198
198
  2.times do |i|
199
199
  user_id = db[:users].insert name: "User #{i}"
200
- db[:people].insert document_number: "document_#{i}",
200
+ db[:people].insert document_number: "document_#{i}",
201
201
  first_name: "John #{i}",
202
202
  last_name: "Doe #{i}",
203
203
  birth_date: Time.now - i,
@@ -0,0 +1,66 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Rasti::DB::TypeConverters::SQLite do
4
+
5
+ let(:type_converter) { Rasti::DB::TypeConverters::SQLite }
6
+
7
+ let(:sqlite) do
8
+ Object.new.tap do |sqlite|
9
+
10
+ def sqlite.opts
11
+ {
12
+ database: 'database'
13
+ }
14
+ end
15
+
16
+ def sqlite.schema(table_name, opts={})
17
+ [
18
+ [:text_array, {db_type: 'text[]'}],
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
24
+
25
+ describe 'Default' do
26
+
27
+ it 'must not change value in to_db if column not found in mapping' do
28
+ string = type_converter.to_db sqlite, :table_name, :column, "hola"
29
+ string.class.must_equal String
30
+ string.must_equal "hola"
31
+ end
32
+
33
+ it 'must not change value in from_db if class not found in mapping' do
34
+ string = type_converter.from_db "hola"
35
+ string.class.must_equal String
36
+ string.must_equal "hola"
37
+ end
38
+
39
+ end
40
+
41
+ describe 'Array' do
42
+
43
+ describe 'To DB' do
44
+
45
+ it 'must transform Array to SQLiteArray' do
46
+ sqlite_array = type_converter.to_db sqlite, :table_name, :text_array, ['a', 'b', 'c']
47
+ sqlite_array.class.must_equal String
48
+ sqlite_array.must_equal '["a","b","c"]'
49
+ end
50
+
51
+ end
52
+
53
+ describe 'From DB' do
54
+
55
+ it 'must transform SQLiteArray to Array' do
56
+ sqlite_array = '["a","b","c"]'
57
+ array = type_converter.from_db sqlite_array
58
+ array.class.must_equal Array
59
+ array.must_equal ['a', 'b', 'c']
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -7,7 +7,7 @@ describe Rasti::DB::TypeConverters::TimeInZone do
7
7
  describe 'To DB' do
8
8
 
9
9
  it 'must not transform Time to TimeInZone' do
10
- time = Time.now
10
+ time = Timing::TimeInZone.now
11
11
 
12
12
  converted_time = type_converter.to_db db, 'table', :time, time
13
13
 
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: 2.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-16 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rasti-model
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: treetop
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -140,6 +154,20 @@ dependencies:
140
154
  - - "~>"
141
155
  - !ruby/object:Gem::Version
142
156
  version: '0.5'
157
+ - !ruby/object:Gem::Dependency
158
+ name: inflecto
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '0.0'
164
+ type: :runtime
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '0.0'
143
171
  - !ruby/object:Gem::Dependency
144
172
  name: rake
145
173
  requirement: !ruby/object:Gem::Requirement
@@ -281,7 +309,15 @@ files:
281
309
  - lib/rasti/db/data_source.rb
282
310
  - lib/rasti/db/environment.rb
283
311
  - lib/rasti/db/model.rb
312
+ - lib/rasti/db/nql/filter_condition_strategies/base.rb
313
+ - lib/rasti/db/nql/filter_condition_strategies/postgres.rb
314
+ - lib/rasti/db/nql/filter_condition_strategies/sqlite.rb
315
+ - lib/rasti/db/nql/filter_condition_strategies/types/generic.rb
316
+ - lib/rasti/db/nql/filter_condition_strategies/types/pg_array.rb
317
+ - lib/rasti/db/nql/filter_condition_strategies/types/sqlite_array.rb
318
+ - lib/rasti/db/nql/filter_condition_strategies/unsupported_type_comparison.rb
284
319
  - lib/rasti/db/nql/invalid_expression_error.rb
320
+ - lib/rasti/db/nql/nodes/array_content.rb
285
321
  - lib/rasti/db/nql/nodes/attribute.rb
286
322
  - lib/rasti/db/nql/nodes/binary_node.rb
287
323
  - lib/rasti/db/nql/nodes/comparisons/base.rb
@@ -295,6 +331,8 @@ files:
295
331
  - lib/rasti/db/nql/nodes/comparisons/not_equal.rb
296
332
  - lib/rasti/db/nql/nodes/comparisons/not_include.rb
297
333
  - lib/rasti/db/nql/nodes/conjunction.rb
334
+ - lib/rasti/db/nql/nodes/constants/array.rb
335
+ - lib/rasti/db/nql/nodes/constants/base.rb
298
336
  - lib/rasti/db/nql/nodes/constants/false.rb
299
337
  - lib/rasti/db/nql/nodes/constants/float.rb
300
338
  - lib/rasti/db/nql/nodes/constants/integer.rb
@@ -319,6 +357,8 @@ files:
319
357
  - lib/rasti/db/type_converters/postgres_types/hstore.rb
320
358
  - lib/rasti/db/type_converters/postgres_types/json.rb
321
359
  - lib/rasti/db/type_converters/postgres_types/jsonb.rb
360
+ - lib/rasti/db/type_converters/sqlite.rb
361
+ - lib/rasti/db/type_converters/sqlite_types/array.rb
322
362
  - lib/rasti/db/type_converters/time_in_zone.rb
323
363
  - lib/rasti/db/version.rb
324
364
  - rasti-db.gemspec
@@ -326,14 +366,15 @@ files:
326
366
  - spec/computed_attribute_spec.rb
327
367
  - spec/coverage_helper.rb
328
368
  - spec/minitest_helper.rb
329
- - spec/model_spec.rb
330
369
  - spec/nql/computed_attributes_spec.rb
331
370
  - spec/nql/dependency_tables_spec.rb
332
371
  - spec/nql/filter_condition_spec.rb
372
+ - spec/nql/filter_condition_strategies_spec.rb
333
373
  - spec/nql/syntax_parser_spec.rb
334
374
  - spec/query_spec.rb
335
375
  - spec/relations_spec.rb
336
376
  - spec/type_converters/postgres_spec.rb
377
+ - spec/type_converters/sqlite_spec.rb
337
378
  - spec/type_converters/time_in_zone_spec.rb
338
379
  homepage: https://github.com/gabynaiman/rasti-db
339
380
  licenses:
@@ -363,12 +404,13 @@ test_files:
363
404
  - spec/computed_attribute_spec.rb
364
405
  - spec/coverage_helper.rb
365
406
  - spec/minitest_helper.rb
366
- - spec/model_spec.rb
367
407
  - spec/nql/computed_attributes_spec.rb
368
408
  - spec/nql/dependency_tables_spec.rb
369
409
  - spec/nql/filter_condition_spec.rb
410
+ - spec/nql/filter_condition_strategies_spec.rb
370
411
  - spec/nql/syntax_parser_spec.rb
371
412
  - spec/query_spec.rb
372
413
  - spec/relations_spec.rb
373
414
  - spec/type_converters/postgres_spec.rb
415
+ - spec/type_converters/sqlite_spec.rb
374
416
  - spec/type_converters/time_in_zone_spec.rb