class Hashcraft::Base
Super-class for craftable objects.
Attributes
data[R]
Public Class Methods
new(opts = {}) { |self| ... }
click to toggle source
# File lib/hashcraft/base.rb, line 25 def initialize(opts = {}, &block) @data = {} load_default_data load_opts(opts) return unless block_given? if block.arity == 1 yield self else instance_eval(&block) end end
Public Instance Methods
to_h()
click to toggle source
Main compilation method. Once an object is hydrated, you can call this method to get the materialized hash.
# File lib/hashcraft/base.rb, line 42 def to_h data.each_with_object({}) do |(key, value), memo| method = value.is_a?(Array) ? :evaluate_values! : :evaluate_value! send(method, memo, key, value) end end
Private Instance Methods
default!(option)
click to toggle source
# File lib/hashcraft/base.rb, line 74 def default!(option) return self unless option.eager? key = hash_key(option) value = Transformers.instance.transform(value_transformer_to_use, option.default.dup, option) data[key] = value self end
evaluate_value!(data, key, value)
click to toggle source
# File lib/hashcraft/base.rb, line 68 def evaluate_value!(data, key, value) data[key] = (value.is_a?(Hashcraft::Base) ? value.to_h : value) self end
evaluate_values!(data, key, values)
click to toggle source
# File lib/hashcraft/base.rb, line 62 def evaluate_values!(data, key, values) data[key] = values.map { |value| value.is_a?(Hashcraft::Base) ? value.to_h : value } self end
hash_key(option)
click to toggle source
# File lib/hashcraft/base.rb, line 95 def hash_key(option) Transformers.instance.transform(key_transformer_to_use, option.hash_key, option) end
load_default_data()
click to toggle source
# File lib/hashcraft/base.rb, line 54 def load_default_data option_set.each { |option| default!(option) } end
load_opts(opts)
click to toggle source
# File lib/hashcraft/base.rb, line 58 def load_opts(opts) (opts || {}).each { |k, v| send(k, v) } end
value!(option, value, &block)
click to toggle source
# File lib/hashcraft/base.rb, line 85 def value!(option, value, &block) key = hash_key(option) value = option.craft_value(value, &block) value = Transformers.instance.transform(value_transformer_to_use, value, option) option.value!(data, key, value) self end