Sha256: 7c9f94fef2add8c01298632d8b8eebdca36821f5065a9e2765f5b01d95e5cb84
Contents?: true
Size: 1.56 KB
Versions: 1
Compression:
Stored size: 1.56 KB
Contents
module Dbuilder::Builder def self.extended(klass) validate_class_name klass.name construct_builder_hashes klass.name.gsub(/builder$/i, "") end def builder_default(key, value) klazz = class << self; self; end Thread.current["#{self.class_name}_builder_defaults"][key.to_sym] = value klazz.send(:define_method, "with_#{key}".to_sym) do |overridden_value| Thread.current["#{self.class_name}_builder_overrides"][key.to_sym] = overridden_value self end end def builder_defaults(*defaults) raise "bulder_defaults expects pair arguments example: builder_defaults key, value, key, value ..." unless defaults.size % 2 == 0 defaults.each_slice 2 do |pie| builder_default pie[0], pie[1] end end def class_name name.gsub(/builder$/i, "") end def build defaults = Thread.current["#{class_name}_builder_defaults"] overrides = Thread.current["#{class_name}_builder_overrides"] properties = defaults.merge overrides obj =\ begin Kernel.const_get class_name rescue Object.const_set class_name, Class.new end properties.each {|k,v| obj.send(:define_method, k.to_sym){v} } obj end private def self.validate_class_name(name) unless name.end_with? "Builder" raise "The extending class must have 'Builder' at the end of the class name" end end def self.construct_builder_hashes(class_name) class_name Thread.current["#{class_name}_builder_defaults"] = Hash.new Thread.current["#{class_name}_builder_overrides"] = Hash.new end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dbuilder-0.5.0 | lib/dbuilder/builder.rb |