class Redis::Cluster::Option
Constants
- DEFAULT_SCHEME
- SECURE_SCHEME
- VALID_SCHEMES
Public Class Methods
new(options)
click to toggle source
# File lib/redis/cluster/option.rb, line 14 def initialize(options) options = options.dup node_addrs = options.delete(:cluster) @node_opts = build_node_options(node_addrs) @replica = options.delete(:replica) == true add_common_node_option_if_needed(options, @node_opts, :scheme) add_common_node_option_if_needed(options, @node_opts, :password) @options = options end
Public Instance Methods
add_node(host, port)
click to toggle source
# File lib/redis/cluster/option.rb, line 37 def add_node(host, port) @node_opts << { host: host, port: port } end
per_node_key()
click to toggle source
# File lib/redis/cluster/option.rb, line 24 def per_node_key @node_opts.map { |opt| [NodeKey.build_from_host_port(opt[:host], opt[:port]), @options.merge(opt)] } .to_h end
update_node(addrs)
click to toggle source
# File lib/redis/cluster/option.rb, line 33 def update_node(addrs) @node_opts = build_node_options(addrs) end
use_replica?()
click to toggle source
# File lib/redis/cluster/option.rb, line 29 def use_replica? @replica end
Private Instance Methods
add_common_node_option_if_needed(options, node_opts, key)
click to toggle source
Redis cluster node returns only host and port information. So we should complement additional information such as:
scheme, password and so on.
# File lib/redis/cluster/option.rb, line 82 def add_common_node_option_if_needed(options, node_opts, key) return options if options[key].nil? && node_opts.first[key].nil? options[key] ||= node_opts.first[key] end
build_node_options(addrs)
click to toggle source
# File lib/redis/cluster/option.rb, line 43 def build_node_options(addrs) raise InvalidClientOptionError, 'Redis option of `cluster` must be an Array' unless addrs.is_a?(Array) addrs.map { |addr| parse_node_addr(addr) } end
parse_node_addr(addr)
click to toggle source
# File lib/redis/cluster/option.rb, line 49 def parse_node_addr(addr) case addr when String parse_node_url(addr) when Hash parse_node_option(addr) else raise InvalidClientOptionError, 'Redis option of `cluster` must includes String or Hash' end end
parse_node_option(addr)
click to toggle source
# File lib/redis/cluster/option.rb, line 70 def parse_node_option(addr) addr = addr.map { |k, v| [k.to_sym, v] }.to_h if addr.values_at(:host, :port).any?(&:nil?) raise InvalidClientOptionError, 'Redis option of `cluster` must includes `:host` and `:port` keys' end addr end
parse_node_url(addr)
click to toggle source
# File lib/redis/cluster/option.rb, line 60 def parse_node_url(addr) uri = URI(addr) raise InvalidClientOptionError, "Invalid uri scheme #{addr}" unless VALID_SCHEMES.include?(uri.scheme) db = uri.path.split('/')[1]&.to_i { scheme: uri.scheme, password: uri.password, host: uri.host, port: uri.port, db: db }.reject { |_, v| v.nil? } rescue URI::InvalidURIError => err raise InvalidClientOptionError, err.message end