class Assembler::Parameter
Attributes
name[R]
options[R]
Public Class Methods
new(name, options = {})
click to toggle source
# File lib/assembler/parameter.rb, line 5 def initialize(name, options = {}) @name = name.to_sym @options = options end
Public Instance Methods
name_and_aliases()
click to toggle source
# File lib/assembler/parameter.rb, line 10 def name_and_aliases @name_and_aliases ||= [name] + aliases.map(&:to_sym) end
value_from(hash, &if_required_and_missing)
click to toggle source
# File lib/assembler/parameter.rb, line 14 def value_from(hash, &if_required_and_missing) @memoized_value_from ||= {} # NOTE: Jruby's Hash#hash implementation is BS: # {:foo => :foo}.hash => 1 # {:bar => :bar}.hash => 1 # {:foo => :foo}.to_a.hash => 806614226 # {:bar => :bar}.to_a.hash => 3120054328 # Go figure... memoization_key = hash.to_a.hash return @memoized_value_from[memoization_key] if @memoized_value_from[memoization_key] first_key = key_names.find { |name_or_alias| hash.has_key?(name_or_alias) } raw_value = hash.fetch(first_key) do options.fetch(:default) do if_required_and_missing.call unless if_required_and_missing.nil? # Returning here so we don't call coerce_value(nil) return end end @memoized_value_from[memoization_key] = coerce_value(raw_value) end
Private Instance Methods
aliases()
click to toggle source
# File lib/assembler/parameter.rb, line 75 def aliases @aliases ||= Array(options[:aliases]) + Array(options[:alias]) end
coerce_value(value)
click to toggle source
# File lib/assembler/parameter.rb, line 63 def coerce_value(value) if !coercion value elsif coercion.kind_of?(Symbol) value.send(coercion) elsif coercion.respond_to?(:call) coercion.call(value) else raise ArgumentError, "don't know how to handle coerce value #{coercion}" end end
coercion()
click to toggle source
# File lib/assembler/parameter.rb, line 59 def coercion options[:coerce] end
default()
click to toggle source
# File lib/assembler/parameter.rb, line 55 def default options[:default] end
has_default?()
click to toggle source
# File lib/assembler/parameter.rb, line 51 def has_default? options.has_key?(:default) end
key_names()
click to toggle source
# File lib/assembler/parameter.rb, line 45 def key_names name_and_aliases.flat_map do |name_or_alias| [name_or_alias.to_sym, name_or_alias.to_s] end end