class Knocker::Pattern

Attributes

name[R]

Public Class Methods

new(name, text) click to toggle source
# File lib/knocker/pattern.rb, line 5
def initialize(name, text)
  @name = name
  @text = text
end

Public Instance Methods

host() click to toggle source
# File lib/knocker/pattern.rb, line 18
def host
  host = @text.scan(/  h (.*)/).flatten.first
  raise Knocker::Errors::NoHostSpecified if host.nil? or host.empty?
  host
end
knock_command() click to toggle source
# File lib/knocker/pattern.rb, line 24
def knock_command
  patterns = []

  patterns = @text.scan(/  ([ut]) (\d+)/).collect do |proto, port|
    valid_port!(port)
    "#{port}:#{protocol!(proto)}"
  end

  raise Knocker::Errors::NoKnockSpecified if patterns.empty?

  "knock #{host} #{patterns.join(" ")}"
end
post_commands() click to toggle source
# File lib/knocker/pattern.rb, line 37
def post_commands
  cmds = @text.scan(/^  c (.*)$/).flatten
  cmds.map! do |cmd|
    cmd.gsub(/\$host/, host)
  end
end
to_hash() click to toggle source
# File lib/knocker/pattern.rb, line 10
def to_hash
  {
    :host => host,
    :knock_command => knock_command,
    :name => @name
  }
end

Private Instance Methods

protocol!(char) click to toggle source
# File lib/knocker/pattern.rb, line 46
def protocol!(char)
  return "udp" if char == "u"
  return "tcp" if char == "t"
  raise Knocker::Errors::InvalidProtocol, char
end
valid_port!(port) click to toggle source
# File lib/knocker/pattern.rb, line 52
def valid_port!(port)
  raise Errors::InvalidPort, port if port.to_i.zero?
  raise Errors::InvalidPort, port if port.to_i > 65535
end