adv_attr_accessor.rb 791 字节
Newer Older
1
module ActionMailer
2
  module AdvAttrAccessor #:nodoc:
3
    def self.included(base)
4 5 6
      base.extend(ClassMethods)
    end

7
    module ClassMethods #:nodoc:
8 9
      def adv_attr_accessor(*names)
        names.each do |name|
10 11
          ivar = "@#{name}"

12
          define_method("#{name}=") do |value|
13
            instance_variable_set(ivar, value)
14 15 16 17 18
          end

          define_method(name) do |*parameters|
            raise ArgumentError, "expected 0 or 1 parameters" unless parameters.length <= 1
            if parameters.empty?
19 20 21
              if instance_variables.include?(ivar)
                instance_variable_get(ivar)
              end
22
            else
23
              instance_variable_set(ivar, parameters.first)
24 25 26 27 28 29 30
            end
          end
        end
      end
    end
  end
end