module Kredis::Attributes

Public Instance Methods

kredis_connection_with(method, name, key, **options) click to toggle source
# File lib/kredis/attributes.rb, line 74
def kredis_connection_with(method, name, key, **options)
  ivar_symbol = :"@#{name}_#{method}"
  type = method.to_s.sub("kredis_", "")
  after_change = options.delete(:after_change)

  define_method(name) do
    if instance_variable_defined?(ivar_symbol)
      instance_variable_get(ivar_symbol)
    else
      new_type = Kredis.send(type, kredis_key_evaluated(key) || kredis_key_for_attribute(name), **options)
      instance_variable_set ivar_symbol,
        after_change ? enrich_after_change_with_record_access(new_type, after_change) : new_type
    end
  end
end
kredis_counter(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 65
def kredis_counter(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_datetime(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 21
def kredis_datetime(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_decimal(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 17
def kredis_decimal(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_enum(name, key: nil, values:, default:, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 37
def kredis_enum(name, key: nil, values:, default:, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, values: values, default: default, config: config, after_change: after_change
end
kredis_flag(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 25
def kredis_flag(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change

  define_method("#{name}?") do
    send(name).marked?
  end
end
kredis_float(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 33
def kredis_float(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_hash(name, key: nil, typed: :string, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 69
def kredis_hash(name, key: nil, typed: :string, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, typed: typed, config: config, after_change: after_change
end
kredis_integer(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 13
def kredis_integer(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_json(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 41
def kredis_json(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_list(name, key: nil, typed: :string, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 45
def kredis_list(name, key: nil, typed: :string, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, typed: typed, config: config, after_change: after_change
end
kredis_proxy(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 5
def kredis_proxy(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_set(name, key: nil, typed: :string, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 53
def kredis_set(name, key: nil, typed: :string, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, typed: typed, config: config, after_change: after_change
end
kredis_slot(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 57
def kredis_slot(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_slots(name, available:, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 61
def kredis_slots(name, available:, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, available: available, config: config, after_change: after_change
end
kredis_string(name, key: nil, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 9
def kredis_string(name, key: nil, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, config: config, after_change: after_change
end
kredis_unique_list(name, limit: nil, key: nil, typed: :string, config: :shared, after_change: nil) click to toggle source
# File lib/kredis/attributes.rb, line 49
def kredis_unique_list(name, limit: nil, key: nil, typed: :string, config: :shared, after_change: nil)
  kredis_connection_with __method__, name, key, limit: limit, typed: typed, config: config, after_change: after_change
end

Private Instance Methods

enrich_after_change_with_record_access(type, original_after_change) click to toggle source
# File lib/kredis/attributes.rb, line 107
def enrich_after_change_with_record_access(type, original_after_change)
  case original_after_change
  when Proc   then Kredis::Types::CallbacksProxy.new(type, ->(_) { original_after_change.call(self) })
  when Symbol then Kredis::Types::CallbacksProxy.new(type, ->(_) { send(original_after_change) })
  end
end
extract_kredis_id() click to toggle source
# File lib/kredis/attributes.rb, line 103
def extract_kredis_id
  try(:id) or raise NotImplementedError, "kredis needs a unique id, either implement an id method or pass a custom key."
end
kredis_key_evaluated(key) click to toggle source
# File lib/kredis/attributes.rb, line 92
def kredis_key_evaluated(key)
  case key
  when String then key
  when Proc   then key.call(self)
  end
end
kredis_key_for_attribute(name) click to toggle source
# File lib/kredis/attributes.rb, line 99
def kredis_key_for_attribute(name)
  "#{self.class.name.tableize.gsub("/", ":")}:#{extract_kredis_id}:#{name}"
end