class Reciter::Parser
Public Class Methods
config()
click to toggle source
# File lib/reciter/parser.rb, line 46 def self.config @config ||= Reciter::Config.new end
Public Instance Methods
parse(sequence)
click to toggle source
# File lib/reciter/parser.rb, line 3 def parse(sequence) return [] if sequence.nil? || sequence == '' validate_format(sequence) sequence. split(';'). map {|subsequence| if subsequence.include?('-') r = Range.new(*subsequence.split('-').map(&:to_i)) raise InvalidInput unless r.begin <= r.end r.to_a else subsequence end }. flatten. uniq. map(&:to_i). sort end
unparse(*sequence)
click to toggle source
# File lib/reciter/parser.rb, line 23 def unparse(*sequence) mechanic, sequence = handle_unparse_params(sequence) ranges = [] last = nil sequence.sort.each do |n| if last.nil? || n != last + 1 ranges << Range.new(n, n) else ranges[-1] = Range.new(ranges[-1].begin, n) end last = n end ranges.map {|r| if r.end == r.begin || r.end == r.begin + 1 r.to_a else "%s%s%s" % [r.begin, mechanic ? '-' : " #{config.text_for_to} ", r.end] end }. flatten. join(mechanic ? ';' : ', ') end
Private Instance Methods
config()
click to toggle source
# File lib/reciter/parser.rb, line 70 def config self.class.config end
handle_unparse_params(params)
click to toggle source
# File lib/reciter/parser.rb, line 52 def handle_unparse_params(params) if params[0].is_a? Symbol [params[0] == :mechanic, handle_unparse_params_list(params[1..-1])] else [false, handle_unparse_params_list(params)] end end
handle_unparse_params_list(list)
click to toggle source
# File lib/reciter/parser.rb, line 60 def handle_unparse_params_list(list) list[0].is_a?(Array) ? list[0] : list end
validate_format(sequence)
click to toggle source
# File lib/reciter/parser.rb, line 64 def validate_format(sequence) subsequences = sequence.split(';') raise InvalidInput unless !subsequences.empty? && subsequences.all? {|subsequence| subsequence =~ /^(\d+\-\d+)$|^\d+$/ } end