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