sequel_core 1.0.6 → 1.0.7

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.
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