class Faye::Channel

def <<(message)

def <<(message)
  trigger(:message, message)
end

def expand(name)

def expand(name)
  segments = parse(name)
  channels = ['/**', name]
  copy = segments.dup
  copy[copy.size - 1] = '*'
  channels << unparse(copy)
  1.upto(segments.size - 1) do |i|
    copy = segments[0...i]
    copy << '**'
    channels << unparse(copy)
  end
  channels
end

def initialize(name)

def initialize(name)
  super()
  @name = name
end

def meta?(name)

def meta?(name)
  segments = parse(name)
  segments ? (segments.first == META) : nil
end

def parse(name)

def parse(name)
  return nil unless valid?(name)
  name.split('/')[1..-1]
end

def service?(name)

def service?(name)
  segments = parse(name)
  segments ? (segments.first == SERVICE) : nil
end

def subscribable?(name)

def subscribable?(name)
  return nil unless valid?(name)
  not meta?(name) and not service?(name)
end

def unparse(segments)

def unparse(segments)
  '/' + segments.join('/')
end

def unused?

def unused?
  listener_count(:message).zero?
end

def valid?(name)

def valid?(name)
  Grammar::CHANNEL_NAME =~ name or
  Grammar::CHANNEL_PATTERN =~ name
end