Class: Reciter::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/reciter/parser.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configObject



46
47
48
# File 'lib/reciter/parser.rb', line 46

def self.config
  @config ||= Reciter::Config.new
end

Instance Method Details

#parse(sequence) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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