inquery 0.1.0 → 1.0.4

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 (42) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +26 -0
  3. data/LICENSE +2 -2
  4. data/README.md +41 -13
  5. data/RUBY_VERSION +1 -1
  6. data/Rakefile +2 -2
  7. data/VERSION +1 -1
  8. data/doc/Inquery.html +7 -7
  9. data/doc/Inquery/Exceptions.html +6 -6
  10. data/doc/Inquery/Exceptions/Base.html +6 -6
  11. data/doc/Inquery/Exceptions/InvalidRelation.html +6 -6
  12. data/doc/Inquery/Exceptions/UnknownCallSignature.html +6 -6
  13. data/doc/Inquery/Mixins.html +9 -9
  14. data/doc/Inquery/Mixins/RawSqlUtils.html +116 -0
  15. data/doc/Inquery/Mixins/RelationValidation.html +40 -36
  16. data/doc/Inquery/Mixins/RelationValidation/ClassMethods.html +12 -12
  17. data/doc/Inquery/Mixins/SchemaValidation.html +6 -6
  18. data/doc/Inquery/Mixins/SchemaValidation/ClassMethods.html +14 -20
  19. data/doc/Inquery/Query.html +105 -34
  20. data/doc/Inquery/Query/Chainable.html +78 -8
  21. data/doc/_index.html +18 -11
  22. data/doc/class_list.html +3 -3
  23. data/doc/css/style.css +12 -8
  24. data/doc/file.README.html +60 -33
  25. data/doc/file_list.html +2 -2
  26. data/doc/frames.html +2 -2
  27. data/doc/index.html +60 -33
  28. data/doc/js/app.js +69 -3
  29. data/doc/method_list.html +26 -10
  30. data/doc/top-level-namespace.html +6 -6
  31. data/inquery.gemspec +11 -11
  32. data/lib/inquery.rb +1 -0
  33. data/lib/inquery/mixins/raw_sql_utils.rb +23 -0
  34. data/lib/inquery/mixins/relation_validation.rb +16 -9
  35. data/lib/inquery/mixins/schema_validation.rb +5 -8
  36. data/lib/inquery/query.rb +9 -2
  37. data/lib/inquery/query/chainable.rb +5 -0
  38. data/test/inquery/query/chainable_test.rb +1 -1
  39. data/test/inquery/query_test.rb +2 -2
  40. data/test/queries/group/filter_with_color.rb +3 -1
  41. data/test/queries/user/fetch_in_group.rb +3 -3
  42. metadata +20 -18
@@ -1,16 +1,16 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: inquery 0.1.0 ruby lib
2
+ # stub: inquery 1.0.4 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "inquery".freeze
6
- s.version = "0.1.0"
6
+ s.version = "1.0.4"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2017-05-16"
12
- s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Inquery.html".freeze, "doc/Inquery/Exceptions.html".freeze, "doc/Inquery/Exceptions/Base.html".freeze, "doc/Inquery/Exceptions/InvalidRelation.html".freeze, "doc/Inquery/Exceptions/UnknownCallSignature.html".freeze, "doc/Inquery/Mixins.html".freeze, "doc/Inquery/Mixins/RelationValidation.html".freeze, "doc/Inquery/Mixins/RelationValidation/ClassMethods.html".freeze, "doc/Inquery/Mixins/SchemaValidation.html".freeze, "doc/Inquery/Mixins/SchemaValidation/ClassMethods.html".freeze, "doc/Inquery/Query.html".freeze, "doc/Inquery/Query/Chainable.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "inquery.gemspec".freeze, "lib/inquery.rb".freeze, "lib/inquery/exceptions.rb".freeze, "lib/inquery/mixins/relation_validation.rb".freeze, "lib/inquery/mixins/schema_validation.rb".freeze, "lib/inquery/query.rb".freeze, "lib/inquery/query/chainable.rb".freeze, "test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/inquery/query/chainable_test.rb".freeze, "test/inquery/query_test.rb".freeze, "test/queries/group/fetch_as_json.rb".freeze, "test/queries/group/fetch_green.rb".freeze, "test/queries/group/fetch_red.rb".freeze, "test/queries/group/filter_with_color.rb".freeze, "test/queries/user/fetch_all.rb".freeze, "test/queries/user/fetch_in_group.rb".freeze, "test/queries/user/fetch_in_group_rel.rb".freeze, "test/test_helper.rb".freeze]
13
- s.rubygems_version = "2.6.6".freeze
11
+ s.date = "2020-11-24"
12
+ s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "doc/Inquery.html".freeze, "doc/Inquery/Exceptions.html".freeze, "doc/Inquery/Exceptions/Base.html".freeze, "doc/Inquery/Exceptions/InvalidRelation.html".freeze, "doc/Inquery/Exceptions/UnknownCallSignature.html".freeze, "doc/Inquery/Mixins.html".freeze, "doc/Inquery/Mixins/RawSqlUtils.html".freeze, "doc/Inquery/Mixins/RelationValidation.html".freeze, "doc/Inquery/Mixins/RelationValidation/ClassMethods.html".freeze, "doc/Inquery/Mixins/SchemaValidation.html".freeze, "doc/Inquery/Mixins/SchemaValidation/ClassMethods.html".freeze, "doc/Inquery/Query.html".freeze, "doc/Inquery/Query/Chainable.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/index.html".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/top-level-namespace.html".freeze, "inquery.gemspec".freeze, "lib/inquery.rb".freeze, "lib/inquery/exceptions.rb".freeze, "lib/inquery/mixins/raw_sql_utils.rb".freeze, "lib/inquery/mixins/relation_validation.rb".freeze, "lib/inquery/mixins/schema_validation.rb".freeze, "lib/inquery/query.rb".freeze, "lib/inquery/query/chainable.rb".freeze, "test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/inquery/query/chainable_test.rb".freeze, "test/inquery/query_test.rb".freeze, "test/queries/group/fetch_as_json.rb".freeze, "test/queries/group/fetch_green.rb".freeze, "test/queries/group/fetch_red.rb".freeze, "test/queries/group/filter_with_color.rb".freeze, "test/queries/user/fetch_all.rb".freeze, "test/queries/user/fetch_in_group.rb".freeze, "test/queries/user/fetch_in_group_rel.rb".freeze, "test/test_helper.rb".freeze]
13
+ s.rubygems_version = "3.0.3".freeze
14
14
  s.summary = "A skeleton that allows extracting queries into atomic, reusable classes.".freeze
15
15
  s.test_files = ["test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/inquery/query/chainable_test.rb".freeze, "test/inquery/query_test.rb".freeze, "test/queries/group/fetch_as_json.rb".freeze, "test/queries/group/fetch_green.rb".freeze, "test/queries/group/fetch_red.rb".freeze, "test/queries/group/filter_with_color.rb".freeze, "test/queries/user/fetch_all.rb".freeze, "test/queries/user/fetch_in_group.rb".freeze, "test/queries/user/fetch_in_group_rel.rb".freeze, "test/test_helper.rb".freeze]
16
16
 
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.specification_version = 4
19
19
 
20
20
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
21
- s.add_development_dependency(%q<bundler>.freeze, ["~> 1.3"])
21
+ s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
22
22
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
23
23
  s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
24
24
  s.add_development_dependency(%q<haml>.freeze, [">= 0"])
@@ -28,9 +28,9 @@ Gem::Specification.new do |s|
28
28
  s.add_runtime_dependency(%q<minitest>.freeze, [">= 0"])
29
29
  s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
30
30
  s.add_runtime_dependency(%q<activerecord>.freeze, [">= 0"])
31
- s.add_runtime_dependency(%q<schemacop>.freeze, ["~> 1"])
31
+ s.add_runtime_dependency(%q<schemacop>.freeze, [">= 2.0"])
32
32
  else
33
- s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
33
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
34
34
  s.add_dependency(%q<rake>.freeze, [">= 0"])
35
35
  s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
36
36
  s.add_dependency(%q<haml>.freeze, [">= 0"])
@@ -40,10 +40,10 @@ Gem::Specification.new do |s|
40
40
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
41
41
  s.add_dependency(%q<activesupport>.freeze, [">= 0"])
42
42
  s.add_dependency(%q<activerecord>.freeze, [">= 0"])
43
- s.add_dependency(%q<schemacop>.freeze, ["~> 1"])
43
+ s.add_dependency(%q<schemacop>.freeze, [">= 2.0"])
44
44
  end
45
45
  else
46
- s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
46
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
47
47
  s.add_dependency(%q<rake>.freeze, [">= 0"])
48
48
  s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
49
49
  s.add_dependency(%q<haml>.freeze, [">= 0"])
@@ -53,6 +53,6 @@ Gem::Specification.new do |s|
53
53
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
54
54
  s.add_dependency(%q<activesupport>.freeze, [">= 0"])
55
55
  s.add_dependency(%q<activerecord>.freeze, [">= 0"])
56
- s.add_dependency(%q<schemacop>.freeze, ["~> 1"])
56
+ s.add_dependency(%q<schemacop>.freeze, [">= 2.0"])
57
57
  end
58
58
  end
@@ -6,5 +6,6 @@ require 'schemacop'
6
6
  require 'inquery/exceptions'
7
7
  require 'inquery/mixins/schema_validation'
8
8
  require 'inquery/mixins/relation_validation'
9
+ require 'inquery/mixins/raw_sql_utils'
9
10
  require 'inquery/query'
10
11
  require 'inquery/query/chainable'
@@ -0,0 +1,23 @@
1
+ module Inquery
2
+ module Mixins
3
+ module RawSqlUtils
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Sanitizes the SQL and substitutes in the supplied variables. Relies on
8
+ # `sanitize_sql_array` from ActiveRecord.
9
+ def san(sql, *variables)
10
+ ActiveRecord::Base.send(:sanitize_sql_array, [sql, *variables])
11
+ end
12
+
13
+ # Executes the sql on the connection provided by calling `connection`,
14
+ # which means that the method needs to be defined where this mixin is
15
+ # included. The sql passed in should be sanitized.
16
+ # Returns an instance of `ActiveRecord::Result`.
17
+ def exec_query(sql)
18
+ connection.exec_query(sql, self.class.to_s)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -3,14 +3,21 @@ module Inquery
3
3
  module RelationValidation
4
4
  extend ActiveSupport::Concern
5
5
 
6
- OPTIONS_SCHEMA = {
7
- hash: {
8
- class: { type: String, null: true, required: false },
9
- fields: { type: :integer, null: true, required: false },
10
- default_select: { type: :symbol, null: true, required: false },
11
- default: { type: [Proc, FalseClass], null: true, required: false }
12
- }
13
- }
6
+ if defined?(Schemacop::V2)
7
+ OPTIONS_SCHEMA = Schemacop::Node.create :object do
8
+ str? :class
9
+ int? :fields
10
+ sym? :default_select
11
+ rby? :default, [Proc, FalseClass]
12
+ end
13
+ else
14
+ OPTIONS_SCHEMA = Schemacop::Schema.new do
15
+ opt :class, :string
16
+ opt :fields, :integer
17
+ opt :default_select, :symbol
18
+ opt :default, :object, classes: [Proc, FalseClass]
19
+ end
20
+ end
14
21
 
15
22
  DEFAULT_OPTIONS = {
16
23
  # Allows to restrict the class (attribute `klass`) of the relation. Use
@@ -46,7 +53,7 @@ module Inquery
46
53
  # Allows to configure the parameters of the relation this query operates
47
54
  # on. See {OPTIONS_SCHEMA} for documentation of the options hash.
48
55
  def relation(options = {})
49
- Schemacop.validate!(OPTIONS_SCHEMA, options)
56
+ OPTIONS_SCHEMA.validate!(options)
50
57
  self._relation_options = options
51
58
  end
52
59
  end
@@ -9,14 +9,11 @@ module Inquery
9
9
  end
10
10
 
11
11
  module ClassMethods
12
- def schema(schema)
13
- fail 'Schema must be a hash.' unless schema.is_a?(Hash)
14
-
15
- unless schema[:type]
16
- schema = {
17
- type: :hash,
18
- hash: schema
19
- }
12
+ def schema(*args, &block)
13
+ if defined?(Schemacop::V2)
14
+ schema = Schemacop::V2::Schema.new(*args, &block)
15
+ else
16
+ schema = Schemacop::Schema.new(*args, &block)
20
17
  end
21
18
 
22
19
  self._schema = schema
@@ -1,6 +1,7 @@
1
1
  module Inquery
2
2
  class Query
3
3
  include Mixins::SchemaValidation
4
+ include Mixins::RawSqlUtils
4
5
 
5
6
  attr_reader :params
6
7
 
@@ -21,8 +22,8 @@ module Inquery
21
22
  def initialize(params = {})
22
23
  @params = params
23
24
 
24
- if self.class._schema
25
- Schemacop.validate!(self.class._schema, @params)
25
+ if _schema
26
+ @params = _schema.validate!(@params)
26
27
  end
27
28
  end
28
29
 
@@ -46,5 +47,11 @@ module Inquery
46
47
  def osparams
47
48
  @osparams ||= OpenStruct.new(params)
48
49
  end
50
+
51
+ # Provides a connection to the database. May be overridden if a different
52
+ # connection is desired. Defaults to `ActiveRecord::Base.connection`.
53
+ def connection
54
+ ActiveRecord::Base.connection
55
+ end
49
56
  end
50
57
  end
@@ -19,6 +19,11 @@ module Inquery
19
19
  super(params)
20
20
  end
21
21
 
22
+ # Override the connection method to (re-)use the connection of the relation
23
+ def connection
24
+ @relation.connection
25
+ end
26
+
22
27
  private
23
28
 
24
29
  def parse_init_args(*args)
@@ -5,7 +5,7 @@ require 'queries/group/filter_with_color'
5
5
 
6
6
  module Inquery
7
7
  class Query
8
- class ChainableTest < Minitest::Unit::TestCase
8
+ class ChainableTest < Minitest::Test
9
9
  include TestHelper
10
10
 
11
11
  def setup
@@ -4,7 +4,7 @@ require 'queries/user/fetch_in_group'
4
4
  require 'queries/group/fetch_as_json'
5
5
 
6
6
  module Inquery
7
- class QueryTest < Minitest::Unit::TestCase
7
+ class QueryTest < Minitest::Test
8
8
  include TestHelper
9
9
 
10
10
  def setup
@@ -29,7 +29,7 @@ module Inquery
29
29
  end
30
30
 
31
31
  def test_fetch_users_in_group_with_invalid_schema
32
- assert_raises Schemacop::Exceptions::Validation do
32
+ assert_raises Schemacop::Exceptions::ValidationError do
33
33
  Queries::User::FetchInGroup.run
34
34
  end
35
35
  end
@@ -2,7 +2,9 @@ module Queries
2
2
  module Group
3
3
  class FilterWithColor < Inquery::Query::Chainable
4
4
  relation class: 'Group'
5
- schema color: :string
5
+ schema do
6
+ req :color, :string
7
+ end
6
8
 
7
9
  def call
8
10
  relation.where(color: osparams.color)
@@ -1,9 +1,9 @@
1
1
  module Queries
2
2
  module User
3
3
  class FetchInGroup < Inquery::Query
4
- schema(
5
- group_id: :integer
6
- )
4
+ schema do
5
+ req :group_id, :integer
6
+ end
7
7
 
8
8
  def call
9
9
  ::Group.find(osparams.group_id).users
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-16 00:00:00.000000000 Z
11
+ date: 2020-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -154,18 +154,18 @@ dependencies:
154
154
  name: schemacop
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '1'
159
+ version: '2.0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
- version: '1'
167
- description:
168
- email:
166
+ version: '2.0'
167
+ description:
168
+ email:
169
169
  executables: []
170
170
  extensions: []
171
171
  extra_rdoc_files: []
@@ -175,6 +175,7 @@ files:
175
175
  - ".rubocop.yml"
176
176
  - ".travis.yml"
177
177
  - ".yardopts"
178
+ - CHANGELOG.md
178
179
  - Gemfile
179
180
  - LICENSE
180
181
  - README.md
@@ -187,6 +188,7 @@ files:
187
188
  - doc/Inquery/Exceptions/InvalidRelation.html
188
189
  - doc/Inquery/Exceptions/UnknownCallSignature.html
189
190
  - doc/Inquery/Mixins.html
191
+ - doc/Inquery/Mixins/RawSqlUtils.html
190
192
  - doc/Inquery/Mixins/RelationValidation.html
191
193
  - doc/Inquery/Mixins/RelationValidation/ClassMethods.html
192
194
  - doc/Inquery/Mixins/SchemaValidation.html
@@ -210,6 +212,7 @@ files:
210
212
  - inquery.gemspec
211
213
  - lib/inquery.rb
212
214
  - lib/inquery/exceptions.rb
215
+ - lib/inquery/mixins/raw_sql_utils.rb
213
216
  - lib/inquery/mixins/relation_validation.rb
214
217
  - lib/inquery/mixins/schema_validation.rb
215
218
  - lib/inquery/query.rb
@@ -226,10 +229,10 @@ files:
226
229
  - test/queries/user/fetch_in_group.rb
227
230
  - test/queries/user/fetch_in_group_rel.rb
228
231
  - test/test_helper.rb
229
- homepage:
232
+ homepage:
230
233
  licenses: []
231
234
  metadata: {}
232
- post_install_message:
235
+ post_install_message:
233
236
  rdoc_options: []
234
237
  require_paths:
235
238
  - lib
@@ -244,9 +247,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
247
  - !ruby/object:Gem::Version
245
248
  version: '0'
246
249
  requirements: []
247
- rubyforge_project:
248
- rubygems_version: 2.6.8
249
- signing_key:
250
+ rubygems_version: 3.1.4
251
+ signing_key:
250
252
  specification_version: 4
251
253
  summary: A skeleton that allows extracting queries into atomic, reusable classes.
252
254
  test_files: