i_dig_sql 2.0.0 → 3.0.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.
@@ -1,98 +0,0 @@
1
-
2
- require 'pry'
3
- require 'sequel'
4
- DB = Sequel.mock
5
-
6
- class Englishy_Sql
7
-
8
- Duplicate = Class.new RuntimeError
9
-
10
- def initialize
11
- @sql = {}
12
- @vals = {}
13
- instance_eval(&(Proc.new))
14
- end # === def initialize
15
-
16
- def val name, v
17
- if @vals.has_key?(name) && @vals[name] != v
18
- fail Duplicate, "Already set w/different value: #{name.inspect}"
19
- end
20
- end
21
-
22
- def screen_name name
23
- val :SCREEN_NAME, name.to_s.strip.upcase
24
- sql(:SCREEN_NAME) {
25
-
26
- any! {
27
- owner_id.==(:AUDIENCE_ID)
28
- all {
29
- no_block
30
- any! {
31
- WORLD!
32
- allowed
33
- }
34
- }
35
- } # === any
36
-
37
- one!
38
- } # === sql
39
- end
40
-
41
- def post
42
- @sql = @sql.where(:id=> DB[:post].select(:id) )
43
- end # === def post
44
-
45
- def comments
46
- @sql = @sql.or(:parent_id=>DB[:comment].select(:id))
47
- end
48
-
49
- def sql *args
50
- case
51
- when args.empty?
52
- @sql.sql
53
-
54
- when args.size == 2
55
- name, v = args
56
- is_dup = @sql.has_key?(name) && @sql[name] != v
57
- fail Duplicate, "Already set w/different value: #{name.inspect}" if is_dup
58
-
59
- else
60
- fail ArgumentError, "Unknown args: #{args.inspect}"
61
-
62
- end # === case
63
- end
64
-
65
- end # === Englishy_Sql
66
-
67
-
68
- puts(Englishy_Sql.new {
69
- table(:computer) {
70
- as(:comments)
71
- any! {
72
- is_owner
73
- }
74
- }
75
- }.sql)
76
-
77
- SELECT *
78
- FROM screen_name
79
- WHERE
80
- id = (SELECT id FROM screen_name WHERE screen_name = 'MEANIE_6294')
81
- AND (
82
- owner_id = :AUDIENCE_ID
83
- OR
84
- (
85
- :AUDIENCE_ID NOT IN (BLOCKED)
86
- AND
87
- ( privacy = :WORLD
88
- OR
89
- (
90
- privacy = :PROTECTED
91
- AND
92
- :AUDIENCE_ID IN (
93
- ALLOWED
94
- )
95
- )
96
- )
97
- )
98
- )
@@ -1,203 +0,0 @@
1
-
2
- require "Bacon_Colored"
3
-
4
- def sql o
5
- if o.is_a? String
6
- return o.split.join(" ")
7
- else
8
- sql(o.to_sql)
9
- end
10
- end
11
-
12
- def args o
13
- o.to_sql[:args]
14
- end
15
-
16
- describe :I_Dig_Sql do
17
-
18
- it "runs the code from README.md" do
19
- readme = File.read(File.expand_path(File.dirname(__FILE__) + '/../README.md'))
20
- code = readme[/```ruby([^`]+)```/] && $1
21
- line = 0
22
- readme.split("\n").detect { |l| line = line + 1; l['```ruby'] }
23
- result = eval(code, nil, 'README.md', line)
24
- sql(result).should == sql(%^
25
- WITH
26
- HEROES AS ( SELECT id FROM hero WHERE id = :PERSON_ID ) ,
27
- VILLIANS AS ( SELECT id FROM villian WHERE id = :PERSON_ID )
28
- SELECT * FROM people
29
- WHERE
30
- id IN ( SELECT id FROM hero WHERE id = :PERSON_ID AND status = :ALIVE)
31
- OR
32
- id IN (SELECT ID FROM HEROES AND status = :ALIVE)
33
- OR
34
- id IN ( SELECT * FROM HEROES )
35
- OR
36
- id IN ( SELECT patron_id FROM VILLIANS )
37
- OR
38
- id IN ( SELECT id FROM villian WHERE id = :PERSON_ID )
39
- ^)
40
- end # === it
41
-
42
- it "adds WITH: {{MY_NAME}}" do
43
- sql = I_Dig_Sql.new
44
- sql[:MY_HERO] = "SELECT * FROM hero"
45
- sql[:MY_NAME] = "SELECT * FROM name"
46
- sql << %^
47
- {{MY_HERO}}
48
- {{MY_NAME}}
49
- ^
50
- sql(sql).should == sql(%^
51
- WITH
52
- MY_HERO AS (
53
- SELECT * FROM hero
54
- )
55
- ,
56
- MY_NAME AS (
57
- SELECT * FROM name
58
- )
59
- MY_HERO
60
- MY_NAME
61
- ^)
62
- end
63
-
64
- it "replaces text with content: << MY_NAME >>" do
65
- sql = I_Dig_Sql.new
66
- sql[:MY_HERO] = "SELECT * FROM hero"
67
- sql << %^
68
- << MY_HERO >>
69
- ^
70
- sql(sql).should == "SELECT * FROM hero"
71
- end # === it
72
-
73
- %w{ * id }.each { |s|
74
- it "adds WITH: << #{s} MY_NAME >>" do
75
- sql = I_Dig_Sql.new
76
- sql[:MY_HERO] = "SELECT id, p_id FROM hero"
77
- sql[:MY_NAME] = "SELECT id, n_id FROM name"
78
- sql << %^
79
- << #{s} MY_NAME >>
80
- << #{s} MY_HERO >>
81
- ^
82
- sql(sql).should == sql(%^
83
- WITH
84
- MY_NAME AS (
85
- SELECT id, n_id FROM name
86
- ) ,
87
- MY_HERO AS (
88
- SELECT id, p_id FROM hero
89
- )
90
- SELECT #{s} FROM MY_NAME
91
- SELECT #{s} FROM MY_HERO
92
- ^)
93
- end # === it
94
- }
95
-
96
- end # === describe :I_Dig_Sql
97
-
98
- describe '.new' do
99
-
100
- it "merges sql values: .new(i_dig_sql)" do
101
- first = I_Dig_Sql.new
102
- first[:hero] = "SELECT * FROM hero"
103
- second = I_Dig_Sql.new(first)
104
- second[:name] = "SELECT * FROM name"
105
- second << %^
106
- << hero >>
107
- << name >>
108
- ^
109
- sql(second).should == sql(%^
110
- SELECT * FROM hero
111
- SELECT * FROM name
112
- ^)
113
- end # === it
114
-
115
- it "combines all Strings" do
116
- i = I_Dig_Sql.new "SELECT ", " * ", " FROM ", " NAME "
117
- sql(i).should == sql("SELECT * FROM NAME")
118
- end # === it
119
-
120
- end # === describe '.new'
121
-
122
-
123
- describe :vars do
124
-
125
- it "combines vars from other digs" do
126
- one = I_Dig_Sql.new
127
- one.vars[:one] = 1
128
-
129
- two = I_Dig_Sql.new
130
- one.vars[:two] = 2
131
-
132
- three = I_Dig_Sql.new
133
- one.vars[:three] = 3
134
-
135
- dig = I_Dig_Sql.new one, two, three
136
- dig.vars[:four] = 4
137
-
138
- dig.vars.should == {
139
- four: 4,
140
- three: 3,
141
- two: 2,
142
- one: 1
143
- }
144
- end # === it
145
-
146
- it "fails w/Duplicate if other digs have the same var name" do
147
- should.raise(ArgumentError) {
148
- one = I_Dig_Sql.new
149
- one.vars[:two] = 2
150
-
151
- i = I_Dig_Sql.new one
152
- i.vars[:two] = 3
153
- i.vars
154
- }.message.should.match /Key already set: :two/
155
- end # === it
156
-
157
- end # === describe :vars
158
-
159
-
160
- describe :to_pair do
161
-
162
- it "returns an Array: [String, Hash]" do
163
- i = I_Dig_Sql.new <<-EOF
164
- SELECT * FROM new
165
- EOF
166
- i.vars[:one] = 2
167
- sql, vars = i.to_pair
168
- sql(sql).should == sql("SELECT * FROM new")
169
- vars.should == {one: 2}
170
- end # === it
171
-
172
- end # === describe :to_pair
173
-
174
-
175
- describe :to_sql do
176
-
177
- it "renders nested replacements" do
178
- i = I_Dig_Sql.new <<-EOF
179
- << FIRST >>
180
- EOF
181
- i[:FIRST] = " << SECOND >> "
182
- i[:SECOND] = " << THIRD >> "
183
- i[:THIRD] = "FINAL"
184
- sql(i).should == "FINAL"
185
- end # === it
186
-
187
- it "prints CTE definitions once, if used multiple times" do
188
- i = I_Dig_Sql.new <<-EOF
189
- {{my_cte}}
190
- {{my_cte}}
191
- EOF
192
- i[:my_cte] = "SELECT *"
193
- sql(i).should == sql(%^
194
- WITH
195
- my_cte AS (
196
- SELECT *
197
- )
198
- my_cte
199
- my_cte
200
- ^)
201
- end # === it
202
-
203
- end # === describe :to_sql