def money *attributes
      
      options = attributes.last.is_a?(Hash) ? attributes.pop : {}
      
      attributes.each do |attribute|
        
        # Get the attribute typecasted into money 
        # @return [Exchange::Money] an instance of money
        #
        install_money_getter attribute, options
        
        # Set the attribute either with money or just any data
        # Implicitly converts values given that are not in the same currency as the currency option evaluates to
        # @param [Exchange::Money, String, Numberic] data The data to set the attribute to
        # 
        install_money_setter attribute, options
        
      end
      
      # Evaluates options given either as symbols or as procs
      # @param [Symbol, Proc] option The option to evaluate
      #
      install_money_option_eval
      
      # Evaluates whether an error should be raised because there is no currency present
      # @param [Symbol] currency The currency, if given
      #
      install_currency_error_tester
    end
def money *attributes
      
      options = attributes.last.is_a?(Hash) ? attributes.pop : {}
      
      attributes.each do |attribute|
        
        # Get the attribute typecasted into money 
        # @return [Exchange::Money] an instance of money
        #
        install_money_getter attribute, options
        
        # Set the attribute either with money or just any data
        # Implicitly converts values given that are not in the same currency as the currency option evaluates to
        # @param [Exchange::Money, String, Numberic] data The data to set the attribute to
        # 
        install_money_setter attribute, options
        
      end
      
      # Evaluates options given either as symbols or as procs
      # @param [Symbol, Proc] option The option to evaluate
      #
      install_money_option_eval
      
      # Evaluates whether an error should be raised because there is no currency present
      # @param [Symbol] currency The currency, if given
      #
      install_currency_error_tester
    end
installs a setter and a getter for the attribute you want to typecast as exchange money
 @overload def money(*attributes, options={})
   @param [Symbol] attributes The attributes you want to typecast as money.
   @param [Hash] options Pass a hash as last argument as options
   @option options [Symbol, Proc] :currency The currency to evaluate the money with. Can be a symbol or a proc
   @option options [Symbol, Proc] :at The time at which the currency should be casted. All conversions of this currency will take place at this time
 @raise [NoCurrencyError] if no currency option is given or the currency evals to nil
 @example configure money with symbols, the currency option here will call the method currency in the object context
   money :price, :currency => :currency, :time => :created_at
 @example configure money with a proc, the proc will be called with the object as an argument. This is equivalent to the example above
   money :price, :currency => lambda {|o| o.currency}, :time => lambda{|o| o.created_at}