class Wardrobe::BlockSetup
Attributes
block_options[R]
calling_klass[R]
Public Class Methods
create_array_method(name)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 82 def create_array_method(name) define_method(name) do |*values, &blk| begin block_options[name] ||= [] block_options[name].push(*values) instance_exec(&blk) if blk || block_given? ensure block_options[name].pop(values.length) block_options.delete(name) if block_options[name].empty? end end end
Also aliased as: create_set_method
create_boolean_method(name)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 110 def create_boolean_method(name) define_method(name) do |val = true, &blk| begin block_options[name] ||= [] block_options[name] << val instance_exec(&blk) if blk || block_given? ensure block_options[name].pop block_options.delete(name) if block_options[name].empty? end end end
create_hash_method(name)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 97 def create_hash_method(name) define_method(name) do |**args, &blk| begin block_options[name] ||= {} block_options[name].merge!(args) instance_exec(&blk) if blk || block_given? ensure args.keys.map { |key| block_options[name].delete(key) } block_options.delete(name) if block_options[name].empty? end end end
new(calling_klass)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 7 def initialize(calling_klass) @calling_klass = calling_klass @block_options = {} end
register_option(option)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 77 def register_option(option) return if option.klass == Proc || option.klass == Object send("create_#{option.klass_name}_method", option.name) end
Public Instance Methods
attribute(name, klass, **keyargs, &blk)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 23 def attribute(name, klass, **keyargs, &blk) calling_klass.attribute(name, klass, **merged_options_for_attribute(keyargs), &blk) end
attributes(**kargs, &blk)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 27 def attributes(**kargs, &blk) run(**kargs, &blk) end
convert_to_array_if_not_array(result, key)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 70 def convert_to_array_if_not_array(result, key) return unless result[key] && !result[key].is_a?(Array) result[key] = [result[key]] end
merge_array(result, key, value)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 53 def merge_array(result, key, value) convert_to_array_if_not_array(result, key) if result[key] value.dup + result[key] else value.dup end end
merge_boolean(result, key, value)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 40 def merge_boolean(result, key, value) result[key] || value.last end
merge_hash(result, key, value)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 62 def merge_hash(result, key, value) if result[key] result[key].merge(value) else value.dup end end
merge_set(result, key, value)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 44 def merge_set(result, key, value) convert_to_array_if_not_array(result, key) if result[key] Set.new(value.dup + result[key]) else Set.new(value.dup) end end
merged_options_for_attribute(args)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 31 def merged_options_for_attribute(args) result = args.dup block_options.map do |k, v| option = Wardrobe.options[k] result[k] = send("merge_#{option.klass_name}", result, k, v) end result end
run(**kargs, &blk)
click to toggle source
# File lib/wardrobe/block_setup.rb, line 12 def run(**kargs, &blk) if (karg = kargs.first) kargs.delete(karg.first) send(*karg) do run(**kargs, &blk) end else instance_exec(&blk) end end