Sha256: b4e43b6db07fbbe643ffe46837b3c0e502933a8c3cd09c4ee1a9752b144241ee

Contents?: true

Size: 1.75 KB

Versions: 9

Compression:

Stored size: 1.75 KB

Contents

require 'sfn'

module Sfn
  module Lint
    # Lint defition
    class Definition

      # @return [String] search expression used for matching
      attr_reader :search_expression
      # @return [Proc-ish] must respond to #call
      attr_reader :evaluator
      # @return [Symbol] target provider
      attr_reader :provider

      # Create a new definition
      #
      # @param expr [String] search expression used for matching
      # @param provider [String, Symbol] target provider
      # @param evaluator [Proc] logic used to handle match
      # @return [self]
      def initialize(expr, provider=:aws, evaluator=nil, &block)
        if(evaluator && block)
          raise ArgumentError.new 'Only evaluator or block can be provided, not both.'
        end
        @provider = Bogo::Utility.snake(provider).to_sym
        @search_expression = expr
        @evaluator = evaluator || block
      end

      # Apply definition to template
      #
      # @param template [Hash] template being processed
      # @return [TrueClass, Array<String>] true if passed. List of string results that failed
      def apply(template)
        result = JMESPath.search(search_expression, template)
        run(result, template)
      end

      protected

      # Check result of search expression
      #
      # @param result [Object] result(s) of search expression
      # @param template [Hash] full template
      # @return [TrueClass, Array<String>] true if passed. List of string results that failed
      # @note override this method when subclassing
      def run(result, template)
        unless(evaluator)
          raise NotImplementedError.new 'No evaluator has been defined for this definition!'
        end
        evaluator.call(result, template)
      end

    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
sfn-3.0.28 lib/sfn/lint/definition.rb
sfn-3.0.26 lib/sfn/lint/definition.rb
sfn-3.0.24 lib/sfn/lint/definition.rb
sfn-3.0.22 lib/sfn/lint/definition.rb
sfn-3.0.20 lib/sfn/lint/definition.rb
sfn-3.0.18 lib/sfn/lint/definition.rb
sfn-3.0.16 lib/sfn/lint/definition.rb
sfn-3.0.14 lib/sfn/lint/definition.rb
sfn-3.0.12 lib/sfn/lint/definition.rb