sequel_core 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.0.7 (2008-02-05)
2
+
3
+ * Added support for conditional filters (using if else statements) inside block filters (thanks Kee).
4
+
1
5
  === 1.0.6 (2008-02-05)
2
6
 
3
7
  * Removed code pollution introduced in revs 814, 817 (really bad patch, IMO).
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ include FileUtils
9
9
  # Configuration
10
10
  ##############################################################################
11
11
  NAME = "sequel_core"
12
- VERS = "1.0.6"
12
+ VERS = "1.0.7"
13
13
  CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"]
14
14
  RDOC_OPTS = [
15
15
  "--quiet",
@@ -285,7 +285,14 @@ class Sequel::Dataset
285
285
  l = e[1]
286
286
  r = eval_expr(e[2], b, opts)
287
287
  raise Sequel::Error::InvalidExpression, "#{l} = #{r}. Did you mean :#{l} == #{r}?"
288
- when :if, :dstr
288
+ when :if
289
+ op, c, br1, br2 = *e
290
+ if ext_expr(c, b, opts)
291
+ eval_expr(br1, b, opts)
292
+ elsif br2
293
+ eval_expr(br2, b, opts)
294
+ end
295
+ when :dstr
289
296
  ext_expr(e, b, opts)
290
297
  else
291
298
  raise Sequel::Error::InvalidExpression, "Invalid expression tree: #{e.inspect}"
@@ -308,7 +315,7 @@ class Sequel::Dataset
308
315
  "(#{e[1..-1].map {|i| pt_expr(i, b, opts)}.join(JOIN_AND)})"
309
316
  when :or # x || y
310
317
  "(#{pt_expr(e[1], b, opts)} OR #{pt_expr(e[2], b, opts)})"
311
- when :call, :vcall, :iter, :match3 # method calls, blocks
318
+ when :call, :vcall, :iter, :match3, :if # method calls, blocks
312
319
  eval_expr(e, b, opts)
313
320
  when :block # block of statements
314
321
  if opts[:comma_separated]
data/spec/dataset_spec.rb CHANGED
@@ -1117,9 +1117,13 @@ context "Dataset#join_table" do
1117
1117
  proc {@d.join_table(:invalid, :a, :b)}.should raise_error(Sequel::Error)
1118
1118
  end
1119
1119
 
1120
- specify "should treat aliased tables correctly" do
1120
+ specify "should support aliased tables" do
1121
1121
  @d.from('stats s').join('players p', :id => :player_id).sql.should ==
1122
1122
  'SELECT * FROM stats s INNER JOIN players p ON (p.id = s.player_id)'
1123
+
1124
+ ds = Sequel::Dataset.new(nil).from(:foo => :f). \
1125
+ join_table(:inner, :bar, :id => :bar_id).sql.should ==
1126
+ 'SELECT * FROM foo f INNER JOIN bar ON (bar.id = f.bar_id)'
1123
1127
  end
1124
1128
 
1125
1129
  specify "should allow for arbitrary conditions in the JOIN clause" do
@@ -1133,11 +1137,11 @@ context "Dataset#join_table" do
1133
1137
  "SELECT * FROM items LEFT OUTER JOIN categories ON (categories.status IN (1, 2, 3))"
1134
1138
  end
1135
1139
 
1136
- specify "should support aliased tables" do
1137
- ds = Sequel::Dataset.new(nil).from(:foo => :f). \
1138
- join_table(:inner, :bar, :id => :bar_id).sql.should ==
1139
- 'SELECT * FROM foo f INNER JOIN bar ON (bar.id = f.bar_id)'
1140
+ specify "should raise error for a table without a source" do
1141
+ proc {Sequel::Dataset.new(nil).join('players p', :id => :player_id)}. \
1142
+ should raise_error(Sequel::Error)
1140
1143
  end
1144
+
1141
1145
  end
1142
1146
 
1143
1147
  context "Dataset#[]=" do
@@ -474,6 +474,17 @@ context "Proc#to_sql" do
474
474
 
475
475
  proc {:x == ("%d" % prod).lit}.sql.should == "(x = 1)"
476
476
  end
477
+
478
+ specify "should support conditional filters" do
479
+ @criteria = nil
480
+ proc {if @criteria; :x.like @criteria; end}.sql.should == nil
481
+
482
+ @criteria = 'blah'
483
+ proc {if @criteria; :x.like @criteria; end}.sql.should == "(x LIKE 'blah')"
484
+
485
+ @criteria = nil
486
+ proc {if @criteria; :x.like @criteria; else; :x.like 'ddd'; end}.sql.should == "(x LIKE 'ddd')"
487
+ end
477
488
  end
478
489
 
479
490
  context "Proc#to_sql stock" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner