class ShortBus::Spec

Used for message_specs and publisher_specs

Attributes

specs[R]

Public Class Methods

new(spec = nil) click to toggle source
# File lib/short_bus/spec.rb, line 10
def initialize(spec = nil)
  @specs = process(spec)
end

Public Instance Methods

<<(spec) click to toggle source
# File lib/short_bus/spec.rb, line 14
def <<(spec)
  @specs += process(spec)
end
delete(spec) click to toggle source
# File lib/short_bus/spec.rb, line 18
def delete(spec)
  @specs.delete spec
end
match(item) click to toggle source
# File lib/short_bus/spec.rb, line 22
def match(item)
  @specs.reduce(false) { |a, e| a || match_single(e, item) }
end

Private Instance Methods

match_single(spec, item) click to toggle source
# File lib/short_bus/spec.rb, line 28
def match_single(spec, item)
  if spec.is_a? String
    spec == item
  elsif spec.is_a? Regexp
    spec.match item
  end
end
process(spec, to_set = true) click to toggle source
# File lib/short_bus/spec.rb, line 36
def process(spec, to_set = true)
  if spec.is_a? Array
    process spec.flatten.to_set
  elsif spec.is_a? Regexp
    to_set ? [spec].to_set : spec
  elsif spec.is_a? Set
    spec.flatten
        .map { |spec| process(spec, false) }
        .to_set
  elsif spec.is_a? String
    to_set ? [string_to_regexp(spec)].to_set : string_to_regexp(spec)
  elsif spec.is_a? NilClass
    [/.*/].to_set
  end
end
string_to_regexp(spec) click to toggle source
# File lib/short_bus/spec.rb, line 52
def string_to_regexp(spec)
  if spec.include? '*'
    /^#{spec.gsub(/\*+/, '*' => '[^/]*', '**' => '.*')}/
  else
    spec
  end
end