redis_token 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1edc5c50c5911fb657241844a937efc3a37a34b6
4
- data.tar.gz: 94373d284d69125bcd1c1cac7f59949e24b9e1c6
3
+ metadata.gz: 10430bc88bb8202bf46a6d2e299dde3b96d3c4c7
4
+ data.tar.gz: 760cc37ab113e0a0e8470b68e17b121cd3460212
5
5
  SHA512:
6
- metadata.gz: a2d0c42b20bd11a876faa48a8ab7a67ddbac1a2361a3bd32d26aa29cc5b21351e3245fd441280b527f59fdd6fbf346fbbe92dd8715e22e14490070de2286fc25
7
- data.tar.gz: 91df9c97d381c41562d7f8173488eab676b09d9f514c6ef096beac3e7ba5793c17bd39a8f652695c4aacff5f2076160077297f23f2df1a6e9459656a4dcc4e8c
6
+ metadata.gz: b6a5430a3860e7b6822f02e9f12f422b5e230af08ccdbca81b08591aaba28cba1a5c0641aaad91991f2b0731d853af8fdc29301723c83ddb052f562acd826107
7
+ data.tar.gz: cb9b1cfa97a7525a240d74cefd4f19ea162a86b7a522a45d8dde25506178359addf862582446b74befccd49a1dba1dc3e02f16d2fdb7e6cfec76c8bef9b79a42
data/README.md CHANGED
@@ -21,20 +21,19 @@ Or install it yourself as:
21
21
  ## Usage
22
22
 
23
23
  ```ruby
24
-
25
24
  before_action :create_service
26
25
 
27
26
  def auth
28
27
  client = Client.find_by_email(params[:email])
29
28
 
30
29
  if client.password == params[:password]
31
- token = @redis_token.create(client.id, payload: { source: :native })
30
+ token = @redis_token.create("client.#{client.id}", payload: { source: :native })
32
31
  json(access_token: token)
33
32
 
34
- ...
33
+ # ...
35
34
  end
36
35
 
37
- ...
36
+ # ...
38
37
  end
39
38
 
40
39
  def secured_method
@@ -44,13 +43,13 @@ def secured_method
44
43
  client = Client.find_by_id(value[:owner])
45
44
  payload = value[:payload]
46
45
 
47
- ...
46
+ # ...
48
47
  end
49
48
 
50
49
  def client_tokens
51
50
  @tokens = []
52
51
 
53
- @redis_token.each(client.id) do |token, value|
52
+ @redis_token.each("client.#{client.id}") do |token, value|
54
53
  @tokens << { token: token, value: value }
55
54
  end
56
55
  end
@@ -61,3 +60,71 @@ def create_service
61
60
  @redis_token ||= RedisToken.new(prefix: 'myproject.tokens.', ttl: 30.days)
62
61
  end
63
62
  ```
63
+
64
+ ### RedisToken creation
65
+
66
+ Implicit Redis instance creation:
67
+
68
+ ```ruby
69
+ # Redis.new with no arguments:
70
+ r = RedisToken.new(prefix: 'myproject.tokens.', ttl: 30.days)
71
+
72
+ # Redis.new(host: '192.168.1.1', port: 33421)
73
+ r = RedisToken.new(prefix: 'myproject.tokens.', host: '192.168.1.1', port: 33421)
74
+ ```
75
+
76
+ Explicit Redis instance injection:
77
+
78
+ ```ruby
79
+ redis = Redis.new
80
+ r = RedisToken.new(redis, prefix: 'myproject.tokens.', ttl: 30.days)
81
+ r = RedisToken.new(redis, prefix: 'myproject2.tokens.')
82
+ ```
83
+
84
+ ### Create token
85
+
86
+ ```ruby
87
+ client_token = r.create("client.#{client.id}")
88
+ # => "eca431add3b1f0bbc6cfc73980b68708"
89
+
90
+ # Redefine default ttl:
91
+ user_token = r.create("u:#{current_user.id}", ttl: 15.hours)
92
+ # => "548a5d54eaf474c750bf83ed04bd242a"
93
+
94
+ # Create token with payload:
95
+ mobile_token = r.create("c.#{client.id}", payload: { source: :native })
96
+ # => "865249d6b87c4e6dd8f6b0796ace7fa0"
97
+ ```
98
+
99
+ ### Get token
100
+
101
+ ```ruby
102
+ value = r.get('865249d6b87c4e6dd8f6b0796ace7fa0')
103
+ # => {:owner=>"c.555", :at=>2017-08-18 15:53:15 +0300, :payload=>{:source=>:native}}
104
+
105
+ # Each get request slides ttl by default:
106
+ r.ttl('865249d6b87c4e6dd8f6b0796ace7fa0')
107
+ # => 1209493
108
+ r.get('865249d6b87c4e6dd8f6b0796ace7fa0')
109
+ # => {:owner=>"c.555", :at=>2017-08-18 15:53:15 +0300, :payload=>{:source=>:native}}
110
+ r.ttl('865249d6b87c4e6dd8f6b0796ace7fa0')
111
+ # => 1209598
112
+
113
+ # To prevent ttl sliding set slide_expire to false:
114
+ r.get('865249d6b87c4e6dd8f6b0796ace7fa0', slide_expire: false)
115
+ ```
116
+
117
+ ### Get all tokens owned by someone
118
+
119
+ ```ruby
120
+ 5.times { r.create('u.555') }
121
+
122
+ r.each('u.555') { |t,v| p "#{t}: #{v}" }
123
+ # "5e8c661c11955b062d8c512c201734dd: {:owner=>\"u.555\", :at=>2017-08-18 16:02:10 +0300}"
124
+ # "5607a698763a6164975b9ffc06528513: {:owner=>\"u.555\", :at=>2017-08-18 16:02:10 +0300}"
125
+ # "7ef74cb761c1595dd33058e78a125720: {:owner=>\"u.555\", :at=>2017-08-18 16:02:10 +0300}"
126
+ # "621d2a10c34e92d7f0b4fc3b00be62af: {:owner=>\"u.555\", :at=>2017-08-18 16:02:10 +0300}"
127
+ # "17f7cb676e67d6b53c48e51f1c1beeb1: {:owner=>\"u.555\", :at=>2017-08-18 16:02:10 +0300}"
128
+ # => nil
129
+
130
+ ```
@@ -1,3 +1,3 @@
1
1
  class RedisToken
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
data/lib/redis_token.rb CHANGED
@@ -13,6 +13,20 @@ class RedisToken
13
13
  attr_accessor :prefix
14
14
  attr_reader :created_value
15
15
 
16
+ # Create RedisToken instance
17
+ #
18
+ # Implicit redis instance creation (redis parameters can be passed in args):
19
+ # RedisToken.new(ttl: 5.days, prefix: 'project.tokens.', host: '127.0.0.1')
20
+ #
21
+ # Explicit redis instance injection:
22
+ # redis = Redis.new(host: '192.168.0.1', port: 33221)
23
+ # RedisToken.new(redis, ttl: 5.days, prefix: 'project.tokens.')
24
+ #
25
+ # @param [Hash] args
26
+ # @option args [String] :prefix redis keys prefix (e.g. 'myproject.tokens.')
27
+ # @option args [Integer] :ttl token time to live value (14 days by default)
28
+ #
29
+ # @return [RedisToken] a new RedisToken instance
16
30
  def initialize(args = {}, opts = {})
17
31
  @redis = if args.nil? || args.is_a?(Hash)
18
32
  init_params(args)
@@ -21,10 +35,16 @@ class RedisToken
21
35
  init_params(opts)
22
36
  args
23
37
  end
24
-
25
- @default_ttl ||= DEFAULT_TTL
26
38
  end
27
39
 
40
+ # Create a new token
41
+ #
42
+ # @param [String] owner owner of a token, e.g. 'client.1' or 'user-123'
43
+ # @param [Hash] args
44
+ # @option args :payload
45
+ # @option args [Integer] :ttl redefines the default ttl
46
+ #
47
+ # @return [String] a new token
28
48
  def create(owner, args = {})
29
49
  raise 'owner should be specified' unless owner
30
50
 
@@ -45,6 +65,14 @@ class RedisToken
45
65
  token
46
66
  end
47
67
 
68
+ # Get value of a token and slide ttl
69
+ #
70
+ # @param [String] token
71
+ # @param [Hash] args
72
+ # @option args [Integer] :ttl
73
+ # @option args [Boolean] :slide_expire (true) slide ttl of a token
74
+ #
75
+ # @return [Hash] value of a token
48
76
  def get(token, args = {})
49
77
  key = token_to_key(token)
50
78
  value = redis_get(key)
@@ -61,6 +89,14 @@ class RedisToken
61
89
  value
62
90
  end
63
91
 
92
+ # Set new payload of a token
93
+ #
94
+ # @param [String] token
95
+ # @param [Hash] args
96
+ # @option args [Integer] :ttl set new time to live value
97
+ # @option args :payload new payload value
98
+ #
99
+ # @return [Boolean]
64
100
  def set(token, args = {})
65
101
  key = token_to_key(token)
66
102
  value = redis_get(key)
@@ -77,6 +113,9 @@ class RedisToken
77
113
  true
78
114
  end
79
115
 
116
+ # Iterate all exist tokens of an owner
117
+ #
118
+ # @param [String] owner
80
119
  def each(owner)
81
120
  mask = "#{@prefix}#{owner}.*"
82
121
 
@@ -94,6 +133,11 @@ class RedisToken
94
133
  end
95
134
  end
96
135
 
136
+ # Delete a token
137
+ #
138
+ # @param [String] token
139
+ #
140
+ # @return [Boolean]
97
141
  def del(token)
98
142
  key = token_to_key(token)
99
143
  value = redis_get(key)
@@ -107,6 +151,9 @@ class RedisToken
107
151
  true
108
152
  end
109
153
 
154
+ # Retrieve the remaining ttl of a token
155
+ #
156
+ # @return [Integer] ttl
110
157
  def ttl(token)
111
158
  @redis.ttl(token_to_key(token))
112
159
  end
@@ -118,7 +165,7 @@ class RedisToken
118
165
  end
119
166
 
120
167
  def init_params(args)
121
- @default_ttl = args[:ttl]
168
+ @default_ttl = args[:ttl] || DEFAULT_TTL
122
169
  @prefix = args[:prefix]
123
170
  end
124
171
 
@@ -139,8 +186,4 @@ class RedisToken
139
186
  return unless value
140
187
  Marshal.load(value)
141
188
  end
142
-
143
- def check_owner(owner)
144
- raise 'owner should be specified' unless owner
145
- end
146
189
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Baikuzin