Sha256: f67677019736ccde5cd0ad92ec71339b69dee0cdf256783081338b7071d7c9ca

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

class ResquePerformLater
  APP_ROOT = File.expand_path((defined?(Rails) && Rails.root.to_s.length > 0) ? Rails.root : ".") unless defined?(APP_ROOT)
  DEFAULT_CONFIG_PATH = File.join(APP_ROOT, 'config', 'resque_perform_later.yml')
  DEFAULT_CONFIG = {
    'enabled' => true
  }

  # inspired by DelayedJob
  CLASS_STRING_FORMAT = /^CLASS\:([A-Z][\w\:]+)$/
  AR_STRING_FORMAT    = /^AR\:([A-Z][\w\:]+)\:(\d+)$/
  YAML_STRING_FORMAT  = /\A---/

  def self.args_to_resque(*args)
    args = args.map { |o|
      case o
        when ActiveRecord::Base
          "AR:#{o.class.name}:#{o.id}"
        when Class, Module
          "CLASS:#{o.name}"
        when Hash
          o.to_yaml
        else
          o
      end
    } if args
  end
  
  def self.args_from_resque(*args)
    args = args.map { |o|
      if o
        case o
        when CLASS_STRING_FORMAT  then $1.constantize
        when AR_STRING_FORMAT     then $1.constantize.find_by_id($2)
        when YAML_STRING_FORMAT   then YAML.load(o)
        else o
        end
      end
    } if args
  end

  private
  def self.env_str
    if defined? Rails
      Rails.env.to_s
    elsif defined? Rack
      Rack.env.to_s
    else
      'production'
    end
  end

  @@_config = nil

  def self.config
    return @@_config if @@_config && self.env_str != 'development'

    if File.exists?(DEFAULT_CONFIG_PATH)
      config = YAML.load(ERB.new(IO.read(DEFAULT_CONFIG_PATH)).result)[self.env_str]
    end
    
    config = {}.merge(DEFAULT_CONFIG || {}).merge(config || {})
    @@_config = config
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
perform_later-0.0.4 lib/resque_perform_later.rb
perform_later-0.0.3 lib/resque_perform_later.rb