class Berater::LuaScript

Attributes

source[R]

Public Class Methods

new(source) click to toggle source
# File lib/berater/lua_script.rb, line 8
def initialize(source)
  @source = source
end

Public Instance Methods

eval(redis, *args) click to toggle source
# File lib/berater/lua_script.rb, line 16
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) click to toggle source
# File lib/berater/lua_script.rb, line 26
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) click to toggle source
# File lib/berater/lua_script.rb, line 34
def loaded?(redis)
  redis.script(:exists, sha)
end
sha() click to toggle source
# File lib/berater/lua_script.rb, line 12
def sha
  @sha ||= Digest::SHA1.hexdigest(minify)
end
to_s() click to toggle source
# File lib/berater/lua_script.rb, line 38
def to_s
  source
end

Private Instance Methods

minify() click to toggle source
# File lib/berater/lua_script.rb, line 44
def minify
  # trim comments (whole line and partial)
  # and whitespace (prefix and empty lines)
  @minify ||= source.gsub(/^\s*--.*\n|\s*--.*|^\s*|^$\n/, '').chomp
end