Sha256: 6be78ba2ab102f9709817c1226cc3f1380e9441c4abaaafaf071e5e6a4c92e64

Contents?: true

Size: 1.28 KB

Versions: 28

Compression:

Stored size: 1.28 KB

Contents

require_relative 'parameter'
require_relative 'exceptions'

module RakeFactory
  class ParameterSet
    def initialize
      @parameter_set = {}
    end

    def add(name, options)
      parameter = Parameter.new(name, options)
      @parameter_set[parameter.name] = parameter
      parameter
    end

    def find(name)
      @parameter_set[name.to_sym]
    end

    def each(&block)
      @parameter_set.values.each(&block)
    end

    def update_default_for(name, value)
      find(name).default = value
    end

    def apply_defaults_to(instance)
      @parameter_set.values.each do |parameter|
        parameter.apply_default_to(instance)
      end
    end

    def enforce_requirements_on(instance)
      dissatisfied = @parameter_set.values.reject do |parameter|
        parameter.satisfied_by?(instance)
      end
      unless dissatisfied.empty?
        names = dissatisfied.map(&:name)
        names_string = names.join(',')
        pluralisation_string = names.length > 1 ? 's' : ''

        raise RequiredParameterUnset,
            "Required parameter#{pluralisation_string} #{names_string} unset."
      end
    end

    def read_from(instance)
      @parameter_set.reduce({}) do |acc, (key, parameter)|
        acc.merge(Hash[key, parameter.read_from(instance)])
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
rake_factory-0.30.0.pre.5 lib/rake_factory/parameter_set.rb
rake_factory-0.30.0.pre.4 lib/rake_factory/parameter_set.rb
rake_factory-0.30.0.pre.3 lib/rake_factory/parameter_set.rb
rake_factory-0.30.0.pre.2 lib/rake_factory/parameter_set.rb
rake_factory-0.30.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.29.0 lib/rake_factory/parameter_set.rb
rake_factory-0.28.0.pre.2 lib/rake_factory/parameter_set.rb
rake_factory-0.28.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.27.0 lib/rake_factory/parameter_set.rb
rake_factory-0.26.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.24.0.pre.2 lib/rake_factory/parameter_set.rb
rake_factory-0.25.0 lib/rake_factory/parameter_set.rb
rake_factory-0.24.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.23.0 lib/rake_factory/parameter_set.rb
rake_factory-0.22.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.21.0 lib/rake_factory/parameter_set.rb
rake_factory-0.20.0.pre.1 lib/rake_factory/parameter_set.rb
rake_factory-0.19.0 lib/rake_factory/parameter_set.rb
rake_factory-0.18.0.pre.2 lib/rake_factory/parameter_set.rb
rake_factory-0.18.0.pre.1 lib/rake_factory/parameter_set.rb