Class: Cyrel::Expression::Case
- Defined in:
- lib/cyrel/expression/case.rb
Overview
Represents a CASE expression in Cypher. Supports the generic form: CASE WHEN c1 THEN r1 WHEN c2 THEN r2 … ELSE d END TODO: Support simple form: CASE input WHEN v1 THEN r1 … ELSE d END
Instance Attribute Summary collapse
-
#else_result ⇒ Object
readonly
Returns the value of attribute else_result.
-
#whens ⇒ Object
readonly
Returns the value of attribute whens.
Instance Method Summary collapse
-
#initialize(whens: [], else_result: nil) ⇒ Case
constructor
A new instance of Case.
-
#render(query) ⇒ String
Renders the CASE expression.
Methods inherited from Base
#!=, #%, #&, #*, #+, #-, #/, #<, #<=, #==, #=~, #>, #>=, #^, #|
Constructor Details
#initialize(whens: [], else_result: nil) ⇒ Case
Returns a new instance of Case.
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/cyrel/expression/case.rb', line 14 def initialize(whens: [], else_result: nil) unless whens.is_a?(Array) && whens.all? { |pair| pair.is_a?(Array) && pair.length == 2 } raise ArgumentError, "CASE 'whens' must be an array of [condition, result] pairs." end @whens = whens.map do |condition, result| [Expression.coerce(condition), Expression.coerce(result)] end @else_result = else_result ? Expression.coerce(else_result) : nil raise ArgumentError, 'CASE expression requires at least one WHEN clause.' if @whens.empty? end |
Instance Attribute Details
#else_result ⇒ Object (readonly)
Returns the value of attribute else_result.
9 10 11 |
# File 'lib/cyrel/expression/case.rb', line 9 def else_result @else_result end |
#whens ⇒ Object (readonly)
Returns the value of attribute whens.
9 10 11 |
# File 'lib/cyrel/expression/case.rb', line 9 def whens @whens end |
Instance Method Details
#render(query) ⇒ String
Renders the CASE expression.
29 30 31 32 33 34 35 36 37 |
# File 'lib/cyrel/expression/case.rb', line 29 def render(query) parts = ['CASE'] @whens.each do |condition, result| parts << "WHEN #{condition.render(query)} THEN #{result.render(query)}" end parts << "ELSE #{@else_result.render(query)}" if @else_result parts << 'END' parts.join(' ') end |