inquery 1.0.2 → 1.0.7

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.
@@ -4,9 +4,9 @@
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
5
  <meta charset="utf-8" />
6
6
 
7
- <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
8
8
 
9
- <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
10
10
 
11
11
 
12
12
 
@@ -2,9 +2,9 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>Documentation by YARD 0.9.20</title>
5
+ <title>Documentation by YARD 0.9.25</title>
6
6
  </head>
7
- <script type="text/javascript" charset="utf-8">
7
+ <script type="text/javascript">
8
8
  var match = unescape(window.location.hash).match(/^#!(.+)/);
9
9
  var name = match ? match[1] : 'index.html';
10
10
  name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
@@ -6,15 +6,15 @@
6
6
  <title>
7
7
  File: README
8
8
 
9
- &mdash; Documentation by YARD 0.9.20
9
+ &mdash; Documentation by YARD 0.9.25
10
10
 
11
11
  </title>
12
12
 
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
14
 
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
16
 
17
- <script type="text/javascript" charset="utf-8">
17
+ <script type="text/javascript">
18
18
  pathId = "README";
19
19
  relpath = '';
20
20
  </script>
@@ -60,11 +60,11 @@
60
60
  <div id="content"><div id='filecontents'><p><a href="https://travis-ci.org/sitrox/inquery"><img src="https://travis-ci.org/sitrox/inquery.svg?branch=master" alt="Build Status"></a>
61
61
  <a href="https://badge.fury.io/rb/inquery"><img src="https://badge.fury.io/rb/inquery.svg" alt="Gem Version"></a></p>
62
62
 
63
- <h1>Inquery</h1>
63
+ <h1 id="inquery">Inquery</h1>
64
64
 
65
65
  <p>A skeleton that allows extracting queries into atomic, reusable classes.</p>
66
66
 
67
- <h2>Installation</h2>
67
+ <h2 id="installation">Installation</h2>
68
68
 
69
69
  <p>To install the <strong>Inquery</strong> gem:</p>
70
70
 
@@ -77,7 +77,7 @@ to your <code>Gemfile</code>:</p>
77
77
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>inquery</span><span class='tstring_end'>&#39;</span></span>
78
78
  </code></pre>
79
79
 
80
- <h2>Basic usage</h2>
80
+ <h2 id="basic-usage">Basic usage</h2>
81
81
 
82
82
  <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>FetchUsersWithACar</span> <span class='op'>&lt;</span> <span class='const'><span class='object_link'><a href="Inquery.html" title="Inquery (module)">Inquery</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Query</a></span></span>
83
83
  <span class='id identifier rubyid_schema'>schema</span> <span class='kw'>do</span>
@@ -97,7 +97,7 @@ to your <code>Gemfile</code>:</p>
97
97
  and <span class='object_link'><a href="Inquery/Query/Chainable.html" title="Inquery::Query::Chainable (class)">Inquery::Query::Chainable</a></span>. See the following sections for detailed
98
98
  explanations.</p>
99
99
 
100
- <h2>Basic queries</h2>
100
+ <h2 id="basic-queries">Basic queries</h2>
101
101
 
102
102
  <p>Basic queries inherit from <span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Inquery::Query</a></span>. They receive an optional set of
103
103
  parameters and commonly return a relation / AR result. An optional <code>process</code>
@@ -141,7 +141,7 @@ the <code>call</code> and optionally the <code>process</code> method:</p>
141
141
  <p>Note that it&#39;s perfectly fine for some queries to return <code>nil</code>, i.e. if they&#39;re
142
142
  writing queries that don&#39;t fetch any results.</p>
143
143
 
144
- <h3>Using raw SQL</h3>
144
+ <h3 id="using-raw-sql">Using raw SQL</h3>
145
145
 
146
146
  <p>In some cases it may make sense to push down all computation to the database and
147
147
  only construct an SQL query for this purpose. To facilitate this,
@@ -171,7 +171,7 @@ only construct an SQL query for this purpose. To facilitate this,
171
171
  <span class='kw'>end</span>
172
172
  </code></pre>
173
173
 
174
- <h2>Chainable queries</h2>
174
+ <h2 id="chainable-queries">Chainable queries</h2>
175
175
 
176
176
  <p>Chainable queries are queries that input and output an Active Record relation.
177
177
  You can access the given relation using the method <code>relation</code>:</p>
@@ -187,7 +187,7 @@ You can access the given relation using the method <code>relation</code>:</p>
187
187
  could pass a relation of <code>Group</code>s and receive back a relation of corresponding
188
188
  <code>User</code>s).</p>
189
189
 
190
- <h3>Relation validation</h3>
190
+ <h3 id="relation-validation">Relation validation</h3>
191
191
 
192
192
  <p>Chainable queries allow you to further specify and validate the relation it
193
193
  receives. This is done using the static <code>relation</code> method:</p>
@@ -229,7 +229,7 @@ automatically select the given field. This option defaults to <code>:id</code>.
229
229
  <code>nil</code> to disable this behavior.</p></li>
230
230
  </ul>
231
231
 
232
- <h3>Using query classes as regular scopes</h3>
232
+ <h3 id="using-query-classes-as-regular-scopes">Using query classes as regular scopes</h3>
233
233
 
234
234
  <p>Chainable queries can also be used as regular AR model scopes:</p>
235
235
 
@@ -255,7 +255,7 @@ but have the possibly complex query code hidden in a separate, reusable class.</
255
255
 
256
256
  <p>Note that when using classes as scopes, the <code>process</code> method will be ignored.</p>
257
257
 
258
- <h3>Using the given relation as subquery</h3>
258
+ <h3 id="using-the-given-relation-as-subquery">Using the given relation as subquery</h3>
259
259
 
260
260
  <p>In simple cases and all the examples above, we just extend the given relation
261
261
  and return it again. It is also possible however to just use the given relation
@@ -291,7 +291,7 @@ as a subquery and return a completely new relation:</p>
291
291
  </span><span class='const'>FetchUsersInGroup</span><span class='period'>.</span><span class='id identifier rubyid_run'>run</span><span class='lparen'>(</span><span class='const'>Group</span><span class='period'>.</span><span class='id identifier rubyid_where'>where</span><span class='lparen'>(</span><span class='label'>color:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>red</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
292
292
  </code></pre>
293
293
 
294
- <h2>Parameters</h2>
294
+ <h2 id="parameters">Parameters</h2>
295
295
 
296
296
  <p>Both query classes can be parameterized using a hash called <code>params</code>. It is
297
297
  recommended to specify and validate input parameters in every query. For this
@@ -328,14 +328,17 @@ access.</p>
328
328
  <span class='kw'>end</span>
329
329
  </code></pre>
330
330
 
331
- <h2>Rails integration</h2>
331
+ <p>Inquery supports both schemacop specification versions 2 and 3 using the methods
332
+ <code>schema</code> / <code>schema2</code> for version 2 and method <code>schema3</code> for version 3.</p>
333
+
334
+ <h2 id="rails-integration">Rails integration</h2>
332
335
 
333
336
  <p>While it is optional, Inquery has been written from the ground up to be
334
337
  perfectly integrated into any Rails application. It has proven to be a winning
335
338
  concept to extract all complex queries into separate classes that are
336
339
  independently executable and testable.</p>
337
340
 
338
- <h3>Directory structure</h3>
341
+ <h3 id="directory-structure">Directory structure</h3>
339
342
 
340
343
  <p>While not enforced, it is encouraged to use the following structure for storing
341
344
  your query classes:</p>
@@ -363,20 +366,20 @@ clear where to find the corresponding unit tests for each one of your
363
366
  query classes.</li>
364
367
  </ul>
365
368
 
366
- <h2>Contributors</h2>
369
+ <h2 id="contributors">Contributors</h2>
367
370
 
368
371
  <p>Thanks to Jeroen Weeink for his insights regarding using query classes as scopes
369
372
  in his <a href="http://craftingruby.com/posts/2015/06/29/query-objects-through-scopes.html">blog post</a>.</p>
370
373
 
371
- <h2>Copyright</h2>
374
+ <h2 id="copyright">Copyright</h2>
372
375
 
373
- <p>Copyright (c) 2019 Sitrox. See <code>LICENSE</code> for further details.</p>
376
+ <p>Copyright (c) 2020 Sitrox. See <code>LICENSE</code> for further details.</p>
374
377
  </div></div>
375
378
 
376
379
  <div id="footer">
377
- Generated on Wed Oct 9 16:20:53 2019 by
380
+ Generated on Wed Nov 25 14:05:19 2020 by
378
381
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
379
- 0.9.20 (ruby-2.6.2).
382
+ 0.9.25 (ruby-2.6.2).
380
383
  </div>
381
384
 
382
385
  </div>
@@ -171,6 +171,7 @@ function generateTOC() {
171
171
  var counter = 0;
172
172
  var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
173
173
  var i;
174
+ var curli;
174
175
  if ($('#filecontents h1').length > 1) tags.unshift('h1');
175
176
  for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
176
177
  var lastTag = parseInt(tags[0][1], 10);
@@ -190,15 +191,25 @@ function generateTOC() {
190
191
  }
191
192
  if (thisTag > lastTag) {
192
193
  for (i = 0; i < thisTag - lastTag; i++) {
193
- var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
194
+ if ( typeof(curli) == "undefined" ) {
195
+ curli = $('<li/>');
196
+ toc.append(curli);
197
+ }
198
+ toc = $('<ol/>');
199
+ curli.append(toc);
200
+ curli = undefined;
194
201
  }
195
202
  }
196
203
  if (thisTag < lastTag) {
197
- for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
204
+ for (i = 0; i < lastTag - thisTag; i++) {
205
+ toc = toc.parent();
206
+ toc = toc.parent();
207
+ }
198
208
  }
199
209
  var title = $(this).attr('toc-title');
200
210
  if (typeof(title) == "undefined") title = $(this).text();
201
- toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
211
+ curli =$('<li><a href="#' + this.id + '">' + title + '</a></li>');
212
+ toc.append(curli);
202
213
  lastTag = thisTag;
203
214
  });
204
215
  if (!show) return;
@@ -4,9 +4,9 @@
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
5
  <meta charset="utf-8" />
6
6
 
7
- <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
8
8
 
9
- <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
10
10
 
11
11
 
12
12
 
@@ -172,6 +172,22 @@
172
172
  </li>
173
173
 
174
174
 
175
+ <li class="odd ">
176
+ <div class="item">
177
+ <span class='object_link'><a href="Inquery/Mixins/SchemaValidation/ClassMethods.html#schema2-instance_method" title="Inquery::Mixins::SchemaValidation::ClassMethods#schema2 (method)">#schema2</a></span>
178
+ <small>Inquery::Mixins::SchemaValidation::ClassMethods</small>
179
+ </div>
180
+ </li>
181
+
182
+
183
+ <li class="even ">
184
+ <div class="item">
185
+ <span class='object_link'><a href="Inquery/Mixins/SchemaValidation/ClassMethods.html#schema3-instance_method" title="Inquery::Mixins::SchemaValidation::ClassMethods#schema3 (method)">#schema3</a></span>
186
+ <small>Inquery::Mixins::SchemaValidation::ClassMethods</small>
187
+ </div>
188
+ </li>
189
+
190
+
175
191
  <li class="odd ">
176
192
  <div class="item">
177
193
  <span class='object_link'><a href="Inquery/Mixins/RelationValidation.html#validate_relation!-instance_method" title="Inquery::Mixins::RelationValidation#validate_relation! (method)">#validate_relation!</a></span>
@@ -6,15 +6,15 @@
6
6
  <title>
7
7
  Top Level Namespace
8
8
 
9
- &mdash; Documentation by YARD 0.9.20
9
+ &mdash; Documentation by YARD 0.9.25
10
10
 
11
11
  </title>
12
12
 
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
14
 
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
16
 
17
- <script type="text/javascript" charset="utf-8">
17
+ <script type="text/javascript">
18
18
  pathId = "";
19
19
  relpath = '';
20
20
  </script>
@@ -100,9 +100,9 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Wed Oct 9 16:20:53 2019 by
103
+ Generated on Wed Nov 25 14:05:20 2020 by
104
104
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
- 0.9.20 (ruby-2.6.2).
105
+ 0.9.25 (ruby-2.6.2).
106
106
  </div>
107
107
 
108
108
  </div>
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: inquery 1.0.2 ruby lib
2
+ # stub: inquery 1.0.7 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "inquery".freeze
6
- s.version = "1.0.2"
6
+ s.version = "1.0.7"
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 = "2019-10-09"
11
+ s.date = "2020-11-25"
12
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
13
  s.rubygems_version = "3.0.3".freeze
14
14
  s.summary = "A skeleton that allows extracting queries into atomic, reusable classes.".freeze
@@ -28,7 +28,7 @@ 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, ["~> 2.0"])
31
+ s.add_runtime_dependency(%q<schemacop>.freeze, [">= 2.0"])
32
32
  else
33
33
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
34
34
  s.add_dependency(%q<rake>.freeze, [">= 0"])
@@ -40,7 +40,7 @@ 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, ["~> 2.0"])
43
+ s.add_dependency(%q<schemacop>.freeze, [">= 2.0"])
44
44
  end
45
45
  else
46
46
  s.add_dependency(%q<bundler>.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, ["~> 2.0"])
56
+ s.add_dependency(%q<schemacop>.freeze, [">= 2.0"])
57
57
  end
58
58
  end
@@ -3,11 +3,20 @@ module Inquery
3
3
  module RelationValidation
4
4
  extend ActiveSupport::Concern
5
5
 
6
- OPTIONS_SCHEMA = Schemacop::Schema.new do
7
- opt :class, :string
8
- opt :fields, :integer
9
- opt :default_select, :symbol
10
- opt :default, :object, classes: [Proc, FalseClass]
6
+ if defined?(Schemacop::Schema3)
7
+ OPTIONS_SCHEMA = Schemacop::Schema3.new(:hash) 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
11
20
  end
12
21
 
13
22
  DEFAULT_OPTIONS = {
@@ -9,10 +9,21 @@ module Inquery
9
9
  end
10
10
 
11
11
  module ClassMethods
12
- def schema(*args, &block)
13
- schema = Schemacop::Schema.new(*args, &block)
12
+ def schema2(*args, &block)
13
+ self._schema = Schemacop::Schema.new(*args, &block)
14
+ end
14
15
 
15
- self._schema = schema
16
+ def schema3(reference = nil, **options, &block)
17
+ if reference
18
+ self._schema = Schemacop::Schema3.new(:reference, options.merge(path: reference))
19
+ else
20
+ self._schema = Schemacop::Schema3.new(:hash, **options, &block)
21
+ end
22
+ end
23
+
24
+ # @see schema2
25
+ def schema(*args, &block)
26
+ schema2(*args, &block)
16
27
  end
17
28
  end
18
29
  end
@@ -22,8 +22,8 @@ module Inquery
22
22
  def initialize(params = {})
23
23
  @params = params
24
24
 
25
- if self.class._schema
26
- self.class._schema.validate!(@params)
25
+ if _schema
26
+ @params = _schema.validate!(@params)
27
27
  end
28
28
  end
29
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-09 00:00:00.000000000 Z
11
+ date: 2020-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -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
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
166
  version: '2.0'
167
- description:
168
- email:
167
+ description:
168
+ email:
169
169
  executables: []
170
170
  extensions: []
171
171
  extra_rdoc_files: []
@@ -229,10 +229,10 @@ files:
229
229
  - test/queries/user/fetch_in_group.rb
230
230
  - test/queries/user/fetch_in_group_rel.rb
231
231
  - test/test_helper.rb
232
- homepage:
232
+ homepage:
233
233
  licenses: []
234
234
  metadata: {}
235
- post_install_message:
235
+ post_install_message:
236
236
  rdoc_options: []
237
237
  require_paths:
238
238
  - lib
@@ -247,8 +247,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
247
  - !ruby/object:Gem::Version
248
248
  version: '0'
249
249
  requirements: []
250
- rubygems_version: 3.0.3
251
- signing_key:
250
+ rubygems_version: 3.1.4
251
+ signing_key:
252
252
  specification_version: 4
253
253
  summary: A skeleton that allows extracting queries into atomic, reusable classes.
254
254
  test_files: