Sha256: 1d3fff94d4925b49c6f3a25eed4671a02bc73f1361c2531c2fa9a03ae9aca219

Contents?: true

Size: 1.88 KB

Versions: 58

Compression:

Stored size: 1.88 KB

Contents

require 'forwardable'
require_relative './intrinsic_functions'

module Convection
  module DSL
    ##
    # Methods for defining DSL/Models
    ##
    module ClassHelpers
      def attribute(attribute_name)
        attr_writer attribute_name
        define_method(attribute_name) do |value = nil|
          instance_variable_set("@#{ attribute_name }", value) unless value.nil?
          instance_variable_get("@#{ attribute_name }")
        end
      end

      def list(attribute_name)
        define_method(attribute_name) do |value = nil|
          collection = instance_variable_get("@#{ attribute_name }")
          collection << value unless value.nil?
          collection
        end
      end
    end

    ##
    # Helper methods for creating templates
    ##
    module Helpers
      extend Forwardable
      include DSL::IntrinsicFunctions

      def_delegators :@template, :stack, :parameters, :mappings, :resources, :outputs

      class << self
        def included(mod)
          mod.extend(DSL::ClassHelpers)
        end

        def method_name(cf_type)
          nodes = cf_type.split('::')
          nodes.shift # Remove AWS::

          ## Cammel-case to snake-case
          nodes.map! do |n|
            n.split(/([A-Z0-9])(?![A-Z0-9])(?<!$)/)
             .reject(&:empty?)
             .reduce('') { |a, e| (e.length == 1 && !a.empty?) ? a + "_#{e}" : a + e }
             .downcase
          end

          nodes.join('_').downcase
        end
      end

      ## Convert various casings to CamelCase
      def camel_case(str)
        str.downcase.split(/[\.\-_]/).map(&:capitalize).join
      end

      ## Convert various casings to snake_case
      def snake_case(str)
        str.downcase.split(/[\.\-_]/).join('_')
      end

      ## Convert various casings to SCREAMING_SNAKE_CASE
      def screaming_snake_case(str)
        str.upcase.split(/[\.\-_]/).join('_')
      end
    end
  end
end

Version data entries

58 entries across 58 versions & 1 rubygems

Version Path
convection-2.2.2 lib/convection/dsl/helpers.rb
convection-2.2.1 lib/convection/dsl/helpers.rb
convection-2.2.0 lib/convection/dsl/helpers.rb
convection-2.1.2 lib/convection/dsl/helpers.rb
convection-2.1.1 lib/convection/dsl/helpers.rb
convection-2.1.0 lib/convection/dsl/helpers.rb
convection-2.0.0 lib/convection/dsl/helpers.rb
convection-1.1.7 lib/convection/dsl/helpers.rb
convection-1.1.5 lib/convection/dsl/helpers.rb
convection-1.1.4 lib/convection/dsl/helpers.rb
convection-1.1.3 lib/convection/dsl/helpers.rb
convection-1.1.2 lib/convection/dsl/helpers.rb
convection-1.1.1 lib/convection/dsl/helpers.rb
convection-1.1.0 lib/convection/dsl/helpers.rb
convection-1.0.7 lib/convection/dsl/helpers.rb
convection-1.0.6 lib/convection/dsl/helpers.rb
convection-1.0.5 lib/convection/dsl/helpers.rb
convection-1.0.4 lib/convection/dsl/helpers.rb
convection-1.0.3 lib/convection/dsl/helpers.rb
convection-1.0.2 lib/convection/dsl/helpers.rb