Class: RedisToken
- Inherits:
-
Object
- Object
- RedisToken
- Defined in:
- lib/redis_token.rb,
lib/redis_token/version.rb,
lib/redis_token/serializers/native.rb
Defined Under Namespace
Classes: Serializers
Constant Summary collapse
- DEFAULT_TTL =
Token lives 14 days by default
14 * 24 * 60 * 60
- DEFAULT_PREFIX =
'tokens'.freeze
- VERSION =
'0.0.7'.freeze
Instance Attribute Summary collapse
-
#created_value ⇒ Object
readonly
Returns the value of attribute created_value.
-
#default_ttl ⇒ Object
Returns the value of attribute default_ttl.
-
#prefix ⇒ Object
Returns the value of attribute prefix.
-
#redis ⇒ Object
readonly
Returns the value of attribute redis.
Instance Method Summary collapse
-
#all ⇒ Enumerator
All tokens.
-
#create(args = {}) ⇒ String
Create a new token.
-
#delete(token) ⇒ Boolean
(also: #del)
Delete a token.
-
#delete_all ⇒ Integer
Delete all tokens.
-
#delete_owned_by(owner) ⇒ Integer
Delete all tokens of an owner.
-
#delete_without_owner ⇒ Integer
Delete tokens without an owner.
-
#get(token, args = {}) ⇒ Hash
Get value of a token and slide ttl.
-
#initialize(args = {}, opts = {}) ⇒ RedisToken
constructor
Create RedisToken instance.
-
#owned_by(owner) ⇒ Enumerator
Iterate all exist tokens of an owner.
-
#set(token, args = {}) ⇒ Boolean
Set new payload of a token.
-
#ttl(token) ⇒ Integer
Retrieve the remaining ttl of a token.
-
#use(serializer_class) ⇒ RedisToken
Use custom serialization class.
-
#without_owner ⇒ Enumerator
Tokens without an owner.
Constructor Details
#initialize(args = {}, opts = {}) ⇒ RedisToken
Create RedisToken instance
Implicit redis instance creation (redis parameters can be passed in args):
RedisToken.new(ttl: 5.days, prefix: 'project.tokens.', host: '127.0.0.1')
Explicit redis instance injection:
redis = Redis.new(host: '192.168.0.1', port: 33221)
RedisToken.new(redis, ttl: 5.days, prefix: 'project.tokens.')
34 35 36 37 38 39 40 41 42 |
# File 'lib/redis_token.rb', line 34 def initialize(args = {}, opts = {}) @redis = if args.nil? || args.is_a?(Hash) init_params(args) Redis.new(args) else init_params(opts) args end end |
Instance Attribute Details
#created_value ⇒ Object (readonly)
Returns the value of attribute created_value.
17 18 19 |
# File 'lib/redis_token.rb', line 17 def created_value @created_value end |
#default_ttl ⇒ Object
Returns the value of attribute default_ttl.
15 16 17 |
# File 'lib/redis_token.rb', line 15 def default_ttl @default_ttl end |
#prefix ⇒ Object
Returns the value of attribute prefix.
16 17 18 |
# File 'lib/redis_token.rb', line 16 def prefix @prefix end |
#redis ⇒ Object (readonly)
Returns the value of attribute redis.
14 15 16 |
# File 'lib/redis_token.rb', line 14 def redis @redis end |
Instance Method Details
#all ⇒ Enumerator
All tokens
142 143 144 |
# File 'lib/redis_token.rb', line 142 def all all_tokens end |
#create(args = {}) ⇒ String
Create a new token
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/redis_token.rb', line 53 def create(args = {}) token = args[:token] || generate_token value = { at: Time.now.to_i } owner = args[:owner] value[:owner] = owner if owner payload = args[:payload] value[:payload] = payload if payload @created_value = value key_ttl = args[:ttl] || @default_ttl @redis.multi do |multi| multi.set(token_to_key(token), serializer.pack(value), ex: key_ttl) multi.set(token_to_owner(owner, token), nil, ex: key_ttl) end token end |
#delete(token) ⇒ Boolean Also known as: del
Delete a token
151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/redis_token.rb', line 151 def delete(token) key = token_to_key(token) value = redis_get(key) return false unless value @redis.multi do |multi| multi.del(key) multi.del(token_to_owner(hash_get(value, :owner), token)) end true end |
#delete_all ⇒ Integer
Delete all tokens
185 186 187 |
# File 'lib/redis_token.rb', line 185 def delete_all delete_tokens(all_tokens) end |
#delete_owned_by(owner) ⇒ Integer
Delete all tokens of an owner
171 172 173 |
# File 'lib/redis_token.rb', line 171 def delete_owned_by(owner) delete_tokens(owned_tokens(owner)) end |
#delete_without_owner ⇒ Integer
Delete tokens without an owner
178 179 180 |
# File 'lib/redis_token.rb', line 178 def delete_without_owner delete_tokens(owned_tokens) end |
#get(token, args = {}) ⇒ Hash
Get value of a token and slide ttl
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/redis_token.rb', line 82 def get(token, args = {}) key = token_to_key(token) value = redis_get(key) return unless value return value if args[:slide_expire] === false key_ttl = args[:ttl] || @default_ttl @redis.multi do |multi| multi.expire(key, key_ttl) multi.expire(token_to_owner(hash_get(value, :owner), token), key_ttl) end value end |
#owned_by(owner) ⇒ Enumerator
Iterate all exist tokens of an owner
128 129 130 |
# File 'lib/redis_token.rb', line 128 def owned_by(owner) owned_tokens(owner) end |
#set(token, args = {}) ⇒ Boolean
Set new payload of a token
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/redis_token.rb', line 106 def set(token, args = {}) key = token_to_key(token) value = redis_get(key) return false unless value value[:payload] = args[:payload] key_ttl = args[:ttl] || @redis.ttl(key) @redis.multi do |multi| multi.set(key, serializer.pack(value), ex: key_ttl) multi.expire(token_to_owner(hash_get(value, :owner), token), key_ttl) end true end |
#ttl(token) ⇒ Integer
Retrieve the remaining ttl of a token
192 193 194 |
# File 'lib/redis_token.rb', line 192 def ttl(token) @redis.ttl(token_to_key(token)) end |
#use(serializer_class) ⇒ RedisToken
Use custom serialization class
Base serializer example:
class RedisToken
class Serializers
class Native
def pack(value)
Marshal.dump(value)
end
def unpack(value)
Marshal.load(value)
end
end
end
end
MessagePack example:
require 'msgpack'
class MsgPackSerializer
def pack(value)
MessagePack.pack(value)
end
def unpack(value)
MessagePack.unpack(value)
end
end
r = RedisToken.new.use(MsgPackSerializer)
231 232 233 234 |
# File 'lib/redis_token.rb', line 231 def use(serializer_class) @serializer_class = serializer_class self end |
#without_owner ⇒ Enumerator
Tokens without an owner
135 136 137 |
# File 'lib/redis_token.rb', line 135 def without_owner owned_tokens end |