Sha256: c0ee08b330b3d408dc6e64fa1f7a45bb7cd20cdf6d5fc871d4721b07d8feb46c

Contents?: true

Size: 1.94 KB

Versions: 3

Compression:

Stored size: 1.94 KB

Contents

require 'ns-options'
require 'qs/version'
require 'qs/client'
require 'qs/daemon'
require 'qs/job_handler'
require 'qs/queue'

module Qs

  def self.config; @config ||= Config.new; end
  def self.configure(&block)
    block.call(self.config)
  end

  def self.init
    self.config.redis.url ||= RedisUrl.new(
      self.config.redis.ip,
      self.config.redis.port,
      self.config.redis.db
    )

    @serializer   ||= self.config.serializer
    @deserializer ||= self.config.deserializer
    @client       ||= Client.new(self.redis_config)
    @redis        ||= @client.redis
    true
  end

  def self.reset!
    self.config.reset
    @serializer   = nil
    @deserializer = nil
    @client       = nil
    @redis        = nil
    true
  end

  def self.enqueue(queue, job_name, params = nil)
    @client.enqueue(queue, job_name, params)
  end

  def self.push(queue_name, payload)
    @client.push(queue_name, payload)
  end

  def self.serialize(payload)
    @serializer.call(payload)
  end

  def self.deserialize(serialized_payload)
    @deserializer.call(serialized_payload)
  end

  def self.client
    @client
  end

  def self.redis
    @redis
  end

  def self.redis_config
    self.config.redis.to_hash
  end

  class Config
    include NsOptions::Proxy

    option :serializer,   Proc, :default => proc{ |p| ::JSON.dump(p) }
    option :deserializer, Proc, :default => proc{ |p| ::JSON.load(p) }

    option :timeout, Float

    namespace :redis do
      option :ip,   :default => 'localhost'
      option :port, :default => 6379
      option :db,   :default => 0

      option :url

      option :redis_ns, String,  :default => 'qs'
      option :driver,   String,  :default => 'ruby'
      option :timeout,  Integer, :default => 1
      option :size,     Integer, :default => 4
    end
  end

  module RedisUrl
    def self.new(ip, port, db)
      return if ip.to_s.empty? || port.to_s.empty? || db.to_s.empty?
      "redis://#{ip}:#{port}/#{db}"
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
qs-0.3.0 lib/qs.rb
qs-0.2.0 lib/qs.rb
qs-0.1.0 lib/qs.rb