class Revoke::CallbackCreator
Public Class Methods
new(class_name, callback_name, event, time, deciding_event, options = {})
click to toggle source
# File lib/revoke/callback_creator.rb, line 3 def initialize(class_name, callback_name, event, time, deciding_event, options = {}) if parameters_valid?(callback_name, event, time, deciding_event) error_message = options[:message] if options.present? class_name.class_eval do send("before_#{callback_name}", :"revoke_#{callback_name}_handler") define_method("revoke_#{callback_name}_handler") do difference = (Time.current - self.send(Revoke::Constants::ACTION_MAP[deciding_event])).to_i if difference.positive? && difference.send(Revoke::Constants::EVENT[event], time) errors.add(:base, (error_message || I18n.t(:error, scope: [:revoke, callback_name, :after], class_name: self.class.name, time: send("allowed_time_to_#{callback_name}?"), event: event, deciding_event: deciding_event))) throw(:abort) end end define_method("allowed_time_to_#{callback_name}?") do parts = ActiveSupport::Duration.build(time.to_i).parts ''.tap do |string| parts.each_pair do |key, value| string.concat("#{value} #{key}") end string end end private :"revoke_#{callback_name}_handler" end end end
Public Instance Methods
parameters_valid?(callback_name, event, time, deciding_event)
click to toggle source
# File lib/revoke/callback_creator.rb, line 37 def parameters_valid?(callback_name, event, time, deciding_event) callback_valid?(callback_name) && event_valid?(event) && time_valid?(time) && deciding_event_valid?(deciding_event) end
Private Instance Methods
callback_valid?(callback_name)
click to toggle source
# File lib/revoke/callback_creator.rb, line 44 def callback_valid?(callback_name) if callback_name.in?(Revoke::Constants::ACTION) true else raise_error_message(callback_name, Revoke::Constants::ACTION) end end
deciding_event_valid?(deciding_event)
click to toggle source
# File lib/revoke/callback_creator.rb, line 69 def deciding_event_valid?(deciding_event) allowed_deciding_events = Revoke::Constants::ACTION_MAP.keys if deciding_event.in?(allowed_deciding_events) true else raise_error_message(deciding_event, allowed_deciding_events) end end
event_valid?(event)
click to toggle source
# File lib/revoke/callback_creator.rb, line 52 def event_valid?(event) allowed_event_keys = Revoke::Constants::EVENT.keys if event.in?(allowed_event_keys) true else raise_error_message(event, allowed_event_keys) end end
raise_error_message(option, allowed_options)
click to toggle source
# File lib/revoke/callback_creator.rb, line 78 def raise_error_message(option, allowed_options) raise ArgumentError, "Invalid option supplied: #{option}\n Allowed Options: #{allowed_options.join(', ')}" end
time_valid?(time)
click to toggle source
# File lib/revoke/callback_creator.rb, line 61 def time_valid?(time) if time.is_a?(ActiveSupport::Duration) true else raise ArgumentError, 'Enter duration like: 10.seconds' end end