Class: RedisEval::Script

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_eval/script.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, script) ⇒ Script

Returns a new instance of Script.



27
28
29
30
31
# File 'lib/redis_eval/script.rb', line 27

def initialize(name, script)
  @name = name
  @script = script
  @sha = Digest::SHA1.hexdigest(script)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/redis_eval/script.rb', line 3

def name
  @name
end

#scriptObject (readonly)

Returns the value of attribute script.



3
4
5
# File 'lib/redis_eval/script.rb', line 3

def script
  @script
end

#shaObject (readonly)

Returns the value of attribute sha.



3
4
5
# File 'lib/redis_eval/script.rb', line 3

def sha
  @sha
end

Class Method Details

.build_from_path(path) ⇒ RedisEval::Script

Parameters:

  • path (Pathname)

Returns:



8
9
10
11
12
# File 'lib/redis_eval/script.rb', line 8

def build_from_path(path)
  name = path.basename(".*").to_s
  script = File.read(path)
  new(name, script)
end

.flushObject



18
19
20
# File 'lib/redis_eval/script.rb', line 18

def flush
  redis.script(:flush)
end

.load(script) ⇒ Object



14
15
16
# File 'lib/redis_eval/script.rb', line 14

def load(script)
  redis.script(:load, script)
end

.redisObject



22
23
24
# File 'lib/redis_eval/script.rb', line 22

def redis
  RedisEval.config.redis
end

Instance Method Details

#execute(keys = [], argv = []) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/redis_eval/script.rb', line 33

def execute(keys = [], argv = [])
  redis.evalsha(sha, Array(keys), Array(argv))
rescue Redis::CommandError => e
  if e.message =~ /NOSCRIPT/
    redis.eval(script, Array(keys), Array(argv))
  else
    raise
  end
end

#exist?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/redis_eval/script.rb', line 43

def exist?
  redis.script(:exists, sha)
end

#redisObject



47
48
49
# File 'lib/redis_eval/script.rb', line 47

def redis
  self.class.redis
end