module Asyncron
Constants
- DEFAULT_OPTS
- VERSION
Public Instance Methods
callback(callback_str)
click to toggle source
# File lib/asyncron.rb, line 56 def callback(callback_str) mod, method = callback_str.split(".") mods = mod.split("::") ref = mods.reduce(Object) { |acc, m| acc.const_get(m) } return ref.method(method) end
due(opts = {})
click to toggle source
# File lib/asyncron.rb, line 35 def due(opts = {}) t = Time.now redis(opts).keys(key(opts, "*")).each do |set_key| cb = callback(set_key.split("/").last) redis(opts).zrangebyscore(set_key, 0, t.to_i).each do |payload| parsed_payload = JSON.parse(payload, symbolize_names: true) cb.call(parsed_payload) redis(opts).zrem(set_key, payload) insert(opts, set_key.split("/").last, parsed_payload) end end end
insert(opts = {}, callback_str, payload)
click to toggle source
# File lib/asyncron.rb, line 17 def insert(opts = {}, callback_str, payload) unless payload.key?(:expr) raise RuntimeError.new("#{payload.inspect} has no :expr key") end time = Schedule.next(payload[:expr]) if time.nil? raise RuntimeError.new("#{payload[:expr]} for #{callback_str} and " \ "#{payload.inspect} has no future execution time") end set_key = key(opts, callback_str) return if redis(opts).zscore(set_key, payload.to_json) return redis(opts).zadd(set_key, time.to_i, payload.to_json) end
key(opts, callback_str)
click to toggle source
# File lib/asyncron.rb, line 52 def key(opts, callback_str) (opts[:key] || DEFAULT_OPTS[:key]) % {callback_str: callback_str} end
redis(opts)
click to toggle source
# File lib/asyncron.rb, line 48 def redis(opts) opts[:redis] || DEFAULT_OPTS[:redis] end
remove(opts = {}, callback_str, payload)
click to toggle source
# File lib/asyncron.rb, line 31 def remove(opts = {}, callback_str, payload) redis(opts).zrem(key(opts, callback_str), payload.to_json) end