session_rememberable 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +13 -0
- data/.rspec +4 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +155 -2
- data/README.md +49 -9
- data/Rakefile +10 -1
- data/lib/session_rememberable/methods.rb +31 -0
- data/lib/session_rememberable/store.rb +121 -0
- data/lib/session_rememberable/version.rb +1 -1
- data/lib/session_rememberable.rb +3 -28
- data/session_rememberable.gemspec +12 -0
- metadata +136 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2bab239455bc7b525f614fdbfea7cc51cb7916ee910ab2b61702ae77c12b0dea
|
|
4
|
+
data.tar.gz: 4fc69684d8405580620990fd2d8b6836ba4113a8259b79639110f3ad20e33cbd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bde2bd889e9ba131bd3ebbd75a62c5df7ae17c8d454592256159d17ee9e806f39ebd7a5ed082c234044521e24f0689167466be8ff7220db175e1a677345df696
|
|
7
|
+
data.tar.gz: 5a16083e0ab1ca4b1acf11452a373235c534eb25e052a1ca97ec08ec3c50acc06ba1eb51dea9118b55d7137a59ae15b11b204b3b484bc8421170c1d4e7d76702
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,33 +1,186 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
session_rememberable (0.
|
|
4
|
+
session_rememberable (0.3.1)
|
|
5
|
+
actionpack
|
|
5
6
|
activesupport
|
|
6
7
|
|
|
7
8
|
GEM
|
|
8
9
|
remote: https://rubygems.org/
|
|
9
10
|
specs:
|
|
11
|
+
actioncable (6.1.3.2)
|
|
12
|
+
actionpack (= 6.1.3.2)
|
|
13
|
+
activesupport (= 6.1.3.2)
|
|
14
|
+
nio4r (~> 2.0)
|
|
15
|
+
websocket-driver (>= 0.6.1)
|
|
16
|
+
actionmailbox (6.1.3.2)
|
|
17
|
+
actionpack (= 6.1.3.2)
|
|
18
|
+
activejob (= 6.1.3.2)
|
|
19
|
+
activerecord (= 6.1.3.2)
|
|
20
|
+
activestorage (= 6.1.3.2)
|
|
21
|
+
activesupport (= 6.1.3.2)
|
|
22
|
+
mail (>= 2.7.1)
|
|
23
|
+
actionmailer (6.1.3.2)
|
|
24
|
+
actionpack (= 6.1.3.2)
|
|
25
|
+
actionview (= 6.1.3.2)
|
|
26
|
+
activejob (= 6.1.3.2)
|
|
27
|
+
activesupport (= 6.1.3.2)
|
|
28
|
+
mail (~> 2.5, >= 2.5.4)
|
|
29
|
+
rails-dom-testing (~> 2.0)
|
|
30
|
+
actionpack (6.1.3.2)
|
|
31
|
+
actionview (= 6.1.3.2)
|
|
32
|
+
activesupport (= 6.1.3.2)
|
|
33
|
+
rack (~> 2.0, >= 2.0.9)
|
|
34
|
+
rack-test (>= 0.6.3)
|
|
35
|
+
rails-dom-testing (~> 2.0)
|
|
36
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
37
|
+
actiontext (6.1.3.2)
|
|
38
|
+
actionpack (= 6.1.3.2)
|
|
39
|
+
activerecord (= 6.1.3.2)
|
|
40
|
+
activestorage (= 6.1.3.2)
|
|
41
|
+
activesupport (= 6.1.3.2)
|
|
42
|
+
nokogiri (>= 1.8.5)
|
|
43
|
+
actionview (6.1.3.2)
|
|
44
|
+
activesupport (= 6.1.3.2)
|
|
45
|
+
builder (~> 3.1)
|
|
46
|
+
erubi (~> 1.4)
|
|
47
|
+
rails-dom-testing (~> 2.0)
|
|
48
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
49
|
+
activejob (6.1.3.2)
|
|
50
|
+
activesupport (= 6.1.3.2)
|
|
51
|
+
globalid (>= 0.3.6)
|
|
52
|
+
activemodel (6.1.3.2)
|
|
53
|
+
activesupport (= 6.1.3.2)
|
|
54
|
+
activerecord (6.1.3.2)
|
|
55
|
+
activemodel (= 6.1.3.2)
|
|
56
|
+
activesupport (= 6.1.3.2)
|
|
57
|
+
activestorage (6.1.3.2)
|
|
58
|
+
actionpack (= 6.1.3.2)
|
|
59
|
+
activejob (= 6.1.3.2)
|
|
60
|
+
activerecord (= 6.1.3.2)
|
|
61
|
+
activesupport (= 6.1.3.2)
|
|
62
|
+
marcel (~> 1.0.0)
|
|
63
|
+
mini_mime (~> 1.0.2)
|
|
10
64
|
activesupport (6.1.3.2)
|
|
11
65
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
12
66
|
i18n (>= 1.6, < 2)
|
|
13
67
|
minitest (>= 5.1)
|
|
14
68
|
tzinfo (~> 2.0)
|
|
15
69
|
zeitwerk (~> 2.3)
|
|
70
|
+
builder (3.2.4)
|
|
71
|
+
codecov (0.6.0)
|
|
72
|
+
simplecov (>= 0.15, < 0.22)
|
|
16
73
|
concurrent-ruby (1.1.8)
|
|
74
|
+
crass (1.0.6)
|
|
75
|
+
diff-lcs (1.5.0)
|
|
76
|
+
docile (1.4.0)
|
|
77
|
+
dotenv (2.7.6)
|
|
78
|
+
erubi (1.10.0)
|
|
79
|
+
globalid (1.0.0)
|
|
80
|
+
activesupport (>= 5.0)
|
|
17
81
|
i18n (1.8.10)
|
|
18
82
|
concurrent-ruby (~> 1.0)
|
|
83
|
+
loofah (2.13.0)
|
|
84
|
+
crass (~> 1.0.2)
|
|
85
|
+
nokogiri (>= 1.5.9)
|
|
86
|
+
mail (2.7.1)
|
|
87
|
+
mini_mime (>= 0.1.1)
|
|
88
|
+
marcel (1.0.2)
|
|
89
|
+
method_source (1.0.0)
|
|
90
|
+
mini_mime (1.0.3)
|
|
91
|
+
mini_portile2 (2.6.1)
|
|
19
92
|
minitest (5.14.4)
|
|
93
|
+
nio4r (2.5.8)
|
|
94
|
+
nokogiri (1.12.5)
|
|
95
|
+
mini_portile2 (~> 2.6.1)
|
|
96
|
+
racc (~> 1.4)
|
|
97
|
+
racc (1.6.0)
|
|
98
|
+
rack (2.2.3)
|
|
99
|
+
rack-test (1.1.0)
|
|
100
|
+
rack (>= 1.0, < 3)
|
|
101
|
+
rails (6.1.3.2)
|
|
102
|
+
actioncable (= 6.1.3.2)
|
|
103
|
+
actionmailbox (= 6.1.3.2)
|
|
104
|
+
actionmailer (= 6.1.3.2)
|
|
105
|
+
actionpack (= 6.1.3.2)
|
|
106
|
+
actiontext (= 6.1.3.2)
|
|
107
|
+
actionview (= 6.1.3.2)
|
|
108
|
+
activejob (= 6.1.3.2)
|
|
109
|
+
activemodel (= 6.1.3.2)
|
|
110
|
+
activerecord (= 6.1.3.2)
|
|
111
|
+
activestorage (= 6.1.3.2)
|
|
112
|
+
activesupport (= 6.1.3.2)
|
|
113
|
+
bundler (>= 1.15.0)
|
|
114
|
+
railties (= 6.1.3.2)
|
|
115
|
+
sprockets-rails (>= 2.0.0)
|
|
116
|
+
rails-dom-testing (2.0.3)
|
|
117
|
+
activesupport (>= 4.2.0)
|
|
118
|
+
nokogiri (>= 1.6)
|
|
119
|
+
rails-html-sanitizer (1.4.2)
|
|
120
|
+
loofah (~> 2.3)
|
|
121
|
+
railties (6.1.3.2)
|
|
122
|
+
actionpack (= 6.1.3.2)
|
|
123
|
+
activesupport (= 6.1.3.2)
|
|
124
|
+
method_source
|
|
125
|
+
rake (>= 0.8.7)
|
|
126
|
+
thor (~> 1.0)
|
|
20
127
|
rake (12.3.3)
|
|
128
|
+
rspec (3.10.0)
|
|
129
|
+
rspec-core (~> 3.10.0)
|
|
130
|
+
rspec-expectations (~> 3.10.0)
|
|
131
|
+
rspec-mocks (~> 3.10.0)
|
|
132
|
+
rspec-core (3.10.1)
|
|
133
|
+
rspec-support (~> 3.10.0)
|
|
134
|
+
rspec-expectations (3.10.1)
|
|
135
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
136
|
+
rspec-support (~> 3.10.0)
|
|
137
|
+
rspec-mocks (3.10.2)
|
|
138
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
139
|
+
rspec-support (~> 3.10.0)
|
|
140
|
+
rspec-rails (5.0.2)
|
|
141
|
+
actionpack (>= 5.2)
|
|
142
|
+
activesupport (>= 5.2)
|
|
143
|
+
railties (>= 5.2)
|
|
144
|
+
rspec-core (~> 3.10)
|
|
145
|
+
rspec-expectations (~> 3.10)
|
|
146
|
+
rspec-mocks (~> 3.10)
|
|
147
|
+
rspec-support (~> 3.10)
|
|
148
|
+
rspec-support (3.10.3)
|
|
149
|
+
simplecov (0.21.2)
|
|
150
|
+
docile (~> 1.1)
|
|
151
|
+
simplecov-html (~> 0.11)
|
|
152
|
+
simplecov_json_formatter (~> 0.1)
|
|
153
|
+
simplecov-html (0.12.3)
|
|
154
|
+
simplecov_json_formatter (0.1.3)
|
|
155
|
+
sprockets (4.0.2)
|
|
156
|
+
concurrent-ruby (~> 1.0)
|
|
157
|
+
rack (> 1, < 3)
|
|
158
|
+
sprockets-rails (3.4.2)
|
|
159
|
+
actionpack (>= 5.2)
|
|
160
|
+
activesupport (>= 5.2)
|
|
161
|
+
sprockets (>= 3.0.0)
|
|
162
|
+
sqlite3 (1.4.2)
|
|
163
|
+
thor (1.1.0)
|
|
21
164
|
tzinfo (2.0.4)
|
|
22
165
|
concurrent-ruby (~> 1.0)
|
|
166
|
+
websocket-driver (0.7.5)
|
|
167
|
+
websocket-extensions (>= 0.1.0)
|
|
168
|
+
websocket-extensions (0.1.5)
|
|
23
169
|
zeitwerk (2.4.2)
|
|
24
170
|
|
|
25
171
|
PLATFORMS
|
|
26
172
|
ruby
|
|
27
173
|
|
|
28
174
|
DEPENDENCIES
|
|
175
|
+
codecov
|
|
176
|
+
dotenv
|
|
177
|
+
rails
|
|
29
178
|
rake (~> 12.0)
|
|
179
|
+
rspec
|
|
180
|
+
rspec-rails
|
|
30
181
|
session_rememberable!
|
|
182
|
+
simplecov
|
|
183
|
+
sqlite3
|
|
31
184
|
|
|
32
185
|
BUNDLED WITH
|
|
33
|
-
2.
|
|
186
|
+
2.2.30
|
data/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# SessionRememberable
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
|
3
|
+
Quick gem for remembering and forgetting data in a session.
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
@@ -22,15 +20,57 @@ Or install it yourself as:
|
|
|
22
20
|
|
|
23
21
|
## Usage
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
Incluce SessionRememberable concern in your application controller and define some keys to remember.
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
```ruby
|
|
26
|
+
class ApplicationController < ActionController::Base
|
|
27
|
+
include SessionRememberable
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
remember :cart
|
|
30
|
+
remember :customer, class_name: 'User'
|
|
31
|
+
remember :visits, static_data: true
|
|
32
|
+
end
|
|
33
|
+
```
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
In your controllers
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
```ruby
|
|
38
|
+
class CustomersController < ApplicationController
|
|
39
|
+
|
|
40
|
+
def create
|
|
41
|
+
customer = User.new(permitted_params)
|
|
42
|
+
|
|
43
|
+
if customer.save
|
|
44
|
+
remember_customer customer
|
|
45
|
+
redirect_to customer
|
|
46
|
+
else
|
|
47
|
+
render :new
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def destroy
|
|
52
|
+
customer = User.find(params[:id])
|
|
53
|
+
|
|
54
|
+
if customer.destroy
|
|
55
|
+
forget_customer
|
|
56
|
+
redirect_to root_path
|
|
57
|
+
else
|
|
58
|
+
render :edit
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def permitted_params
|
|
65
|
+
params.require(:customer).permit(:name, :email)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
```
|
|
34
69
|
|
|
35
|
-
|
|
70
|
+
In your views (.html.haml)
|
|
36
71
|
|
|
72
|
+
```ruby
|
|
73
|
+
%h1
|
|
74
|
+
Welcome
|
|
75
|
+
= current_customer.name
|
|
76
|
+
```
|
data/Rakefile
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
|
-
|
|
2
|
+
require 'rake'
|
|
3
|
+
begin
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
Bundler::GemHelper.install_tasks
|
|
6
|
+
rescue LoadError
|
|
7
|
+
puts 'although not required, bundler is recommended for running the tests'
|
|
8
|
+
end
|
|
9
|
+
task default: :spec
|
|
10
|
+
require 'rspec/core/rake_task'
|
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module SessionRememberable
|
|
2
|
+
module ClassMethods
|
|
3
|
+
def remember(key, class_name: nil, static_data: false)
|
|
4
|
+
define_method(:"current_#{key}") do
|
|
5
|
+
instance_var = instance_variable_get("@current_#{key}")
|
|
6
|
+
return instance_var if instance_var
|
|
7
|
+
|
|
8
|
+
if static_data
|
|
9
|
+
instance_variable_set "@current_#{key}", session["current_#{key}"]
|
|
10
|
+
else
|
|
11
|
+
class_name ||= key.to_s.titleize
|
|
12
|
+
instance_variable_set "@current_#{key}", class_name.constantize.find_by(id: session["current_#{key}"])
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
helper_method :"current_#{key}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def remember(object, name=nil)
|
|
20
|
+
key = "current_#{name || object.class}".downcase
|
|
21
|
+
data = object.respond_to?(:id) ? object.id : object.to_s
|
|
22
|
+
session[key] = data
|
|
23
|
+
instance_variable_set "@#{key}", object
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def forget(object, name=nil)
|
|
27
|
+
key = "current_#{name || object.class}".downcase
|
|
28
|
+
session[key] = nil
|
|
29
|
+
instance_variable_set "@#{key}", nil
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module SessionRememberable
|
|
2
|
+
# This cookie-based session store is the Rails default. It is
|
|
3
|
+
# dramatically faster than the alternatives.
|
|
4
|
+
#
|
|
5
|
+
# Sessions typically contain at most a user_id and flash message; both fit
|
|
6
|
+
# within the 4096 bytes cookie size limit. A CookieOverflow exception is raised if
|
|
7
|
+
# you attempt to store more than 4096 bytes of data.
|
|
8
|
+
#
|
|
9
|
+
# The cookie jar used for storage is automatically configured to be the
|
|
10
|
+
# best possible option given your application's configuration.
|
|
11
|
+
#
|
|
12
|
+
# Your cookies will be encrypted using your apps secret_key_base. This
|
|
13
|
+
# goes a step further than signed cookies in that encrypted cookies cannot
|
|
14
|
+
# be altered or read by users. This is the default starting in Rails 4.
|
|
15
|
+
#
|
|
16
|
+
# Configure your session store in an initializer:
|
|
17
|
+
#
|
|
18
|
+
# Rails.application.config.session_store :cookie_store, key: '_your_app_session'
|
|
19
|
+
#
|
|
20
|
+
# In the development and test environments your application's secret key base is
|
|
21
|
+
# generated by Rails and stored in a temporary file in <tt>tmp/development_secret.txt</tt>.
|
|
22
|
+
# In all other environments, it is stored encrypted in the
|
|
23
|
+
# <tt>config/credentials.yml.enc</tt> file.
|
|
24
|
+
#
|
|
25
|
+
# If your application was not updated to Rails 5.2 defaults, the secret_key_base
|
|
26
|
+
# will be found in the old <tt>config/secrets.yml</tt> file.
|
|
27
|
+
#
|
|
28
|
+
# Note that changing your secret_key_base will invalidate all existing session.
|
|
29
|
+
# Additionally, you should take care to make sure you are not relying on the
|
|
30
|
+
# ability to decode signed cookies generated by your app in external
|
|
31
|
+
# applications or JavaScript before changing it.
|
|
32
|
+
#
|
|
33
|
+
# Because CookieStore extends Rack::Session::Abstract::Persisted, many of the
|
|
34
|
+
# options described there can be used to customize the session cookie that
|
|
35
|
+
# is generated. For example:
|
|
36
|
+
#
|
|
37
|
+
# Rails.application.config.session_store :cookie_store, expire_after: 14.days
|
|
38
|
+
#
|
|
39
|
+
# would set the session cookie to expire automatically 14 days after creation.
|
|
40
|
+
# Other useful options include <tt>:key</tt>, <tt>:secure</tt> and
|
|
41
|
+
# <tt>:httponly</tt>.
|
|
42
|
+
class Store < ActionDispatch::Session::AbstractSecureStore
|
|
43
|
+
class SessionId < DelegateClass(Rack::Session::SessionId)
|
|
44
|
+
attr_reader :cookie_value
|
|
45
|
+
|
|
46
|
+
def initialize(session_id, cookie_value = {})
|
|
47
|
+
super(session_id)
|
|
48
|
+
@cookie_value = cookie_value
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(app, options = {})
|
|
53
|
+
@permanent = options.dig(:rememberable_options, :permanent).present?
|
|
54
|
+
super(app, options.merge!(cookie_only: true))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def delete_session(req, _session_id, options)
|
|
58
|
+
new_sid = generate_sid unless options[:drop]
|
|
59
|
+
# Reset hash and Assign the new session id
|
|
60
|
+
req.set_header('action_dispatch.request.unsigned_session_cookie',
|
|
61
|
+
new_sid ? { 'session_id' => new_sid.public_id } : {})
|
|
62
|
+
new_sid
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def load_session(req)
|
|
66
|
+
stale_session_check! do
|
|
67
|
+
data = unpacked_cookie_data(req)
|
|
68
|
+
data = persistent_session_id!(data)
|
|
69
|
+
[Rack::Session::SessionId.new(data['session_id']), data]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def extract_session_id(req)
|
|
76
|
+
stale_session_check! do
|
|
77
|
+
sid = unpacked_cookie_data(req)['session_id']
|
|
78
|
+
sid && Rack::Session::SessionId.new(sid)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def unpacked_cookie_data(req)
|
|
83
|
+
req.fetch_header('action_dispatch.request.unsigned_session_cookie') do |k|
|
|
84
|
+
v = stale_session_check! do
|
|
85
|
+
if data = get_cookie(req)
|
|
86
|
+
data.stringify_keys!
|
|
87
|
+
end
|
|
88
|
+
data || {}
|
|
89
|
+
end
|
|
90
|
+
req.set_header k, v
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def persistent_session_id!(data, sid = nil)
|
|
95
|
+
data ||= {}
|
|
96
|
+
data['session_id'] ||= sid || generate_sid.public_id
|
|
97
|
+
data
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def write_session(_req, sid, session_data, _options)
|
|
101
|
+
session_data['session_id'] = sid.public_id
|
|
102
|
+
SessionId.new(sid, session_data)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def set_cookie(request, _session_id, cookie)
|
|
106
|
+
cookie_jar(request)[@key] = cookie
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def get_cookie(req)
|
|
110
|
+
cookie_jar(req)[@key]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def cookie_jar(request)
|
|
114
|
+
if @permanent
|
|
115
|
+
request.cookie_jar.permanent.signed_or_encrypted
|
|
116
|
+
else
|
|
117
|
+
request.cookie_jar.signed_or_encrypted
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
data/lib/session_rememberable.rb
CHANGED
|
@@ -1,31 +1,6 @@
|
|
|
1
|
+
require_relative 'session_rememberable/methods'
|
|
2
|
+
require_relative 'session_rememberable/store'
|
|
3
|
+
|
|
1
4
|
module SessionRememberable
|
|
2
5
|
extend ActiveSupport::Concern
|
|
3
|
-
|
|
4
|
-
module ClassMethods
|
|
5
|
-
|
|
6
|
-
def remember(key, class_name: nil, static_data: false)
|
|
7
|
-
define_method(:"current_#{key}") do
|
|
8
|
-
instance_var = instance_variable_get("@current_#{key}")
|
|
9
|
-
return instance_var if instance_var
|
|
10
|
-
|
|
11
|
-
if static_data
|
|
12
|
-
instance_variable_set "@current_#{key}", session["session_#{key}"]
|
|
13
|
-
else
|
|
14
|
-
class_name = class_name || key.to_s.titleize
|
|
15
|
-
instance_variable_set "@current_#{key}", class_name.constantize.find_by(id: session["session_#{key}"])
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
helper_method :"current_#{key}"
|
|
19
|
-
|
|
20
|
-
define_method(:"remember_#{key}") do |param|
|
|
21
|
-
data = param.respond_to?(:id) && !static_data ? param.id : param
|
|
22
|
-
session["session_#{key}"] = data
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
define_method(:"forget_#{key}") do
|
|
26
|
-
session["session_#{key}"] = nil
|
|
27
|
-
instance_variable_set "@current_#{key}", nil
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
6
|
end
|
|
@@ -22,5 +22,17 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
23
23
|
spec.require_paths = ["lib"]
|
|
24
24
|
|
|
25
|
+
spec.add_runtime_dependency 'actionpack'
|
|
26
|
+
|
|
25
27
|
spec.add_dependency 'activesupport'
|
|
28
|
+
|
|
29
|
+
spec.add_development_dependency 'codecov'
|
|
30
|
+
spec.add_development_dependency 'dotenv'
|
|
31
|
+
spec.add_development_dependency 'rails'
|
|
32
|
+
spec.add_development_dependency 'rake'
|
|
33
|
+
spec.add_development_dependency 'rspec'
|
|
34
|
+
spec.add_development_dependency 'rspec-rails'
|
|
35
|
+
spec.add_development_dependency 'sqlite3'
|
|
36
|
+
# rubocop dependencies...
|
|
37
|
+
spec.add_development_dependency 'simplecov'
|
|
26
38
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: session_rememberable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wynk182
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-12-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: actionpack
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: activesupport
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -24,7 +38,119 @@ dependencies:
|
|
|
24
38
|
- - ">="
|
|
25
39
|
- !ruby/object:Gem::Version
|
|
26
40
|
version: '0'
|
|
27
|
-
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: codecov
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: dotenv
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rails
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rake
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rspec
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: rspec-rails
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: sqlite3
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: simplecov
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - ">="
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '0'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0'
|
|
153
|
+
description:
|
|
28
154
|
email:
|
|
29
155
|
- wynk182@gmail.com
|
|
30
156
|
executables: []
|
|
@@ -32,6 +158,7 @@ extensions: []
|
|
|
32
158
|
extra_rdoc_files: []
|
|
33
159
|
files:
|
|
34
160
|
- ".gitignore"
|
|
161
|
+
- ".rspec"
|
|
35
162
|
- Gemfile
|
|
36
163
|
- Gemfile.lock
|
|
37
164
|
- README.md
|
|
@@ -39,6 +166,8 @@ files:
|
|
|
39
166
|
- bin/console
|
|
40
167
|
- bin/setup
|
|
41
168
|
- lib/session_rememberable.rb
|
|
169
|
+
- lib/session_rememberable/methods.rb
|
|
170
|
+
- lib/session_rememberable/store.rb
|
|
42
171
|
- lib/session_rememberable/version.rb
|
|
43
172
|
- session_rememberable.gemspec
|
|
44
173
|
homepage: https://www.wynk182.com
|
|
@@ -46,7 +175,7 @@ licenses: []
|
|
|
46
175
|
metadata:
|
|
47
176
|
source_code_uri: https://github.com/wynk182/session_rememberable
|
|
48
177
|
homepage_uri: https://www.wynk182.com
|
|
49
|
-
post_install_message:
|
|
178
|
+
post_install_message:
|
|
50
179
|
rdoc_options: []
|
|
51
180
|
require_paths:
|
|
52
181
|
- lib
|
|
@@ -61,8 +190,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
61
190
|
- !ruby/object:Gem::Version
|
|
62
191
|
version: '0'
|
|
63
192
|
requirements: []
|
|
64
|
-
rubygems_version: 3.
|
|
65
|
-
signing_key:
|
|
193
|
+
rubygems_version: 3.0.3
|
|
194
|
+
signing_key:
|
|
66
195
|
specification_version: 4
|
|
67
196
|
summary: Quick concern for session variables
|
|
68
197
|
test_files: []
|