module Chickpea
Constants
- VERSION
Public Class Methods
check_type(obj, nv)
click to toggle source
# File lib/chickpea.rb, line 24 def check_type(obj, nv) case obj when true, false unless nv == true || nv == false raise(TypeError.new(nv, :Boolean)) end else unless nv.is_a?(obj.class) raise(TypeError.new(nv, obj.class.name)) end end end
def_accessors(klass, key, nv)
click to toggle source
# File lib/chickpea.rb, line 11 def def_accessors(klass, key, nv) ( case nv when true, false [[:"#{key}?", -> { nv }]] else [] end + [[:"#{key}", -> { nv }]] ).each do |(meth, block)| klass.define_method(meth, &block) end end
make_stash(hash)
click to toggle source
# File lib/chickpea.rb, line 37 def make_stash(hash) klass = Class.new hash.each do |key, val| obj = if val.is_a?(Hash) make_stash(val) else klass.define_method(:"#{key}=") do |nv| Chickpea.check_type(val, nv) Chickpea.def_accessors(klass, key, nv) end val end Chickpea.def_accessors(klass, key, obj) end klass.define_method(:to_h) do hash.map do |k, v| [k, send(k).then { |r| v.is_a?(Hash) ? r.to_h : r }] end.to_h end klass.define_method(:merge!) do |hash| hash.each do |k, v| v.is_a?(Hash) ? send(k).merge!(v) : send(:"#{k}=", v) end end klass.new end
Also aliased as: new