class SimpleFeed::Providers::Key

Here is a meta key for a given user ID:

   user   'm' for meta
     ↓        ↓
 "ff|u.f23098.m"
  ↑         ↑
namespace consumer(base62)

Constants

SERIALIZED_DATA_TEMPLATE
SERIALIZED_META_TEMPLATE

Attributes

consumer[R]
data_key_transformer[R]
meta_key_transformer[R]
namespace[R]

Public Class Methods

new(consumer, namespace: nil, data_key_transformer: nil, meta_key_transformer: nil) click to toggle source
# File lib/simplefeed/providers/key.rb, line 29
def initialize(consumer,
               namespace: nil,
               data_key_transformer: nil,
               meta_key_transformer: nil)
  @consumer = consumer
  @namespace = namespace
  @data_key_transformer = data_key_transformer
  @meta_key_transformer = meta_key_transformer
end
rot13(value) click to toggle source
# File lib/simplefeed/providers/key.rb, line 18
def rot13(value)
  value.tr('abcdefghijklmnopqrstuvwxyz',
           'nopqrstuvwxyzabcdefghijklm')
end

Public Instance Methods

data() click to toggle source
# File lib/simplefeed/providers/key.rb, line 39
def data
  @data ||= render(SERIALIZED_DATA_TEMPLATE)
end
inspect() click to toggle source
Calls superclass method
# File lib/simplefeed/providers/key.rb, line 55
def inspect
  super + key_params.inspect
end
keys() click to toggle source
# File lib/simplefeed/providers/key.rb, line 47
def keys
  [data, meta]
end
meta() click to toggle source
# File lib/simplefeed/providers/key.rb, line 43
def meta
  @meta ||= render(SERIALIZED_META_TEMPLATE)
end
to_s() click to toggle source
Calls superclass method
# File lib/simplefeed/providers/key.rb, line 51
def to_s
  super + key_params.to_s
end

Private Instance Methods

data_id() click to toggle source
# File lib/simplefeed/providers/key.rb, line 91
def data_id
  data_key_transformer&.call(consumer) || consumer
end
key_params() click to toggle source
# File lib/simplefeed/providers/key.rb, line 79
def key_params
  @key_params ||= Hashie::Mash.new(
    namespace: namespace ? "#{namespace}|" : '',
    data_id:   obscure_value(data_id),
    meta_id:   obscure_value(meta_id)
  )
end
meta_id() click to toggle source
# File lib/simplefeed/providers/key.rb, line 87
def meta_id
  meta_key_transformer&.call(consumer) || consumer
end
obscure_value(id) click to toggle source
# File lib/simplefeed/providers/key.rb, line 69
def obscure_value(id)
  id = id.to_i if id.is_a?(String) && id =~ /^[\d]+$/

  if id.is_a?(Numeric)
    ::Base62.encode(id)
  else
    self.class.rot13(id.to_s)
  end
end
render(template) click to toggle source
# File lib/simplefeed/providers/key.rb, line 61
def render(template)
  template.dup.tap do |output|
    key_params.each_pair do |key, value|
      output.gsub!(/{{#{key}}}/, value.to_s)
    end
  end
end