class Sideroo::Base
Public Class Methods
all()
click to toggle source
# File lib/sideroo/types/base.rb, line 70 def all where({}) end
count()
click to toggle source
# File lib/sideroo/types/base.rb, line 74 def count all.count end
data_type(*args)
click to toggle source
USAGE DEFINTIONS
# File lib/sideroo/types/base.rb, line 12 def data_type(*args) @data_type = args.first if args.count > 0 @data_type end
description(*args)
click to toggle source
# File lib/sideroo/types/base.rb, line 44 def description(*args) @description = args.first if args.count > 0 @description end
example(*args)
click to toggle source
Provide example to test against key_pattern
and key_regex. Strongly recommended. Please watch out for edge cases.
# File lib/sideroo/types/base.rb, line 36 def example(*args) if args.count > 0 @example = args.first validate_example_and_regex! end @example end
flush()
click to toggle source
# File lib/sideroo/types/base.rb, line 78 def flush all.each(&:del) end
key_attributes()
click to toggle source
# File lib/sideroo/types/base.rb, line 49 def key_attributes regex = /\{([^\{\}]+)\}/ key_pattern.scan(regex).map(&:first) end
Also aliased as: dimensions
key_pattern(*args)
click to toggle source
# File lib/sideroo/types/base.rb, line 17 def key_pattern(*args) if args.count > 0 declare_key_pattern(args.first) end @key_pattern end
key_regex(*args)
click to toggle source
# File lib/sideroo/types/base.rb, line 25 def key_regex(*args) if args.count > 0 custom_key_regex_should_be_defined_before_example! @key_regex = args.first end @key_regex || default_key_regex end
new(arg = {})
click to toggle source
# File lib/sideroo/types/base.rb, line 162 def initialize(arg = {}) case arg when ::String raw_key = arg key_regex = self.class.key_regex message = "Expected pattern #{key_pattern}, got #{arg}" raise(ArgumentError, message) if raw_key !~ key_regex values = raw_key.scan(key_regex).first self.class.dimensions.zip(values).each do |dimension, value| send("#{dimension}=", value) end when ::Hash attr_map = arg attr_map.each do |dimension, value| send("#{dimension}=", value) end else message = "Hash or String expected. #{arg.class} given." raise ArgumentError, message end end
redis_client(*args)
click to toggle source
# File lib/sideroo/types/base.rb, line 56 def redis_client(*args) @redis_client = args.first if args.count > 0 @redis_client || Sideroo.redis_client end
redis_methods(method_names)
click to toggle source
# File lib/sideroo/types/base.rb, line 4 def redis_methods(method_names) method_names.each do |method_name| define_redis_method(method_name) end end
where(attr_map)
click to toggle source
SEARCH
# File lib/sideroo/types/base.rb, line 63 def where(attr_map) Sideroo::Enumerator.new( type_klass: self, filters: attr_map, ) end
Private Class Methods
custom_key_regex_should_be_defined_before_example!()
click to toggle source
# File lib/sideroo/types/base.rb, line 116 def custom_key_regex_should_be_defined_before_example! return if example.nil? message = 'Custom key regex should be defined before example' raise Sideroo::OutOfOrderConfig, message end
declare_key_pattern(pattern)
click to toggle source
# File lib/sideroo/types/base.rb, line 84 def declare_key_pattern(pattern) raise Sideroo::PatternAlreadyDeclared unless key_pattern.nil? @key_pattern = pattern define_dimensions_as_attr_accessors end
default_key_regex()
click to toggle source
# File lib/sideroo/types/base.rb, line 104 def default_key_regex regex_str = key_pattern key_attributes.each do |attr| term = "{#{attr}}" value = '(.+)' regex_str = regex_str.gsub(term, value) end Regexp.new("^#{regex_str}$") end
define_dimensions_as_attr_accessors()
click to toggle source
# File lib/sideroo/types/base.rb, line 90 def define_dimensions_as_attr_accessors dimensions.each do |dimension| attr_accessor dimension end end
define_redis_method(method_name)
click to toggle source
# File lib/sideroo/types/base.rb, line 96 def define_redis_method(method_name) define_method method_name do |*args| redis_args = [key].concat(args) # forward key and args to corresponding redis method redis_client.send(method_name, *redis_args) end end
validate_example_and_regex!()
click to toggle source
Validate if the provided example matches key regex
# File lib/sideroo/types/base.rb, line 124 def validate_example_and_regex! return if example.nil? example_valid = example =~ key_regex unless example_valid message = "Example does not match key regex: #{key_regex}" raise Sideroo::InvalidExample, message end values = example.scan(key_regex).first if values.count != dimensions.count message = "Expected #{dimensions.count} dimensions, got #{values.count}" raise Sideroo::InvalidKeyRegex, message end end
Public Instance Methods
key()
click to toggle source
# File lib/sideroo/types/base.rb, line 186 def key k = key_pattern self.class.dimensions.each do |dimension| term = "{#{dimension}}" value = send(dimension) k = k.gsub(term, value.to_s) end k end
redis_client()
click to toggle source
# File lib/sideroo/types/base.rb, line 202 def redis_client @redis_client || self.class.redis_client end
redis_client=(client)
click to toggle source
# File lib/sideroo/types/base.rb, line 198 def redis_client=(client) @redis_client = client end
Private Instance Methods
key_pattern()
click to toggle source
# File lib/sideroo/types/base.rb, line 208 def key_pattern self.class.key_pattern end
validate_attrs!(attr_map)
click to toggle source
# File lib/sideroo/types/base.rb, line 212 def validate_attrs!(attr_map) provided_attrs = attr_map.keys.map(&:to_s) key_attributes = self.class.key_attributes(key_pattern) missing_attrs = key_attributes - provided_attrs unexpected_attrs = provided_attrs - key_attributes if missing_attrs.any? msg = "Missing attributes: #{missing_attrs.join(', ')}" raise MissingKeys, msg end if unexpected_attrs.any? msg = "Unexpected attributes: #{unexpected_attrs.join(', ')}" raise UnexpectedKeys, msg end end