Module: Rant::MetaUtils
- Included in:
- Generators::Archive::Base
- Defined in:
- lib/rant/metautils.rb
Instance Method Summary collapse
-
#rant_attr(attr_name) ⇒ Object
Creates three accessor methods: obj.attr_name:: Return value of instance variable @attr_name obj.attr_name = val:: Set value instance variable @attr_name to val obj.attr_name val:: same as above.
-
#rant_flag(attr_name) ⇒ Object
- Creates three accessor methods: obj.attr_name?
- Return value, true or false obj.attr_name
- Set attribute to true obj.no_attr_name
-
Set attribute to false.
- #redirect_accessor(receiver, *attributes) ⇒ Object
- #redirect_message(receiver, *messages) ⇒ Object
-
#redirect_reader(receiver, *attributes) ⇒ Object
Create attribute reader methods that redirect to the entity given as first argument (e.g. an instance variable name).
-
#redirect_writer(receiver, *attributes) ⇒ Object
Create attribute writer methods that redirect to the entity given as first argument (e.g. an instance variable name).
-
#string_attr(attr_name) ⇒ Object
Creates accessor methods like #rant_attr for the attribute attr_name.
-
#valid_attr_name(attr_name) ⇒ Object
attr_name is converted to a string with #to_s and has to match /^w+$/.
Instance Method Details
#rant_attr(attr_name) ⇒ Object
Creates three accessor methods:
obj.attr_name:: Return value of instance variable
@attr_name
obj.attr_name = val:: Set value instance variable
@attr_name to val
obj.attr_name val:: same as above
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/rant/metautils.rb', line 14 def rant_attr attr_name attr_name = valid_attr_name attr_name attr_writer attr_name module_eval <<-EOD def #{attr_name} val=Rant.__rant_no_value__ if val.equal? Rant.__rant_no_value__ @#{attr_name} else @#{attr_name} = val end end EOD nil end |
#rant_flag(attr_name) ⇒ Object
Creates three accessor methods:
obj.attr_name?:: Return value, true or false
obj.attr_name:: Set attribute to true
obj.no_attr_name:: Set attribute to false
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rant/metautils.rb', line 32 def rant_flag attr_name attr_name = valid_attr_name attr_name module_eval <<-EOD def #{attr_name}? @#{attr_name} end def #{attr_name} @#{attr_name} = true end def no_#{attr_name} @#{attr_name} = false end EOD end |
#redirect_accessor(receiver, *attributes) ⇒ Object
70 71 72 73 |
# File 'lib/rant/metautils.rb', line 70 def redirect_accessor(receiver, *attributes) redirect_reader(receiver, *attributes) redirect_writer(receiver, *attributes) end |
#redirect_message(receiver, *messages) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rant/metautils.rb', line 97 def (receiver, *) .each { || module_eval <<-EOD def #{}(*args, &blk) # the first ; on the next line is needed # because of rant-import ;#{receiver}.#{}(*args, &blk) end EOD } nil end |
#redirect_reader(receiver, *attributes) ⇒ Object
Create attribute reader methods that redirect to the entity given as first argument (e.g. an instance variable name).
76 77 78 79 80 81 82 83 84 |
# File 'lib/rant/metautils.rb', line 76 def redirect_reader(receiver, *attributes) attributes.each { |attr_name| attr_name = valid_attr_name attr_name module_eval <<-EOD def #{attr_name}; #{receiver}.#{attr_name}; end EOD } nil end |
#redirect_writer(receiver, *attributes) ⇒ Object
Create attribute writer methods that redirect to the entity given as first argument (e.g. an instance variable name).
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/rant/metautils.rb', line 87 def redirect_writer(receiver, *attributes) attributes.each { |attr_name| attr_name = valid_attr_name attr_name module_eval <<-EOD def #{attr_name}=(val); #{receiver}.#{attr_name}= val; end EOD } nil end |
#string_attr(attr_name) ⇒ Object
Creates accessor methods like #rant_attr for the attribute attr_name. Additionally, values are converted with to_str before assignment to instance variables happens.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rant/metautils.rb', line 49 def string_attr attr_name attr_name = valid_attr_name attr_name module_eval <<-EOD def #{attr_name}=(val) if val.respond_to? :to_str @#{attr_name} = val.to_str else raise ArgumentError, "string (#to_str) value required", caller end end def #{attr_name} val=Rant.__rant_no_value__ if val.equal? Rant.__rant_no_value__ @#{attr_name} else self.__send__(:#{attr_name}=, val) end end EOD nil end |
#valid_attr_name(attr_name) ⇒ Object
attr_name is converted to a string with #to_s and has to match /^w+$/. Returns attr_name.to_s.
111 112 113 114 115 116 117 |
# File 'lib/rant/metautils.rb', line 111 def valid_attr_name attr_name attr_name = attr_name.to_s attr_name =~ /^\w+\??$/ or raise ArgumentError, "argument has to match /^\w+\??$/", caller attr_name end |