module RedisKeyManager::Manager
Public Class Methods
included(base)
click to toggle source
# File lib/redis_key_manager/manager.rb, line 3 def self.included(base) # Set up `.key` class method on the including class/module, enabling us to do one-liner declarations of # named key patterns at the top of that class/module. def base.key(key, pattern) class_name = self.name placeholders = pattern.scan(/(?<=\[)[^\]]+(?=\])/).uniq.map(&:to_sym) # Set up a singleton method on the including class/module, with which the key can be retrieved. define_singleton_method(key) do |options = {}| passed_option_keys = options.keys required_option_keys = placeholders if passed_option_keys.sort != required_option_keys.sort raise ArgumentError, "Invalid arguments for #{class_name}.#{key}" end placeholders.inject(pattern) do |revised_pattern, placeholder| value = options[placeholder] if value.nil? raise RedisKeyManager::InvalidKeyComponentError, "Invalid Redis key component passed to #{class_name}.#{key}" end revised_pattern.gsub("[#{placeholder}]", value.to_s) end end end end