squeel 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,6 +7,7 @@ module Squeel
7
7
  # Literal nodes are a container for raw SQL.
8
8
  class Literal
9
9
  include PredicateMethods
10
+ include PredicateOperators
10
11
  include Operators
11
12
  include Aliasing
12
13
 
@@ -1,3 +1,3 @@
1
1
  module Squeel
2
- VERSION = "0.9.0"
2
+ VERSION = "0.9.1"
3
3
  end
@@ -220,7 +220,7 @@ module Squeel
220
220
  # @param parent The parent object in the context
221
221
  # @return [Arel::Nodes::Or] An ARel Or node, with left and right sides visited
222
222
  def visit_Squeel_Nodes_Or(o, parent)
223
- visit(o.left, parent).or(visit(o.right, parent))
223
+ Arel::Nodes::Grouping.new(Arel::Nodes::Or.new(visit(o.left, parent), (visit(o.right, parent))))
224
224
  end
225
225
 
226
226
  def visit_Squeel_Nodes_Not(o, parent)
@@ -3,33 +3,39 @@ require 'spec_helper'
3
3
  module Squeel
4
4
  module Nodes
5
5
  describe Literal do
6
- before do
7
- @l = Literal.new 'string'
8
- end
6
+ subject { Literal.new 'string'}
7
+
8
+ it { should respond_to :& }
9
+ it { should respond_to :| }
10
+ it { should respond_to :-@ }
11
+
12
+ specify { (subject & subject).should be_a And }
13
+ specify { (subject | subject).should be_a Or }
14
+ specify { (-subject).should be_a Not }
9
15
 
10
16
  it 'hashes like its expr' do
11
- @l.hash.should eq 'string'.hash
17
+ subject.hash.should eq 'string'.hash
12
18
  end
13
19
 
14
20
  it 'returns nil when sent to_sym' do
15
- @l.to_sym.should be_nil
21
+ subject.to_sym.should be_nil
16
22
  end
17
23
 
18
24
  it 'returns a string matching its expr when sent to_s' do
19
- @l.to_s.should eq 'string'
25
+ subject.to_s.should eq 'string'
20
26
  end
21
27
 
22
28
  Squeel::Constants::PREDICATES.each do |method_name|
23
29
  it "creates #{method_name} predicates with no value" do
24
- predicate = @l.send(method_name)
25
- predicate.expr.should eq @l
30
+ predicate = subject.send(method_name)
31
+ predicate.expr.should eq subject
26
32
  predicate.method_name.should eq method_name
27
33
  predicate.value?.should be_false
28
34
  end
29
35
 
30
36
  it "creates #{method_name} predicates with a value" do
31
- predicate = @l.send(method_name, 'value')
32
- predicate.expr.should eq @l
37
+ predicate = subject.send(method_name, 'value')
38
+ predicate.expr.should eq subject
33
39
  predicate.method_name.should eq method_name
34
40
  predicate.value.should eq 'value'
35
41
  end
@@ -39,15 +45,15 @@ module Squeel
39
45
  aliases.each do |aliaz|
40
46
  ['', '_any', '_all'].each do |suffix|
41
47
  it "creates #{method_name.to_s + suffix} predicates with no value using the alias #{aliaz.to_s + suffix}" do
42
- predicate = @l.send(aliaz.to_s + suffix)
43
- predicate.expr.should eq @l
48
+ predicate = subject.send(aliaz.to_s + suffix)
49
+ predicate.expr.should eq subject
44
50
  predicate.method_name.should eq "#{method_name}#{suffix}".to_sym
45
51
  predicate.value?.should be_false
46
52
  end
47
53
 
48
54
  it "creates #{method_name.to_s + suffix} predicates with a value using the alias #{aliaz.to_s + suffix}" do
49
- predicate = @l.send((aliaz.to_s + suffix), 'value')
50
- predicate.expr.should eq @l
55
+ predicate = subject.send((aliaz.to_s + suffix), 'value')
56
+ predicate.expr.should eq subject
51
57
  predicate.method_name.should eq "#{method_name}#{suffix}".to_sym
52
58
  predicate.value.should eq 'value'
53
59
  end
@@ -56,96 +62,96 @@ module Squeel
56
62
  end
57
63
 
58
64
  it 'creates eq predicates with ==' do
59
- predicate = @l == 1
60
- predicate.expr.should eq @l
65
+ predicate = subject == 1
66
+ predicate.expr.should eq subject
61
67
  predicate.method_name.should eq :eq
62
68
  predicate.value.should eq 1
63
69
  end
64
70
 
65
71
  it 'creates not_eq predicates with ^' do
66
- predicate = @l ^ 1
67
- predicate.expr.should eq @l
72
+ predicate = subject ^ 1
73
+ predicate.expr.should eq subject
68
74
  predicate.method_name.should eq :not_eq
69
75
  predicate.value.should eq 1
70
76
  end
71
77
 
72
78
  it 'creates not_eq predicates with !=' do
73
- predicate = @l != 1
74
- predicate.expr.should eq @l
79
+ predicate = subject != 1
80
+ predicate.expr.should eq subject
75
81
  predicate.method_name.should eq :not_eq
76
82
  predicate.value.should eq 1
77
83
  end if respond_to?('!=')
78
84
 
79
85
  it 'creates in predicates with >>' do
80
- predicate = @l >> [1,2,3]
81
- predicate.expr.should eq @l
86
+ predicate = subject >> [1,2,3]
87
+ predicate.expr.should eq subject
82
88
  predicate.method_name.should eq :in
83
89
  predicate.value.should eq [1,2,3]
84
90
  end
85
91
 
86
92
  it 'creates not_in predicates with <<' do
87
- predicate = @l << [1,2,3]
88
- predicate.expr.should eq @l
93
+ predicate = subject << [1,2,3]
94
+ predicate.expr.should eq subject
89
95
  predicate.method_name.should eq :not_in
90
96
  predicate.value.should eq [1,2,3]
91
97
  end
92
98
 
93
99
  it 'creates matches predicates with =~' do
94
- predicate = @l =~ '%bob%'
95
- predicate.expr.should eq @l
100
+ predicate = subject =~ '%bob%'
101
+ predicate.expr.should eq subject
96
102
  predicate.method_name.should eq :matches
97
103
  predicate.value.should eq '%bob%'
98
104
  end
99
105
 
100
106
  it 'creates does_not_match predicates with !~' do
101
- predicate = @l !~ '%bob%'
102
- predicate.expr.should eq @l
107
+ predicate = subject !~ '%bob%'
108
+ predicate.expr.should eq subject
103
109
  predicate.method_name.should eq :does_not_match
104
110
  predicate.value.should eq '%bob%'
105
111
  end if respond_to?('!~')
106
112
 
107
113
  it 'creates gt predicates with >' do
108
- predicate = @l > 1
109
- predicate.expr.should eq @l
114
+ predicate = subject > 1
115
+ predicate.expr.should eq subject
110
116
  predicate.method_name.should eq :gt
111
117
  predicate.value.should eq 1
112
118
  end
113
119
 
114
120
  it 'creates gteq predicates with >=' do
115
- predicate = @l >= 1
116
- predicate.expr.should eq @l
121
+ predicate = subject >= 1
122
+ predicate.expr.should eq subject
117
123
  predicate.method_name.should eq :gteq
118
124
  predicate.value.should eq 1
119
125
  end
120
126
 
121
127
  it 'creates lt predicates with <' do
122
- predicate = @l < 1
123
- predicate.expr.should eq @l
128
+ predicate = subject < 1
129
+ predicate.expr.should eq subject
124
130
  predicate.method_name.should eq :lt
125
131
  predicate.value.should eq 1
126
132
  end
127
133
 
128
134
  it 'creates lteq predicates with <=' do
129
- predicate = @l <= 1
130
- predicate.expr.should eq @l
135
+ predicate = subject <= 1
136
+ predicate.expr.should eq subject
131
137
  predicate.method_name.should eq :lteq
132
138
  predicate.value.should eq 1
133
139
  end
134
140
 
135
141
  it 'creates ascending orders' do
136
- order = @l.asc
142
+ order = subject.asc
137
143
  order.should be_ascending
138
144
  end
139
145
 
140
146
  it 'creates descending orders' do
141
- order = @l.desc
147
+ order = subject.desc
142
148
  order.should be_descending
143
149
  end
144
150
 
145
151
  it 'creates as nodes with #as' do
146
- as = @l.as('other_name')
152
+ as = subject.as('other_name')
147
153
  as.should be_a Squeel::Nodes::As
148
- as.left.should eq @l
154
+ as.left.should eq subject
149
155
  as.right.should be_a Arel::Nodes::SqlLiteral
150
156
  as.right.should eq 'other_name'
151
157
  end
@@ -55,6 +55,12 @@ module Squeel
55
55
  predicate.should eq '1=1'
56
56
  end
57
57
 
58
+ it 'creates OR nodes against a Literal' do
59
+ predicate = @v.accept(dsl{`blah` | `blah`})
60
+ predicate.should be_a Arel::Nodes::Grouping
61
+ predicate.to_sql.should eq '(blah OR blah)'
62
+ end
63
+
58
64
  it 'generates IS NULL for hash keys with a value of [nil]' do
59
65
  predicate = @v.accept(:id => [nil])
60
66
  predicate.to_sql.should be_like '"people"."id" IS NULL'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squeel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-07 00:00:00.000000000Z
12
+ date: 2011-09-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70114561715900 !ruby/object:Gem::Requirement
16
+ requirement: &70206840193580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70114561715900
24
+ version_requirements: *70206840193580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70114561714720 !ruby/object:Gem::Requirement
27
+ requirement: &70206840192480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70114561714720
35
+ version_requirements: *70206840192480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: polyamorous
38
- requirement: &70114561713420 !ruby/object:Gem::Requirement
38
+ requirement: &70206840191580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.5.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70114561713420
46
+ version_requirements: *70206840191580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70114561712440 !ruby/object:Gem::Requirement
49
+ requirement: &70206840190960 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.6.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70114561712440
57
+ version_requirements: *70206840190960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: machinist
60
- requirement: &70114561710960 !ruby/object:Gem::Requirement
60
+ requirement: &70206840190480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.0.6
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70114561710960
68
+ version_requirements: *70206840190480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faker
71
- requirement: &70114561710220 !ruby/object:Gem::Requirement
71
+ requirement: &70206840190000 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.9.5
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70114561710220
79
+ version_requirements: *70206840190000
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: sqlite3
82
- requirement: &70114561709220 !ruby/object:Gem::Requirement
82
+ requirement: &70206840189500 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 1.3.3
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70114561709220
90
+ version_requirements: *70206840189500
91
91
  description: ! "\n Squeel unlocks the power of ARel in your Rails 3 application
92
92
  with\n a handy block-based syntax. You can write subqueries, access named\n
93
93
  \ functions provided by your RDBMS, and more, all without writing\n SQL