Sha256: 4e534d29c4b16814b32744d71b4ed69e7c3f6ddb6fcf2b7647ad03ebda7235da

Contents?: true

Size: 1.28 KB

Versions: 3

Compression:

Stored size: 1.28 KB

Contents

module RakeFactory
  class Parameter
    attr_reader(
        :name,
        :default,
        :required,
        :configurable,
        :transform)
    attr_writer(:default)

    def initialize(name, options)
      @name = name
      @default = options[:default] || nil
      @required = options[:required] || false
      @configurable =
          options[:configurable].nil? ? true : !!options[:configurable]
      @transform = options[:transform] || lambda { |x| x }
    end

    def writer_method
      "#{name}="
    end

    def reader_method
      name
    end

    def instance_variable
      "@#{name}"
    end

    def define_on(klass)
      parameter = self
      klass.class_eval do
        attr_reader parameter.reader_method
        define_method parameter.writer_method do |value|
          instance_variable_set(
              parameter.instance_variable,
              parameter.transform.call(value))
        end
      end
    end

    def apply_default_to(instance)
      instance.send(writer_method, @default) unless @default.nil?
    end

    def configurable?
      @configurable
    end

    def dissatisfied_by?(instance)
      value = instance.send(reader_method)
      @required && value.nil?
    end

    def satisfied_by?(instance)
      !dissatisfied_by?(instance)
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
rake_factory-0.1.0 lib/rake_factory/parameter.rb
rake_factory-0.0.1 lib/rake_factory/parameter.rb
rake_tasklib-0.0.1 lib/rake_factory/parameter.rb