class Flowpi::Server

Attributes

logger[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/flowpi.rb, line 9
def initialize(options = {})
  @options = options
  if @options[:log_file].nil? || @options[:log_file].empty?
    @logger = ::Logger.new(STDOUT)
  else
    @logger = ::Logger.new(@options[:log_file])
  end
  @logger.level = ::Logger.const_get(@options.fetch(:log_level, 'WARN'))
  @logger.datetime_format = @options.fetch(:log_date_format, '%Y-%m-%d %H:%M:%S')

  trap "SIGINT" do
    exit 130
  end
end

Public Instance Methods

handle_line(line) click to toggle source
# File lib/flowpi.rb, line 42
def handle_line(line)
  message = Flowpi::Message.new.parse(line)
  if message.has_content?
    if message.content.match(@options[:message_matcher])
      logger.info { "Speaking message: #{message.content}" }
      %x(espeak "#{message.content}" --stdout 2>/dev/null | aplay -D 'default')
    else
      logger.debug { "Ignoring message: #{message.content}" }
    end
  end
end
run() click to toggle source
# File lib/flowpi.rb, line 24
def run
  logger.info "Starting Flowpi..."
  http = EM::HttpRequest.new(
    "https://stream.flowdock.com/flows?filter=#{@options[:filter]}",
    :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0)
  EventMachine.run do
    s = http.get(:head => { 'Authorization' => [@options[:token], ''], 'accept' => 'application/json'})

    buffer = ""
    s.stream do |chunk|
      buffer << chunk
      while line = buffer.slice!(/.+\r\n/)
        handle_line(line)
      end
    end
  end
end