ruby_slime 0.0.1 → 0.0.4
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/lib/ruby_slime/internals/event_metadata_handler.rb +9 -17
- data/lib/ruby_slime/jwt_kit/api_verifier.rb +29 -46
- data/lib/ruby_slime/jwt_kit/handling_helper.rb +2 -0
- data/lib/ruby_slime/object_sharing.rb +21 -0
- data/lib/ruby_slime/rake/context.rb +29 -0
- data/lib/ruby_slime/rake/development_sync.rb +76 -0
- data/lib/ruby_slime/rake.rb +6 -0
- data/lib/ruby_slime/version.rb +1 -1
- data/lib/ruby_slime.rb +10 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d97fde901999a9c590e81817687191021260b13e1ef6fc825886ded4b4e211e0
|
4
|
+
data.tar.gz: 735dfa78ce4ccf683982ba8950b318c00a4515f06be6a2a1b2d7e2698c58700d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96760cd3e0762f269684738f7dae2fce7d47d416716f806e4138e6135188a50fcad05a4f646f77edbb0c077eaaaad605822ef33f818dd86be1d9faa258dc989b
|
7
|
+
data.tar.gz: f4f0a5f06d4808eefaa4f1c04b1b182a6180740cb85ec480cd40c15f758e8483b7176441dd21688daf2bf585d1de9f425b187ee06e65ddd8f099bd77adf1f7c1
|
@@ -3,34 +3,26 @@
|
|
3
3
|
module RubySlime
|
4
4
|
module Internals
|
5
5
|
module EventMetadataHandler
|
6
|
+
include ObjectSharing
|
7
|
+
|
6
8
|
private
|
7
9
|
|
8
10
|
def handle_handler_arguments(handler, events, metadata)
|
9
11
|
handler.call(events, **metadata)
|
10
12
|
rescue ::ArgumentError => e
|
11
|
-
|
12
|
-
should_retry = cache.meta_patterns.any? do |pattern|
|
13
|
+
should_retry = shared_objects[:meta_patterns].any? do |pattern|
|
13
14
|
pattern =~ e.message
|
14
15
|
end
|
15
16
|
raise e unless should_retry
|
16
17
|
handler.call(events)
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
/wrong\s+number\s+of\s+arguments/i,
|
26
|
-
/unknown\s+keywords/i,
|
27
|
-
]
|
28
|
-
super
|
29
|
-
freeze
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
private_constant :EventMetadataHandler_SingletonCache
|
20
|
+
share_objects({
|
21
|
+
meta_patterns: [
|
22
|
+
/wrong\s+number\s+of\s+arguments/i,
|
23
|
+
/unknown\s+keywords/i,
|
24
|
+
],
|
25
|
+
})
|
34
26
|
end
|
35
27
|
end
|
36
28
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module RubySlime
|
4
4
|
module JWTKit
|
5
5
|
class APIVerifier
|
6
|
-
|
6
|
+
include ObjectSharing
|
7
7
|
|
8
8
|
def initialize(
|
9
9
|
fetch_secret:,
|
@@ -14,24 +14,22 @@ module RubySlime
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def call(token)
|
17
|
-
token_result = token_schema.call({
|
17
|
+
token_result = shared_objects[:token_schema].call({
|
18
18
|
token: token,
|
19
19
|
})
|
20
20
|
raise TokenError.new(token_result.errors) unless token_result.success?
|
21
|
+
validated_cache = {}
|
21
22
|
::JWT.decode(token_result[:token], nil, true, {
|
22
23
|
algorithm: 'HS256',
|
23
24
|
required_claims: %w[aud iat sub],
|
24
|
-
}) do |
|
25
|
-
|
26
|
-
|
27
|
-
@fetch_secret.call(header_result.to_h)
|
25
|
+
}) do |header_section|
|
26
|
+
validated_cache[:header] ||= check_jwt_section(header_section, :header_schema)
|
27
|
+
@fetch_secret.call(validated_cache[:header])
|
28
28
|
end.then do |sections|
|
29
29
|
payload_section, header_section = sections
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
raise TokenError.new(payload_result.errors) unless payload_result.success?
|
34
|
-
[payload_result, header_result].map(&:to_h)
|
30
|
+
validated_cache[:header] ||= check_jwt_section(header_section, :header_schema)
|
31
|
+
validated_cache[:payload] ||= check_jwt_section(payload_section, :payload_schema)
|
32
|
+
validated_cache.values_at(:payload, :header)
|
35
33
|
end.then do |sections|
|
36
34
|
@handle_result.call(*sections)
|
37
35
|
end
|
@@ -39,43 +37,28 @@ module RubySlime
|
|
39
37
|
|
40
38
|
private
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def singleton_cache
|
48
|
-
APIVerifier_SingletonCache.instance
|
49
|
-
end
|
50
|
-
|
51
|
-
class APIVerifier_SingletonCache
|
52
|
-
include ::Singleton
|
53
|
-
attr_reader \
|
54
|
-
:token_schema,
|
55
|
-
:header_schema,
|
56
|
-
:payload_schema
|
57
|
-
|
58
|
-
def initialize
|
59
|
-
@token_schema = ::Dry::Schema.Params do
|
60
|
-
required(:token).filled(:string)
|
61
|
-
end
|
62
|
-
@header_schema = ::Dry::Schema.Params do
|
63
|
-
optional(:typ).filled(:string).value(eql?: 'JWT')
|
64
|
-
required(:alg).filled(:string).value(eql?: 'HS256')
|
65
|
-
required(:kid).filled(:string)
|
66
|
-
end
|
67
|
-
@payload_schema = ::Dry::Schema.Params do
|
68
|
-
required(:aud).filled(:string)
|
69
|
-
required(:iat).value(:integer, gt?: 0)
|
70
|
-
required(:sub).filled(:string)
|
71
|
-
optional(:data).filled(:hash)
|
72
|
-
end
|
73
|
-
super
|
74
|
-
freeze
|
75
|
-
end
|
40
|
+
def check_jwt_section(section, schema_name)
|
41
|
+
section_result = shared_objects[schema_name].call(section)
|
42
|
+
raise TokenError.new(section_result.errors) unless section_result.success?
|
43
|
+
section_result.to_h
|
76
44
|
end
|
77
45
|
|
78
|
-
|
46
|
+
share_objects({
|
47
|
+
token_schema: ::Dry::Schema.Params do
|
48
|
+
required(:token).filled(:string)
|
49
|
+
end,
|
50
|
+
header_schema: ::Dry::Schema.Params do
|
51
|
+
optional(:typ).filled(:string).value(eql?: 'JWT')
|
52
|
+
required(:alg).filled(:string).value(eql?: 'HS256')
|
53
|
+
required(:kid).filled(:string)
|
54
|
+
end,
|
55
|
+
payload_schema: ::Dry::Schema.Params do
|
56
|
+
required(:aud).filled(:string)
|
57
|
+
required(:iat).value(:integer, gt?: 0)
|
58
|
+
required(:sub).filled(:string)
|
59
|
+
optional(:data).hash
|
60
|
+
end,
|
61
|
+
})
|
79
62
|
end
|
80
63
|
end
|
81
64
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubySlime
|
4
|
+
module ObjectSharing
|
5
|
+
extend ::ActiveSupport::Concern
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
attr_reader :_object_sharing_cache
|
9
|
+
|
10
|
+
private def share_objects(objects_hash)
|
11
|
+
(@_object_sharing_cache ||= {}).merge!(objects_hash)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
included do
|
16
|
+
private def shared_objects
|
17
|
+
(self.class._object_sharing_cache || {})
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubySlime
|
4
|
+
module Rake
|
5
|
+
module Context
|
6
|
+
def initialize_context(context)
|
7
|
+
@_rake_context = context
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def desc(*args, **kwargs, &block)
|
13
|
+
@_rake_context.call(:desc, *args, **kwargs, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def task(*args, **kwargs, &block)
|
17
|
+
@_rake_context.call(:task, *args, **kwargs, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def file(*args, **kwargs, &block)
|
21
|
+
@_rake_context.call(:file, *args, **kwargs, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def sh(*args, **kwargs, &block)
|
25
|
+
@_rake_context.call(:sh, *args, **kwargs, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubySlime
|
4
|
+
module Rake
|
5
|
+
class DevelopmentSync
|
6
|
+
include Context
|
7
|
+
|
8
|
+
def initialize(
|
9
|
+
rake_context:,
|
10
|
+
path_prefix: '',
|
11
|
+
path_namespace:,
|
12
|
+
rclone_conf: 'sync.rclone.conf',
|
13
|
+
rclone_remote: 'sync'
|
14
|
+
)
|
15
|
+
initialize_context(rake_context)
|
16
|
+
@rclone_conf = rclone_conf
|
17
|
+
@rclone_remote = rclone_remote
|
18
|
+
@path_namespace = [path_prefix, path_namespace].select(&:present?).then do |path_sections|
|
19
|
+
::File.join(*path_sections)
|
20
|
+
end
|
21
|
+
@check_rclone_conf = lambda do
|
22
|
+
raise "\"#{@rclone_conf}\" not found!" unless ::File.file?(@rclone_conf)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def declare
|
27
|
+
desc('rclone sync up')
|
28
|
+
task('sync-up', &method(:sync_up))
|
29
|
+
|
30
|
+
desc('rclone sync down')
|
31
|
+
task('sync-down', &method(:sync_down))
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def sync_up(*_args, **_kwargs)
|
37
|
+
include_options = `git ls-files -io --exclude-per-directory=.gitignore`
|
38
|
+
.each_line
|
39
|
+
.map(&:strip)
|
40
|
+
.select(&:present?)
|
41
|
+
.reject do |filename|
|
42
|
+
filename.split(%r{[/\\]}).then do |path_sections|
|
43
|
+
path_sections.include?('.terraform') || \
|
44
|
+
path_sections.include?('.idea') || \
|
45
|
+
path_sections.last.then do |file_name|
|
46
|
+
file_name.end_with?('rclone.conf') || \
|
47
|
+
file_name.end_with?('tfstate.backup')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end.map do |file_path|
|
51
|
+
"--include=#{file_path}"
|
52
|
+
end
|
53
|
+
@check_rclone_conf.call
|
54
|
+
sh(
|
55
|
+
'rclone',
|
56
|
+
'copy',
|
57
|
+
"--config=#{@rclone_conf}",
|
58
|
+
*include_options,
|
59
|
+
'.',
|
60
|
+
"#{@rclone_remote}:#{@path_namespace}/",
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def sync_down(*_args, **_kwargs)
|
65
|
+
@check_rclone_conf.call
|
66
|
+
sh(
|
67
|
+
'rclone',
|
68
|
+
'copy',
|
69
|
+
"--config=#{@rclone_conf}",
|
70
|
+
"#{@rclone_remote}:#{@path_namespace}/",
|
71
|
+
'.',
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/ruby_slime/version.rb
CHANGED
data/lib/ruby_slime.rb
CHANGED
@@ -13,6 +13,16 @@ loader.inflector.inflect(
|
|
13
13
|
'api_verifier' => 'APIVerifier',
|
14
14
|
'jwt_kit' => 'JWTKit',
|
15
15
|
)
|
16
|
+
::File.join(__dir__, 'ruby_slime').then do |base_path|
|
17
|
+
%w[jwt_kit mongoid rake].flat_map do |autoload_module|
|
18
|
+
[
|
19
|
+
::File.join(base_path, "#{autoload_module}.rb"),
|
20
|
+
::File.join(base_path, autoload_module),
|
21
|
+
]
|
22
|
+
end
|
23
|
+
end.tap do |autoload_paths|
|
24
|
+
loader.do_not_eager_load(*autoload_paths)
|
25
|
+
end
|
16
26
|
loader.setup
|
17
27
|
|
18
28
|
module RubySlime
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_slime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sarun Rattanasiri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -119,7 +119,11 @@ files:
|
|
119
119
|
- lib/ruby_slime/mongoid/interactor.rb
|
120
120
|
- lib/ruby_slime/mongoid/stale_record.rb
|
121
121
|
- lib/ruby_slime/mongoid/state.rb
|
122
|
+
- lib/ruby_slime/object_sharing.rb
|
122
123
|
- lib/ruby_slime/process_helper.rb
|
124
|
+
- lib/ruby_slime/rake.rb
|
125
|
+
- lib/ruby_slime/rake/context.rb
|
126
|
+
- lib/ruby_slime/rake/development_sync.rb
|
123
127
|
- lib/ruby_slime/schema_violation.rb
|
124
128
|
- lib/ruby_slime/unknown_command.rb
|
125
129
|
- lib/ruby_slime/version.rb
|