Sha256: ea39e6c712362e29e43157bbaa941348ee10c9a8a8c591c28ef2b6ccbe1cf8fb

Contents?: true

Size: 1.48 KB

Versions: 55

Compression:

Stored size: 1.48 KB

Contents

require_relative '../../dsl/intrinsic_functions'

module Convection
  module Model
    class Template
      class Condition
        include DSL::Helpers

        CONDITIONAL_FUNCTION_SYNTAX_MAP =
          { fn_and: 'Fn::And',
            fn_equals: 'Fn::Equals',
            fn_if: 'Fn::If',
            fn_not: 'Fn::Not',
            fn_or: 'Fn::Or' }.freeze

        attr_reader :condition
        attr_reader :template

        CONDITIONAL_FUNCTION_SYNTAX_MAP.keys.each do |conditional_function|
          define_method(conditional_function) do |*args|
            @condition = ConditionalFunction.new conditional_function, args
          end
        end

        def initialize(name, parent)
          @name = name
          @template = parent.template
        end

        def render
          condition.render
        end

        class ConditionalFunction
          def initialize(function_name, arg_array)
            @function_name = function_name
            @function_arguments = arg_array
          end

          def render
            rendered_values = []
            @function_arguments.each do |function_arg|
              if function_arg.respond_to? :render # the argument is another conditional function
                rendered_values << function_arg.render
              else
                rendered_values << function_arg
              end
            end

            { CONDITIONAL_FUNCTION_SYNTAX_MAP[@function_name] => rendered_values }
          end
        end
      end
    end
  end
end

Version data entries

55 entries across 55 versions & 1 rubygems

Version Path
convection-2.1.2 lib/convection/model/template/condition.rb
convection-2.1.1 lib/convection/model/template/condition.rb
convection-2.1.0 lib/convection/model/template/condition.rb
convection-2.0.0 lib/convection/model/template/condition.rb
convection-1.1.7 lib/convection/model/template/condition.rb
convection-1.1.5 lib/convection/model/template/condition.rb
convection-1.1.4 lib/convection/model/template/condition.rb
convection-1.1.3 lib/convection/model/template/condition.rb
convection-1.1.2 lib/convection/model/template/condition.rb
convection-1.1.1 lib/convection/model/template/condition.rb
convection-1.1.0 lib/convection/model/template/condition.rb
convection-1.0.7 lib/convection/model/template/condition.rb
convection-1.0.6 lib/convection/model/template/condition.rb
convection-1.0.5 lib/convection/model/template/condition.rb
convection-1.0.4 lib/convection/model/template/condition.rb
convection-1.0.3 lib/convection/model/template/condition.rb
convection-1.0.2 lib/convection/model/template/condition.rb
convection-1.0.1 lib/convection/model/template/condition.rb
convection-1.0.0.pre.beta.10 lib/convection/model/template/condition.rb
convection-1.0.0.pre.beta.9 lib/convection/model/template/condition.rb