current_session 0.1.0 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfc9528a535c2d5ddcae967b83b2efe2542e7973a2bc4195f526da630647340e
4
- data.tar.gz: 3fea9daed229931366f300225eb74a511d301cb2779cc42ec381df3d0907e1b8
3
+ metadata.gz: bc8d88a50edf84f089619f518ebcb2c0f35c1edbb12f05f346336315d4d644fc
4
+ data.tar.gz: fab046b1e5004c9c535bacf964b1c8856e3638b51501e9790fcc450b7e9efa40
5
5
  SHA512:
6
- metadata.gz: edde5245826209571d82fa6cf0220fd19312c82a5950e2897360120b04088128fd31f5b285fe27f375d38e5f31c86acaf5745b8f782002fcef97452b3c50e689
7
- data.tar.gz: bda6aa822015d94c24058ea5e5e8bfed2f72d0792928bf47cf0c6e342be61137039946361b796bd3bf7ebefacc7ef05bb708050edffda6e9684f53577a469935
6
+ metadata.gz: 5497b4846b959a83e4cc4307ee5dec9fc543f2d250f734df83792cc02fa7290fa24897fae4bb8f50010bab1c8f5d110a5a4a4c1f60f839f20626b379ac1c53ff
7
+ data.tar.gz: e1c9db3b0bbd17629e9d35f7d2c830f3fe31f7330b6114353ccbe9d58836b0c9e9e8e0d006c7e21bc8c349f36d220baa54e01b7baf80e02ecad79e4e521dedc5
data/.rubocop.yml CHANGED
@@ -1,3 +1,9 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ require:
4
+ - rubocop-performance
5
+ - rubocop-rspec
6
+
1
7
  AllCops:
2
8
  TargetRubyVersion: 3.0
3
9
  NewCops: enable
@@ -23,3 +29,6 @@ Style/EmptyMethod:
23
29
 
24
30
  Lint/EmptyBlock:
25
31
  Enabled: false
32
+
33
+ RSpec/MultipleExpectations:
34
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,12 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2022-09-06 00:54:54 UTC using RuboCop version 1.36.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 10
10
+ # Configuration parameters: AllowSubject.
11
+ RSpec/MultipleMemoizedHelpers:
12
+ Max: 9
@@ -16,16 +16,24 @@ module CurrentSession
16
16
  Time.current
17
17
  end
18
18
 
19
- def session_repository_class=(session_repository_class = nil)
20
- @session_repository_class = session_repository_class
19
+ def session_methods=(session_methods_module)
20
+ @session_repository_class = Class.new(CurrentSession::Repository) { include session_methods_module }
21
21
  end
22
22
 
23
23
  def session_methods(&block)
24
- @session_repository_class = Class.new(CurrentSession::Repository, &block)
24
+ session_methods = Module.new(&block)
25
+ const_set(:SessionMethods, session_methods)
26
+ @session_repository_class = Class.new(CurrentSession::Repository) { include session_methods }
27
+ end
28
+
29
+ def auth_methods=(auth_methods_module)
30
+ @auth_class = Class.new(CurrentSession::Auth) { include auth_methods_module }
25
31
  end
26
32
 
27
33
  def auth_methods(&block)
28
- @auth_class = Class.new(CurrentSession::Auth, &block)
34
+ auth_methods = Module.new(&block)
35
+ const_set(:AuthMethods, auth_methods)
36
+ @auth_class = Class.new(CurrentSession::Auth) { include auth_methods }
29
37
  end
30
38
  end
31
39
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CurrentSession
4
+ module SessionMethods
5
+ #
6
+ # Implementation of session tokens for DB management
7
+ #
8
+ module ActiveRecordSession
9
+ def find
10
+ session_token_class.find_by(value: session_token).try do |record|
11
+ update(record)
12
+ yield record.user
13
+ end
14
+ end
15
+
16
+ def create(user)
17
+ session_token_class.create(user_id: user.id, value: new_session_token) do |record|
18
+ update(record)
19
+ end.value
20
+ end
21
+
22
+ def update(token)
23
+ token.update(
24
+ last_request_at: current_time,
25
+ last_request_ip: request.remote_ip,
26
+ last_request_user_agent: request.user_agent
27
+ )
28
+ end
29
+
30
+ def destroy
31
+ session_token_class.find_by(value: session_token)&.destroy
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CurrentSession
4
+ module SessionMethods
5
+ #
6
+ # repository to return the user specified by the environment variable
7
+ #
8
+ module EnvSession
9
+ # rubocop:disable Metrics/MethodLength
10
+ def self.build(current_user_id)
11
+ Module.new do
12
+ define_method(:current_user) { user_class.find(current_user_id) }
13
+
14
+ def try
15
+ yield self
16
+ end
17
+
18
+ def find
19
+ yield current_user
20
+ end
21
+
22
+ def create(_)
23
+ end
24
+
25
+ def destroy
26
+ end
27
+ end
28
+ end
29
+ # rubocop:enable Metrics/MethodLength
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CurrentSession
4
+ module SessionMethods
5
+ #
6
+ # Implementation of using UIDs as session tokens
7
+ #
8
+ module UidSession
9
+ def find(&block)
10
+ user_class.find_by(uid: session_token).try(&block)
11
+ end
12
+
13
+ def create(user)
14
+ user.uid
15
+ end
16
+
17
+ def destroy
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Reference implementation of session_methods
5
+ #
6
+ module CurrentSession
7
+ module SessionMethods
8
+ extend ActiveSupport::Autoload
9
+ autoload :UidSession
10
+ autoload :EnvSession
11
+ autoload :ActiveRecordSession
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CurrentSession
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
@@ -3,6 +3,9 @@
3
3
  require_relative "current_session/version"
4
4
  require "active_support"
5
5
 
6
+ #
7
+ # current_session
8
+ #
6
9
  module CurrentSession
7
10
  extend ActiveSupport::Autoload
8
11
  autoload :Base
@@ -10,10 +13,7 @@ module CurrentSession
10
13
  autoload :Auth
11
14
  autoload :Repository
12
15
  autoload :RaiseNotImplementedError
13
-
14
- autoload :UidSession
15
- autoload :EnvSession
16
- autoload :ActiveRecordSession
16
+ autoload :SessionMethods
17
17
 
18
18
  def self.key(user_class)
19
19
  "session_#{user_class.name.underscore.parameterize(separator: "_")}_key"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: current_session
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masa (Aileron inc)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-01 00:00:00.000000000 Z
11
+ date: 2022-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -134,6 +134,7 @@ files:
134
134
  - ".gitignore"
135
135
  - ".rspec"
136
136
  - ".rubocop.yml"
137
+ - ".rubocop_todo.yml"
137
138
  - CHANGELOG.md
138
139
  - CODE_OF_CONDUCT.md
139
140
  - Gemfile
@@ -145,14 +146,15 @@ files:
145
146
  - bin/setup
146
147
  - current_session.gemspec
147
148
  - lib/current_session.rb
148
- - lib/current_session/active_record_session.rb
149
149
  - lib/current_session/auth.rb
150
150
  - lib/current_session/base.rb
151
- - lib/current_session/env_session.rb
152
151
  - lib/current_session/interface.rb
153
152
  - lib/current_session/raise_not_implemented_error.rb
154
153
  - lib/current_session/repository.rb
155
- - lib/current_session/uid_session.rb
154
+ - lib/current_session/session_methods.rb
155
+ - lib/current_session/session_methods/active_record_session.rb
156
+ - lib/current_session/session_methods/env_session.rb
157
+ - lib/current_session/session_methods/uid_session.rb
156
158
  - lib/current_session/version.rb
157
159
  homepage: https://github.com/aileron-inc/current_session
158
160
  licenses:
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CurrentSession
4
- #
5
- # Implementation of session tokens for DB management
6
- #
7
- class ActiveRecordSession < Repository
8
- def find
9
- session_token_class.find_by(value: session_token).try do |record|
10
- update(record)
11
- yield record.user
12
- end
13
- end
14
-
15
- def create(user)
16
- session_token_class.create(user_id: user.id, value: new_session_token) do |record|
17
- update(record)
18
- end.value
19
- end
20
-
21
- def update(token)
22
- token.update(
23
- last_request_at: current_time,
24
- last_request_ip: request.remote_ip,
25
- last_request_user_agent: request.user_agent
26
- )
27
- end
28
-
29
- def destroy
30
- session_token_class.find_by(value: session_token)&.destroy
31
- end
32
- end
33
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CurrentSession
4
- #
5
- # repository to return the user specified by the environment variable
6
- #
7
- class EnvSession < Repository
8
- # rubocop:disable Metrics/MethodLength
9
- def self.build(current_user_id)
10
- Class.new(Repository) do
11
- define_method(:current_user) { user_class.find(current_user_id) }
12
-
13
- def try
14
- yield self
15
- end
16
-
17
- def find
18
- yield current_user
19
- end
20
-
21
- def create(_)
22
- end
23
-
24
- def destroy
25
- end
26
- end
27
- end
28
- # rubocop:enable Metrics/MethodLength
29
- end
30
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module CurrentSession
4
- #
5
- # Implementation of using UIDs as session tokens
6
- #
7
- class UidSession < Repository
8
- def find(&block)
9
- user_class.find_by(uid: session_token).try(&block)
10
- end
11
-
12
- def create(user)
13
- user.uid
14
- end
15
-
16
- def destroy
17
- end
18
- end
19
- end