Class: CloudwatchQuery::Parsers::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudwatch_query/parsers/registry.rb

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Registry

Returns a new instance of Registry.



6
7
8
# File 'lib/cloudwatch_query/parsers/registry.rb', line 6

def initialize
  @parsers = []
end

Instance Method Details

#clear ⇒ Object

Clear all parsers



44
45
46
47
# File 'lib/cloudwatch_query/parsers/registry.rb', line 44

def clear
  @parsers.clear
  self
end

#insert(index, parser) ⇒ Object

Insert parser at specific index



30
31
32
33
34
35
# File 'lib/cloudwatch_query/parsers/registry.rb', line 30

def insert(index, parser)
  validate_parser!(parser)
  @parsers.delete(parser)
  @parsers.insert(index, parser)
  self
end

#list ⇒ Object

List all registered parsers



50
51
52
# File 'lib/cloudwatch_query/parsers/registry.rb', line 50

def list
  @parsers.dup
end

#parse(message) ⇒ Object

Parse a message using the first matching parser Returns [parsed_object, parser_name] or [nil, nil] if no match



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/cloudwatch_query/parsers/registry.rb', line 56

def parse(message)
  return [nil, nil] if message.nil? || message.empty?

  @parsers.each do |parser|
    if parser.matches?(message)
      begin
        parsed = parser.parse(message)
        return [parsed, get_parser_name(parser)] if parsed
      rescue StandardError
        # Parser failed, try next one
        next
      end
    end
  end

  [nil, nil]
end

#prepend(*parsers) ⇒ Object

Add parser(s) at the beginning (highest priority)



20
21
22
23
24
25
26
27
# File 'lib/cloudwatch_query/parsers/registry.rb', line 20

def prepend(*parsers)
  parsers.flatten.reverse.each do |parser|
    validate_parser!(parser)
    @parsers.delete(parser)
    @parsers.unshift(parser)
  end
  self
end

#register(*parsers) ⇒ Object

Register one or more parsers (appends to end, lower priority)



11
12
13
14
15
16
17
# File 'lib/cloudwatch_query/parsers/registry.rb', line 11

def register(*parsers)
  parsers.flatten.each do |parser|
    validate_parser!(parser)
    @parsers << parser unless @parsers.include?(parser)
  end
  self
end

#unregister(parser) ⇒ Object

Remove a parser



38
39
40
41
# File 'lib/cloudwatch_query/parsers/registry.rb', line 38

def unregister(parser)
  @parsers.delete(parser)
  self
end