Module: EcoRake::Default::Const::ClassMethods
- Defined in:
- lib/eco-rake/default/const.rb
Instance Method Summary collapse
-
#attr_const(*attrs, required: false, override: false, default: :not_used) ⇒ Object
Creates (overridable) method(s) that link to an expected constant with same name (in capitals).
Instance Method Details
#attr_const(*attrs, required: false, override: false, default: :not_used) ⇒ Object
Note:
this creates one method on the class and one on instances thereof.
Creates (overridable) method(s) that link to an expected constant with same name (in capitals).
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/eco-rake/default/const.rb', line 19 def attr_const(*attrs, required: false, override: false, default: :not_used) attrs.each do |attr| attr = attr.to_s.freeze unless override msg = "#{__method__} does not allow method override. Offending attr: #{attr}" raise ArgumentError, "#{msg} (class method)" if methods.include?(attr) raise ArgumentError, "#{msg} (instance method)" if instance_methods.include?(attr) end define_singleton_method attr do msg = "Missing const '#{attr.to_s.upcase}' in #{self}" value = resolve_const(attr) value = default if value.nil? && default != :not_used raise NameError, msg if value.nil? && required yield(value) if block_given? value end define_method attr do |&block| self.class.send(attr, &block) end end end |