diff options
author | Kevin Deisz <kevin.deisz@gmail.com> | 2019-01-24 14:35:52 -0500 |
---|---|---|
committer | Kevin Deisz <kevin.deisz@gmail.com> | 2019-01-24 14:35:52 -0500 |
commit | 5cf36e2ea2242ea6ea0cf879adf9febd86fd3aa2 (patch) | |
tree | 8174d3d9c7b24a38a4410a380a89ac62c7a28351 | |
parent | 1e25dfde032172bab2b126e60fac0302025defcc (diff) | |
download | rails-5cf36e2ea2242ea6ea0cf879adf9febd86fd3aa2.tar.gz rails-5cf36e2ea2242ea6ea0cf879adf9febd86fd3aa2.tar.bz2 rails-5cf36e2ea2242ea6ea0cf879adf9febd86fd3aa2.zip |
Make `And` and `Case` into expression nodes
Allows aliasing, predications, ordering, and various other functions on `And` and `Case` nodes. This brings them in line with other nodes like `Binary` and `Unary`.
-rw-r--r-- | activerecord/lib/arel/nodes/and.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/arel/nodes/case.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/arel/nodes/and_test.rb | 9 |
3 files changed, 11 insertions, 4 deletions
diff --git a/activerecord/lib/arel/nodes/and.rb b/activerecord/lib/arel/nodes/and.rb index c530a77bfb..bf516db35f 100644 --- a/activerecord/lib/arel/nodes/and.rb +++ b/activerecord/lib/arel/nodes/and.rb @@ -2,7 +2,7 @@ module Arel # :nodoc: all module Nodes - class And < Arel::Nodes::Node + class And < Arel::Nodes::NodeExpression attr_reader :children def initialize(children) diff --git a/activerecord/lib/arel/nodes/case.rb b/activerecord/lib/arel/nodes/case.rb index b8f83128c8..1c4b727bf6 100644 --- a/activerecord/lib/arel/nodes/case.rb +++ b/activerecord/lib/arel/nodes/case.rb @@ -2,9 +2,7 @@ module Arel # :nodoc: all module Nodes - class Case < Arel::Nodes::Node - include Arel::AliasPredication - + class Case < Arel::Nodes::NodeExpression attr_accessor :case, :conditions, :default def initialize(expression = nil, default = nil) diff --git a/activerecord/test/cases/arel/nodes/and_test.rb b/activerecord/test/cases/arel/nodes/and_test.rb index eff54abd91..d123ca9fd0 100644 --- a/activerecord/test/cases/arel/nodes/and_test.rb +++ b/activerecord/test/cases/arel/nodes/and_test.rb @@ -16,6 +16,15 @@ module Arel assert_equal 2, array.uniq.size end end + + describe "functions as node expression" do + it "allows aliasing" do + aliased = And.new(["foo", "bar"]).as("baz") + + assert_kind_of As, aliased + assert_kind_of SqlLiteral, aliased.right + end + end end end end |