lib/easy_rails_money/active_record.rb
require "easy_rails_money/active_record/money_dsl"
require "easy_rails_money/active_record/migration/schema_statements"
require "easy_rails_money/active_record/migration/table"
require "easy_rails_money/active_record/migration/table_definition"
require "easy_rails_money/money_validator"
ActiveRecord::Base.send :include, EasyRailsMoney::ActiveRecord::MoneyDsl
ActiveRecord::Migration.send :include, EasyRailsMoney::ActiveRecord::Migration::SchemaStatements
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, EasyRailsMoney::ActiveRecord::Migration::TableDefinition
ActiveRecord::ConnectionAdapters::Table.send :include, EasyRailsMoney::ActiveRecord::Migration::Table
class ActiveRecord::Base
def self.validates_money *args
options = args.extract_options!
validates_with EasyRailsMoney::MoneyValidator, options.merge(:attributes => args)
# validates lower-level columns
args.each do |column_name|
validates "#{column_name}_money", :numericality => { only_integer: true, greater_than_or_equal_to: 0 }, :allow_nil => options[:allow_nil]
end
allowed_currency = options[:allowed_currency] || EasyRailsMoney::MoneyValidator.currency_list
if single_currency?
# TODO: a version of inclusion_in validator that can compare
# Symbol and string
validates :currency, :inclusion => { in: allowed_currency }, :allow_nil => options[:allow_nil]
else
args.each do |column_name|
validates "#{column_name}_currency", :presence => true, :inclusion => { in: allowed_currency }, :allow_nil => options[:allow_nil]
end
end
end
end