aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/adv_attr_accessor.rb
blob: be6b1feca98961d4333ffdb8b99137f4dd24579d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module ActionMailer
  module AdvAttrAccessor #:nodoc:
    def adv_attr_accessor(*names)
      names.each do |name|
        ivar = "@#{name}"

        class_eval <<-ACCESSORS, __FILE__, __LINE__ + 1
          def #{name}=(value)
            #{ivar} = value
          end

          def #{name}(*args)
            raise ArgumentError, "expected 0 or 1 parameters" unless args.length <= 1
            if args.empty?
              #{ivar} if instance_variable_names.include?(#{ivar.inspect})
            else
              #{ivar} = args.first
            end
          end
        ACCESSORS

        self.protected_instance_variables << ivar if self.respond_to?(:protected_instance_variables)
      end
    end
  end
end