class Twitterpunch::Queue

Public Class Methods

new(config) click to toggle source
# File lib/twitterpunch/queue.rb, line 2
def initialize(config)
  @config = config
  @file   = config[:queue][:file]
  @ttl    = config[:queue][:ttl]
end

Public Instance Methods

load(file) click to toggle source
# File lib/twitterpunch/queue.rb, line 39
def load(file)
  queue   = YAML.load(file.read) rescue {}
  queue ||= {}

  # forcibly expire anything that's too old.
  queue.select { |k,v| (Time.now - k) < @ttl }
end
pop() click to toggle source
# File lib/twitterpunch/queue.rb, line 8
def pop
  message = nil
  File.open(@file, 'r+') do |file|
    file.flock(File::LOCK_EX)
    queue = load(file)

    unless queue.empty?
      if RUBY_VERSION < "1.9.3"
        message = queue[queue.keys.sort.first]
      else
        message = queue.shift[1]
      end
    end

    save(file, queue)
  end
  message
end
push(message) click to toggle source
# File lib/twitterpunch/queue.rb, line 27
def push(message)
  return unless message.is_a? String
  return if message.empty?
  File.open(@file, 'r+') do |file|
    file.flock(File::LOCK_EX)

    queue = load(file)
    queue[Time.now] = message
    save(file, queue)
  end
end
save(file, queue) click to toggle source
# File lib/twitterpunch/queue.rb, line 47
def save(file, queue)
  file.rewind
  file.truncate 0
  file.write(queue.to_yaml)
end