Class: Pebblebed::River::Subscription

Inherits:
Object
  • Object
show all
Defined in:
lib/pebblebed/river/subscription.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Subscription

Returns a new instance of Subscription.



6
7
8
9
10
# File 'lib/pebblebed/river/subscription.rb', line 6

def initialize(options = {})
  @events = querify(options[:event]).split('|')
  @paths = querify(options[:path]).split('|')
  @klasses = querify(options[:klass]).split('|')
end

Instance Attribute Details

#eventsObject (readonly)

Returns the value of attribute events.



5
6
7
# File 'lib/pebblebed/river/subscription.rb', line 5

def events
  @events
end

#klassesObject (readonly)

Returns the value of attribute klasses.



5
6
7
# File 'lib/pebblebed/river/subscription.rb', line 5

def klasses
  @klasses
end

#pathsObject (readonly)

Returns the value of attribute paths.



5
6
7
# File 'lib/pebblebed/river/subscription.rb', line 5

def paths
  @paths
end

Instance Method Details

#pathify(s) ⇒ Object



32
33
34
35
36
37
# File 'lib/pebblebed/river/subscription.rb', line 32

def pathify(s)
  required, optional = s.split('^').map {|s| s.split('.')}
  required = Array(required.join('.'))
  optional ||= []
  (0..optional.length).map {|i| required + optional[0,i]}.map {|p| p.join('.')}
end

#queriesObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/pebblebed/river/subscription.rb', line 12

def queries
  qx = []
  # If we add more than one more level,
  # it's probably time to go recursive.
  events.each do |event|
    klasses.each do |klass|
      paths.each do |pathspec|
        pathify(pathspec).each do |path|
          qx << [event, klass, path].join('._.')
        end
      end
    end
  end
  qx
end

#querify(query) ⇒ Object



28
29
30
# File 'lib/pebblebed/river/subscription.rb', line 28

def querify(query)
  (query || '#').gsub('**', '#')
end