nql 0.1.1 → 0.1.2
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.
- checksums.yaml +7 -0
- data/.coveralls.yml +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +20 -3
- data/Gemfile +2 -0
- data/README.md +5 -1
- data/Rakefile +9 -1
- data/lib/nql.rb +1 -0
- data/lib/nql/extension/arel.rb +7 -0
- data/lib/nql/grammar.rb +64 -6
- data/lib/nql/grammar.treetop +1 -1
- data/lib/nql/version.rb +1 -1
- data/nql.gemspec +5 -3
- data/spec/coverage_helper.rb +8 -0
- data/spec/migrations/20121108154439_create_countries.rb +1 -1
- data/spec/ransack_spec.rb +13 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/sql_spec.rb +12 -0
- metadata +58 -40
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2425f04ebb2fc216c2026f10a69d644162249f7dd0cc76ceacebd71c0f266603
|
4
|
+
data.tar.gz: c0616e9d0f4ed6fea53b8669420dee4054475e3287fbdfa601f011f3f549de0f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8272a744a3a6786c1549d237937ab05815cc543440f3561897fdaee1c96d451ade59f14d4e4e56d1669073ebc00a22bc4fa0afc11d65cb1eab6d3dffff1de723
|
7
|
+
data.tar.gz: b93e13fe0b17a89c1ea394b0e50f0b3bf3c7e3c9a7523c2b21013b560968ef92a5ce704c9cf983c6b17076101ee78ec3deb342ed429d5c71e0c147603f5edbc9
|
data/.coveralls.yml
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
nql
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.5.0
|
data/.travis.yml
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
language: ruby
|
2
|
+
|
2
3
|
rvm:
|
3
|
-
-
|
4
|
-
- 1
|
5
|
-
|
4
|
+
- 2.0
|
5
|
+
- 2.1
|
6
|
+
- 2.2
|
7
|
+
- 2.3
|
8
|
+
- 2.4
|
9
|
+
- 2.5
|
10
|
+
- 2.6
|
11
|
+
- 2.7
|
12
|
+
- jruby-9.2.9.0
|
13
|
+
- ruby-head
|
14
|
+
- jruby-head
|
15
|
+
|
16
|
+
matrix:
|
17
|
+
fast_finish: true
|
18
|
+
allow_failures:
|
19
|
+
- rvm: 2.7
|
20
|
+
- rvm: jruby-9.2.9.0
|
21
|
+
- rvm: ruby-head
|
22
|
+
- rvm: jruby-head
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# NQL
|
2
2
|
|
3
|
-
[](https://rubygems.org/gems/nql)
|
4
|
+
[](https://travis-ci.org/gabynaiman/nql)
|
5
|
+
[](https://coveralls.io/r/gabynaiman/nql?branch=master)
|
6
|
+
[](https://codeclimate.com/github/gabynaiman/nql)
|
4
7
|
|
5
8
|
Natural Query Language built on top of ActiveRecord and Ransack
|
6
9
|
|
@@ -24,6 +27,7 @@ Or install it yourself as:
|
|
24
27
|
| Symbol | Description |
|
25
28
|
--------------------------------------
|
26
29
|
| : | Contains |
|
30
|
+
| !: | Not contains |
|
27
31
|
| = | Equals |
|
28
32
|
| != | Not equals |
|
29
33
|
| > | Grater than |
|
data/Rakefile
CHANGED
@@ -1,2 +1,10 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
1
|
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new do |task|
|
5
|
+
task.pattern = 'spec/**/*_spec.rb'
|
6
|
+
task.rspec_opts = '--tty --color -f documentation'
|
7
|
+
task.verbose = false
|
8
|
+
end
|
9
|
+
|
10
|
+
task default: :spec
|
data/lib/nql.rb
CHANGED
data/lib/nql/grammar.rb
CHANGED
@@ -145,7 +145,7 @@ module NQL
|
|
145
145
|
elements[1]
|
146
146
|
end
|
147
147
|
|
148
|
-
def
|
148
|
+
def comparison
|
149
149
|
elements[2]
|
150
150
|
end
|
151
151
|
|
@@ -156,6 +156,21 @@ module NQL
|
|
156
156
|
end
|
157
157
|
|
158
158
|
module Primary2
|
159
|
+
def space1
|
160
|
+
elements[1]
|
161
|
+
end
|
162
|
+
|
163
|
+
def expression
|
164
|
+
elements[2]
|
165
|
+
end
|
166
|
+
|
167
|
+
def space2
|
168
|
+
elements[3]
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
module Primary3
|
159
174
|
def to_ransack
|
160
175
|
detect_node.to_ransack
|
161
176
|
end
|
@@ -201,7 +216,7 @@ module NQL
|
|
201
216
|
end
|
202
217
|
if r1
|
203
218
|
r0 = r1
|
204
|
-
r0.extend(
|
219
|
+
r0.extend(Primary3)
|
205
220
|
else
|
206
221
|
i5, s5 = index, []
|
207
222
|
if has_terminal?('(', false, index)
|
@@ -216,7 +231,7 @@ module NQL
|
|
216
231
|
r7 = _nt_space
|
217
232
|
s5 << r7
|
218
233
|
if r7
|
219
|
-
r8 =
|
234
|
+
r8 = _nt_comparison
|
220
235
|
s5 << r8
|
221
236
|
if r8
|
222
237
|
r9 = _nt_space
|
@@ -243,10 +258,53 @@ module NQL
|
|
243
258
|
end
|
244
259
|
if r5
|
245
260
|
r0 = r5
|
246
|
-
r0.extend(
|
261
|
+
r0.extend(Primary3)
|
247
262
|
else
|
248
|
-
|
249
|
-
|
263
|
+
i11, s11 = index, []
|
264
|
+
if has_terminal?('(', false, index)
|
265
|
+
r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
266
|
+
@index += 1
|
267
|
+
else
|
268
|
+
terminal_parse_failure('(')
|
269
|
+
r12 = nil
|
270
|
+
end
|
271
|
+
s11 << r12
|
272
|
+
if r12
|
273
|
+
r13 = _nt_space
|
274
|
+
s11 << r13
|
275
|
+
if r13
|
276
|
+
r14 = _nt_expression
|
277
|
+
s11 << r14
|
278
|
+
if r14
|
279
|
+
r15 = _nt_space
|
280
|
+
s11 << r15
|
281
|
+
if r15
|
282
|
+
if has_terminal?(')', false, index)
|
283
|
+
r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
284
|
+
@index += 1
|
285
|
+
else
|
286
|
+
terminal_parse_failure(')')
|
287
|
+
r16 = nil
|
288
|
+
end
|
289
|
+
s11 << r16
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
if s11.last
|
295
|
+
r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
|
296
|
+
r11.extend(Primary2)
|
297
|
+
else
|
298
|
+
@index = i11
|
299
|
+
r11 = nil
|
300
|
+
end
|
301
|
+
if r11
|
302
|
+
r0 = r11
|
303
|
+
r0.extend(Primary3)
|
304
|
+
else
|
305
|
+
@index = i0
|
306
|
+
r0 = nil
|
307
|
+
end
|
250
308
|
end
|
251
309
|
end
|
252
310
|
|
data/lib/nql/grammar.treetop
CHANGED
data/lib/nql/version.rb
CHANGED
data/nql.gemspec
CHANGED
@@ -15,11 +15,13 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
|
-
s.add_dependency 'treetop', '~> 1.4'
|
18
|
+
s.add_dependency 'treetop', '~> 1.4.0'
|
19
19
|
s.add_dependency 'activerecord', '>= 3.2.0'
|
20
20
|
s.add_dependency 'activesupport', '>= 3.2.0'
|
21
21
|
s.add_dependency 'ransack', '~> 0.7'
|
22
22
|
|
23
|
-
s.add_development_dependency '
|
24
|
-
s.add_development_dependency '
|
23
|
+
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.0'
|
25
|
+
s.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
s.add_development_dependency 'simplecov'
|
25
27
|
end
|
data/spec/ransack_spec.rb
CHANGED
@@ -80,7 +80,20 @@ describe 'Ransack Query' do
|
|
80
80
|
|
81
81
|
it 'Model references' do
|
82
82
|
q = parser.parse('models.id = 1234').to_ransack
|
83
|
+
q[:c][0].should have_attribute 'models_id'
|
84
|
+
q[:c][0].should have_predicate 'eq'
|
85
|
+
q[:c][0].should have_value '1234'
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'Single comparison with parentheses and spaces' do
|
89
|
+
q = parser.parse('( models.id = 1234 )').to_ransack
|
90
|
+
q[:c][0].should have_attribute 'models_id'
|
91
|
+
q[:c][0].should have_predicate 'eq'
|
92
|
+
q[:c][0].should have_value '1234'
|
93
|
+
end
|
83
94
|
|
95
|
+
it 'Single comparison with parentheses' do
|
96
|
+
q = parser.parse('(models.id = 1234)').to_ransack
|
84
97
|
q[:c][0].should have_attribute 'models_id'
|
85
98
|
q[:c][0].should have_predicate 'eq'
|
86
99
|
q[:c][0].should have_value '1234'
|
data/spec/spec_helper.rb
CHANGED
data/spec/sql_spec.rb
CHANGED
@@ -15,6 +15,18 @@ describe 'SQL generation' do
|
|
15
15
|
Country.nql(q).should produce_sql "SELECT \"countries\".* FROM \"countries\" WHERE \"countries\".\"name\" = 'abcd'"
|
16
16
|
end
|
17
17
|
|
18
|
+
it 'With parentheses' do
|
19
|
+
q = '(name = abcd)'
|
20
|
+
a = Country.nql(q)
|
21
|
+
a.should produce_sql "SELECT \"countries\".* FROM \"countries\" WHERE \"countries\".\"name\" = 'abcd'"
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'With parentheses and boolean value' do
|
25
|
+
q = '(landlocked = true)'
|
26
|
+
a = Country.nql(q)
|
27
|
+
a.should produce_sql "SELECT \"countries\".* FROM \"countries\" WHERE \"countries\".\"landlocked\" = 't'"
|
28
|
+
end
|
29
|
+
|
18
30
|
it 'Not equals' do
|
19
31
|
q = 'name != abcd'
|
20
32
|
Country.nql(q).should produce_sql "SELECT \"countries\".* FROM \"countries\" WHERE (\"countries\".\"name\" != 'abcd')"
|
metadata
CHANGED
@@ -1,110 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gabriel Naiman
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2020-08-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: treetop
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 1.4.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 1.4.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activerecord
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 3.2.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 3.2.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: activesupport
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 3.2.0
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 3.2.0
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: ransack
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0.7'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0.7'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
70
|
+
name: rake
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.3.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.3.0
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
name: rspec
|
96
99
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
100
|
requirements:
|
99
|
-
- -
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
100
116
|
- !ruby/object:Gem::Version
|
101
117
|
version: '0'
|
102
118
|
type: :development
|
103
119
|
prerelease: false
|
104
120
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
121
|
requirements:
|
107
|
-
- -
|
122
|
+
- - ">="
|
108
123
|
- !ruby/object:Gem::Version
|
109
124
|
version: '0'
|
110
125
|
description: Natural Query Language built on top of ActiveRecord and Ransack
|
@@ -114,8 +129,11 @@ executables: []
|
|
114
129
|
extensions: []
|
115
130
|
extra_rdoc_files: []
|
116
131
|
files:
|
117
|
-
- .
|
118
|
-
- .
|
132
|
+
- ".coveralls.yml"
|
133
|
+
- ".gitignore"
|
134
|
+
- ".ruby-gemset"
|
135
|
+
- ".ruby-version"
|
136
|
+
- ".travis.yml"
|
119
137
|
- Gemfile
|
120
138
|
- LICENSE
|
121
139
|
- README.md
|
@@ -123,6 +141,7 @@ files:
|
|
123
141
|
- lib/nql.rb
|
124
142
|
- lib/nql/error.rb
|
125
143
|
- lib/nql/extension/active_record.rb
|
144
|
+
- lib/nql/extension/arel.rb
|
126
145
|
- lib/nql/extension/hash.rb
|
127
146
|
- lib/nql/grammar.rb
|
128
147
|
- lib/nql/grammar.treetop
|
@@ -131,6 +150,7 @@ files:
|
|
131
150
|
- nql.gemspec
|
132
151
|
- spec/comparison_parser_spec.rb
|
133
152
|
- spec/coordination_parser_spec.rb
|
153
|
+
- spec/coverage_helper.rb
|
134
154
|
- spec/migrations/20121108154439_create_countries.rb
|
135
155
|
- spec/migrations/20121108154508_create_cities.rb
|
136
156
|
- spec/models/city.rb
|
@@ -141,31 +161,30 @@ files:
|
|
141
161
|
- spec/sql_spec.rb
|
142
162
|
homepage: https://github.com/gabynaiman/nql
|
143
163
|
licenses: []
|
164
|
+
metadata: {}
|
144
165
|
post_install_message:
|
145
166
|
rdoc_options: []
|
146
167
|
require_paths:
|
147
168
|
- lib
|
148
169
|
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
150
170
|
requirements:
|
151
|
-
- -
|
171
|
+
- - ">="
|
152
172
|
- !ruby/object:Gem::Version
|
153
173
|
version: '0'
|
154
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
175
|
requirements:
|
157
|
-
- -
|
176
|
+
- - ">="
|
158
177
|
- !ruby/object:Gem::Version
|
159
178
|
version: '0'
|
160
179
|
requirements: []
|
161
|
-
|
162
|
-
rubygems_version: 1.8.24
|
180
|
+
rubygems_version: 3.0.6
|
163
181
|
signing_key:
|
164
|
-
specification_version:
|
182
|
+
specification_version: 4
|
165
183
|
summary: Natural Query Language built on top of ActiveRecord and Ransack
|
166
184
|
test_files:
|
167
185
|
- spec/comparison_parser_spec.rb
|
168
186
|
- spec/coordination_parser_spec.rb
|
187
|
+
- spec/coverage_helper.rb
|
169
188
|
- spec/migrations/20121108154439_create_countries.rb
|
170
189
|
- spec/migrations/20121108154508_create_cities.rb
|
171
190
|
- spec/models/city.rb
|
@@ -174,4 +193,3 @@ test_files:
|
|
174
193
|
- spec/ransack_spec.rb
|
175
194
|
- spec/spec_helper.rb
|
176
195
|
- spec/sql_spec.rb
|
177
|
-
has_rdoc:
|