Sha256: 3a2998c67d35b93ede160a568601d125e6723821d9d23b0b53633d32a43d1cc2

Contents?: true

Size: 870 Bytes

Versions: 1

Compression:

Stored size: 870 Bytes

Contents

require 'digest/sha1'

module Wolverine
  class InvalidScriptError < StandardError ; end
  class Script
    attr_reader :content, :digest
    def initialize file
      @file = file
      @content = load_lua file
      @digest = Digest::SHA1.hexdigest @content
    end

    def call redis, *args
      begin
        run_evalsha redis, *args
      rescue => e
        e.message =~ /NOSCRIPT/ ? run_eval(redis, *args) : raise
      end
    rescue => e
      if e.message =~ /ERR Error (compiling|running) script/
        raise InvalidScriptError, "#{e.message} (in #{@file.inspect})"
      else
        raise
      end
    end

    private

    def run_evalsha redis, *args
      redis.evalsha digest, args.size, *args
    end

    def run_eval redis, *args
      redis.eval content, args.size, *args
    end

    def load_lua file
      File.read file
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wolverine-0.1.2 lib/wolverine/script.rb