Class: Expressir::Express::Builders::LiteralBuilder
- Inherits:
-
Object
- Object
- Expressir::Express::Builders::LiteralBuilder
- Includes:
- Helpers
- Defined in:
- lib/expressir/express/builders/literal_builder.rb
Overview
Builds literal nodes (integer, real, binary, logical, string).
Instance Method Summary collapse
-
#build_binary(ast_data) ⇒ Object
Binary literal.
- #build_encoded_string(ast_data) ⇒ Object
-
#build_integer(ast_data) ⇒ Object
Integer literal.
-
#build_logical(ast_data) ⇒ Object
Logical literal.
-
#build_real(ast_data) ⇒ Object
Real literal.
- #build_simple_string(ast_data) ⇒ Object
-
#build_string(ast_data) ⇒ Object
String literal.
-
#call(ast_data) ⇒ Object
Generic literal dispatcher.
Methods included from Helpers
#apply_qualifier, #extract_id_ref, #extract_interval_op, #extract_nested_text, #extract_operator, #extract_rel_op, #extract_text, #extract_unary_op, #first_value
Instance Method Details
#build_binary(ast_data) ⇒ Object
Binary literal
23 24 25 26 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 23 def build_binary(ast_data) val = extract_text(ast_data[:binary] || ast_data[:str]) Expressir::Model::Literals::Binary.new(value: val) end |
#build_encoded_string(ast_data) ⇒ Object
70 71 72 73 74 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 70 def build_encoded_string(ast_data) val = extract_text(ast_data[:str]) val = val[1..-2] if val && val.length >= 2 Expressir::Model::Literals::String.new(value: val, encoded: true) end |
#build_integer(ast_data) ⇒ Object
Integer literal
11 12 13 14 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 11 def build_integer(ast_data) val = extract_text(ast_data[:integer] || ast_data[:str]) Expressir::Model::Literals::Integer.new(value: val) end |
#build_logical(ast_data) ⇒ Object
Logical literal
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 29 def build_logical(ast_data) value = if ast_data[:t_true] Expressir::Model::Literals::Logical::TRUE elsif ast_data[:t_false] Expressir::Model::Literals::Logical::FALSE elsif ast_data[:t_unknown] Expressir::Model::Literals::Logical::UNKNOWN else val = extract_text(ast_data[:logical] || ast_data[:str]).to_s.strip.upcase case val when "TRUE" then Expressir::Model::Literals::Logical::TRUE when "FALSE" then Expressir::Model::Literals::Logical::FALSE else Expressir::Model::Literals::Logical::UNKNOWN end end Expressir::Model::Literals::Logical.new(value: value) end |
#build_real(ast_data) ⇒ Object
Real literal
17 18 19 20 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 17 def build_real(ast_data) val = extract_text(ast_data[:real] || ast_data[:str]) Expressir::Model::Literals::Real.new(value: val) end |
#build_simple_string(ast_data) ⇒ Object
64 65 66 67 68 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 64 def build_simple_string(ast_data) val = extract_text(ast_data[:str]) val = val[1..-2] if val && val.length >= 2 Expressir::Model::Literals::String.new(value: val) end |
#build_string(ast_data) ⇒ Object
String literal
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 48 def build_string(ast_data) if ast_data[:string_literal] && ast_data.keys.length == 1 ast_data = ast_data[:string_literal] end if ast_data[:simple_string_literal].is_a?(Hash) build_simple_string(ast_data[:simple_string_literal]) elsif ast_data[:encoded_string_literal].is_a?(Hash) build_encoded_string(ast_data[:encoded_string_literal]) else val = extract_text(ast_data[:str]) val = val[1..-2] if val && val.length >= 2 Expressir::Model::Literals::String.new(value: val) end end |
#call(ast_data) ⇒ Object
Generic literal dispatcher
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/expressir/express/builders/literal_builder.rb', line 77 def call(ast_data) if ast_data[:binary_literal] Builder.build({ binary_literal: ast_data[:binary_literal] }) elsif ast_data[:integer_literal] Builder.build({ integer_literal: ast_data[:integer_literal] }) elsif ast_data[:logical_literal] Builder.build({ logical_literal: ast_data[:logical_literal] }) elsif ast_data[:real_literal] Builder.build({ real_literal: ast_data[:real_literal] }) elsif ast_data[:string_literal] Builder.build({ string_literal: ast_data[:string_literal] }) end end |