current_session 0.1.0 → 0.1.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
  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