lib/contextualizer.rb in contextualizer-0.0.2 vs lib/contextualizer.rb in contextualizer-0.0.3
- old
+ new
@@ -1,36 +1,36 @@
require 'contextualizer/version'
module Contextualizer
def context(*attrs, **opt_attrs)
- unless @_setter
- @_setter = Setter.new
- include Contextualizer.init_for(@_setter)
+ unless @__setter
+ @__setter = Setter.new
+ include Contextualizer.init_for(@__setter)
end
- @_setter.add_attrs(*attrs, **opt_attrs)
+ @__setter.add_attrs(*attrs, **opt_attrs)
attr_reader *attrs, *opt_attrs.keys
end
def self.extended(klass)
klass.class_eval do
attr_reader :context
- @_setter = Setter.new
- include Contextualizer.init_for(@_setter, true)
+ @__setter = Setter.new
+ include Contextualizer.init_for(@__setter, false)
end
end
- def self.init_for(setter, first = false)
+ def self.init_for(setter, inherited = true)
Module.new do |mod|
- if first
+ if inherited
mod.send(:define_method, :initialize) do |args = {}|
- super()
+ super(args)
setter.set(self, args)
end
else
mod.send(:define_method, :initialize) do |args = {}|
- super(args)
+ super()
setter.set(self, args)
end
end
end
end
@@ -46,14 +46,16 @@
end
def set(obj, args)
context = obj.context&.dup || {}
- @opt_attrs.each { |key, val| context[key] = args[key] || val }
- @attrs.each { |key| context[key] = args[key] }
+ @opt_attrs.each { |key, default| context[key] = args.key?(key) ? args[key] : default }
+ @attrs.each do |key|
+ fail ":#{key} was not found in scope" unless args.key?(key)
+ context[key] = args[key]
+ end
context.each do |attr, value|
- fail ":#{attr} was not found in scope" if value.nil?
obj.instance_variable_set :"@#{attr}", value
end
obj.instance_variable_set(:@context, context.freeze)
end