Class: Berater::LuaScript

Inherits:
Object
  • Object
show all
Defined in:
lib/berater/lua_script.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ LuaScript

Returns a new instance of LuaScript.



9
10
11
# File 'lib/berater/lua_script.rb', line 9

def initialize(source)
  @source = source.dup.freeze
end

Instance Attribute Details

#sourceObject (readonly)

Returns the value of attribute source.



7
8
9
# File 'lib/berater/lua_script.rb', line 7

def source
  @source
end

Instance Method Details

#eval(redis, *args) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/berater/lua_script.rb', line 17

def eval(redis, *args)
  redis.evalsha(sha, *args)
rescue Redis::CommandError => e
  raise unless e.message.include?('NOSCRIPT')

  # fall back to regular eval, which will trigger
  # script to be cached for next time
  redis.eval(minify, *args)
end

#load(redis) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/berater/lua_script.rb', line 27

def load(redis)
  redis.script(:load, minify).tap do |sha|
    unless sha == self.sha
      raise "unexpected script SHA: expected #{self.sha}, got #{sha}"
    end
  end
end

#loaded?(redis) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/berater/lua_script.rb', line 35

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

#shaObject



13
14
15
# File 'lib/berater/lua_script.rb', line 13

def sha
  @sha ||= Digest::SHA1.hexdigest(minify).freeze
end

#to_sObject



39
40
41
# File 'lib/berater/lua_script.rb', line 39

def to_s
  source
end