class RedisEval::Script

Attributes

parent[RW]
redis[W]
sha[R]
source[R]

Public Class Methods

build_from_parent(src, parent, with_load: true) click to toggle source
# File lib/redis_eval/script.rb, line 7
def self.build_from_parent(src, parent, with_load: true)
  script = new(src, with_load: false)
  script.parent = parent
  script.load if with_load
  script
end
new(src, with_load: true) click to toggle source
# File lib/redis_eval/script.rb, line 14
def initialize(src, with_load: true)
  @source = src
  @sha = Digest::SHA1.hexdigest(@source)
  self.load if with_load
end

Public Instance Methods

execute(keys = [], argv = []) click to toggle source
# File lib/redis_eval/script.rb, line 28
def execute(keys = [], argv = [])
  redis.evalsha(sha, Array(keys), Array(argv))
rescue Redis::CommandError => e
  raise unless e.message =~ /NOSCRIPT/

  redis.eval(source, Array(keys), Array(argv))
end
exist?() click to toggle source
# File lib/redis_eval/script.rb, line 24
def exist?
  redis_without_namespace.script(:exists, sha)
end
load() click to toggle source
# File lib/redis_eval/script.rb, line 20
def load
  redis_without_namespace.script(:load, source)
end
redis() click to toggle source
# File lib/redis_eval/script.rb, line 36
def redis
  return @redis if instance_variable_defined?(:@redis)
  return parent.redis unless parent.nil?

  Redis.current
end

Private Instance Methods

redis_without_namespace() click to toggle source
# File lib/redis_eval/script.rb, line 45
def redis_without_namespace
  defined?(Redis::Namespace) && redis.is_a?(Redis::Namespace) ? redis.redis : redis
end