rails-session_cookie 0.2.1 → 0.2.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: 792dd6e30fe79dd6784084ee5a126009878405d5
4
- data.tar.gz: 82badc510dd7021edb6ed1f45a6442534fafc648
3
+ metadata.gz: cf883bbe0ecd2fa1007bd3dcaf93dea8fd30df30
4
+ data.tar.gz: 432aa9b0e2b4d44f9f114447faf6d244b7353db0
5
5
  SHA512:
6
- metadata.gz: a9670277edd1ab22d31767e508d3719fa0d1793708298d306890b6c6ee66762566cd682f1e0f37deb8a8aafc81f9195f77e9b0ee394e6b080b71d9d439869b78
7
- data.tar.gz: 7d31273b752aa31d952d09e1f39aacd97519930ac89773f21842f45f2d358e0d29b9a87d0cff6976c5a5e982d1856b7ca704f3b16999c64c228b23a7be60d9f6
6
+ metadata.gz: a74cf4563775b1751910d431a5fcbc4eee47f6d3ce6d405c986691317d6cc98701f00614a3b4f56589ca44bf6b080990bda869df4213824080c05dc7554168d1
7
+ data.tar.gz: b5d743ce4a4559657223dfed66c44eaa50f599750921b50102597fd2ab2445497cf8dc95466e31a4e7c58ba778dfe02ac3c0d96a67bd3ba5c2d179662e1f3383
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
2
  Exclude:
3
+ - 'lib/rails-session_cookie.rb'
3
4
  - 'gemfiles/vendor/**/*'
4
5
  Metrics/LineLength:
5
6
  Max: 120
@@ -13,6 +13,3 @@ gemfile:
13
13
  - gemfiles/rails_5.1.gemfile
14
14
  - gemfiles/rails_5.1_warden.gemfile
15
15
  before_install: gem install bundler -v 1.15.4
16
- script:
17
- - bundle exec rake
18
- - bundle exec codeclimate-test-reporter
data/README.md CHANGED
@@ -14,7 +14,7 @@ Probably, you might have seen a lot code like this:
14
14
  # config/initializers/session_store.rb
15
15
  Rails.application.config.session_store :cookie_store
16
16
 
17
- # authentificaing method (maybe Devise or whatever)
17
+ # authenticating method (maybe Devise or whatever)
18
18
  session[:current_user_id] = current_user.id
19
19
 
20
20
  # somewhere in helper for request specs
@@ -23,7 +23,7 @@ def login(current_user)
23
23
  end
24
24
 
25
25
  # now every request spec is calling login request
26
- RSpec.describe 'User inferface', type: :request do
26
+ RSpec.describe 'User interface', type: :request do
27
27
  let(:user) { create :user }
28
28
 
29
29
  before do
@@ -37,13 +37,18 @@ end
37
37
  ```
38
38
 
39
39
  In a usual user-driven application this tightly couples *all* request specs, which require authentication, to the login process.
40
- If it fails - everything fails. If it's not blazingly fast - it slows the whole suite down.
40
+ If it fails - everything fails. If it's not blazing fast - it slows the whole suite down.
41
41
 
42
- One may move to token-based authentification, especially when having API. That's reasonable and nice.
43
- But we can think about a session cookie as a token passed in a special header!
42
+ One may move to token-based authentication, especially when having API. That's reasonable and nice.
43
+ But HTTP is stateless, really we don't need to do several requests, we can think about a session cookie
44
+ as a token passed in a special header!
44
45
 
45
- This gem replaces your usual process with the simplest 2 rails middleware pass.
46
- Rails is modular, that's cool :)
46
+ You can easily pass headers in tests, the only hard thing is getting the cookie value.
47
+ Rails may change how a state is serialized into the session cookie. It can be encrypted or not, marshalled
48
+ (an old story for rails-3 legacy) or JSONed. Long story short: only rails knows how to generate cookie from data.
49
+
50
+ This gem replaces your usual process of getting session cookie with the simplest rack app utilizing
51
+ 2 rails middlewares. Rails is modular, that's cool :)
47
52
 
48
53
  ## Installation
49
54
 
@@ -85,13 +90,12 @@ However, never saw this in practice, and consider caching of requests in before-
85
90
  If you need more sophisticated logic:
86
91
 
87
92
  ```ruby
88
- auth_app = proc { |env|
89
- # do your magic
90
- env[Rails::SessionCookie::RACK_SESSION].merge!(context)
91
- [200, {}, []]
92
- }
93
- raw_session_cookie = Rails::SessionCookie::App.new(auth_app).session_cookie
94
- end
93
+ auth_app = proc { |env|
94
+ # do your magic
95
+ env[Rails::SessionCookie::RACK_SESSION].merge!(context)
96
+ [200, {}, []]
97
+ }
98
+ raw_session_cookie = Rails::SessionCookie::App.new(auth_app).session_cookie
95
99
  ```
96
100
 
97
101
  Of course, you can just make use (and reuse!) of as many procs as you wish.
@@ -119,7 +123,7 @@ Capybara.current_session.driver.browser.set_cookie raw_session_cookie
119
123
 
120
124
  ## Benchmarks
121
125
 
122
- *NOTE:* Sometimes devise's `sing_in` is still faster than `SessionCookie` (a little though),
126
+ *NOTE:* Sometimes devise's `sign_in` is still faster than `SessionCookie` (a little though),
123
127
  because Warden uses an [ugly hack, in my opinion,](https://github.com/hassox/warden/blob/master/lib/warden/test/helpers.rb#L18L23)
124
128
  to support test-mode authentication.
125
129
 
@@ -128,7 +132,7 @@ Besides, authentication becomes as transparent as possible and should increase r
128
132
  if you understand HTTP session cookies principles.
129
133
 
130
134
  ```sh
131
- $ appraisal rails-5.1-warden rspec -t performance spec/benchmarks
135
+ $ appraisal rails-5.1-warden rspec -t performance spec/benchmarks/feature_spec.rb
132
136
 
133
137
  Speed using capybara in feature test
134
138
  correctness of
@@ -140,6 +144,34 @@ Speed using capybara in feature test
140
144
  is obviously slower separately
141
145
  is not slower than devise helpers if using cache and executing multiple specs in a suite
142
146
 
147
+ Warming up --------------------------------------
148
+ devise sign_in
149
+ 70.000 i/100ms
150
+ session cookie
151
+ 70.000 i/100ms
152
+ session cookie (no cache)
153
+ 62.000 i/100ms
154
+ Calculating -------------------------------------
155
+ devise sign_in
156
+ 700.554 (± 5.3%) i/s - 3.500k in 5.011356s
157
+ session cookie
158
+ 686.868 (± 4.7%) i/s - 3.430k in 5.005542s
159
+ session cookie (no cache)
160
+ 611.439 (± 4.9%) i/s - 3.100k in 5.083986s
161
+
162
+ Comparison:
163
+ devise sign_in : 700.6 i/s
164
+ session cookie : 686.9 i/s - same-ish: difference falls within error
165
+ session cookie (no cache): 611.4 i/s - 1.15x slower
166
+
167
+ ```
168
+
169
+ But when it comes with comparison to a simple custom authentication (see `spec/support/rails_app.rb`),
170
+ this gem is several times faster! (custom action checks password, hits database, request touches the whole rails middleware stack)
171
+
172
+ ```sh
173
+ $ appraisal rails-5.1-warden rspec -t performance spec/benchmarks/request_spec.rb
174
+
143
175
  Speed using custom sign-in in request test
144
176
  correctness of
145
177
  SessionCookie
@@ -149,8 +181,25 @@ Speed using custom sign-in in request test
149
181
  against custom sign in route
150
182
  is faster separately without cache
151
183
 
152
- Finished in 1.89 seconds (files took 0.89589 seconds to load)
153
- 7 examples, 0 failures
184
+ Warming up --------------------------------------
185
+ custom sign in
186
+ 1.000 i/100ms
187
+ session cookie
188
+ 1.759k i/100ms
189
+ session cookie (no cache)
190
+ 482.000 i/100ms
191
+ Calculating -------------------------------------
192
+ custom sign in
193
+ 11.219 (± 0.0%) i/s - 57.000 in 5.082143s
194
+ session cookie
195
+ 17.573k (± 2.0%) i/s - 87.950k in 5.006754s
196
+ session cookie (no cache)
197
+ 4.714k (± 5.0%) i/s - 23.618k in 5.023448s
198
+
199
+ Comparison:
200
+ session cookie : 17573.4 i/s
201
+ session cookie (no cache): 4714.3 i/s - 3.73x slower
202
+ custom sign in : 11.2 i/s - 1566.44x slower
154
203
  ```
155
204
 
156
205
  ## Contributing
data/Rakefile CHANGED
@@ -1,8 +1,34 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'rubocop/rake_task'
4
+ require 'codeclimate-test-reporter'
4
5
 
5
6
  RSpec::Core::RakeTask.new(:spec)
6
7
  RuboCop::RakeTask.new(:rubocop)
7
8
 
8
- task default: %i[rubocop spec]
9
+ # Same as bin/codeclimate-test-reporter, but don't complain if no coverage found
10
+ task :coverage do
11
+ exit unless ENV['CI']
12
+
13
+ repo_token = ENV['CODECLIMATE_REPO_TOKEN']
14
+ if repo_token.nil? || repo_token.empty?
15
+ STDERR.puts 'Cannot post results: environment variable CODECLIMATE_REPO_TOKEN must be set.'
16
+ exit
17
+ end
18
+
19
+ COVERAGE_FILE = ARGV.first || 'coverage/.resultset.json'
20
+ unless File.exist?(COVERAGE_FILE)
21
+ STDERR.puts 'Coverage results not found'
22
+ exit
23
+ end
24
+
25
+ begin
26
+ results = JSON.parse(File.read(COVERAGE_FILE))
27
+ rescue JSON::ParserError => e
28
+ abort "Error encountered while parsing #{COVERAGE_FILE}: #{e}"
29
+ end
30
+
31
+ CodeClimate::TestReporter.run(results)
32
+ end
33
+
34
+ task default: %i[rubocop spec coverage]
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -49,6 +49,7 @@ GEM
49
49
  thor (>= 0.14.0)
50
50
  arel (6.0.4)
51
51
  ast (2.3.0)
52
+ benchmark-ips (2.7.2)
52
53
  benchmark-perf (0.2.1)
53
54
  builder (3.2.3)
54
55
  byebug (9.0.6)
@@ -184,6 +185,7 @@ PLATFORMS
184
185
 
185
186
  DEPENDENCIES
186
187
  appraisal (~> 2.2)
188
+ benchmark-ips (~> 2.7.2)
187
189
  bundler (~> 1.15)
188
190
  capybara (~> 2.15)
189
191
  codeclimate-test-reporter (= 1.0.8)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -50,6 +50,7 @@ GEM
50
50
  arel (6.0.4)
51
51
  ast (2.3.0)
52
52
  bcrypt (3.1.11)
53
+ benchmark-ips (2.7.2)
53
54
  benchmark-perf (0.2.1)
54
55
  builder (3.2.3)
55
56
  byebug (9.1.0)
@@ -197,6 +198,7 @@ PLATFORMS
197
198
 
198
199
  DEPENDENCIES
199
200
  appraisal (~> 2.2)
201
+ benchmark-ips (~> 2.7.2)
200
202
  bundler (~> 1.15)
201
203
  capybara (~> 2.15)
202
204
  codeclimate-test-reporter (= 1.0.8)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -52,6 +52,7 @@ GEM
52
52
  thor (>= 0.14.0)
53
53
  arel (7.1.4)
54
54
  ast (2.3.0)
55
+ benchmark-ips (2.7.2)
55
56
  benchmark-perf (0.2.1)
56
57
  builder (3.2.3)
57
58
  byebug (9.0.6)
@@ -190,6 +191,7 @@ PLATFORMS
190
191
 
191
192
  DEPENDENCIES
192
193
  appraisal (~> 2.2)
194
+ benchmark-ips (~> 2.7.2)
193
195
  bundler (~> 1.15)
194
196
  capybara (~> 2.15)
195
197
  codeclimate-test-reporter (= 1.0.8)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -53,6 +53,7 @@ GEM
53
53
  arel (7.1.4)
54
54
  ast (2.3.0)
55
55
  bcrypt (3.1.11)
56
+ benchmark-ips (2.7.2)
56
57
  benchmark-perf (0.2.1)
57
58
  builder (3.2.3)
58
59
  byebug (9.1.0)
@@ -203,6 +204,7 @@ PLATFORMS
203
204
 
204
205
  DEPENDENCIES
205
206
  appraisal (~> 2.2)
207
+ benchmark-ips (~> 2.7.2)
206
208
  bundler (~> 1.15)
207
209
  capybara (~> 2.15)
208
210
  codeclimate-test-reporter (= 1.0.8)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -52,6 +52,7 @@ GEM
52
52
  thor (>= 0.14.0)
53
53
  arel (8.0.0)
54
54
  ast (2.3.0)
55
+ benchmark-ips (2.7.2)
55
56
  benchmark-perf (0.2.1)
56
57
  builder (3.2.3)
57
58
  byebug (9.0.6)
@@ -190,6 +191,7 @@ PLATFORMS
190
191
 
191
192
  DEPENDENCIES
192
193
  appraisal (~> 2.2)
194
+ benchmark-ips (~> 2.7.2)
193
195
  bundler (~> 1.15)
194
196
  capybara (~> 2.15)
195
197
  codeclimate-test-reporter (= 1.0.8)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rails-session_cookie (0.2.1)
4
+ rails-session_cookie (0.2.2)
5
5
  rails (>= 4.0)
6
6
 
7
7
  GEM
@@ -53,6 +53,7 @@ GEM
53
53
  arel (8.0.0)
54
54
  ast (2.3.0)
55
55
  bcrypt (3.1.11)
56
+ benchmark-ips (2.7.2)
56
57
  benchmark-perf (0.2.1)
57
58
  builder (3.2.3)
58
59
  byebug (9.1.0)
@@ -203,6 +204,7 @@ PLATFORMS
203
204
 
204
205
  DEPENDENCIES
205
206
  appraisal (~> 2.2)
207
+ benchmark-ips (~> 2.7.2)
206
208
  bundler (~> 1.15)
207
209
  capybara (~> 2.15)
208
210
  codeclimate-test-reporter (= 1.0.8)
@@ -0,0 +1 @@
1
+ require 'rails/session_cookie'
@@ -1,5 +1,5 @@
1
1
  module Rails
2
2
  module SessionCookie
3
- VERSION = '0.2.1'.freeze
3
+ VERSION = '0.2.2'.freeze
4
4
  end
5
5
  end
@@ -36,4 +36,5 @@ Gem::Specification.new do |spec|
36
36
  # bench
37
37
  spec.add_development_dependency 'rspec-benchmark', '~> 0.3'
38
38
  spec.add_development_dependency 'capybara', '~> 2.15'
39
+ spec.add_development_dependency 'benchmark-ips', '~> 2.7.2'
39
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-session_cookie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Bokov
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '2.15'
181
+ - !ruby/object:Gem::Dependency
182
+ name: benchmark-ips
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 2.7.2
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 2.7.2
181
195
  description: Helps to get proper integration tests run faster
182
196
  email:
183
197
  - razum2um@mail.ru
@@ -209,6 +223,7 @@ files:
209
223
  - gemfiles/rails_5.1.gemfile.lock
210
224
  - gemfiles/rails_5.1_warden.gemfile
211
225
  - gemfiles/rails_5.1_warden.gemfile.lock
226
+ - lib/rails-session_cookie.rb
212
227
  - lib/rails/session_cookie.rb
213
228
  - lib/rails/session_cookie/app.rb
214
229
  - lib/rails/session_cookie/version.rb