diff --git a/Gemfile b/Gemfile index f656c23..1edf195 100644 --- a/Gemfile +++ b/Gemfile @@ -3,6 +3,6 @@ source "http://rubygems.org" gem 'rake', '~> 0.8.7' gem 'rspec', '~> 2.4.0' -gem 'activesupport', '~> 3.2.0' -gem 'activemodel', '~> 3.2.0' +gem 'activesupport' +gem 'activemodel' # gem 'ruby-debug' diff --git a/lib/grouped_validations.rb b/lib/grouped_validations.rb index 4eba31e..7e022e0 100644 --- a/lib/grouped_validations.rb +++ b/lib/grouped_validations.rb @@ -1,5 +1,6 @@ require 'active_model/validations' require 'grouped_validations/active_model' +require 'grouped_validations/callback' module GroupedValidations extend ActiveSupport::Concern @@ -29,7 +30,7 @@ def validate(*args, &block) end def _define_group_validation_callbacks(group) - define_callbacks :"validate_#{group}", :scope => 'validate' + define_callbacks :"validate_#{group}", :scope => :callback_method, callback_method: :validate end end @@ -45,6 +46,7 @@ def valid?(context=nil) def groups_valid?(*groups) options = groups.extract_options! errors.clear + run_validations! groups.each do |group| raise "Validation group '#{group}' not defined" unless validation_groups.include?(group) _run_group_validation_callbacks(group, options[:context]) @@ -59,12 +61,12 @@ def grouped_errors(context=nil) grouped = {} with_validation_context(context) do - _run_validate_callbacks + run_callbacks(:validate) grouped[nil] = errors validation_groups.each do |group| @errors = nil - send(:"_run_validate_#{group}_callbacks") + run_callbacks(:"validate_#{group}") grouped[group] = errors end end @@ -75,7 +77,7 @@ def grouped_errors(context=nil) def _run_group_validation_callbacks(group, context=nil) with_validation_context(context) do - send(:"_run_validate_#{group}_callbacks") + run_callbacks(:"validate_#{group}") end end diff --git a/lib/grouped_validations/callback.rb b/lib/grouped_validations/callback.rb new file mode 100644 index 0000000..7fa39f7 --- /dev/null +++ b/lib/grouped_validations/callback.rb @@ -0,0 +1,5 @@ +class ActiveSupport::Callbacks::Callback + def callback_method + chain_config[:callback_method] + end +end \ No newline at end of file