logical_query_parser 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +12 -57
- data/.gitignore +0 -0
- data/.rspec +0 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +0 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +0 -0
- data/README.md +23 -3
- data/Rakefile +0 -0
- data/gemfiles/rails70.gemfile +8 -1
- data/gemfiles/rails71.gemfile +1 -1
- data/gemfiles/{rails61.gemfile → rails72.gemfile} +2 -2
- data/gemfiles/rails80.gemfile +6 -0
- data/gemfiles/rails81.gemfile +6 -0
- data/lib/logical_query_parser/assoc_node.rb +40 -0
- data/lib/logical_query_parser/assoc_resolver.rb +27 -24
- data/lib/logical_query_parser/nodes/active_record.rb +7 -16
- data/lib/logical_query_parser/nodes/base.rb +0 -0
- data/lib/logical_query_parser/version.rb +1 -1
- data/lib/logical_query_parser.rb +6 -5
- data/lib/logical_query_parser.treetop +0 -0
- data/logical_query_parser.gemspec +5 -2
- metadata +28 -20
- data/gemfiles/rails42.gemfile +0 -6
- data/gemfiles/rails50.gemfile +0 -6
- data/gemfiles/rails51.gemfile +0 -6
- data/gemfiles/rails52.gemfile +0 -6
- data/gemfiles/rails60.gemfile +0 -7
- data/lib/logical_query_parser/assoc.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 50d9e7d0d793b457dd2561160c3fc0e2a0611d7425c671a624c19c5e7395fd92
|
|
4
|
+
data.tar.gz: cc8b9d94d8c13c5764e82b64be14d6b68e050f8d7fe9a3b53c624aa973dbb949
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd0590d955cba3c8b10d2441e62d720131bffb46ecbfbbf5df3ed49fc1e27aeb1a81a28e2ae18d3cdd50e553a0802a24b66b3c5d77b15395391bae7a18e095e4
|
|
7
|
+
data.tar.gz: 678c2067c0dae4587dde4158d251ccb7643479af9ff0c894be7c3410a02c2970a0e83ea8275a300d0ed2b89f08aaa98ddabd0332dca40e62033d00d65c76f208
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -4,71 +4,23 @@ on: [push, pull_request]
|
|
|
4
4
|
|
|
5
5
|
jobs:
|
|
6
6
|
test:
|
|
7
|
-
runs-on: ubuntu-
|
|
7
|
+
runs-on: ubuntu-24.04
|
|
8
8
|
strategy:
|
|
9
9
|
fail-fast: false
|
|
10
10
|
matrix:
|
|
11
|
-
ruby: [
|
|
12
|
-
gemfile: ['
|
|
11
|
+
ruby: ['3.0', 3.1, 3.2, 3.3, 3.4, '4.0']
|
|
12
|
+
gemfile: ['rails70', 'rails71', 'rails72', 'rails80', 'rails81']
|
|
13
13
|
exclude:
|
|
14
|
-
- ruby: 2.3
|
|
15
|
-
gemfile: rails60
|
|
16
|
-
- ruby: 2.3
|
|
17
|
-
gemfile: rails61
|
|
18
|
-
- ruby: 2.3
|
|
19
|
-
gemfile: rails70
|
|
20
|
-
- ruby: 2.3
|
|
21
|
-
gemfile: rails71
|
|
22
|
-
- ruby: 2.4
|
|
23
|
-
gemfile: rails60
|
|
24
|
-
- ruby: 2.4
|
|
25
|
-
gemfile: rails61
|
|
26
|
-
- ruby: 2.4
|
|
27
|
-
gemfile: rails70
|
|
28
|
-
- ruby: 2.4
|
|
29
|
-
gemfile: rails71
|
|
30
|
-
- ruby: 2.5
|
|
31
|
-
gemfile: rails70
|
|
32
|
-
- ruby: 2.5
|
|
33
|
-
gemfile: rails71
|
|
34
|
-
- ruby: 2.6
|
|
35
|
-
gemfile: rails70
|
|
36
|
-
- ruby: 2.6
|
|
37
|
-
gemfile: rails71
|
|
38
|
-
- ruby: 2.7
|
|
39
|
-
gemfile: rails42
|
|
40
14
|
- ruby: 3.0
|
|
41
|
-
gemfile:
|
|
15
|
+
gemfile: rails72
|
|
42
16
|
- ruby: 3.0
|
|
43
|
-
gemfile:
|
|
17
|
+
gemfile: rails80
|
|
44
18
|
- ruby: 3.0
|
|
45
|
-
gemfile:
|
|
46
|
-
- ruby: 3.0
|
|
47
|
-
gemfile: rails52
|
|
48
|
-
- ruby: 3.1
|
|
49
|
-
gemfile: rails42
|
|
19
|
+
gemfile: rails81
|
|
50
20
|
- ruby: 3.1
|
|
51
|
-
gemfile:
|
|
21
|
+
gemfile: rails80
|
|
52
22
|
- ruby: 3.1
|
|
53
|
-
gemfile:
|
|
54
|
-
- ruby: 3.1
|
|
55
|
-
gemfile: rails52
|
|
56
|
-
- ruby: 3.2
|
|
57
|
-
gemfile: rails42
|
|
58
|
-
- ruby: 3.2
|
|
59
|
-
gemfile: rails50
|
|
60
|
-
- ruby: 3.2
|
|
61
|
-
gemfile: rails51
|
|
62
|
-
- ruby: 3.2
|
|
63
|
-
gemfile: rails52
|
|
64
|
-
- ruby: 3.3
|
|
65
|
-
gemfile: rails42
|
|
66
|
-
- ruby: 3.3
|
|
67
|
-
gemfile: rails50
|
|
68
|
-
- ruby: 3.3
|
|
69
|
-
gemfile: rails51
|
|
70
|
-
- ruby: 3.3
|
|
71
|
-
gemfile: rails52
|
|
23
|
+
gemfile: rails81
|
|
72
24
|
|
|
73
25
|
name: ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}
|
|
74
26
|
|
|
@@ -76,11 +28,14 @@ jobs:
|
|
|
76
28
|
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
|
77
29
|
|
|
78
30
|
steps:
|
|
79
|
-
- uses: actions/checkout@
|
|
31
|
+
- uses: actions/checkout@v5
|
|
80
32
|
- uses: ruby/setup-ruby@v1
|
|
81
33
|
with:
|
|
82
34
|
ruby-version: ${{ matrix.ruby }}
|
|
83
35
|
bundler-cache: true
|
|
36
|
+
- name: Bundle list
|
|
37
|
+
run: |
|
|
38
|
+
bundle list
|
|
84
39
|
- name: Run test
|
|
85
40
|
run: |
|
|
86
41
|
bundle exec rspec
|
data/.gitignore
CHANGED
|
File without changes
|
data/.rspec
CHANGED
|
File without changes
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
* Support multiple associations and alias table names for `search` method.
|
|
6
|
+
* Change join method from `joins` to `left_joins` for `search` method.
|
|
7
|
+
|
|
8
|
+
## 0.5.0
|
|
9
|
+
|
|
10
|
+
* Drop support for ruby <= 2.7, rails <= 6.1.
|
|
11
|
+
|
|
3
12
|
## 0.4.0
|
|
4
13
|
|
|
5
14
|
* Add `frozen_string_literal: true`.
|
data/CODE_OF_CONDUCT.md
CHANGED
|
File without changes
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
|
File without changes
|
data/README.md
CHANGED
|
@@ -4,9 +4,9 @@ A parser to generate a tree structure from a logical search query string using t
|
|
|
4
4
|
|
|
5
5
|
## Dependencies
|
|
6
6
|
|
|
7
|
-
* ruby
|
|
7
|
+
* ruby 3.0+
|
|
8
8
|
* treetop 1.6+
|
|
9
|
-
* activerecord
|
|
9
|
+
* activerecord 7.0+ (optional)
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
@@ -99,16 +99,36 @@ Use with associations:
|
|
|
99
99
|
```ruby
|
|
100
100
|
class Doc < ActiveRecord::Base
|
|
101
101
|
has_many :tags
|
|
102
|
+
has_many :flags
|
|
102
103
|
end
|
|
103
104
|
|
|
104
105
|
class Tag < ActiveRecord::Base
|
|
106
|
+
belongs_to :doc
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
class Flag < ActiveRecord::Base
|
|
110
|
+
belongs_to :doc
|
|
105
111
|
end
|
|
106
112
|
|
|
107
113
|
LogicalQueryParser.search("a AND b", Doc.all, :c1, :c2, tags: [:c3]).to_sql
|
|
108
114
|
# SELECT "docs".* FROM "docs"
|
|
109
|
-
#
|
|
115
|
+
# LEFT OUTER JOIN "tags" ON "tags"."doc_id" = "docs"."id"
|
|
110
116
|
# WHERE ((("docs"."c1" LIKE '%a%' OR "docs"."c2" LIKE '%a%') OR "tags"."c3" LIKE '%a%') AND
|
|
111
117
|
# (("docs"."c1" LIKE '%b%' OR "docs"."c2" LIKE '%b%') OR "tags"."c3" LIKE '%b%'))
|
|
118
|
+
|
|
119
|
+
LogicalQueryParser.search("a AND b", Doc.all, :c1, :c2, tags: [:c3], flags: [:c4]).to_sql
|
|
120
|
+
# SELECT "docs".* FROM "docs"
|
|
121
|
+
# LEFT OUTER JOIN "tags" ON "tags"."doc_id" = "docs"."id"
|
|
122
|
+
# LEFT OUTER JOIN "flags" ON "flags"."doc_id" = "docs"."id"
|
|
123
|
+
# WHERE (((("docs"."c1" LIKE '%a%' OR "docs"."c2" LIKE '%a%') OR "tags"."c3" LIKE '%a%') OR "flags"."c4" LIKE '%a%') AND
|
|
124
|
+
# ((("docs"."c1" LIKE '%b%' OR "docs"."c2" LIKE '%b%') OR "tags"."c3" LIKE '%b%') OR "flags"."c4" LIKE '%b%'))
|
|
125
|
+
|
|
126
|
+
LogicalQueryParser.search("a AND b", Doc.all, :c1, tags: [:c2, doc: [:c3]]).to_sql
|
|
127
|
+
# SELECT "docs".* FROM "docs"
|
|
128
|
+
# LEFT OUTER JOIN "tags" ON "tags"."doc_id" = "docs"."id"
|
|
129
|
+
# LEFT OUTER JOIN "docs" AS "docs_tags" ON "docs_tags"."id" = "tags"."doc_id"
|
|
130
|
+
# WHERE ((("docs"."c1" LIKE '%a%' OR "tags"."c2" LIKE '%a%') OR "docs_tags"."c3" LIKE '%a%') AND
|
|
131
|
+
# (("docs"."c1" LIKE '%b%' OR "tags"."c2" LIKE '%b%') OR "docs_tags"."c3" LIKE '%b%'))
|
|
112
132
|
```
|
|
113
133
|
|
|
114
134
|
## Contributing
|
data/Rakefile
CHANGED
|
File without changes
|
data/gemfiles/rails70.gemfile
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem "
|
|
3
|
+
gem "activerecord", "~> 7.0.1"
|
|
4
4
|
gem "sqlite3", "~> 1.4.0"
|
|
5
5
|
|
|
6
|
+
gem "concurrent-ruby", "<= 1.3.4"
|
|
7
|
+
|
|
8
|
+
if RUBY_VERSION >= "3.4"
|
|
9
|
+
gem "bigdecimal"
|
|
10
|
+
gem "mutex_m"
|
|
11
|
+
end
|
|
12
|
+
|
|
6
13
|
gemspec path: "../"
|
data/gemfiles/rails71.gemfile
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LogicalQueryParser
|
|
4
|
+
class AssocNode
|
|
5
|
+
attr_accessor :klass, :assoc_name, :table_name, :columns, :parent, :children
|
|
6
|
+
|
|
7
|
+
def initialize(options = {})
|
|
8
|
+
options.each do |key, value|
|
|
9
|
+
send("#{key}=", value)
|
|
10
|
+
end
|
|
11
|
+
@columns ||= []
|
|
12
|
+
@children ||= []
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def model=(model)
|
|
16
|
+
@klass = model
|
|
17
|
+
@table_name = model.table_name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def descendants
|
|
21
|
+
children.flat_map do |child|
|
|
22
|
+
[child] + child.descendants
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def arel_table
|
|
27
|
+
Arel::Table.new(table_name, as: table_name)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def join_structure
|
|
31
|
+
if children.empty?
|
|
32
|
+
{}
|
|
33
|
+
else
|
|
34
|
+
children.each_with_object({}) do |child, hash|
|
|
35
|
+
hash[child.assoc_name] = child.join_structure
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative 'assoc_node'
|
|
4
4
|
|
|
5
5
|
module LogicalQueryParser
|
|
6
6
|
class AssocResolver
|
|
7
|
-
def initialize(
|
|
8
|
-
@
|
|
7
|
+
def initialize(relation, *options)
|
|
8
|
+
@relation = relation
|
|
9
|
+
@options = options.flatten(1)
|
|
9
10
|
end
|
|
10
11
|
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
def call
|
|
13
|
+
root_node = AssocNode.new(klass: @relation.klass, table_name: @relation.table_name)
|
|
14
|
+
resolve_assocs(@relation.klass, root_node, @options)
|
|
15
|
+
|
|
16
|
+
join_relation = @relation.klass.unscoped.left_joins(root_node.join_structure)
|
|
17
|
+
root_node.descendants.each_with_index do |node, i|
|
|
18
|
+
join_source = join_relation.arel.join_sources[i]
|
|
19
|
+
node.table_name = join_source&.left&.name || node.klass.table_name
|
|
15
20
|
end
|
|
21
|
+
|
|
22
|
+
root_node
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
private
|
|
@@ -25,24 +32,20 @@ module LogicalQueryParser
|
|
|
25
32
|
end
|
|
26
33
|
end
|
|
27
34
|
|
|
28
|
-
def resolve_assocs(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
def resolve_assocs(current_klass, node, options)
|
|
36
|
+
wrap_array(options).each do |column_or_assoc_hash|
|
|
37
|
+
if column_or_assoc_hash.is_a?(Hash)
|
|
38
|
+
column_or_assoc_hash.each do |assoc_name, nested_column_or_assoc_hash|
|
|
39
|
+
if (reflection = current_klass.reflect_on_association(assoc_name))
|
|
40
|
+
child = AssocNode.new(klass: reflection.klass, assoc_name: assoc_name, parent: node)
|
|
41
|
+
node.children ||= []
|
|
42
|
+
node.children << child
|
|
43
|
+
resolve_assocs(reflection.klass, child, nested_column_or_assoc_hash)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
33
46
|
else
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def resolve_assocs_for_hash(klass, hash, assoc)
|
|
41
|
-
hash.each do |assoc_name, options|
|
|
42
|
-
if (reflection = klass.reflect_on_association(assoc_name))
|
|
43
|
-
assoc.current[assoc_name] = {}
|
|
44
|
-
assoc.current = assoc.current[assoc_name]
|
|
45
|
-
resolve_assocs(reflection.klass, options, assoc)
|
|
47
|
+
node.columns ||= []
|
|
48
|
+
node.columns << column_or_assoc_hash
|
|
46
49
|
end
|
|
47
50
|
end
|
|
48
51
|
end
|
|
@@ -75,7 +75,7 @@ module LogicalQueryParser
|
|
|
75
75
|
operator, logic = operator_and_logic
|
|
76
76
|
text = LogicalQueryParser.unquote(word.text_value)
|
|
77
77
|
|
|
78
|
-
sql = build_arel(params, operator, text).reduce(logic).to_sql
|
|
78
|
+
sql = build_arel(params[:root], operator, text).reduce(logic).to_sql
|
|
79
79
|
sql = "(#{sql})" if sql[0] != '(' && sql[-1] != ')'
|
|
80
80
|
params[:_sql] << sql
|
|
81
81
|
end
|
|
@@ -90,21 +90,12 @@ module LogicalQueryParser
|
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
def build_arel(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def build_arel_from_columns(klass, columns, operator, text)
|
|
102
|
-
columns.map { |column| klass.arel_table[column].send(operator, Arel.sql(klass.connection.quote("%#{text}%"))) }
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def build_arel_from_hash(klass, hash, operator, text)
|
|
106
|
-
hash.flat_map do |klass, columns|
|
|
107
|
-
build_arel_from_columns(klass, columns, operator, text)
|
|
93
|
+
def build_arel(root, operator, text)
|
|
94
|
+
assocs = [root] + root.descendants
|
|
95
|
+
assocs.flat_map do |assoc|
|
|
96
|
+
assoc.columns.map do |column|
|
|
97
|
+
assoc.arel_table[column].send(operator, Arel.sql(assoc.klass.connection.quote("%#{text}%")))
|
|
98
|
+
end
|
|
108
99
|
end
|
|
109
100
|
end
|
|
110
101
|
end
|
|
File without changes
|
data/lib/logical_query_parser.rb
CHANGED
|
@@ -16,13 +16,14 @@ module LogicalQueryParser
|
|
|
16
16
|
|
|
17
17
|
def search(query, relations, *options)
|
|
18
18
|
relations = relations.all if relations.respond_to?(:all)
|
|
19
|
-
|
|
20
|
-
sql = new.parse(query).to_sql(
|
|
21
|
-
relations.
|
|
19
|
+
root = resolve_assocs(relations, *options)
|
|
20
|
+
sql = new.parse(query).to_sql(root: root)
|
|
21
|
+
relations = relations.left_joins(root.join_structure) unless root.join_structure.empty?
|
|
22
|
+
relations.where(sql)
|
|
22
23
|
end
|
|
23
24
|
|
|
24
|
-
def resolve_assocs(
|
|
25
|
-
AssocResolver.new(
|
|
25
|
+
def resolve_assocs(relation, *options)
|
|
26
|
+
AssocResolver.new(relation, *options).call
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def walk_tree(node, &block)
|
|
File without changes
|
|
@@ -19,12 +19,15 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
|
+
spec.required_ruby_version = ">= 3.0"
|
|
23
|
+
|
|
22
24
|
spec.add_dependency "treetop", "~> 1.6.8"
|
|
23
25
|
|
|
26
|
+
spec.add_development_dependency "activerecord", ">= 7.0"
|
|
27
|
+
spec.add_development_dependency "sqlite3"
|
|
24
28
|
spec.add_development_dependency "bundler"
|
|
29
|
+
spec.add_development_dependency "irb"
|
|
25
30
|
spec.add_development_dependency "rake"
|
|
26
31
|
spec.add_development_dependency "rspec"
|
|
27
32
|
spec.add_development_dependency "simplecov"
|
|
28
|
-
spec.add_development_dependency "activerecord"
|
|
29
|
-
spec.add_development_dependency "sqlite3"
|
|
30
33
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: logical_query_parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yoshikazu Kaneta
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: treetop
|
|
@@ -25,7 +24,21 @@ dependencies:
|
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: 1.6.8
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: activerecord
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '7.0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '7.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: sqlite3
|
|
29
42
|
requirement: !ruby/object:Gem::Requirement
|
|
30
43
|
requirements:
|
|
31
44
|
- - ">="
|
|
@@ -39,7 +52,7 @@ dependencies:
|
|
|
39
52
|
- !ruby/object:Gem::Version
|
|
40
53
|
version: '0'
|
|
41
54
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
55
|
+
name: bundler
|
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
|
44
57
|
requirements:
|
|
45
58
|
- - ">="
|
|
@@ -53,7 +66,7 @@ dependencies:
|
|
|
53
66
|
- !ruby/object:Gem::Version
|
|
54
67
|
version: '0'
|
|
55
68
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
69
|
+
name: irb
|
|
57
70
|
requirement: !ruby/object:Gem::Requirement
|
|
58
71
|
requirements:
|
|
59
72
|
- - ">="
|
|
@@ -67,7 +80,7 @@ dependencies:
|
|
|
67
80
|
- !ruby/object:Gem::Version
|
|
68
81
|
version: '0'
|
|
69
82
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
83
|
+
name: rake
|
|
71
84
|
requirement: !ruby/object:Gem::Requirement
|
|
72
85
|
requirements:
|
|
73
86
|
- - ">="
|
|
@@ -81,7 +94,7 @@ dependencies:
|
|
|
81
94
|
- !ruby/object:Gem::Version
|
|
82
95
|
version: '0'
|
|
83
96
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
97
|
+
name: rspec
|
|
85
98
|
requirement: !ruby/object:Gem::Requirement
|
|
86
99
|
requirements:
|
|
87
100
|
- - ">="
|
|
@@ -95,7 +108,7 @@ dependencies:
|
|
|
95
108
|
- !ruby/object:Gem::Version
|
|
96
109
|
version: '0'
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
111
|
+
name: simplecov
|
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
|
100
113
|
requirements:
|
|
101
114
|
- - ">="
|
|
@@ -127,17 +140,14 @@ files:
|
|
|
127
140
|
- Rakefile
|
|
128
141
|
- bin/console
|
|
129
142
|
- bin/setup
|
|
130
|
-
- gemfiles/rails42.gemfile
|
|
131
|
-
- gemfiles/rails50.gemfile
|
|
132
|
-
- gemfiles/rails51.gemfile
|
|
133
|
-
- gemfiles/rails52.gemfile
|
|
134
|
-
- gemfiles/rails60.gemfile
|
|
135
|
-
- gemfiles/rails61.gemfile
|
|
136
143
|
- gemfiles/rails70.gemfile
|
|
137
144
|
- gemfiles/rails71.gemfile
|
|
145
|
+
- gemfiles/rails72.gemfile
|
|
146
|
+
- gemfiles/rails80.gemfile
|
|
147
|
+
- gemfiles/rails81.gemfile
|
|
138
148
|
- lib/logical_query_parser.rb
|
|
139
149
|
- lib/logical_query_parser.treetop
|
|
140
|
-
- lib/logical_query_parser/
|
|
150
|
+
- lib/logical_query_parser/assoc_node.rb
|
|
141
151
|
- lib/logical_query_parser/assoc_resolver.rb
|
|
142
152
|
- lib/logical_query_parser/nodes/active_record.rb
|
|
143
153
|
- lib/logical_query_parser/nodes/base.rb
|
|
@@ -147,7 +157,6 @@ homepage: https://github.com/kanety/logical_query_parser
|
|
|
147
157
|
licenses:
|
|
148
158
|
- MIT
|
|
149
159
|
metadata: {}
|
|
150
|
-
post_install_message:
|
|
151
160
|
rdoc_options: []
|
|
152
161
|
require_paths:
|
|
153
162
|
- lib
|
|
@@ -155,15 +164,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
155
164
|
requirements:
|
|
156
165
|
- - ">="
|
|
157
166
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '0'
|
|
167
|
+
version: '3.0'
|
|
159
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
169
|
requirements:
|
|
161
170
|
- - ">="
|
|
162
171
|
- !ruby/object:Gem::Version
|
|
163
172
|
version: '0'
|
|
164
173
|
requirements: []
|
|
165
|
-
rubygems_version: 3.
|
|
166
|
-
signing_key:
|
|
174
|
+
rubygems_version: 3.6.9
|
|
167
175
|
specification_version: 4
|
|
168
176
|
summary: A parser for a logical query string.
|
|
169
177
|
test_files: []
|
data/gemfiles/rails42.gemfile
DELETED
data/gemfiles/rails50.gemfile
DELETED
data/gemfiles/rails51.gemfile
DELETED
data/gemfiles/rails52.gemfile
DELETED
data/gemfiles/rails60.gemfile
DELETED