module Attire
Public Class Methods
attire(base, param_str, method: :initialize, verb: nil, &after)
click to toggle source
# File lib/attire.rb, line 3 def attire(base, param_str, method: :initialize, verb: nil, &after) names = eval("->(#{param_str}){}").parameters.map(&:last) def_init(base, param_str, method, names) add_getters(base, names) base.send(:define_method, :__after) { instance_exec(&after) if after } def_verb(base, verb) if verb end
Private Class Methods
add_getters(base, names)
click to toggle source
# File lib/attire.rb, line 21 def add_getters(base, names) base.send(:attr_reader, *names) base.send(:private, *names) end
def_init(base, param_str, method, names)
click to toggle source
# File lib/attire.rb, line 13 def def_init(base, param_str, method, names) base.class_eval "def #{method}(#{param_str})\n#{ivars(names)}\n__after\nend" end
def_verb(base, verb)
click to toggle source
# File lib/attire.rb, line 26 def def_verb(base, verb) base.define_singleton_method(verb) { |*a, &b| new(*a, &b).send(verb) } end
ivars(names)
click to toggle source
# File lib/attire.rb, line 17 def ivars(names) names.map { |name| "@#{name} = #{name}\n" }.join end