squeel 0.5.0 → 0.5.5

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 (41) hide show
  1. data/README.rdoc +115 -39
  2. data/lib/squeel/adapters/active_record.rb +22 -5
  3. data/lib/squeel/adapters/active_record/3.0/association_preload.rb +15 -0
  4. data/lib/squeel/adapters/active_record/3.0/compat.rb +143 -0
  5. data/lib/squeel/adapters/active_record/3.0/context.rb +67 -0
  6. data/lib/squeel/adapters/active_record/3.0/join_association.rb +54 -0
  7. data/lib/squeel/adapters/active_record/3.0/join_dependency.rb +84 -0
  8. data/lib/squeel/adapters/active_record/3.0/relation.rb +327 -0
  9. data/lib/squeel/adapters/active_record/context.rb +67 -0
  10. data/lib/squeel/adapters/active_record/join_association.rb +10 -56
  11. data/lib/squeel/adapters/active_record/join_dependency.rb +22 -7
  12. data/lib/squeel/adapters/active_record/preloader.rb +21 -0
  13. data/lib/squeel/adapters/active_record/relation.rb +84 -38
  14. data/lib/squeel/context.rb +38 -0
  15. data/lib/squeel/dsl.rb +1 -1
  16. data/lib/squeel/nodes/join.rb +18 -0
  17. data/lib/squeel/nodes/key_path.rb +2 -2
  18. data/lib/squeel/nodes/stub.rb +5 -1
  19. data/lib/squeel/version.rb +1 -1
  20. data/lib/squeel/visitors.rb +2 -2
  21. data/lib/squeel/visitors/{order_visitor.rb → attribute_visitor.rb} +1 -2
  22. data/lib/squeel/visitors/predicate_visitor.rb +13 -11
  23. data/lib/squeel/visitors/symbol_visitor.rb +48 -0
  24. data/spec/helpers/squeel_helper.rb +17 -1
  25. data/spec/spec_helper.rb +31 -0
  26. data/spec/squeel/adapters/active_record/context_spec.rb +50 -0
  27. data/spec/squeel/adapters/active_record/join_association_spec.rb +1 -1
  28. data/spec/squeel/adapters/active_record/join_depdendency_spec.rb +1 -1
  29. data/spec/squeel/adapters/active_record/relation_spec.rb +166 -25
  30. data/spec/squeel/dsl_spec.rb +6 -6
  31. data/spec/squeel/nodes/join_spec.rb +16 -3
  32. data/spec/squeel/nodes/stub_spec.rb +12 -0
  33. data/spec/squeel/visitors/{order_visitor_spec.rb → attribute_visitor_spec.rb} +4 -5
  34. data/spec/squeel/visitors/predicate_visitor_spec.rb +18 -6
  35. data/spec/squeel/visitors/symbol_visitor_spec.rb +42 -0
  36. data/squeel.gemspec +2 -2
  37. metadata +21 -13
  38. data/lib/squeel/contexts/join_dependency_context.rb +0 -74
  39. data/lib/squeel/visitors/select_visitor.rb +0 -103
  40. data/spec/squeel/contexts/join_dependency_context_spec.rb +0 -43
  41. data/spec/squeel/visitors/select_visitor_spec.rb +0 -115
@@ -4,25 +4,25 @@ module Squeel
4
4
  describe DSL do
5
5
 
6
6
  it 'evaluates code' do
7
- result = DSL.evaluate { {id => 1} }
7
+ result = DSL.eval { {id => 1} }
8
8
  result.should be_a Hash
9
9
  result.keys.first.should be_a Nodes::Stub
10
10
  end
11
11
 
12
12
  it 'creates function nodes when a method has arguments' do
13
- result = DSL.evaluate { max(id) }
13
+ result = DSL.eval { max(id) }
14
14
  result.should be_a Nodes::Function
15
15
  result.args.should eq [Nodes::Stub.new(:id)]
16
16
  end
17
17
 
18
18
  it 'creates polymorphic join nodes when a method has a single class argument' do
19
- result = DSL.evaluate { association(Person) }
19
+ result = DSL.eval { association(Person) }
20
20
  result.should be_a Nodes::Join
21
21
  result.klass.should eq Person
22
22
  end
23
23
 
24
24
  it 'handles OR between predicates' do
25
- result = DSL.evaluate {(name =~ 'Joe%') | (articles.title =~ 'Hello%')}
25
+ result = DSL.eval {(name =~ 'Joe%') | (articles.title =~ 'Hello%')}
26
26
  result.should be_a Nodes::Or
27
27
  result.left.should be_a Nodes::Predicate
28
28
  result.right.should be_a Nodes::KeyPath
@@ -36,7 +36,7 @@ module Squeel
36
36
  end
37
37
 
38
38
  def dsl_test
39
- DSL.evaluate {name =~ a_method}
39
+ DSL.eval {name =~ a_method}
40
40
  end
41
41
  end
42
42
 
@@ -56,7 +56,7 @@ module Squeel
56
56
  end
57
57
 
58
58
  def dsl_test
59
- DSL.evaluate {|q| q.name =~ a_method}
59
+ DSL.eval {|q| q.name =~ a_method}
60
60
  end
61
61
  end
62
62
 
@@ -4,24 +4,37 @@ module Squeel
4
4
  module Nodes
5
5
  describe Join do
6
6
 
7
- it 'defaults to Arel::InnerJoin' do
7
+ before do
8
8
  @j = Join.new :name
9
+ end
10
+
11
+ it 'defaults to Arel::InnerJoin' do
9
12
  @j.type.should eq Arel::InnerJoin
10
13
  end
11
14
 
12
15
  it 'allows setting join type' do
13
- @j = Join.new :name
14
16
  @j.outer
15
17
  @j.type.should eq Arel::OuterJoin
16
18
  end
17
19
 
18
20
  it 'allows setting polymorphic class' do
19
- @j = Join.new :name
20
21
  @j.klass = Person
21
22
  @j.should be_polymorphic
22
23
  @j.klass.should eq Person
23
24
  end
24
25
 
26
+ it 'creates a KeyPath when sent an unknown method' do
27
+ keypath = @j.another
28
+ keypath.should be_a KeyPath
29
+ keypath.path_with_endpoint.should eq [@j, Stub.new(:another)]
30
+ end
31
+
32
+ it 'creates a KeyPath with a join endpoint when sent a method with a Class param' do
33
+ keypath = @j.another(Person)
34
+ keypath.should be_a KeyPath
35
+ keypath.path_with_endpoint.should eq [@j, Join.new(:another, Arel::InnerJoin, Person)]
36
+ end
37
+
25
38
  end
26
39
  end
27
40
  end
@@ -27,6 +27,18 @@ module Squeel
27
27
  merged[Stub.new(:attribute)].should eq 2
28
28
  end
29
29
 
30
+ it 'creates a KeyPath when sent an unknown method' do
31
+ keypath = @s.another
32
+ keypath.should be_a KeyPath
33
+ keypath.path_with_endpoint.should eq [@s, Stub.new(:another)]
34
+ end
35
+
36
+ it 'creates a KeyPath with a join endpoint when sent a method with a Class param' do
37
+ keypath = @s.another(Person)
38
+ keypath.should be_a KeyPath
39
+ keypath.path_with_endpoint.should eq [@s, Join.new(:another, Arel::InnerJoin, Person)]
40
+ end
41
+
30
42
  Squeel::Constants::PREDICATES.each do |method_name|
31
43
  it "creates #{method_name} predicates with no value" do
32
44
  predicate = @s.send(method_name)
@@ -1,18 +1,17 @@
1
1
  module Squeel
2
2
  module Visitors
3
- describe OrderVisitor do
3
+ describe AttributeVisitor do
4
4
 
5
5
  before do
6
- @jd = ActiveRecord::Associations::JoinDependency.
7
- new(Person, {
6
+ @jd = new_join_dependency(Person, {
8
7
  :children => {
9
8
  :children => {
10
9
  :parent => :parent
11
10
  }
12
11
  }
13
12
  }, [])
14
- @c = Squeel::Contexts::JoinDependencyContext.new(@jd)
15
- @v = OrderVisitor.new(@c)
13
+ @c = Squeel::Adapters::ActiveRecord::Context.new(@jd)
14
+ @v = AttributeVisitor.new(@c)
16
15
  end
17
16
 
18
17
  it 'creates a bare ARel attribute given a symbol with no asc/desc' do
@@ -5,15 +5,14 @@ module Squeel
5
5
  describe PredicateVisitor do
6
6
 
7
7
  before do
8
- @jd = ActiveRecord::Associations::JoinDependency.
9
- new(Person, {
8
+ @jd = new_join_dependency(Person, {
10
9
  :children => {
11
10
  :children => {
12
11
  :parent => :parent
13
12
  }
14
13
  }
15
14
  }, [])
16
- @c = Squeel::Contexts::JoinDependencyContext.new(@jd)
15
+ @c = Squeel::Adapters::ActiveRecord::Context.new(@jd)
17
16
  @v = PredicateVisitor.new(@c)
18
17
  end
19
18
 
@@ -136,6 +135,20 @@ module Squeel
136
135
  predicate.to_sql.should match /"people"."name" = "children_people"."name"/
137
136
  end
138
137
 
138
+ it 'visits ActiveRecord::Relation values in predicates' do
139
+ predicate = @v.accept(dsl{id >> Person.select{id}.limit(3).order{id.desc}})
140
+ predicate.should be_a Arel::Nodes::In
141
+ predicate.right.should be_a Arel::Nodes::SelectStatement
142
+ predicate.to_sql.should be_like '"people"."id" IN (SELECT "people"."id" FROM "people" ORDER BY "people"."id" DESC LIMIT 3)'
143
+ end
144
+
145
+ it "doesn't try to sanitize_sql an array of strings in the value of a Predicate" do
146
+ predicate = @v.accept(dsl{name >> ['Aric Smith', 'Gladyce Kulas']})
147
+ predicate.should be_a Arel::Nodes::In
148
+ predicate.right.should be_an Array
149
+ predicate.to_sql.should match /"people"."name" IN \('Aric Smith', 'Gladyce Kulas'\)/
150
+ end
151
+
139
152
  it 'creates a node of the proper type when a hash has a Predicate as a key' do
140
153
  predicate = @v.accept(:name.matches => 'Joe%')
141
154
  predicate.should be_a Arel::Nodes::Matches
@@ -248,9 +261,8 @@ module Squeel
248
261
 
249
262
  context 'with polymorphic joins in the JoinDependency' do
250
263
  before do
251
- @jd = ActiveRecord::Associations::JoinDependency.
252
- new(Note, dsl{[notable(Article), notable(Person)]}, [])
253
- @c = Squeel::Contexts::JoinDependencyContext.new(@jd)
264
+ @jd = new_join_dependency(Note, dsl{[notable(Article), notable(Person)]}, [])
265
+ @c = Squeel::Adapters::ActiveRecord::Context.new(@jd)
254
266
  @v = PredicateVisitor.new(@c)
255
267
  end
256
268
 
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ module Squeel
4
+ module Visitors
5
+ describe SymbolVisitor do
6
+ before do
7
+ @v = SymbolVisitor.new
8
+ end
9
+
10
+ it 'returns symbols unmodified' do
11
+ @v.accept(:blah).should eq :blah
12
+ end
13
+
14
+ it 'converts stubs to symbols' do
15
+ @v.accept(dsl{blah}).should eq :blah
16
+ end
17
+
18
+ it 'converts joins to their names' do
19
+ @v.accept(dsl{blah(Article)}).should eq :blah
20
+ end
21
+
22
+ it 'converts keypaths to their hash equivalents' do
23
+ @v.accept(dsl{one.two.three.four}).should eq({
24
+ :one => {:two => {:three => :four}}
25
+ })
26
+ end
27
+
28
+ it 'visits hashes' do
29
+ @v.accept(dsl{{
30
+ blah1 => {blah2(Article) => blah3}
31
+ }}).should eq({:blah1 => {:blah2 => :blah3}})
32
+ end
33
+
34
+ it 'visits arrays' do
35
+ @v.accept(dsl{[{
36
+ blah1 => {blah2(Article) => blah3}
37
+ }]}).should eq([{:blah1 => {:blah2 => :blah3}}])
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -30,8 +30,8 @@ you're feeling especially appreciative. It'd help me justify this
30
30
 
31
31
  s.rubyforge_project = "squeel"
32
32
 
33
- s.add_dependency 'activerecord', '~> 3.1.0.alpha'
34
- s.add_dependency 'activesupport', '~> 3.1.0.alpha'
33
+ s.add_dependency 'activerecord', '~> 3.0'
34
+ s.add_dependency 'activesupport', '~> 3.0'
35
35
  s.add_development_dependency 'rspec', '~> 2.5.0'
36
36
  s.add_development_dependency 'machinist', '~> 1.0.6'
37
37
  s.add_development_dependency 'faker', '~> 0.9.5'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: squeel
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.0
5
+ version: 0.5.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ernie Miller
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-09 00:00:00 Z
13
+ date: 2011-04-20 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 3.1.0.alpha
23
+ version: "3.0"
24
24
  type: :runtime
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
@@ -31,7 +31,7 @@ dependencies:
31
31
  requirements:
32
32
  - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: 3.1.0.alpha
34
+ version: "3.0"
35
35
  type: :runtime
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
@@ -97,12 +97,20 @@ files:
97
97
  - lib/core_ext/symbol.rb
98
98
  - lib/squeel.rb
99
99
  - lib/squeel/adapters/active_record.rb
100
+ - lib/squeel/adapters/active_record/3.0/association_preload.rb
101
+ - lib/squeel/adapters/active_record/3.0/compat.rb
102
+ - lib/squeel/adapters/active_record/3.0/context.rb
103
+ - lib/squeel/adapters/active_record/3.0/join_association.rb
104
+ - lib/squeel/adapters/active_record/3.0/join_dependency.rb
105
+ - lib/squeel/adapters/active_record/3.0/relation.rb
106
+ - lib/squeel/adapters/active_record/context.rb
100
107
  - lib/squeel/adapters/active_record/join_association.rb
101
108
  - lib/squeel/adapters/active_record/join_dependency.rb
109
+ - lib/squeel/adapters/active_record/preloader.rb
102
110
  - lib/squeel/adapters/active_record/relation.rb
103
111
  - lib/squeel/configuration.rb
104
112
  - lib/squeel/constants.rb
105
- - lib/squeel/contexts/join_dependency_context.rb
113
+ - lib/squeel/context.rb
106
114
  - lib/squeel/dsl.rb
107
115
  - lib/squeel/nodes.rb
108
116
  - lib/squeel/nodes/and.rb
@@ -127,10 +135,10 @@ files:
127
135
  - lib/squeel/predicate_methods/symbol.rb
128
136
  - lib/squeel/version.rb
129
137
  - lib/squeel/visitors.rb
138
+ - lib/squeel/visitors/attribute_visitor.rb
130
139
  - lib/squeel/visitors/base.rb
131
- - lib/squeel/visitors/order_visitor.rb
132
140
  - lib/squeel/visitors/predicate_visitor.rb
133
- - lib/squeel/visitors/select_visitor.rb
141
+ - lib/squeel/visitors/symbol_visitor.rb
134
142
  - spec/blueprints/articles.rb
135
143
  - spec/blueprints/comments.rb
136
144
  - spec/blueprints/notes.rb
@@ -140,10 +148,10 @@ files:
140
148
  - spec/core_ext/symbol_spec.rb
141
149
  - spec/helpers/squeel_helper.rb
142
150
  - spec/spec_helper.rb
151
+ - spec/squeel/adapters/active_record/context_spec.rb
143
152
  - spec/squeel/adapters/active_record/join_association_spec.rb
144
153
  - spec/squeel/adapters/active_record/join_depdendency_spec.rb
145
154
  - spec/squeel/adapters/active_record/relation_spec.rb
146
- - spec/squeel/contexts/join_dependency_context_spec.rb
147
155
  - spec/squeel/dsl_spec.rb
148
156
  - spec/squeel/nodes/function_spec.rb
149
157
  - spec/squeel/nodes/join_spec.rb
@@ -154,9 +162,9 @@ files:
154
162
  - spec/squeel/nodes/predicate_operators_spec.rb
155
163
  - spec/squeel/nodes/predicate_spec.rb
156
164
  - spec/squeel/nodes/stub_spec.rb
157
- - spec/squeel/visitors/order_visitor_spec.rb
165
+ - spec/squeel/visitors/attribute_visitor_spec.rb
158
166
  - spec/squeel/visitors/predicate_visitor_spec.rb
159
- - spec/squeel/visitors/select_visitor_spec.rb
167
+ - spec/squeel/visitors/symbol_visitor_spec.rb
160
168
  - spec/support/schema.rb
161
169
  - squeel.gemspec
162
170
  homepage: http://metautonomo.us/projects/squeel
@@ -201,10 +209,10 @@ test_files:
201
209
  - spec/core_ext/symbol_spec.rb
202
210
  - spec/helpers/squeel_helper.rb
203
211
  - spec/spec_helper.rb
212
+ - spec/squeel/adapters/active_record/context_spec.rb
204
213
  - spec/squeel/adapters/active_record/join_association_spec.rb
205
214
  - spec/squeel/adapters/active_record/join_depdendency_spec.rb
206
215
  - spec/squeel/adapters/active_record/relation_spec.rb
207
- - spec/squeel/contexts/join_dependency_context_spec.rb
208
216
  - spec/squeel/dsl_spec.rb
209
217
  - spec/squeel/nodes/function_spec.rb
210
218
  - spec/squeel/nodes/join_spec.rb
@@ -215,7 +223,7 @@ test_files:
215
223
  - spec/squeel/nodes/predicate_operators_spec.rb
216
224
  - spec/squeel/nodes/predicate_spec.rb
217
225
  - spec/squeel/nodes/stub_spec.rb
218
- - spec/squeel/visitors/order_visitor_spec.rb
226
+ - spec/squeel/visitors/attribute_visitor_spec.rb
219
227
  - spec/squeel/visitors/predicate_visitor_spec.rb
220
- - spec/squeel/visitors/select_visitor_spec.rb
228
+ - spec/squeel/visitors/symbol_visitor_spec.rb
221
229
  - spec/support/schema.rb
@@ -1,74 +0,0 @@
1
- require 'active_record'
2
-
3
- module Squeel
4
- # Because the AR::Associations namespace is insane
5
- JoinPart = ActiveRecord::Associations::JoinDependency::JoinPart
6
-
7
- module Contexts
8
- class JoinDependencyContext
9
- attr_reader :base, :engine, :arel_visitor
10
-
11
- def initialize(join_dependency)
12
- @join_dependency = join_dependency
13
- @base = join_dependency.join_base
14
- @engine = @base.arel_engine
15
- @arel_visitor = Arel::Visitors.visitor_for @engine
16
- @default_table = Arel::Table.new(@base.table_name, :as => @base.aliased_table_name, :engine => @engine)
17
- @tables = Hash.new {|hash, key| hash[key] = get_table(key)}
18
- end
19
-
20
- def find(object, parent = @base)
21
- if JoinPart === parent
22
- object = object.to_sym if String === object
23
- case object
24
- when Symbol, Nodes::Stub
25
- @join_dependency.join_associations.detect { |j|
26
- j.reflection.name == object.to_sym && j.parent == parent
27
- }
28
- when Nodes::Join
29
- @join_dependency.join_associations.detect { |j|
30
- j.reflection.name == object.name && j.parent == parent &&
31
- (object.polymorphic? ? j.reflection.klass == object.klass : true)
32
- }
33
- else
34
- @join_dependency.join_associations.detect { |j|
35
- j.reflection == object && j.parent == parent
36
- }
37
- end
38
- else
39
- nil
40
- end
41
- end
42
-
43
- def traverse(keypath, parent = @base, include_endpoint = false)
44
- parent = @base if keypath.absolute?
45
- keypath.path.each do |key|
46
- parent = find(key, parent)
47
- end
48
- parent = find(keypath.endpoint, parent) if include_endpoint
49
-
50
- parent
51
- end
52
-
53
- def contextualize(object)
54
- @tables[object]
55
- end
56
-
57
- def sanitize_sql(conditions, parent)
58
- parent.active_record.send(:sanitize_sql, conditions, parent.aliased_table_name)
59
- end
60
-
61
- private
62
-
63
- def get_table(object)
64
- if [Symbol, Nodes::Stub].include?(object.class)
65
- Arel::Table.new(object.to_sym, :engine => @engine)
66
- elsif object.respond_to?(:aliased_table_name)
67
- Arel::Table.new(object.table_name, :as => object.aliased_table_name, :engine => @engine)
68
- else
69
- @default_table
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,103 +0,0 @@
1
- require 'squeel/visitors/base'
2
- require 'squeel/contexts/join_dependency_context'
3
-
4
- module Squeel
5
- module Visitors
6
- class SelectVisitor < Base
7
-
8
- def visit_Hash(o, parent)
9
- o.map do |k, v|
10
- if implies_context_change?(v)
11
- visit_with_context_change(k, v, parent)
12
- else
13
- visit_without_context_change(k, v, parent)
14
- end
15
- end.flatten
16
- end
17
-
18
- def implies_context_change?(v)
19
- Hash === v || can_accept?(v) ||
20
- (Array === v && !v.empty? && v.all? {|val| can_accept?(val)})
21
- end
22
-
23
- def visit_with_context_change(k, v, parent)
24
- parent = case k
25
- when Nodes::KeyPath
26
- traverse(k, parent, true)
27
- else
28
- find(k, parent)
29
- end
30
-
31
- if Array === v
32
- v.map {|val| accept(val, parent || k)}
33
- else
34
- can_accept?(v) ? accept(v, parent || k) : v
35
- end
36
- end
37
-
38
- def visit_without_context_change(k, v, parent)
39
- v
40
- end
41
-
42
- def visit_Array(o, parent)
43
- o.map { |v| can_accept?(v) ? accept(v, parent) : v }.flatten
44
- end
45
-
46
- def visit_Symbol(o, parent)
47
- contextualize(parent)[o]
48
- end
49
-
50
- def visit_Squeel_Nodes_Stub(o, parent)
51
- contextualize(parent)[o.symbol]
52
- end
53
-
54
- def visit_Squeel_Nodes_KeyPath(o, parent)
55
- parent = traverse(o, parent)
56
-
57
- accept(o.endpoint, parent)
58
- end
59
-
60
- def visit_Squeel_Nodes_Function(o, parent)
61
- args = o.args.map do |arg|
62
- case arg
63
- when Nodes::Function, Nodes::KeyPath
64
- accept(arg, parent)
65
- when Symbol, Nodes::Stub
66
- Arel.sql(arel_visitor.accept contextualize(parent)[arg.to_sym])
67
- else
68
- quoted?(arg) ? Arel.sql(arel_visitor.accept arg) : arg
69
- end
70
- end
71
- Arel::Nodes::NamedFunction.new(o.name, args, o.alias)
72
- end
73
-
74
- def visit_Squeel_Nodes_Operation(o, parent)
75
- args = o.args.map do |arg|
76
- case arg
77
- when Nodes::Function
78
- accept(arg, parent)
79
- when Symbol, Nodes::Stub
80
- Arel.sql(arel_visitor.accept contextualize(parent)[arg.to_sym])
81
- else
82
- quoted?(arg) ? Arel.sql(arel_visitor.accept arg) : arg
83
- end
84
- end
85
-
86
- op = case o.operator
87
- when :+
88
- Arel::Nodes::Addition.new(args[0], args[1])
89
- when :-
90
- Arel::Nodes::Subtraction.new(args[0], args[1])
91
- when :*
92
- Arel::Nodes::Multiplication.new(args[0], args[1])
93
- when :/
94
- Arel::Nodes::Division.new(args[0], args[1])
95
- else
96
- Arel.sql("#{arel_visitor.accept(args[0])} #{o.operator} #{arel_visitor.accept(args[1])}")
97
- end
98
- o.alias ? op.as(o.alias) : op
99
- end
100
-
101
- end
102
- end
103
- end