Sha256: 95edc1158c6daa9bce3998bb44d7084a14189654f24042aebb0de6abd3060bc4

Contents?: true

Size: 964 Bytes

Versions: 5

Compression:

Stored size: 964 Bytes

Contents

module RakeFactory
  module Configurable
    def self.included(base)
      base.class_eval do
        attr_accessor(:configuration_block)
      end
    end

    def initialize(*args, &configuration_block)
      arity = self.method(:initialize).super_method.arity
      super(*args.slice(0, arity), &configuration_block)
      process_configuration_block(configuration_block)
    end

    def process_configuration_block(configuration_block)
      set_if_value_present(:configuration_block, configuration_block)
    end

    def invoke_configuration_block(args=nil)
      if configuration_block
        view = ParameterView.new(self, args)
        params = args ? [view, args] : [view]
        configuration_block.call(
            *params.slice(0, configuration_block.arity))
      end
    end

    private

    def set_if_value_present(key, value)
      if self.respond_to?("#{key}=") && !value.nil?
        self.send("#{key}=", value)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rake_factory-0.9.0.pre.1 lib/rake_factory/configurable.rb
rake_factory-0.8.0 lib/rake_factory/configurable.rb
rake_factory-0.7.0 lib/rake_factory/configurable.rb
rake_factory-0.6.0 lib/rake_factory/configurable.rb
rake_factory-0.5.0 lib/rake_factory/configurable.rb