inquery 1.0.11 → 1.1.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop.yml +1 -1
  3. data/.github/workflows/ruby.yml +24 -8
  4. data/.gitignore +2 -2
  5. data/.rubocop.yml +4 -0
  6. data/Appraisals +24 -4
  7. data/CHANGELOG.md +38 -0
  8. data/Gemfile +17 -1
  9. data/Gemfile.lock +125 -0
  10. data/LICENSE +1 -1
  11. data/MIGRATION.md +260 -0
  12. data/README.md +14 -8
  13. data/RUBY_VERSION +1 -1
  14. data/Rakefile +4 -11
  15. data/VERSION +1 -1
  16. data/doc/Inquery/Exceptions/Base.html +4 -4
  17. data/doc/Inquery/Exceptions/InvalidRelation.html +4 -4
  18. data/doc/Inquery/Exceptions/UnknownCallSignature.html +4 -4
  19. data/doc/Inquery/Exceptions.html +4 -4
  20. data/doc/Inquery/MethodAccessibleHash.html +431 -0
  21. data/doc/Inquery/Mixins/RawSqlUtils.html +17 -4
  22. data/doc/Inquery/Mixins/RelationValidation/ClassMethods.html +8 -7
  23. data/doc/Inquery/Mixins/RelationValidation.html +9 -8
  24. data/doc/Inquery/Mixins/SchemaValidation/ClassMethods.html +4 -4
  25. data/doc/Inquery/Mixins/SchemaValidation.html +4 -4
  26. data/doc/Inquery/Mixins.html +4 -4
  27. data/doc/Inquery/Query/Chainable.html +207 -90
  28. data/doc/Inquery/Query.html +401 -73
  29. data/doc/Inquery.html +12 -9
  30. data/doc/_index.html +12 -5
  31. data/doc/class_list.html +6 -3
  32. data/doc/css/full_list.css +3 -3
  33. data/doc/css/style.css +6 -0
  34. data/doc/file.README.html +102 -16
  35. data/doc/file_list.html +5 -2
  36. data/doc/frames.html +10 -5
  37. data/doc/index.html +102 -16
  38. data/doc/js/app.js +294 -264
  39. data/doc/js/full_list.js +30 -4
  40. data/doc/method_list.html +48 -21
  41. data/doc/top-level-namespace.html +4 -4
  42. data/gemfiles/rails_5.2.gemfile +1 -0
  43. data/gemfiles/rails_6.0.gemfile +1 -0
  44. data/gemfiles/rails_6.1.gemfile +1 -0
  45. data/gemfiles/rails_7.0.gemfile +1 -0
  46. data/gemfiles/{rails_5.1.gemfile → rails_7.1.gemfile} +2 -1
  47. data/gemfiles/rails_7.2.gemfile +8 -0
  48. data/gemfiles/rails_8.0.gemfile +8 -0
  49. data/gemfiles/rails_8.1.gemfile +8 -0
  50. data/inquery.gemspec +11 -34
  51. data/lib/inquery/method_accessible_hash.rb +45 -0
  52. data/lib/inquery/mixins/raw_sql_utils.rb +32 -6
  53. data/lib/inquery/mixins/relation_validation.rb +1 -1
  54. data/lib/inquery/query/chainable.rb +69 -27
  55. data/lib/inquery/query.rb +67 -14
  56. data/lib/inquery.rb +2 -0
  57. data/test/inquery/error_handling_test.rb +117 -0
  58. data/test/inquery/method_accessible_hash_test.rb +85 -0
  59. data/test/inquery/mixins/raw_sql_utils_test.rb +67 -0
  60. data/test/inquery/query/chainable_test.rb +78 -0
  61. data/test/inquery/query_test.rb +86 -0
  62. data/test/test_helper.rb +11 -0
  63. metadata +30 -129
  64. data/.yardopts +0 -1
@@ -43,5 +43,91 @@ module Inquery
43
43
  result = Queries::Group::FetchAsJson.run
44
44
  assert_equal Group.all.to_json, result
45
45
  end
46
+
47
+ def test_query_with_optional_params
48
+ query_class = Class.new(Inquery::Query) do
49
+ schema3 do
50
+ str! :name
51
+ int? :age
52
+ end
53
+
54
+ def call
55
+ User.where(name: osparams.name)
56
+ end
57
+ end
58
+
59
+ # With both params
60
+ result = query_class.run(name: 'Alice', age: 30)
61
+ assert_kind_of ActiveRecord::Relation, result
62
+
63
+ # With only required param
64
+ result = query_class.run(name: 'Alice')
65
+ assert_kind_of ActiveRecord::Relation, result
66
+ end
67
+
68
+ def test_query_without_schema
69
+ query_class = Class.new(Inquery::Query) do
70
+ def call
71
+ User.all
72
+ end
73
+ end
74
+
75
+ result = query_class.run
76
+ assert_equal User.all, result
77
+ end
78
+
79
+ def test_query_with_empty_result
80
+ query_class = Class.new(Inquery::Query) do
81
+ def call
82
+ User.where('1=0')
83
+ end
84
+ end
85
+
86
+ result = query_class.run
87
+ assert_empty result.to_a
88
+ end
89
+
90
+ def test_query_returns_nil
91
+ query_class = Class.new(Inquery::Query) do
92
+ def call
93
+ nil
94
+ end
95
+ end
96
+
97
+ result = query_class.run
98
+ assert_nil result
99
+ end
100
+
101
+ def test_query_with_process_method
102
+ query_class = Class.new(Inquery::Query) do
103
+ def call
104
+ User.all
105
+ end
106
+
107
+ def process(results)
108
+ results.count
109
+ end
110
+ end
111
+
112
+ result = query_class.run
113
+ assert_equal 3, result
114
+ end
115
+
116
+ def test_osparams_returns_method_accessible_hash
117
+ query_class = Class.new(Inquery::Query) do
118
+ schema3 do
119
+ str! :name
120
+ end
121
+
122
+ def call
123
+ osparams
124
+ end
125
+ end
126
+
127
+ result = query_class.run(name: 'Alice')
128
+ assert_kind_of Inquery::MethodAccessibleHash, result
129
+ assert_equal 'Alice', result.name
130
+ assert_equal 'Alice', result[:name]
131
+ end
46
132
  end
47
133
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,14 @@
1
+ begin
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter '/test/'
5
+ add_filter '/vendor/'
6
+ end
7
+ rescue LoadError
8
+ # SimpleCov not available, skip coverage reporting
9
+ end
10
+
11
+ require 'logger'
1
12
  require 'active_record'
2
13
  require 'minitest/autorun'
3
14
  require 'inquery'
metadata CHANGED
@@ -1,171 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-08-24 00:00:00.000000000 Z
10
+ date: 2026-01-05 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: appraisal
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: sqlite3
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: haml
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: yard
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: '1.25'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: '1.25'
97
- - !ruby/object:Gem::Dependency
98
- name: redcarpet
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: minitest
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
12
  - !ruby/object:Gem::Dependency
126
13
  name: activesupport
127
14
  requirement: !ruby/object:Gem::Requirement
128
15
  requirements:
129
16
  - - ">="
130
17
  - !ruby/object:Gem::Version
131
- version: '0'
18
+ version: '5.1'
132
19
  type: :runtime
133
20
  prerelease: false
134
21
  version_requirements: !ruby/object:Gem::Requirement
135
22
  requirements:
136
23
  - - ">="
137
24
  - !ruby/object:Gem::Version
138
- version: '0'
25
+ version: '5.1'
139
26
  - !ruby/object:Gem::Dependency
140
27
  name: activerecord
141
28
  requirement: !ruby/object:Gem::Requirement
142
29
  requirements:
143
30
  - - ">="
144
31
  - !ruby/object:Gem::Version
145
- version: '0'
32
+ version: '5.1'
146
33
  type: :runtime
147
34
  prerelease: false
148
35
  version_requirements: !ruby/object:Gem::Requirement
149
36
  requirements:
150
37
  - - ">="
151
38
  - !ruby/object:Gem::Version
152
- version: '0'
39
+ version: '5.1'
153
40
  - !ruby/object:Gem::Dependency
154
41
  name: schemacop
155
42
  requirement: !ruby/object:Gem::Requirement
156
43
  requirements:
157
- - - "~>"
44
+ - - ">="
158
45
  - !ruby/object:Gem::Version
159
46
  version: 3.0.8
47
+ - - "<"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.0'
160
50
  type: :runtime
161
51
  prerelease: false
162
52
  version_requirements: !ruby/object:Gem::Requirement
163
53
  requirements:
164
- - - "~>"
54
+ - - ">="
165
55
  - !ruby/object:Gem::Version
166
56
  version: 3.0.8
167
- description:
168
- email:
57
+ - - "<"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.0'
169
60
  executables: []
170
61
  extensions: []
171
62
  extra_rdoc_files: []
@@ -175,11 +66,12 @@ files:
175
66
  - ".gitignore"
176
67
  - ".releaser_config"
177
68
  - ".rubocop.yml"
178
- - ".yardopts"
179
69
  - Appraisals
180
70
  - CHANGELOG.md
181
71
  - Gemfile
72
+ - Gemfile.lock
182
73
  - LICENSE
74
+ - MIGRATION.md
183
75
  - README.md
184
76
  - RUBY_VERSION
185
77
  - Rakefile
@@ -189,6 +81,7 @@ files:
189
81
  - doc/Inquery/Exceptions/Base.html
190
82
  - doc/Inquery/Exceptions/InvalidRelation.html
191
83
  - doc/Inquery/Exceptions/UnknownCallSignature.html
84
+ - doc/Inquery/MethodAccessibleHash.html
192
85
  - doc/Inquery/Mixins.html
193
86
  - doc/Inquery/Mixins/RawSqlUtils.html
194
87
  - doc/Inquery/Mixins/RelationValidation.html
@@ -211,14 +104,18 @@ files:
211
104
  - doc/js/jquery.js
212
105
  - doc/method_list.html
213
106
  - doc/top-level-namespace.html
214
- - gemfiles/rails_5.1.gemfile
215
107
  - gemfiles/rails_5.2.gemfile
216
108
  - gemfiles/rails_6.0.gemfile
217
109
  - gemfiles/rails_6.1.gemfile
218
110
  - gemfiles/rails_7.0.gemfile
111
+ - gemfiles/rails_7.1.gemfile
112
+ - gemfiles/rails_7.2.gemfile
113
+ - gemfiles/rails_8.0.gemfile
114
+ - gemfiles/rails_8.1.gemfile
219
115
  - inquery.gemspec
220
116
  - lib/inquery.rb
221
117
  - lib/inquery/exceptions.rb
118
+ - lib/inquery/method_accessible_hash.rb
222
119
  - lib/inquery/mixins/raw_sql_utils.rb
223
120
  - lib/inquery/mixins/relation_validation.rb
224
121
  - lib/inquery/mixins/schema_validation.rb
@@ -226,6 +123,9 @@ files:
226
123
  - lib/inquery/query/chainable.rb
227
124
  - test/db/models.rb
228
125
  - test/db/schema.rb
126
+ - test/inquery/error_handling_test.rb
127
+ - test/inquery/method_accessible_hash_test.rb
128
+ - test/inquery/mixins/raw_sql_utils_test.rb
229
129
  - test/inquery/query/chainable_test.rb
230
130
  - test/inquery/query_test.rb
231
131
  - test/queries/group/fetch_as_json.rb
@@ -236,10 +136,9 @@ files:
236
136
  - test/queries/user/fetch_in_group.rb
237
137
  - test/queries/user/fetch_in_group_rel.rb
238
138
  - test/test_helper.rb
239
- homepage:
139
+ homepage: https://github.com/sitrox/inquery
240
140
  licenses: []
241
141
  metadata: {}
242
- post_install_message:
243
142
  rdoc_options: []
244
143
  require_paths:
245
144
  - lib
@@ -254,13 +153,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
153
  - !ruby/object:Gem::Version
255
154
  version: '0'
256
155
  requirements: []
257
- rubygems_version: 3.4.10
258
- signing_key:
156
+ rubygems_version: 4.0.2
259
157
  specification_version: 4
260
158
  summary: A skeleton that allows extracting queries into atomic, reusable classes.
261
159
  test_files:
262
160
  - test/db/models.rb
263
161
  - test/db/schema.rb
162
+ - test/inquery/error_handling_test.rb
163
+ - test/inquery/method_accessible_hash_test.rb
164
+ - test/inquery/mixins/raw_sql_utils_test.rb
264
165
  - test/inquery/query/chainable_test.rb
265
166
  - test/inquery/query_test.rb
266
167
  - test/queries/group/fetch_as_json.rb
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --markup=markdown --readme=README.md --no-private lib/**/*.rb