Class: ForemanTasks::Triggering
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- ForemanTasks::Triggering
- Defined in:
- app/models/foreman_tasks/triggering.rb
Constant Summary collapse
- PARAMS =
[:start_at_raw, :start_before_raw, :max_iteration, :input_type, :cronline, :days, :days_of_week, :time, :end_time_limited, :end_time, :purpose].freeze
- ALLOWED_MODES =
[:immediate, :future, :recurring].freeze
- ALLOWED_INPUT_TYPES =
[:cronline, :monthly, :weekly, :daily, :hourly].freeze
- TIME_FORMAT =
'%Y-%m-%d %H:%M'.freeze
- TIME_REGEXP =
/\A\d{4}-\d{2}-\d{2} \d{2}:\d{2}\Z/.freeze
- DAYS_REGEXP =
/\A(\s*\d{1,2}\s*)(,\s*\d{1,2}\s*)*\Z/.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #delay_options ⇒ Object
- #future? ⇒ Boolean
- #immediate? ⇒ Boolean
- #mode ⇒ Object
- #mode=(mod) ⇒ Object
- #parse_start_at ⇒ Object
- #parse_start_at! ⇒ Object
- #parse_start_before! ⇒ Object
- #recurring? ⇒ Boolean
- #trigger(action, *args) ⇒ Object
Class Method Details
.new_from_params(params = {}) ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'app/models/foreman_tasks/triggering.rb', line 43 def self.new_from_params(params = {}) new(params.except(:mode, :start_at, :start_before)).tap do |triggering| triggering.mode = params.fetch(:mode, :immediate).to_sym triggering.input_type = params.fetch(:input_type, :daily).to_sym triggering.end_time_limited = params[:end_time_limited] == 'true' triggering.start_at_raw ||= Time.zone.now.strftime(TIME_FORMAT) triggering.recurring_logic = ::ForemanTasks::RecurringLogic.new_from_triggering(triggering) if triggering.recurring? end end |
Instance Method Details
#delay_options ⇒ Object
78 79 80 81 82 83 |
# File 'app/models/foreman_tasks/triggering.rb', line 78 def { :start_at => start_at.utc, :start_before => start_before.try(:utc), } end |
#future? ⇒ Boolean
85 86 87 |
# File 'app/models/foreman_tasks/triggering.rb', line 85 def future? mode == :future end |
#immediate? ⇒ Boolean
89 90 91 |
# File 'app/models/foreman_tasks/triggering.rb', line 89 def immediate? mode == :immediate end |
#mode ⇒ Object
53 54 55 |
# File 'app/models/foreman_tasks/triggering.rb', line 53 def mode super.to_sym end |
#mode=(mod) ⇒ Object
57 58 59 60 61 62 63 |
# File 'app/models/foreman_tasks/triggering.rb', line 57 def mode=(mod) if (mod.is_a?(String) || mod.is_a?(Symbol)) && ALLOWED_MODES.map(&:to_s).include?(mod.downcase.to_s) super(mod.downcase.to_sym) else raise ArgumentError, _('mode has to be one of %{allowed_modes}') % { :allowed_modes => ALLOWED_MODES.join(', ') } end end |
#parse_start_at ⇒ Object
101 102 103 104 105 |
# File 'app/models/foreman_tasks/triggering.rb', line 101 def parse_start_at self.start_at ||= Time.zone.parse(start_at_raw) if start_at_raw.present? rescue ArgumentError errors.add(:start_at, _('is not a valid format')) end |
#parse_start_at! ⇒ Object
97 98 99 |
# File 'app/models/foreman_tasks/triggering.rb', line 97 def parse_start_at! self.start_at ||= Time.zone.parse(start_at_raw) if start_at_raw.present? end |
#parse_start_before! ⇒ Object
107 108 109 |
# File 'app/models/foreman_tasks/triggering.rb', line 107 def parse_start_before! self.start_before ||= Time.zone.parse(start_before_raw) if start_before_raw.present? end |
#recurring? ⇒ Boolean
93 94 95 |
# File 'app/models/foreman_tasks/triggering.rb', line 93 def recurring? mode == :recurring end |
#trigger(action, *args) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/models/foreman_tasks/triggering.rb', line 65 def trigger(action, *args) case mode when :immediate ::ForemanTasks.async_task action, *args when :future ::ForemanTasks.delay action, , *args when :recurring recurring_logic.start_after(action, [:start_at] || Time.zone.now, *args) end end |