rasti-db 2.0.0 → 2.3.1

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -3
  3. data/lib/rasti/db.rb +11 -1
  4. data/lib/rasti/db/collection.rb +10 -1
  5. data/lib/rasti/db/computed_attribute.rb +22 -0
  6. data/lib/rasti/db/nql/filter_condition_strategies/base.rb +17 -0
  7. data/lib/rasti/db/nql/filter_condition_strategies/postgres.rb +21 -0
  8. data/lib/rasti/db/nql/filter_condition_strategies/sqlite.rb +21 -0
  9. data/lib/rasti/db/nql/filter_condition_strategies/types/generic.rb +49 -0
  10. data/lib/rasti/db/nql/filter_condition_strategies/types/pg_array.rb +32 -0
  11. data/lib/rasti/db/nql/filter_condition_strategies/types/sqlite_array.rb +34 -0
  12. data/lib/rasti/db/nql/filter_condition_strategies/unsupported_type_comparison.rb +22 -0
  13. data/lib/rasti/db/nql/nodes/array_content.rb +21 -0
  14. data/lib/rasti/db/nql/nodes/attribute.rb +37 -0
  15. data/lib/rasti/db/nql/nodes/binary_node.rb +4 -0
  16. data/lib/rasti/db/nql/nodes/comparisons/base.rb +15 -1
  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/conjunction.rb +2 -2
  27. data/lib/rasti/db/nql/nodes/constants/array.rb +17 -0
  28. data/lib/rasti/db/nql/nodes/constants/base.rb +17 -0
  29. data/lib/rasti/db/nql/nodes/constants/false.rb +1 -1
  30. data/lib/rasti/db/nql/nodes/constants/float.rb +1 -1
  31. data/lib/rasti/db/nql/nodes/constants/integer.rb +1 -1
  32. data/lib/rasti/db/nql/nodes/constants/literal_string.rb +1 -1
  33. data/lib/rasti/db/nql/nodes/constants/string.rb +1 -1
  34. data/lib/rasti/db/nql/nodes/constants/time.rb +1 -1
  35. data/lib/rasti/db/nql/nodes/constants/true.rb +1 -1
  36. data/lib/rasti/db/nql/nodes/disjunction.rb +2 -2
  37. data/lib/rasti/db/nql/nodes/parenthesis_sentence.rb +6 -2
  38. data/lib/rasti/db/nql/nodes/sentence.rb +6 -2
  39. data/lib/rasti/db/nql/syntax.rb +262 -44
  40. data/lib/rasti/db/nql/syntax.treetop +27 -14
  41. data/lib/rasti/db/query.rb +42 -14
  42. data/lib/rasti/db/type_converters/postgres.rb +32 -36
  43. data/lib/rasti/db/type_converters/postgres_types/array.rb +11 -9
  44. data/lib/rasti/db/type_converters/postgres_types/hstore.rb +10 -9
  45. data/lib/rasti/db/type_converters/postgres_types/json.rb +17 -14
  46. data/lib/rasti/db/type_converters/postgres_types/jsonb.rb +17 -14
  47. data/lib/rasti/db/type_converters/sqlite.rb +62 -0
  48. data/lib/rasti/db/type_converters/sqlite_types/array.rb +34 -0
  49. data/lib/rasti/db/version.rb +1 -1
  50. data/rasti-db.gemspec +1 -0
  51. data/spec/collection_spec.rb +19 -11
  52. data/spec/computed_attribute_spec.rb +32 -0
  53. data/spec/minitest_helper.rb +32 -5
  54. data/spec/model_spec.rb +1 -1
  55. data/spec/nql/computed_attributes_spec.rb +29 -0
  56. data/spec/nql/filter_condition_spec.rb +23 -4
  57. data/spec/nql/filter_condition_strategies_spec.rb +112 -0
  58. data/spec/nql/syntax_parser_spec.rb +36 -5
  59. data/spec/query_spec.rb +254 -39
  60. data/spec/type_converters/sqlite_spec.rb +66 -0
  61. metadata +38 -3
  62. data/lib/rasti/db/nql/nodes/field.rb +0 -23
@@ -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
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.0.0
4
+ version: 2.3.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: 2020-04-30 00:00:00.000000000 Z
11
+ date: 2021-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -140,6 +140,20 @@ dependencies:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0.5'
143
+ - !ruby/object:Gem::Dependency
144
+ name: inflecto
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '0.0'
143
157
  - !ruby/object:Gem::Dependency
144
158
  name: rake
145
159
  requirement: !ruby/object:Gem::Requirement
@@ -277,10 +291,20 @@ files:
277
291
  - lib/rasti-db.rb
278
292
  - lib/rasti/db.rb
279
293
  - lib/rasti/db/collection.rb
294
+ - lib/rasti/db/computed_attribute.rb
280
295
  - lib/rasti/db/data_source.rb
281
296
  - lib/rasti/db/environment.rb
282
297
  - lib/rasti/db/model.rb
298
+ - lib/rasti/db/nql/filter_condition_strategies/base.rb
299
+ - lib/rasti/db/nql/filter_condition_strategies/postgres.rb
300
+ - lib/rasti/db/nql/filter_condition_strategies/sqlite.rb
301
+ - lib/rasti/db/nql/filter_condition_strategies/types/generic.rb
302
+ - lib/rasti/db/nql/filter_condition_strategies/types/pg_array.rb
303
+ - lib/rasti/db/nql/filter_condition_strategies/types/sqlite_array.rb
304
+ - lib/rasti/db/nql/filter_condition_strategies/unsupported_type_comparison.rb
283
305
  - lib/rasti/db/nql/invalid_expression_error.rb
306
+ - lib/rasti/db/nql/nodes/array_content.rb
307
+ - lib/rasti/db/nql/nodes/attribute.rb
284
308
  - lib/rasti/db/nql/nodes/binary_node.rb
285
309
  - lib/rasti/db/nql/nodes/comparisons/base.rb
286
310
  - lib/rasti/db/nql/nodes/comparisons/equal.rb
@@ -293,6 +317,8 @@ files:
293
317
  - lib/rasti/db/nql/nodes/comparisons/not_equal.rb
294
318
  - lib/rasti/db/nql/nodes/comparisons/not_include.rb
295
319
  - lib/rasti/db/nql/nodes/conjunction.rb
320
+ - lib/rasti/db/nql/nodes/constants/array.rb
321
+ - lib/rasti/db/nql/nodes/constants/base.rb
296
322
  - lib/rasti/db/nql/nodes/constants/false.rb
297
323
  - lib/rasti/db/nql/nodes/constants/float.rb
298
324
  - lib/rasti/db/nql/nodes/constants/integer.rb
@@ -301,7 +327,6 @@ files:
301
327
  - lib/rasti/db/nql/nodes/constants/time.rb
302
328
  - lib/rasti/db/nql/nodes/constants/true.rb
303
329
  - lib/rasti/db/nql/nodes/disjunction.rb
304
- - lib/rasti/db/nql/nodes/field.rb
305
330
  - lib/rasti/db/nql/nodes/parenthesis_sentence.rb
306
331
  - lib/rasti/db/nql/nodes/sentence.rb
307
332
  - lib/rasti/db/nql/syntax.rb
@@ -318,19 +343,25 @@ files:
318
343
  - lib/rasti/db/type_converters/postgres_types/hstore.rb
319
344
  - lib/rasti/db/type_converters/postgres_types/json.rb
320
345
  - lib/rasti/db/type_converters/postgres_types/jsonb.rb
346
+ - lib/rasti/db/type_converters/sqlite.rb
347
+ - lib/rasti/db/type_converters/sqlite_types/array.rb
321
348
  - lib/rasti/db/type_converters/time_in_zone.rb
322
349
  - lib/rasti/db/version.rb
323
350
  - rasti-db.gemspec
324
351
  - spec/collection_spec.rb
352
+ - spec/computed_attribute_spec.rb
325
353
  - spec/coverage_helper.rb
326
354
  - spec/minitest_helper.rb
327
355
  - spec/model_spec.rb
356
+ - spec/nql/computed_attributes_spec.rb
328
357
  - spec/nql/dependency_tables_spec.rb
329
358
  - spec/nql/filter_condition_spec.rb
359
+ - spec/nql/filter_condition_strategies_spec.rb
330
360
  - spec/nql/syntax_parser_spec.rb
331
361
  - spec/query_spec.rb
332
362
  - spec/relations_spec.rb
333
363
  - spec/type_converters/postgres_spec.rb
364
+ - spec/type_converters/sqlite_spec.rb
334
365
  - spec/type_converters/time_in_zone_spec.rb
335
366
  homepage: https://github.com/gabynaiman/rasti-db
336
367
  licenses:
@@ -357,13 +388,17 @@ specification_version: 4
357
388
  summary: Database collections and relations
358
389
  test_files:
359
390
  - spec/collection_spec.rb
391
+ - spec/computed_attribute_spec.rb
360
392
  - spec/coverage_helper.rb
361
393
  - spec/minitest_helper.rb
362
394
  - spec/model_spec.rb
395
+ - spec/nql/computed_attributes_spec.rb
363
396
  - spec/nql/dependency_tables_spec.rb
364
397
  - spec/nql/filter_condition_spec.rb
398
+ - spec/nql/filter_condition_strategies_spec.rb
365
399
  - spec/nql/syntax_parser_spec.rb
366
400
  - spec/query_spec.rb
367
401
  - spec/relations_spec.rb
368
402
  - spec/type_converters/postgres_spec.rb
403
+ - spec/type_converters/sqlite_spec.rb
369
404
  - spec/type_converters/time_in_zone_spec.rb
@@ -1,23 +0,0 @@
1
- module Rasti
2
- module DB
3
- module NQL
4
- module Nodes
5
- class Field < Treetop::Runtime::SyntaxNode
6
-
7
- def identifier
8
- tables.empty? ? Sequel[column.to_sym] : Sequel[tables.join('__').to_sym][column.to_sym]
9
- end
10
-
11
- def tables
12
- _tables.elements.map{ |e| e.table.text_value }
13
- end
14
-
15
- def column
16
- _column.text_value
17
- end
18
-
19
- end
20
- end
21
- end
22
- end
23
- end