Module: AttrExtras::ClassMethods
- Included in:
- Class
- Defined in:
- lib/attr_extras.rb
Instance Method Summary collapse
- #attr_id_query(*names) ⇒ Object
- #attr_initialize(*names) ⇒ Object
- #attr_private(*names) ⇒ Object
- #attr_query(*names) ⇒ Object
- #attr_value(*names) ⇒ Object
- #method_object(method_name, *names) ⇒ Object
- #pattr_initialize(*names) ⇒ Object
Instance Method Details
#attr_id_query(*names) ⇒ Object
58 59 60 |
# File 'lib/attr_extras.rb', line 58 def attr_id_query(*names) attr_query_with_suffix(*names, "_id") end |
#attr_initialize(*names) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/attr_extras.rb', line 5 def attr_initialize(*names) min_arity = names.count { |n| not n.is_a?(Array) } max_arity = names.length define_method(:initialize) do |*values| provided_arity = values.length unless (min_arity..max_arity).include?(provided_arity) arity_range = [min_arity, max_arity].uniq.join("..") raise ArgumentError, "wrong number of arguments (#{provided_arity} for #{arity_range})" end names.zip(values).each do |name_or_names, value| if name_or_names.is_a?(Array) value ||= {} name_or_names.each do |key| instance_variable_set("@#{key}", value[key]) end else instance_variable_set("@#{name_or_names}", value) end end end end |
#attr_private(*names) ⇒ Object
31 32 33 34 |
# File 'lib/attr_extras.rb', line 31 def attr_private(*names) attr_reader(*names) private(*names) end |
#attr_query(*names) ⇒ Object
54 55 56 |
# File 'lib/attr_extras.rb', line 54 def attr_query(*names) attr_query_with_suffix(*names, "") end |
#attr_value(*names) ⇒ Object
41 42 43 44 |
# File 'lib/attr_extras.rb', line 41 def attr_value(*names) attr_initialize(*names) attr_reader(*names.flatten) end |
#method_object(method_name, *names) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/attr_extras.rb', line 46 def method_object(method_name, *names) singleton_class.send(:define_method, method_name) do |*values| new(*values).send(method_name) end pattr_initialize(*names) end |
#pattr_initialize(*names) ⇒ Object
36 37 38 39 |
# File 'lib/attr_extras.rb', line 36 def pattr_initialize(*names) attr_initialize(*names) attr_private(*names.flatten) end |