class Cronex::ExpressionDescriptor
Attributes
expression[RW]
expression_parts[RW]
options[RW]
parsed[RW]
resources[RW]
timezone[RW]
Public Class Methods
new(expression, options = {})
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 24 def initialize(expression, options = {}) @expression = expression @options = CRONEX_OPTS.merge(options) @expression_parts = [] @parsed = false @resources = Cronex::Resource.new(@options[:locale]) @timezone = @options[:timezone] || 'UTC' end
Public Instance Methods
day_of_month_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 111 def day_of_month_description(expression_parts) exp = expression_parts[3].gsub('?', '*') if exp == 'L' description = ', ' + resources.get('on_the_last_day_of_the_month') elsif exp == 'LW' || exp == 'WL' description = ', ' + resources.get('on_the_last_weekday_of_the_month') else match = exp.match(/(\d{1,2}W)|(W\d{1,2})/) if match day_num = Cronex::Utils.integer(match[0].gsub('W', '')) day_str = day_num == 1 ? resources.get('first_weekday') : format(resources.get('weekday_nearest_day'), day_num) description = format(', ' + resources.get('on_the_of_the_month'), day_str) else desc = DayOfMonthDescription.new(resources) description = desc.segment_description(exp, ', ' + resources.get('every_day')) end end description end
day_of_week_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 101 def day_of_week_description(expression_parts) desc = DayOfWeekDescription.new(resources, options) desc.segment_description(expression_parts[5], ', ' + resources.get('every_day')) end
description(type = :full)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 37 def description(type = :full) desc = '' begin unless parsed parser = Parser.new(expression, options) @expression_parts = parser.parse @parsed = true end desc = case type when :full full_description(expression_parts) when :timeofday time_of_day_description(expression_parts) when :hours hours_description(expression_parts) when :minutes minutes_description(expression_parts) when :seconds seconds_description(expression_parts) when :dayofmonth day_of_month_description(expression_parts) when :month month_description(expression_parts) when :dayofweek day_of_week_description(expression_parts) when :year year_description(expression_parts) else seconds_description(expression_parts) end rescue StandardError => e if options[:throw_exception_on_parse_error] raise e else desc = e.message puts "Exception parsing expression: #{e}" end end desc end
full_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 163 def full_description(expression_parts) time_segment = time_of_day_description(expression_parts) dom_desc = day_of_month_description(expression_parts) month_desc = month_description(expression_parts) dow_desc = day_of_week_description(expression_parts) year_desc = year_description(expression_parts) description = format('%s%s%s%s%s', time_segment, dom_desc, dow_desc, month_desc, year_desc) description = transform_verbosity(description, options[:verbose]) description = transform_case(description, options[:casing]) description end
hours_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 91 def hours_description(expression_parts) desc = HoursDescription.new(resources) desc.segment_description(expression_parts[2], resources.get('every_hour')) end
minutes_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 86 def minutes_description(expression_parts) desc = MinutesDescription.new(resources) desc.segment_description(expression_parts[1], resources.get('every_minute')) end
month_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 106 def month_description(expression_parts) desc = MonthDescription.new(resources) desc.segment_description(expression_parts[4], '') end
seconds_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 81 def seconds_description(expression_parts) desc = SecondsDescription.new(resources) desc.segment_description(expression_parts[0], resources.get('every_second')) end
time_of_day_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 131 def time_of_day_description(expression_parts) sec_exp, min_exp, hour_exp = expression_parts description = '' if [sec_exp, min_exp, hour_exp].all? { |exp| !Cronex::Utils.include_any?(exp, SPECIAL_CHARS) } # specific time of day (i.e. 10 14) description += resources.get('at') + ' ' + Cronex::Utils.format_time(hour_exp, min_exp, sec_exp, timezone) elsif min_exp.include?('-') && !min_exp.include?('/') && !min_exp.include?(',') && !Cronex::Utils.include_any?(hour_exp, SPECIAL_CHARS) # Minute range in single hour (e.g. 0-10 11) min_parts = min_exp.split('-') description += format( resources.get('every_minute_between'), Cronex::Utils.format_time(hour_exp, min_parts[0], '', timezone), Cronex::Utils.format_time(hour_exp, min_parts[1], '', timezone)) elsif hour_exp.include?(',') && !Cronex::Utils.include_any?(min_exp, SPECIAL_CHARS) # Hours list with single minute (e.g. 30 6,14,16) hour_parts = hour_exp.split(',') description += resources.get('at') h_parts = hour_parts.map { |part| ' ' + Cronex::Utils.format_time(part, min_exp, '', timezone) } description += h_parts[0...-1].join(',') + ' ' + resources.get('and') + h_parts.last else sec_desc = seconds_description(expression_parts) min_desc = minutes_description(expression_parts) hour_desc = hours_description(expression_parts) description += sec_desc description += ', ' if description.size > 0 && !min_desc.empty? description += min_desc description += ', ' if description.size > 0 && !hour_desc.empty? description += hour_desc end description end
to_hash()
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 33 def to_hash Hash[SEGMENTS.take(7).zip(expression_parts)] end
transform_case(desc, case_type = :lower)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 175 def transform_case(desc, case_type = :lower) case case_type when :sentence desc.sub(/\b[[:word:]]/u) { |s| Unicode.upcase(s) } when :title desc.gsub(/\b[[:word:]]/u) { |s| Unicode.upcase(s) } else Unicode.downcase(desc) end end
transform_verbosity(desc, verbose = false)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 186 def transform_verbosity(desc, verbose = false) return desc if verbose parts = %w(every_minute every_hour every_day) parts.each { |part| desc.gsub!(resources.get(part.gsub('_', '_1_')), resources.get(part)) } parts.each { |part| desc.gsub!(', ' + resources.get(part), '') } desc end
year_description(expression_parts)
click to toggle source
# File lib/cronex/exp_descriptor.rb, line 96 def year_description(expression_parts) desc = YearDescription.new(resources, options) desc.segment_description(expression_parts[6], ', ' + resources.get('every_year')) end