Method: Fairway::Scripts#method_missing

Defined in:
lib/fairway/scripts.rb

#method_missing(method_name, *args) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/fairway/scripts.rb', line 55

def method_missing(method_name, *args)
  loaded = false

  if multi?(method_name)
    redis.with_each do |conn|
      conn.evalsha(script_sha(method_name), [namespace], args)
    end
  elsif first?(method_name)
    first_pool do |conn|
      conn.evalsha(script_sha(method_name), [namespace], args)
    end
  else
    redis.with do |conn|
      conn.evalsha(script_sha(method_name), [namespace], args)
    end
  end
rescue Redis::CommandError => ex
  if ex.message.include?("NOSCRIPT") && !loaded
    redis.with_each do |conn|
      conn.script(:load, script_source(method_name))
    end

    loaded = true
    retry
  else
    raise
  end
end