Sha256: f7e281707a674cda7f1c2651b5c28ef6c084b08b71539b45c1348bddb5c84594

Contents?: true

Size: 1.46 KB

Versions: 6

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

require_relative "../logging/composite_logger"

module Kanal
  module Core
    module Helpers
      # Module assumes that class where it was included has methods
      # set(name, value)
      # get(name)
      # transforms unknown methods to setters/getters for parameters
      module ParameterFinderWithMethodMissingMixin
        include Logging::Logger

        def method_missing(symbol, *args, &block)
          if block && !args.first.nil?
            logger.error "Block and arg given simultaneously. Parameter name: '#{symbol.to_s}, arg: #{args.first}'"

            raise "Block and arg given simultaneously for parameter #{symbol.to_s}"
          end

          parameter_name = symbol.to_s
          parameter_name.sub! "=", ""

          parameter_name = parameter_name.to_sym

          value = block_given? ? block : args.first

          # standard workflow with settings properties with
          # input.prop = 123
          if symbol.to_s.include? "="
            @parameter_bag.set parameter_name, value
          elsif !args.empty? || block_given?
            # this approach can be used also in dsl
            # like that
            # setters: prop value
            # getters: prop
            @parameter_bag.set parameter_name, value
          # means it is used as setter in dsl,
          # method call with argument
          else
            @parameter_bag.get parameter_name
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kanal-0.8.0 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb
kanal-0.7.0 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb
kanal-0.6.0 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb
kanal-0.5.1 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb
kanal-0.5.0 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb
kanal-0.4.3 lib/kanal/core/helpers/parameter_finder_with_method_missing_mixin.rb