i_dig_sql 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/VERSION +1 -1
- data/i_dig_sql.gemspec +2 -1
- data/lib/i_dig_sql.rb +18 -0
- data/specs/i_dig_sql.rb +65 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0aaa663a548e6732d8430f8c09d9dcfe8eec2fb
|
4
|
+
data.tar.gz: 9ed810dd2a96f8ce92ad0ddad3ce93bb673a1ff9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f859fc97e346983a7a5e5333bacda32623439fdbc5421579b3780dfad34d9eced7236d66bb2d55f4f4c87b7080a21a0706c3b2d662c75a93423a253e187602a9
|
7
|
+
data.tar.gz: 6e75aa07f361a036b505923b0f16478c3668566b0f429796c5714de31ed0e2c27c77424dae4cb874c26716cb454fd5a7fb46eb648a186d7d8a84cd28f718cdc9
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/i_dig_sql.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler" , "~> 1.5"
|
26
26
|
spec.add_development_dependency "rake" , '~> 0'
|
27
|
-
spec.add_development_dependency "bacon" , '~> 0'
|
27
|
+
spec.add_development_dependency "bacon" , '~> 1.0'
|
28
|
+
spec.add_development_dependency "Bacon_Colored" , '~> 0'
|
28
29
|
spec.add_development_dependency "pry" , '~> 0'
|
29
30
|
end
|
data/lib/i_dig_sql.rb
CHANGED
@@ -8,6 +8,7 @@ class I_Dig_Sql
|
|
8
8
|
|
9
9
|
def initialize sql = nil, *args
|
10
10
|
@withs = []
|
11
|
+
@tags_for_withs = {}
|
11
12
|
@select = nil
|
12
13
|
@as = nil
|
13
14
|
@unions = []
|
@@ -33,6 +34,7 @@ class I_Dig_Sql
|
|
33
34
|
|
34
35
|
def WITH o, *args
|
35
36
|
@withs << o
|
37
|
+
@tags_for_withs[o] = []
|
36
38
|
@args.concat(o.args) if o.is_a?(I_Dig_Sql)
|
37
39
|
@args.concat args
|
38
40
|
self
|
@@ -40,6 +42,22 @@ class I_Dig_Sql
|
|
40
42
|
|
41
43
|
alias_method :comma, :WITH
|
42
44
|
|
45
|
+
def tag_as name
|
46
|
+
list = @tags_for_withs[@withs.last]
|
47
|
+
raise "Last query was not a WITH/cte query" unless list
|
48
|
+
list.push name
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_tagged name
|
53
|
+
@tags_for_withs.inject([]) { |memo, (k,v)|
|
54
|
+
if v.include?(name)
|
55
|
+
memo << k
|
56
|
+
end
|
57
|
+
memo
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
43
61
|
def SELECT str, *args
|
44
62
|
@select = {:select=>str, :args=>args, :from=>nil, :where=>nil}
|
45
63
|
|
data/specs/i_dig_sql.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
|
2
|
+
require "pry"
|
3
|
+
require "Bacon_Colored"
|
2
4
|
require "i_dig_sql"
|
3
5
|
require "i_dig_sql/String"
|
4
6
|
|
@@ -166,3 +168,66 @@ describe "String#i_dig_sql" do
|
|
166
168
|
|
167
169
|
end # === describe String ===
|
168
170
|
|
171
|
+
|
172
|
+
describe ".tag_as" do
|
173
|
+
|
174
|
+
it "adds tag to tag list of last query" do
|
175
|
+
o = "SELECT *".i_dig_sql
|
176
|
+
o.WITH("cte1 AS (SELECT * FROM table_1)")
|
177
|
+
.tag_as('group 1')
|
178
|
+
o.WITH("cte2 AS (SELECT * FROM table_2)")
|
179
|
+
.tag_as('group 1')
|
180
|
+
|
181
|
+
list = o.find_tagged('group 1')
|
182
|
+
list.size.should == 2
|
183
|
+
sql(list.first).should == sql("cte1 AS (SELECT * FROM table_1)")
|
184
|
+
sql(list.last).should == sql("cte2 AS (SELECT * FROM table_2)")
|
185
|
+
end
|
186
|
+
|
187
|
+
it "raises error if last query was not a WITH/cte" do
|
188
|
+
o = "SELECT *".i_dig_sql
|
189
|
+
should.raise(RuntimeError) {
|
190
|
+
o.tag_as('group 1')
|
191
|
+
}.message.should.match /Last query was not a WITH\/cte/i
|
192
|
+
end
|
193
|
+
|
194
|
+
end # === describe .tag_as ===
|
195
|
+
|
196
|
+
describe ".find_tagged" do
|
197
|
+
|
198
|
+
it "returns all WITH/cte querys with tag" do
|
199
|
+
o = "SELECT *".i_dig_sql
|
200
|
+
o.WITH("cte1 AS (SELECT * FROM table_1)")
|
201
|
+
.tag_as('group 1')
|
202
|
+
o.WITH("cte2 AS (SELECT * FROM table_2)")
|
203
|
+
.tag_as('group 1')
|
204
|
+
|
205
|
+
list = o.find_tagged('group 1')
|
206
|
+
list.size.should == 2
|
207
|
+
sql(list.first).should == sql("cte1 AS (SELECT * FROM table_1)")
|
208
|
+
sql(list.last).should == sql("cte2 AS (SELECT * FROM table_2)")
|
209
|
+
end
|
210
|
+
|
211
|
+
it "only returns WITH/cte querys with tags, and no others" do
|
212
|
+
o = "SELECT *".i_dig_sql
|
213
|
+
o.WITH("cte1 AS (SELECT * FROM table_1)").tag_as('group 1')
|
214
|
+
o.WITH("cte2 AS (SELECT * FROM table_2)").tag_as('group 1')
|
215
|
+
o.WITH("cte3 AS (SELECT * FROM table_3)").tag_as('group 2')
|
216
|
+
|
217
|
+
list = o.find_tagged('group 1')
|
218
|
+
list.size.should == 2
|
219
|
+
sql(list.first).should == sql("cte1 AS (SELECT * FROM table_1)")
|
220
|
+
sql(list.last).should == sql("cte2 AS (SELECT * FROM table_2)")
|
221
|
+
end
|
222
|
+
|
223
|
+
end # === describe find_tagged ===
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i_dig_sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- da99
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -40,6 +40,20 @@ dependencies:
|
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bacon
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: Bacon_Colored
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|