Sha256: 4a6267db70ac815e2148c24ebda8838a0b0ccab68d516c618c301786c82d4a2b

Contents?: true

Size: 1.58 KB

Versions: 13

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

require_relative 'values'

module RakeFactory
  class Parameter
    attr_accessor :default
    attr_reader :name, :required, :configurable, :transform

    def initialize(name, options)
      @name = name
      @default = options[:default]
      @required = options[:required] || false
      @transform = options[:transform] || ->(x) { x }
      @configurable =
        options[:configurable].nil? ? true : !!options[:configurable]
    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
        define_method parameter.writer_method do |value|
          parameter.set(self, value)
        end

        define_method parameter.reader_method do
          parameter.get(self)
        end
      end
    end

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

    def read_from(instance)
      instance.send(reader_method)
    end

    def configurable?
      @configurable
    end

    def dissatisfied_by?(instance)
      @required && read_from(instance).nil?
    end

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

    def set(target, value)
      target.instance_variable_set(instance_variable, value)
    end

    def get(target)
      stored_value = target.instance_variable_get(instance_variable)
      resolved_value = Values.resolve(stored_value).evaluate([target])
      transform.call(resolved_value)
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
rake_factory-0.34.0.pre.2 lib/rake_factory/parameter.rb
rake_factory-0.34.0.pre.1 lib/rake_factory/parameter.rb
rake_factory-0.33.0 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.6 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.5 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.4 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.3 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.2 lib/rake_factory/parameter.rb
rake_factory-0.32.0.pre.1 lib/rake_factory/parameter.rb
rake_factory-0.31.0 lib/rake_factory/parameter.rb
rake_factory-0.30.0.pre.8 lib/rake_factory/parameter.rb
rake_factory-0.30.0.pre.7 lib/rake_factory/parameter.rb
rake_factory-0.30.0.pre.6 lib/rake_factory/parameter.rb