inquery 1.0.1 → 1.0.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 +5 -5
- data/CHANGELOG.md +17 -0
- data/LICENSE +2 -2
- data/README.md +32 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/Inquery.html +4 -4
- data/doc/Inquery/Exceptions.html +3 -3
- data/doc/Inquery/Exceptions/Base.html +3 -3
- data/doc/Inquery/Exceptions/InvalidRelation.html +3 -3
- data/doc/Inquery/Exceptions/UnknownCallSignature.html +3 -3
- data/doc/Inquery/Mixins.html +6 -6
- data/doc/Inquery/Mixins/RawSqlUtils.html +116 -0
- data/doc/Inquery/Mixins/RelationValidation.html +23 -17
- data/doc/Inquery/Mixins/RelationValidation/ClassMethods.html +3 -3
- data/doc/Inquery/Mixins/SchemaValidation.html +3 -3
- data/doc/Inquery/Mixins/SchemaValidation/ClassMethods.html +3 -3
- data/doc/Inquery/Query.html +99 -28
- data/doc/Inquery/Query/Chainable.html +73 -3
- data/doc/_index.html +15 -8
- data/doc/class_list.html +1 -1
- data/doc/css/style.css +10 -6
- data/doc/file.README.html +35 -6
- data/doc/frames.html +1 -1
- data/doc/index.html +35 -6
- data/doc/js/app.js +55 -0
- data/doc/method_list.html +24 -8
- data/doc/top-level-namespace.html +3 -3
- data/inquery.gemspec +8 -8
- data/lib/inquery.rb +1 -0
- data/lib/inquery/mixins/raw_sql_utils.rb +23 -0
- data/lib/inquery/query.rb +7 -0
- data/lib/inquery/query/chainable.rb +5 -0
- metadata +10 -8
data/doc/class_list.html
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
<ul id="full_list" class="class">
|
45
45
|
<li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
|
46
|
-
<li id='object_Inquery' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Inquery.html" title="Inquery (module)">Inquery</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Inquery::Exceptions' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Exceptions.html" title="Inquery::Exceptions (module)">Exceptions</a></span><small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Exceptions::Base' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/Base.html" title="Inquery::Exceptions::Base (class)">Base</a></span> < StandardError<small class='search_info'>Inquery::Exceptions</small></div></li><li id='object_Inquery::Exceptions::InvalidRelation' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/InvalidRelation.html" title="Inquery::Exceptions::InvalidRelation (class)">InvalidRelation</a></span> < Base<small class='search_info'>Inquery::Exceptions</small></div></li><li id='object_Inquery::Exceptions::UnknownCallSignature' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/UnknownCallSignature.html" title="Inquery::Exceptions::UnknownCallSignature (class)">UnknownCallSignature</a></span> < Base<small class='search_info'>Inquery::Exceptions</small></div></li></ul></li><li id='object_Inquery::Mixins' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins.html" title="Inquery::Mixins (module)">Mixins</a></span><small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Mixins::RelationValidation' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins/RelationValidation.html" title="Inquery::Mixins::RelationValidation (module)">RelationValidation</a></span><small class='search_info'>Inquery::Mixins</small></div><ul><li id='object_Inquery::Mixins::RelationValidation::ClassMethods' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Inquery/Mixins/RelationValidation/ClassMethods.html" title="Inquery::Mixins::RelationValidation::ClassMethods (module)">ClassMethods</a></span><small class='search_info'>Inquery::Mixins::RelationValidation</small></div></li></ul></li><li id='object_Inquery::Mixins::SchemaValidation' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins/SchemaValidation.html" title="Inquery::Mixins::SchemaValidation (module)">SchemaValidation</a></span><small class='search_info'>Inquery::Mixins</small></div><ul><li id='object_Inquery::Mixins::SchemaValidation::ClassMethods' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Inquery/Mixins/SchemaValidation/ClassMethods.html" title="Inquery::Mixins::SchemaValidation::ClassMethods (module)">ClassMethods</a></span><small class='search_info'>Inquery::Mixins::SchemaValidation</small></div></li></ul></li></ul></li><li id='object_Inquery::Query' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Query</a></span> < Object<small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Query::Chainable' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Query/Chainable.html" title="Inquery::Query::Chainable (class)">Chainable</a></span> < Query<small class='search_info'>Inquery::Query</small></div></li></ul></li></ul></li>
|
46
|
+
<li id='object_Inquery' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Inquery.html" title="Inquery (module)">Inquery</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Inquery::Exceptions' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Exceptions.html" title="Inquery::Exceptions (module)">Exceptions</a></span><small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Exceptions::Base' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/Base.html" title="Inquery::Exceptions::Base (class)">Base</a></span> < StandardError<small class='search_info'>Inquery::Exceptions</small></div></li><li id='object_Inquery::Exceptions::InvalidRelation' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/InvalidRelation.html" title="Inquery::Exceptions::InvalidRelation (class)">InvalidRelation</a></span> < Base<small class='search_info'>Inquery::Exceptions</small></div></li><li id='object_Inquery::Exceptions::UnknownCallSignature' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Exceptions/UnknownCallSignature.html" title="Inquery::Exceptions::UnknownCallSignature (class)">UnknownCallSignature</a></span> < Base<small class='search_info'>Inquery::Exceptions</small></div></li></ul></li><li id='object_Inquery::Mixins' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins.html" title="Inquery::Mixins (module)">Mixins</a></span><small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Mixins::RawSqlUtils' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Mixins/RawSqlUtils.html" title="Inquery::Mixins::RawSqlUtils (module)">RawSqlUtils</a></span><small class='search_info'>Inquery::Mixins</small></div></li><li id='object_Inquery::Mixins::RelationValidation' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins/RelationValidation.html" title="Inquery::Mixins::RelationValidation (module)">RelationValidation</a></span><small class='search_info'>Inquery::Mixins</small></div><ul><li id='object_Inquery::Mixins::RelationValidation::ClassMethods' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Inquery/Mixins/RelationValidation/ClassMethods.html" title="Inquery::Mixins::RelationValidation::ClassMethods (module)">ClassMethods</a></span><small class='search_info'>Inquery::Mixins::RelationValidation</small></div></li></ul></li><li id='object_Inquery::Mixins::SchemaValidation' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Mixins/SchemaValidation.html" title="Inquery::Mixins::SchemaValidation (module)">SchemaValidation</a></span><small class='search_info'>Inquery::Mixins</small></div><ul><li id='object_Inquery::Mixins::SchemaValidation::ClassMethods' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Inquery/Mixins/SchemaValidation/ClassMethods.html" title="Inquery::Mixins::SchemaValidation::ClassMethods (module)">ClassMethods</a></span><small class='search_info'>Inquery::Mixins::SchemaValidation</small></div></li></ul></li></ul></li><li id='object_Inquery::Query' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Query</a></span> < Object<small class='search_info'>Inquery</small></div><ul><li id='object_Inquery::Query::Chainable' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Inquery/Query/Chainable.html" title="Inquery::Query::Chainable (class)">Chainable</a></span> < Query<small class='search_info'>Inquery::Query</small></div></li></ul></li></ul></li>
|
47
47
|
|
48
48
|
</ul>
|
49
49
|
</div>
|
data/doc/css/style.css
CHANGED
@@ -245,6 +245,7 @@ ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
|
|
245
245
|
|
246
246
|
dl.constants { margin-left: 10px; }
|
247
247
|
dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
|
248
|
+
dl.constants.compact dt { display: inline-block; font-weight: normal }
|
248
249
|
dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
|
249
250
|
dl.constants .docstring .note:first-child { margin-top: 5px; }
|
250
251
|
|
@@ -326,13 +327,9 @@ ul.summary a, ul.summary a:visited {
|
|
326
327
|
text-decoration: none; font-size: 1.1em;
|
327
328
|
}
|
328
329
|
ul.summary li { margin-bottom: 5px; }
|
329
|
-
.
|
330
|
-
padding: 4px 8px;
|
331
|
-
background: #f8f8f8;
|
332
|
-
border: 1px solid #f0f0f0;
|
333
|
-
border-radius: 5px;
|
334
|
-
}
|
330
|
+
.summary_signature { padding: 4px 8px; background: #f8f8f8; border: 1px solid #f0f0f0; border-radius: 5px; }
|
335
331
|
.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; }
|
332
|
+
.summary_signature.deprecated { background: #ffe5e5; border-color: #e9dada; }
|
336
333
|
ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;}
|
337
334
|
ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
|
338
335
|
#content .summary_signature:hover a,
|
@@ -484,6 +481,13 @@ pre.code .rubyid_backref,
|
|
484
481
|
pre.code .rubyid_nth_ref { color: #6D79DE; }
|
485
482
|
pre.code .regexp, .dregexp { color: #036A07; }
|
486
483
|
pre.code a { border-bottom: 1px dotted #bbf; }
|
484
|
+
/* inline code */
|
485
|
+
*:not(pre) > code {
|
486
|
+
padding: 1px 3px 1px 3px;
|
487
|
+
border: 1px solid #E1E1E8;
|
488
|
+
background: #F7F7F9;
|
489
|
+
border-radius: 4px;
|
490
|
+
}
|
487
491
|
|
488
492
|
/* Color fix for links */
|
489
493
|
#content .summary_desc pre.code .id > .object_link a, /* identifier */
|
data/doc/file.README.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
File: README
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.20
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -141,6 +141,36 @@ the <code>call</code> and optionally the <code>process</code> method:</p>
|
|
141
141
|
<p>Note that it's perfectly fine for some queries to return <code>nil</code>, i.e. if they're
|
142
142
|
writing queries that don't fetch any results.</p>
|
143
143
|
|
144
|
+
<h3>Using raw SQL</h3>
|
145
|
+
|
146
|
+
<p>In some cases it may make sense to push down all computation to the database and
|
147
|
+
only construct an SQL query for this purpose. To facilitate this,
|
148
|
+
<span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Inquery::Query</a></span> provides sanitization and query execution methods:</p>
|
149
|
+
|
150
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'># Note: There are better ways of achieving the same result, this is an example
|
151
|
+
</span><span class='comment'># to demonstrate the methods.
|
152
|
+
</span><span class='kw'>class</span> <span class='const'>CheckIfSold</span> <span class='op'><</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>
|
153
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_call'>call</span>
|
154
|
+
<span class='id identifier rubyid_parts'>parts</span> <span class='op'>=</span> <span class='lbracket'>[</span>
|
155
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT car_id FROM dealership_sales</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
156
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT car_id FROM dealership_leasings</span><span class='tstring_end'>'</span></span>
|
157
|
+
<span class='rbracket'>]</span>
|
158
|
+
|
159
|
+
<span class='id identifier rubyid_sql'>sql</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT ? IN (</span><span class='tstring_end'>'</span></span> <span class='op'>+</span> <span class='id identifier rubyid_parts'>parts</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> UNION </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>)</span><span class='tstring_end'>'</span></span>
|
160
|
+
|
161
|
+
<span class='comment'># The 'san' method takes n+1 arguments: The SQL string and n parameters
|
162
|
+
</span> <span class='id identifier rubyid_sanitized_sql'>sanitized_sql</span> <span class='op'>=</span> <span class='id identifier rubyid_san'>san</span><span class='lparen'>(</span><span class='id identifier rubyid_sql'>sql</span><span class='comma'>,</span> <span class='id identifier rubyid_osparams'>osparams</span><span class='period'>.</span><span class='id identifier rubyid_car_id'>car_id</span><span class='rparen'>)</span>
|
163
|
+
|
164
|
+
<span class='comment'># Returns instance of ActiveRecord::Result
|
165
|
+
</span> <span class='kw'>return</span> <span class='id identifier rubyid_exec_query'>exec_query</span><span class='lparen'>(</span><span class='id identifier rubyid_sanitized_sql'>sanitized_sql</span><span class='rparen'>)</span>
|
166
|
+
<span class='kw'>end</span>
|
167
|
+
|
168
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_process'>process</span><span class='lparen'>(</span><span class='id identifier rubyid_results'>results</span><span class='rparen'>)</span>
|
169
|
+
<span class='id identifier rubyid_results'>results</span><span class='period'>.</span><span class='id identifier rubyid_rows'>rows</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
170
|
+
<span class='kw'>end</span>
|
171
|
+
<span class='kw'>end</span>
|
172
|
+
</code></pre>
|
173
|
+
|
144
174
|
<h2>Chainable queries</h2>
|
145
175
|
|
146
176
|
<p>Chainable queries are queries that input and output an Active Record relation.
|
@@ -336,18 +366,17 @@ query classes.</li>
|
|
336
366
|
<h2>Contributors</h2>
|
337
367
|
|
338
368
|
<p>Thanks to Jeroen Weeink for his insights regarding using query classes as scopes
|
339
|
-
in his <a href="http://craftingruby.com/posts/2015/06/29/query-objects-through-scopes.html">blog post</a
|
340
|
-
And special thanks to <a href="http://www.subgit.com/">SubGit</a> for their great open source licensing.</p>
|
369
|
+
in his <a href="http://craftingruby.com/posts/2015/06/29/query-objects-through-scopes.html">blog post</a>.</p>
|
341
370
|
|
342
371
|
<h2>Copyright</h2>
|
343
372
|
|
344
|
-
<p>Copyright (c)
|
373
|
+
<p>Copyright (c) 2019 Sitrox. See <code>LICENSE</code> for further details.</p>
|
345
374
|
</div></div>
|
346
375
|
|
347
376
|
<div id="footer">
|
348
|
-
Generated on Wed
|
377
|
+
Generated on Wed Oct 9 16:20:53 2019 by
|
349
378
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
350
|
-
0.9.
|
379
|
+
0.9.20 (ruby-2.6.2).
|
351
380
|
</div>
|
352
381
|
|
353
382
|
</div>
|
data/doc/frames.html
CHANGED
data/doc/index.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
File: README
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.20
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -141,6 +141,36 @@ the <code>call</code> and optionally the <code>process</code> method:</p>
|
|
141
141
|
<p>Note that it's perfectly fine for some queries to return <code>nil</code>, i.e. if they're
|
142
142
|
writing queries that don't fetch any results.</p>
|
143
143
|
|
144
|
+
<h3>Using raw SQL</h3>
|
145
|
+
|
146
|
+
<p>In some cases it may make sense to push down all computation to the database and
|
147
|
+
only construct an SQL query for this purpose. To facilitate this,
|
148
|
+
<span class='object_link'><a href="Inquery/Query.html" title="Inquery::Query (class)">Inquery::Query</a></span> provides sanitization and query execution methods:</p>
|
149
|
+
|
150
|
+
<pre class="code ruby"><code class="ruby"><span class='comment'># Note: There are better ways of achieving the same result, this is an example
|
151
|
+
</span><span class='comment'># to demonstrate the methods.
|
152
|
+
</span><span class='kw'>class</span> <span class='const'>CheckIfSold</span> <span class='op'><</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>
|
153
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_call'>call</span>
|
154
|
+
<span class='id identifier rubyid_parts'>parts</span> <span class='op'>=</span> <span class='lbracket'>[</span>
|
155
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT car_id FROM dealership_sales</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
156
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT car_id FROM dealership_leasings</span><span class='tstring_end'>'</span></span>
|
157
|
+
<span class='rbracket'>]</span>
|
158
|
+
|
159
|
+
<span class='id identifier rubyid_sql'>sql</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>SELECT ? IN (</span><span class='tstring_end'>'</span></span> <span class='op'>+</span> <span class='id identifier rubyid_parts'>parts</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'> UNION </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>)</span><span class='tstring_end'>'</span></span>
|
160
|
+
|
161
|
+
<span class='comment'># The 'san' method takes n+1 arguments: The SQL string and n parameters
|
162
|
+
</span> <span class='id identifier rubyid_sanitized_sql'>sanitized_sql</span> <span class='op'>=</span> <span class='id identifier rubyid_san'>san</span><span class='lparen'>(</span><span class='id identifier rubyid_sql'>sql</span><span class='comma'>,</span> <span class='id identifier rubyid_osparams'>osparams</span><span class='period'>.</span><span class='id identifier rubyid_car_id'>car_id</span><span class='rparen'>)</span>
|
163
|
+
|
164
|
+
<span class='comment'># Returns instance of ActiveRecord::Result
|
165
|
+
</span> <span class='kw'>return</span> <span class='id identifier rubyid_exec_query'>exec_query</span><span class='lparen'>(</span><span class='id identifier rubyid_sanitized_sql'>sanitized_sql</span><span class='rparen'>)</span>
|
166
|
+
<span class='kw'>end</span>
|
167
|
+
|
168
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_process'>process</span><span class='lparen'>(</span><span class='id identifier rubyid_results'>results</span><span class='rparen'>)</span>
|
169
|
+
<span class='id identifier rubyid_results'>results</span><span class='period'>.</span><span class='id identifier rubyid_rows'>rows</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
170
|
+
<span class='kw'>end</span>
|
171
|
+
<span class='kw'>end</span>
|
172
|
+
</code></pre>
|
173
|
+
|
144
174
|
<h2>Chainable queries</h2>
|
145
175
|
|
146
176
|
<p>Chainable queries are queries that input and output an Active Record relation.
|
@@ -336,18 +366,17 @@ query classes.</li>
|
|
336
366
|
<h2>Contributors</h2>
|
337
367
|
|
338
368
|
<p>Thanks to Jeroen Weeink for his insights regarding using query classes as scopes
|
339
|
-
in his <a href="http://craftingruby.com/posts/2015/06/29/query-objects-through-scopes.html">blog post</a
|
340
|
-
And special thanks to <a href="http://www.subgit.com/">SubGit</a> for their great open source licensing.</p>
|
369
|
+
in his <a href="http://craftingruby.com/posts/2015/06/29/query-objects-through-scopes.html">blog post</a>.</p>
|
341
370
|
|
342
371
|
<h2>Copyright</h2>
|
343
372
|
|
344
|
-
<p>Copyright (c)
|
373
|
+
<p>Copyright (c) 2019 Sitrox. See <code>LICENSE</code> for further details.</p>
|
345
374
|
</div></div>
|
346
375
|
|
347
376
|
<div id="footer">
|
348
|
-
Generated on Wed
|
377
|
+
Generated on Wed Oct 9 16:20:53 2019 by
|
349
378
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
350
|
-
0.9.
|
379
|
+
0.9.20 (ruby-2.6.2).
|
351
380
|
</div>
|
352
381
|
|
353
382
|
</div>
|
data/doc/js/app.js
CHANGED
@@ -120,6 +120,49 @@ function summaryToggle() {
|
|
120
120
|
} else { localStorage.summaryCollapsed = "expand"; }
|
121
121
|
}
|
122
122
|
|
123
|
+
function constantSummaryToggle() {
|
124
|
+
$('.constants_summary_toggle').click(function(e) {
|
125
|
+
e.preventDefault();
|
126
|
+
localStorage.summaryCollapsed = $(this).text();
|
127
|
+
$('.constants_summary_toggle').each(function() {
|
128
|
+
$(this).text($(this).text() == "collapse" ? "expand" : "collapse");
|
129
|
+
var next = $(this).parent().parent().nextAll('dl.constants').first();
|
130
|
+
if (next.hasClass('compact')) {
|
131
|
+
next.toggle();
|
132
|
+
next.nextAll('dl.constants').first().toggle();
|
133
|
+
}
|
134
|
+
else if (next.hasClass('constants')) {
|
135
|
+
var list = $('<dl class="constants compact" />');
|
136
|
+
list.html(next.html());
|
137
|
+
list.find('dt').each(function() {
|
138
|
+
$(this).addClass('summary_signature');
|
139
|
+
$(this).text( $(this).text().split('=')[0]);
|
140
|
+
if ($(this).has(".deprecated").length) {
|
141
|
+
$(this).addClass('deprecated');
|
142
|
+
};
|
143
|
+
});
|
144
|
+
// Add the value of the constant as "Tooltip" to the summary object
|
145
|
+
list.find('pre.code').each(function() {
|
146
|
+
console.log($(this).parent());
|
147
|
+
var dt_element = $(this).parent().prev();
|
148
|
+
var tooltip = $(this).text();
|
149
|
+
if (dt_element.hasClass("deprecated")) {
|
150
|
+
tooltip = 'Deprecated. ' + tooltip;
|
151
|
+
};
|
152
|
+
dt_element.attr('title', tooltip);
|
153
|
+
});
|
154
|
+
list.find('.docstring, .tags, dd').remove();
|
155
|
+
next.before(list);
|
156
|
+
next.toggle();
|
157
|
+
}
|
158
|
+
});
|
159
|
+
return false;
|
160
|
+
});
|
161
|
+
if (localStorage.summaryCollapsed == "collapse") {
|
162
|
+
$('.constants_summary_toggle').first().click();
|
163
|
+
} else { localStorage.summaryCollapsed = "expand"; }
|
164
|
+
}
|
165
|
+
|
123
166
|
function generateTOC() {
|
124
167
|
if ($('#filecontents').length === 0) return;
|
125
168
|
var _toc = $('<ol class="top"></ol>');
|
@@ -232,6 +275,16 @@ function mainFocus() {
|
|
232
275
|
setTimeout(function() { $('#main').focus(); }, 10);
|
233
276
|
}
|
234
277
|
|
278
|
+
function navigationChange() {
|
279
|
+
// This works around the broken anchor navigation with the YARD template.
|
280
|
+
window.onpopstate = function() {
|
281
|
+
var hash = window.location.hash;
|
282
|
+
if (hash !== '' && $(hash)[0]) {
|
283
|
+
$(hash)[0].scrollIntoView();
|
284
|
+
}
|
285
|
+
};
|
286
|
+
}
|
287
|
+
|
235
288
|
$(document).ready(function() {
|
236
289
|
navResizer();
|
237
290
|
navExpander();
|
@@ -241,8 +294,10 @@ $(document).ready(function() {
|
|
241
294
|
searchFrameButtons();
|
242
295
|
linkSummaries();
|
243
296
|
summaryToggle();
|
297
|
+
constantSummaryToggle();
|
244
298
|
generateTOC();
|
245
299
|
mainFocus();
|
300
|
+
navigationChange();
|
246
301
|
});
|
247
302
|
|
248
303
|
})();
|
data/doc/method_list.html
CHANGED
@@ -46,8 +46,8 @@
|
|
46
46
|
|
47
47
|
<li class="odd ">
|
48
48
|
<div class="item">
|
49
|
-
<span class='object_link'><a href="Inquery/Query.html#call-
|
50
|
-
<small>Inquery::Query</small>
|
49
|
+
<span class='object_link'><a href="Inquery/Query/Chainable.html#call-instance_method" title="Inquery::Query::Chainable#call (method)">#call</a></span>
|
50
|
+
<small>Inquery::Query::Chainable</small>
|
51
51
|
</div>
|
52
52
|
</li>
|
53
53
|
|
@@ -62,15 +62,15 @@
|
|
62
62
|
|
63
63
|
<li class="odd ">
|
64
64
|
<div class="item">
|
65
|
-
<span class='object_link'><a href="Inquery/Query
|
66
|
-
<small>Inquery::Query
|
65
|
+
<span class='object_link'><a href="Inquery/Query.html#call-class_method" title="Inquery::Query.call (method)">call</a></span>
|
66
|
+
<small>Inquery::Query</small>
|
67
67
|
</div>
|
68
68
|
</li>
|
69
69
|
|
70
70
|
|
71
71
|
<li class="even ">
|
72
72
|
<div class="item">
|
73
|
-
<span class='object_link'><a href="Inquery/Query/Chainable.html#call-
|
73
|
+
<span class='object_link'><a href="Inquery/Query/Chainable.html#call-class_method" title="Inquery::Query::Chainable.call (method)">call</a></span>
|
74
74
|
<small>Inquery::Query::Chainable</small>
|
75
75
|
</div>
|
76
76
|
</li>
|
@@ -78,13 +78,21 @@
|
|
78
78
|
|
79
79
|
<li class="odd ">
|
80
80
|
<div class="item">
|
81
|
-
<span class='object_link'><a href="Inquery/Query.html#
|
81
|
+
<span class='object_link'><a href="Inquery/Query.html#connection-instance_method" title="Inquery::Query#connection (method)">#connection</a></span>
|
82
82
|
<small>Inquery::Query</small>
|
83
83
|
</div>
|
84
84
|
</li>
|
85
85
|
|
86
86
|
|
87
87
|
<li class="even ">
|
88
|
+
<div class="item">
|
89
|
+
<span class='object_link'><a href="Inquery/Query/Chainable.html#connection-instance_method" title="Inquery::Query::Chainable#connection (method)">#connection</a></span>
|
90
|
+
<small>Inquery::Query::Chainable</small>
|
91
|
+
</div>
|
92
|
+
</li>
|
93
|
+
|
94
|
+
|
95
|
+
<li class="odd ">
|
88
96
|
<div class="item">
|
89
97
|
<span class='object_link'><a href="Inquery/Query/Chainable.html#initialize-instance_method" title="Inquery::Query::Chainable#initialize (method)">#initialize</a></span>
|
90
98
|
<small>Inquery::Query::Chainable</small>
|
@@ -92,6 +100,14 @@
|
|
92
100
|
</li>
|
93
101
|
|
94
102
|
|
103
|
+
<li class="even ">
|
104
|
+
<div class="item">
|
105
|
+
<span class='object_link'><a href="Inquery/Query.html#initialize-instance_method" title="Inquery::Query#initialize (method)">#initialize</a></span>
|
106
|
+
<small>Inquery::Query</small>
|
107
|
+
</div>
|
108
|
+
</li>
|
109
|
+
|
110
|
+
|
95
111
|
<li class="odd ">
|
96
112
|
<div class="item">
|
97
113
|
<span class='object_link'><a href="Inquery/Query.html#osparams-instance_method" title="Inquery::Query#osparams (method)">#osparams</a></span>
|
@@ -134,7 +150,7 @@
|
|
134
150
|
|
135
151
|
<li class="even ">
|
136
152
|
<div class="item">
|
137
|
-
<span class='object_link'><a href="Inquery/Query.html#run-
|
153
|
+
<span class='object_link'><a href="Inquery/Query.html#run-instance_method" title="Inquery::Query#run (method)">#run</a></span>
|
138
154
|
<small>Inquery::Query</small>
|
139
155
|
</div>
|
140
156
|
</li>
|
@@ -142,7 +158,7 @@
|
|
142
158
|
|
143
159
|
<li class="odd ">
|
144
160
|
<div class="item">
|
145
|
-
<span class='object_link'><a href="Inquery/Query.html#run-
|
161
|
+
<span class='object_link'><a href="Inquery/Query.html#run-class_method" title="Inquery::Query.run (method)">run</a></span>
|
146
162
|
<small>Inquery::Query</small>
|
147
163
|
</div>
|
148
164
|
</li>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.20
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -100,9 +100,9 @@
|
|
100
100
|
</div>
|
101
101
|
|
102
102
|
<div id="footer">
|
103
|
-
Generated on Wed
|
103
|
+
Generated on Wed Oct 9 16:20:53 2019 by
|
104
104
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
|
-
0.9.
|
105
|
+
0.9.20 (ruby-2.6.2).
|
106
106
|
</div>
|
107
107
|
|
108
108
|
</div>
|
data/inquery.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: inquery 1.0.
|
2
|
+
# stub: inquery 1.0.2 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "inquery".freeze
|
6
|
-
s.version = "1.0.
|
6
|
+
s.version = "1.0.2"
|
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 = "
|
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 = "
|
11
|
+
s.date = "2019-10-09"
|
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, ["
|
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"])
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_runtime_dependency(%q<activerecord>.freeze, [">= 0"])
|
31
31
|
s.add_runtime_dependency(%q<schemacop>.freeze, ["~> 2.0"])
|
32
32
|
else
|
33
|
-
s.add_dependency(%q<bundler>.freeze, ["
|
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"])
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.add_dependency(%q<schemacop>.freeze, ["~> 2.0"])
|
44
44
|
end
|
45
45
|
else
|
46
|
-
s.add_dependency(%q<bundler>.freeze, ["
|
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"])
|
data/lib/inquery.rb
CHANGED
@@ -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
|