rasti-db 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/lib/rasti/db.rb +16 -5
- data/lib/rasti/db/collection.rb +10 -10
- data/lib/rasti/db/data_source.rb +1 -1
- data/lib/rasti/db/model.rb +3 -104
- data/lib/rasti/db/nql/filter_condition_strategies/base.rb +17 -0
- data/lib/rasti/db/nql/filter_condition_strategies/postgres.rb +21 -0
- data/lib/rasti/db/nql/filter_condition_strategies/sqlite.rb +21 -0
- data/lib/rasti/db/nql/filter_condition_strategies/types/generic.rb +49 -0
- data/lib/rasti/db/nql/filter_condition_strategies/types/pg_array.rb +32 -0
- data/lib/rasti/db/nql/filter_condition_strategies/types/sqlite_array.rb +34 -0
- data/lib/rasti/db/nql/filter_condition_strategies/unsupported_type_comparison.rb +22 -0
- data/lib/rasti/db/nql/nodes/array_content.rb +21 -0
- data/lib/rasti/db/nql/nodes/binary_node.rb +1 -1
- data/lib/rasti/db/nql/nodes/comparisons/base.rb +10 -0
- data/lib/rasti/db/nql/nodes/comparisons/equal.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/greater_than.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/greater_than_or_equal.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/include.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/less_than.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/less_than_or_equal.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/like.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/not_equal.rb +0 -4
- data/lib/rasti/db/nql/nodes/comparisons/not_include.rb +0 -4
- data/lib/rasti/db/nql/nodes/constants/array.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/base.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/false.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/float.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/integer.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/literal_string.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/string.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/time.rb +1 -1
- data/lib/rasti/db/nql/nodes/constants/true.rb +1 -1
- data/lib/rasti/db/nql/nodes/parenthesis_sentence.rb +1 -1
- data/lib/rasti/db/nql/syntax.rb +229 -11
- data/lib/rasti/db/nql/syntax.treetop +24 -11
- data/lib/rasti/db/relations/base.rb +3 -3
- data/lib/rasti/db/relations/graph.rb +15 -15
- data/lib/rasti/db/relations/many_to_many.rb +4 -4
- data/lib/rasti/db/relations/many_to_one.rb +4 -4
- data/lib/rasti/db/relations/one_to_many.rb +2 -2
- data/lib/rasti/db/type_converters/postgres.rb +32 -36
- data/lib/rasti/db/type_converters/postgres_types/array.rb +11 -9
- data/lib/rasti/db/type_converters/postgres_types/hstore.rb +10 -9
- data/lib/rasti/db/type_converters/postgres_types/json.rb +17 -14
- data/lib/rasti/db/type_converters/postgres_types/jsonb.rb +17 -14
- data/lib/rasti/db/type_converters/sqlite.rb +62 -0
- data/lib/rasti/db/type_converters/sqlite_types/array.rb +34 -0
- data/lib/rasti/db/type_converters/time_in_zone.rb +1 -1
- data/lib/rasti/db/version.rb +1 -1
- data/rasti-db.gemspec +2 -0
- data/spec/collection_spec.rb +36 -28
- data/spec/minitest_helper.rb +4 -2
- data/spec/nql/filter_condition_spec.rb +19 -2
- data/spec/nql/filter_condition_strategies_spec.rb +112 -0
- data/spec/nql/syntax_parser_spec.rb +24 -0
- data/spec/query_spec.rb +89 -0
- data/spec/relations_spec.rb +17 -17
- data/spec/type_converters/sqlite_spec.rb +66 -0
- data/spec/type_converters/time_in_zone_spec.rb +1 -1
- metadata +46 -4
- data/spec/model_spec.rb +0 -90
data/spec/model_spec.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe 'Model' do
|
4
|
-
|
5
|
-
describe 'Attribues' do
|
6
|
-
|
7
|
-
it 'Valid definition' do
|
8
|
-
model = Rasti::DB::Model[:id, :name]
|
9
|
-
model.attributes.must_equal [:id, :name]
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'Invalid definition' do
|
13
|
-
error = proc { Rasti::DB::Model[:id, :name, :name] }.must_raise ArgumentError
|
14
|
-
error.message.must_equal 'Attribute name already exists'
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'Accessors' do
|
18
|
-
post = Post.new id: 1, title: 'Title'
|
19
|
-
|
20
|
-
post.id.must_equal 1
|
21
|
-
post.title.must_equal 'Title'
|
22
|
-
|
23
|
-
[:body, :user, :comments].each do |attribute|
|
24
|
-
error = proc { post.send attribute }.must_raise Rasti::DB::Model::UninitializedAttributeError
|
25
|
-
error.message.must_equal "Uninitialized attribute #{attribute}"
|
26
|
-
end
|
27
|
-
|
28
|
-
proc { post.invalid_method }.must_raise NoMethodError
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
it 'Inheritance' do
|
35
|
-
subclass = Class.new(User) do
|
36
|
-
attribute :additional_attribute
|
37
|
-
end
|
38
|
-
|
39
|
-
subclass.attributes.must_equal (User.attributes + [:additional_attribute])
|
40
|
-
end
|
41
|
-
|
42
|
-
describe 'To String' do
|
43
|
-
|
44
|
-
it 'Class' do
|
45
|
-
User.to_s.must_equal 'User[id, name, posts, comments, person, comments_count]'
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'Instance' do
|
49
|
-
user = User.new id: 1, name: 'User 1'
|
50
|
-
user.to_s.must_equal '#<User[id: 1, name: "User 1"]>'
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'To Hash' do
|
56
|
-
post = Post.new id: 2,
|
57
|
-
title: 'Title',
|
58
|
-
body: 'body',
|
59
|
-
user_id: 1,
|
60
|
-
user: User.new(id: 1, name: 'User 1'),
|
61
|
-
comments: [Comment.new(id: 4, text: 'comment text', user_id: 5)]
|
62
|
-
|
63
|
-
post.to_h.must_equal id: 2,
|
64
|
-
title: 'Title',
|
65
|
-
body: 'body',
|
66
|
-
user_id: 1,
|
67
|
-
user: {id: 1, name: 'User 1'},
|
68
|
-
comments: [{id: 4, text: 'comment text', user_id: 5}]
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'Equality' do
|
72
|
-
assert User.new(id: 1, name: 'User 1') == User.new(id: 1, name: 'User 1')
|
73
|
-
refute User.new(id: 1, name: 'User 1') == User.new(id: 2, name: 'User 2')
|
74
|
-
|
75
|
-
assert User.new(id: 1, name: 'User 1').eql? User.new(id: 1, name: 'User 1')
|
76
|
-
refute User.new(id: 1, name: 'User 1').eql? User.new(id: 2, name: 'User 2')
|
77
|
-
|
78
|
-
assert_equal User.new(id: 1, name: 'User 1').hash, User.new(id: 1, name: 'User 1').hash
|
79
|
-
refute_equal User.new(id: 1, name: 'User 1').hash, User.new(id: 2, name: 'User 2').hash
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'Merge' do
|
83
|
-
user = User.new(id: 1, name: 'User 1')
|
84
|
-
changed_user = user.merge(name: 'User 2')
|
85
|
-
|
86
|
-
user.must_equal User.new(id: 1, name: 'User 1')
|
87
|
-
changed_user.must_equal User.new(id: 1, name: 'User 2')
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|