Skip to content

Commit

Permalink
Dirty solution for active model 4.1
Browse files Browse the repository at this point in the history
  • Loading branch information
Stanislaw Klajn committed Apr 28, 2015
1 parent 62aa249 commit 49f634a
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 9 deletions.
5 changes: 3 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ 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', '~> 4.1.0'
gem 'activemodel', '~> 4.1.0'
gem 'method_source'
# gem 'ruby-debug'
17 changes: 10 additions & 7 deletions lib/grouped_validations.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'active_model/validations'
require 'grouped_validations/active_model'
require 'grouped_validations/callback'

module GroupedValidations
extend ActiveSupport::Concern
Expand Down Expand Up @@ -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
Expand All @@ -45,9 +46,11 @@ def valid?(context=nil)
def groups_valid?(*groups)
options = groups.extract_options!
errors.clear
groups.each do |group|
raise "Validation group '#{group}' not defined" unless validation_groups.include?(group)
_run_group_validation_callbacks(group, options[:context])
with_validation_context(options[:context]) do
groups.each do |group|
raise "Validation group '#{group}' not defined" unless validation_groups.include?(group)
run_callbacks("validate_#{group}")
end
end
errors.empty?
end
Expand All @@ -59,12 +62,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
Expand All @@ -75,7 +78,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

Expand Down
5 changes: 5 additions & 0 deletions lib/grouped_validations/callback.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class ActiveSupport::Callbacks::Callback
def callback_method
chain_config[:callback_method]
end
end

0 comments on commit 49f634a

Please sign in to comment.