momomoto 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/momomoto/base.rb +16 -11
  2. data/test/test_base.rb +6 -4
  3. metadata +2 -2
data/lib/momomoto/base.rb CHANGED
@@ -87,17 +87,22 @@ module Momomoto
87
87
 
88
88
  def compile_expression( conditions, operator )
89
89
  where = []
90
- conditions.each do | key , value |
91
- key = key.to_sym if key.kind_of?( String )
92
- case key
93
- when :OR then
94
- where << compile_expression( value, "OR" )
95
- when :AND then
96
- where << compile_expression( value, "AND" )
97
- else
98
- raise CriticalError, "condition key '#{key}' not a column in table '#{table_name}'" unless columns.keys.member?( key )
99
- where << columns[key].compile_rule( key, value )
100
- end
90
+ case conditions
91
+ when Array then
92
+ conditions.each do | value |
93
+ where << compile_expression( value, operator )
94
+ end
95
+ when Hash then
96
+ conditions.each do | key , value |
97
+ key = key.to_sym if key.kind_of?( String )
98
+ case key
99
+ when :OR then where << "(" + compile_expression( value, "OR" ) + ")"
100
+ when :AND then where << "(" + compile_expression( value, "AND" ) + ")"
101
+ else
102
+ raise CriticalError, "condition key '#{key}' not a column in table '#{table_name}'" unless columns.keys.member?( key )
103
+ where << columns[key].compile_rule( key, value )
104
+ end
105
+ end
101
106
  end
102
107
  where.join( " #{operator} ")
103
108
  end
data/test/test_base.rb CHANGED
@@ -32,10 +32,12 @@ class TestBase < Test::Unit::TestCase
32
32
  assert_equal( " WHERE first_name = E'1'" , t.instance_eval do compile_where( :first_name => '1' ) end )
33
33
  assert_equal( " WHERE first_name = E'chu''nky'" , t.instance_eval do compile_where( :first_name => "chu'nky" ) end )
34
34
  assert_equal( " WHERE first_name IN (E'chu''nky',E'bac''n')" , t.instance_eval do compile_where( :first_name => ["chu'nky","bac'n"] ) end )
35
- assert_equal( " WHERE person_id = '1'" , t.instance_eval do compile_where( :OR => { :person_id => '1' } ) end )
36
- assert_equal( " WHERE person_id = '1'" , t.instance_eval do compile_where( :AND => { :person_id => '1' } ) end )
37
- assert_equal( " WHERE person_id = '1' OR first_name = E's'" , t.instance_eval do compile_where( :OR => { :person_id => '1',:first_name=>'s' } ) end )
38
- assert_equal( " WHERE person_id = '1' AND first_name = E's'" , t.instance_eval do compile_where( :AND => { :person_id => '1',:first_name=>'s' } ) end )
35
+ assert_equal( " WHERE (person_id = '1')" , t.instance_eval do compile_where( :OR => { :person_id => '1' } ) end )
36
+ assert_equal( " WHERE (person_id = '1')" , t.instance_eval do compile_where( :AND => { :person_id => '1' } ) end )
37
+ assert_equal( " WHERE (person_id = '1' OR first_name = E's')" , t.instance_eval do compile_where( :OR => { :person_id => '1',:first_name=>'s' } ) end )
38
+ assert_equal( " WHERE (person_id = '1' AND first_name = E's')" , t.instance_eval do compile_where( :AND => { :person_id => '1',:first_name=>'s' } ) end )
39
+ assert_equal( " WHERE (person_id = '1' AND person_id = '2')" , t.instance_eval do compile_where( :AND =>[{:person_id=>1},{:person_id=>2}] ) end )
40
+ assert_equal( " WHERE (person_id = '1' OR person_id = '2')" , t.instance_eval do compile_where( :OR =>[{:person_id=>1},{:person_id=>2}] ) end )
39
41
  end
40
42
 
41
43
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: momomoto
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.11
7
- date: 2007-11-16 00:00:00 +01:00
6
+ version: 0.1.12
7
+ date: 2007-11-17 00:00:00 +01:00
8
8
  summary: Momomoto is an object relational mapper for PostgreSQL.
9
9
  require_paths:
10
10
  - lib