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