lib/spinning_wheel/fabric.rb in spinning_wheel-0.1.0 vs lib/spinning_wheel/fabric.rb in spinning_wheel-0.2.0

- old
+ new

@@ -4,32 +4,62 @@ attr_reader :name, :class_name def initialize(name:, class_name:, &block) @name = name @class_name = class_name - @attributes = {} @block = block end def build @klass = @class_name.constantize - instance_eval(&@block) + attributes = DSL.run(@block) parameters = @klass.instance_method(:initialize).parameters required_parametes = [] parameters.each do |parameter| if parameter[0] == :req required_parametes << parameter[1] end end - if required_parametes == @attributes.keys - @klass.new(*@attributes.values) + if required_parametes == attributes.keys + @klass.new(*attributes.values) else - @klass.new(**@attributes) + @klass.new(**attributes) end end - def method_missing(name, *args, &block) - @attributes[name] = block.call + + class DSL + + attr_accessor :attributes + + def self.run(block) + dsl = self.new + dsl.instance_eval(&block) + return dsl.attributes + end + + def initialize() + @attributes = Hash.new + clean_up_object_methods() + end + + def method_missing(name, *args, &block) + @attributes[name] = block.call + end + + private + + def clean_up_object_methods + self.instance_eval('undef :clone') + self.instance_eval('undef :display') + self.instance_eval('undef :dup') + self.instance_eval('undef :extend') + self.instance_eval('undef :freeze') + self.instance_eval('undef :frozen?') + self.instance_eval('undef :inspect') + self.instance_eval('undef :taint') + self.instance_eval('undef :tap') + end end end end