def define_action_helpers
if action == :save
@instance_helper_module.class_eval do
define_method(:valid?) do |*args|
yielded = false
result = self.class.state_machines.transitions(self, :save, :after => false).perform do
yielded = true
super(*args)
end
if defined?(::Sequel::MAJOR) && (::Sequel::MAJOR > 3 || ::Sequel::MAJOR == 3 && ::Sequel::MINOR > 13)
raise_on_failure?(args.first || {}) && !yielded && !result ? raise_hook_failure(:validation) : result
else
raise_on_save_failure && !yielded && !result ? save_failure(:validation) : result
end
end
define_method(defined?(::Sequel::MAJOR) && (::Sequel::MAJOR >= 3 || ::Sequel::MAJOR == 2 && ::Sequel::MINOR == 12) ? :_save : :save) do |*args|
yielded = false
result = self.class.state_machines.transitions(self, :save).perform do
yielded = true
super(*args)
end
if yielded || result
result
elsif defined?(::Sequel::MAJOR) && (::Sequel::MAJOR > 3 || ::Sequel::MAJOR == 3 && ::Sequel::MINOR > 13)
raise_hook_failure(:save)
else
save_failure(:save)
end
end
end unless owner_class.state_machines.any? {|name, machine| machine.action == :save && machine != self}
else
super
end
end