diff options
Diffstat (limited to 'actionmailer/lib/action_mailer/adv_attr_accessor.rb')
-rw-r--r-- | actionmailer/lib/action_mailer/adv_attr_accessor.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/adv_attr_accessor.rb b/actionmailer/lib/action_mailer/adv_attr_accessor.rb new file mode 100644 index 0000000000..47c02ba198 --- /dev/null +++ b/actionmailer/lib/action_mailer/adv_attr_accessor.rb @@ -0,0 +1,58 @@ +module ActionMailer + module AdvAttrAccessor + def self.append_features(base) + super + base.extend(ClassMethods) + end + + module ClassMethods + + def adv_attr_accessor(*names) + names.each do |name| + define_method("#{name}=") do |value| + instance_variable_set("@#{name}", value) + end + + define_method(name) do |*parameters| + raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1 + if parameters.empty? + instance_variable_get("@#{name}") + else + instance_variable_set("@#{name}", parameters.first) + end + end + end + end + + end + end +end +module ActionMailer + module AdvAttrAccessor + def self.append_features(base) + super + base.extend(ClassMethods) + end + + module ClassMethods + + def adv_attr_accessor(*names) + names.each do |name| + define_method("#{name}=") do |value| + instance_variable_set("@#{name}", value) + end + + define_method(name) do |*parameters| + raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1 + if parameters.empty? + instance_variable_get("@#{name}") + else + instance_variable_set("@#{name}", parameters.first) + end + end + end + end + + end + end +end |