Skip to content
This repository has been archived by the owner on Aug 6, 2020. It is now read-only.

Commit

Permalink
Now using validation_reflection-active_model for common Validation in…
Browse files Browse the repository at this point in the history
…terface

This allows us to drop the ActiveRecord 2 specific adapter
  • Loading branch information
bcardarella committed Jul 15, 2010
1 parent f84745e commit f76f408
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 165 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ tmtags

## BUNDLER
.bundle/
Gemfile.lock

## PROJECT::GENERAL
coverage
Expand Down
6 changes: 3 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
source 'http://rubygems.org'

gem 'validation_reflection', '0.3.6'
gem 'validation_reflection-active_model', '0.2.0'
gem 'json'

group :test do
gem 'jspec'
gem 'rspec'
# gem 'activerecord', '2.3.8'
gem 'activemodel', '3.0.0.beta4'
gem 'bson_ext', '1.0.1'
gem 'bson_ext', '1.0.4'
gem 'mongoid', '2.0.0.beta9'
gem 'crack'
gem 'bourne'
gem 'rack-test'
end
end
62 changes: 0 additions & 62 deletions Gemfile.lock

This file was deleted.

50 changes: 40 additions & 10 deletions lib/client_side_validations/adapters/active_model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,19 @@ def build_validation_hash(validation, message_key = 'message')
if validation.kind == :inclusion || validation.kind == :exclusion
validation.options[:in] = validation.options[:in].to_a
end

if validation.kind == :size
validation.kind = :length
end

if validation.kind == :length &&
(range = (validation.options.delete(:within) || validation.options.delete(:in)))
validation.options[:minimum] = range.first
validation.options[:maximum] = range.last
elsif validation.kind == :inclusion || validation.kind == :exclusion
validation.options[:in] = validation.options[:in].to_a
end

super
end

Expand All @@ -31,38 +44,38 @@ def supported_validation?(validation)
def get_validation_message(validation)
default = case validation.kind
when :presence
I18n.translate('errors.messages.blank')
I18n.translate(i18n_prefix + 'errors.messages.blank')
when :format
I18n.translate('errors.messages.invalid')
I18n.translate(i18n_prefix + 'errors.messages.invalid')
when :length
if count = validation.options[:minimum]
I18n.translate('errors.messages.too_short').sub('%{count}', count.to_s)
I18n.translate(i18n_prefix + 'errors.messages.too_short').sub(orm_error_interpolation(:count), count.to_s)
elsif count = validation.options[:maximum]
I18n.translate('errors.messages.too_long').sub('%{count}', count.to_s)
I18n.translate(i18n_prefix + 'errors.messages.too_long').sub(orm_error_interpolation(:count), count.to_s)
end
when :numericality
I18n.translate('errors.messages.not_a_number')
I18n.translate(i18n_prefix + 'errors.messages.not_a_number')
when :uniqueness
if defined?(ActiveRecord) && base.kind_of?(ActiveRecord::Base)
I18n.translate('activerecord.errors.messages.taken')
elsif defined?(Mongoid) && base.class.included_modules.include?(Mongoid::Document)
I18n.translate('errors.messages.taken')
end
when :confirmation
I18n.translate('errors.messages.confirmation')
I18n.translate(i18n_prefix + 'errors.messages.confirmation')
when :acceptance
I18n.translate('errors.messages.accepted')
I18n.translate(i18n_prefix + 'errors.messages.accepted')
when :inclusion
I18n.translate('errors.messages.inclusion')
I18n.translate(i18n_prefix + 'errors.messages.inclusion')
when :exclusion
I18n.translate('errors.messages.exclusion')
I18n.translate(i18n_prefix + 'errors.messages.exclusion')
end

message = validation.options.delete(:message)
if message.kind_of?(String)
message
elsif message.kind_of?(Symbol)
I18n.translate("errors.models.#{base.class.to_s.downcase}.attributes.#{validation.attributes.first}.#{message}")
I18n.translate(i18n_prefix + "errors.models.#{base.class.to_s.downcase}.attributes.#{validation.attributes.first}.#{message}")
else
default
end
Expand All @@ -72,6 +85,23 @@ def get_validation_method(validation)
validation.kind.to_s
end

def i18n_prefix
if defined?(::ActiveModel)
''
else # ActiveRecord 2.x
'activerecord.'
end
end

def orm_error_interpolation(name)
if defined?(::ActiveModel)
"%{name}"

else # ActiveRecord 2.x
"{{#{name}}}"
end
end

end
end
end
Expand Down
87 changes: 0 additions & 87 deletions lib/client_side_validations/adapters/active_record_2.rb

This file was deleted.

12 changes: 9 additions & 3 deletions lib/client_side_validations/orm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,17 @@ def dnc_csv_adapter
DNCLabs::ClientSideValidations::Adapter = DNCLabs::ClientSideValidations::Adapters::ActiveModel
klass = ActiveModel::Validations

elsif defined?(ActiveRecord)
else defined?(ActiveRecord)
if ActiveRecord::VERSION::MAJOR == 2
require 'client_side_validations/adapters/active_record_2'
DNCLabs::ClientSideValidations::Adapter = DNCLabs::ClientSideValidations::Adapters::ActiveRecord2
require 'validation_reflection/active_model'
require 'client_side_validations/adapters/active_model'
DNCLabs::ClientSideValidations::Adapter = DNCLabs::ClientSideValidations::Adapters::ActiveModel
klass = ActiveRecord::Base

ActiveRecord::Base.class_eval do
::ActiveRecordExtensions::ValidationReflection.reflected_validations << :validates_size_of
::ActiveRecordExtensions::ValidationReflection.install(self)
end
end
end

Expand Down

0 comments on commit f76f408

Please sign in to comment.