rebel 0.3.3 → 0.4.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rebel/sql.rb +46 -5
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2a6bda775ef068182b94b7fc45d11481a72d0977
4
- data.tar.gz: d238329117454f93ebf1f415b6313bae5704401f
3
+ metadata.gz: 4183b987662f827d6b32d29a8ab27c296dacdb82
4
+ data.tar.gz: 3835ab7325bb2262aa2433be7056265ed6adc0b5
5
5
  SHA512:
6
- metadata.gz: 6e3279d93fccf6c072aefe3941bfb13ae7e6b233513cdaa1bf1a6fd631ae5994d94a2a454f323b082b056fd24b921b0baaf98b6bb4268bf1c50053448c2c73d7
7
- data.tar.gz: 7a4b3297ed93d07eaed0bcfc316cda2e5d8418270c218aee2f4e9e9c7e5227959adf93b5ad3ae3fefa5b585171fcd69b1b5557b3bb8d728ed6a7649dfa39ecdb
6
+ metadata.gz: 9586ef0f6aca3e96c5283817d8b61ad54d24f90a9018817eeca1223041a3a31e36c428919172a16c79e318c767f00e12f510d23483e778ec53da1431d9849e73
7
+ data.tar.gz: f3f8eebeefaf6614e02f35b61a20475083ee77037b8f6169732cb49323a11bce9c3f91b4b5695e571c4df049ce55216097f823392d4f1e91e2b64314919945d8
data/lib/rebel/sql.rb CHANGED
@@ -13,13 +13,18 @@ module Rebel::SQL
13
13
  exec(Rebel::SQL.drop_table(table_name))
14
14
  end
15
15
 
16
- def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
16
+ def select(*fields, distinct: distinct, from: nil, where: nil, inner: nil, left: nil, right: nil, group: nil, order: nil, limit: nil, offset: nil)
17
17
  exec(Rebel::SQL.select(*fields,
18
+ distinct: distinct,
18
19
  from: from,
19
20
  where: where,
20
21
  inner: inner,
21
22
  left: left,
22
- right: right))
23
+ right: right,
24
+ group: group,
25
+ order: order,
26
+ limit: limit,
27
+ offset: offset))
23
28
  end
24
29
 
25
30
  def insert_into(table_name, *rows)
@@ -85,6 +90,18 @@ module Rebel::SQL
85
90
  clause.any? ? on(*clause) : self
86
91
  end
87
92
 
93
+ def having(*clause)
94
+ Raw.new(self + " HAVING #{Rebel::SQL.and_clause(*clause)}")
95
+ end
96
+
97
+ def asc
98
+ Raw.new(self + " ASC")
99
+ end
100
+
101
+ def desc
102
+ Raw.new(self + " DESC")
103
+ end
104
+
88
105
  def and(*clause)
89
106
  Raw.new("#{self.parens?} AND #{Rebel::SQL.and_clause(*clause)}")
90
107
  end
@@ -178,13 +195,17 @@ module Rebel::SQL
178
195
  SQL
179
196
  end
180
197
 
181
- def select(*fields, from: nil, where: nil, inner: nil, left: nil, right: nil)
198
+ def select(*fields, distinct: nil, from: nil, where: nil, inner: nil, left: nil, right: nil, group: nil, order: nil, limit: nil, offset: nil)
182
199
  raw <<-SQL
183
- SELECT #{names(*fields)} FROM #{name(from)}
200
+ SELECT #{distinct ? "DISTINCT #{names(*distinct)}" : names(*fields)}
201
+ #{from?(from)}
184
202
  #{inner?(inner)}
185
203
  #{left?(left)}
186
204
  #{right?(right)}
187
205
  #{where?(where)}
206
+ #{group?(group)}
207
+ #{order?(order)}
208
+ #{limit?(limit, offset)}
188
209
  SQL
189
210
  end
190
211
 
@@ -231,6 +252,10 @@ module Rebel::SQL
231
252
  end
232
253
  alias fn function
233
254
 
255
+ def by(*n)
256
+ raw("BY #{names(*n)}")
257
+ end
258
+
234
259
  def count(*n)
235
260
  raw("COUNT(#{names(*n)})")
236
261
  end
@@ -284,7 +309,7 @@ module Rebel::SQL
284
309
  when TrueClass, FalseClass then raw(v ? 'TRUE' : 'FALSE')
285
310
  when Date, Time, DateTime then value(v.iso8601)
286
311
  when nil then raw 'NULL'
287
- else raise NotImplementedError, v.inspect
312
+ else raise NotImplementedError, "#{v.class}: #{v.inspect}"
288
313
  end
289
314
  end
290
315
 
@@ -329,6 +354,10 @@ module Rebel::SQL
329
354
  end.join(' AND ')
330
355
  end
331
356
 
357
+ def from?(from)
358
+ from ? "FROM #{name(from)}" : nil
359
+ end
360
+
332
361
  def where?(*clause)
333
362
  clause.any? ? "WHERE #{and_clause(*clause)}" : nil
334
363
  end
@@ -344,5 +373,17 @@ module Rebel::SQL
344
373
  def right?(join)
345
374
  join ? "RIGHT #{join}" : nil
346
375
  end
376
+
377
+ def group?(group)
378
+ group ? "GROUP #{name(group)}" : nil
379
+ end
380
+
381
+ def order?(order)
382
+ order ? "ORDER #{name(order)}" : nil
383
+ end
384
+
385
+ def limit?(limit, offset)
386
+ limit ? "LIMIT #{value(limit)}" << (offset ? " OFFSET #{offset}" : "") : nil
387
+ end
347
388
  end
348
389
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rebel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loic Nageleisen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-27 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: SQL-flavoured Ruby, or is it the other way around?
14
14
  email: loic.nageleisen@gmail.com