zleb 0.1.6 → 0.1.7

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: 99c996b6bada8154522d4a5f3b86f57d6f261fdd5f9b0dd7acf9f175f809ab71
4
- data.tar.gz: 8eacdc3dfe744e344b30cc163bd9a4486770622d451a7d39681ae1d7d78f953d
3
+ metadata.gz: 057ee32150e2ed7a9b7f3dc65e63ac99a6f17dd4310afab7c3319184c658921d
4
+ data.tar.gz: 44b42681e903f182c241eb7f21fc4fb3a8d80158410a64f5644e37c8f8765cb5
5
5
  SHA512:
6
- metadata.gz: '08007014375d2ff5d452d338059891bcdde37a876eb966e509686b678e5d6ac7872f468aa5d6c5abb5bab61b254d906c9019c3c8760ff29ac3338c9beb132998'
7
- data.tar.gz: bbd9fe508ee3945a819972aa81b54efb32a825ed3913a3f4f184c94f5f303f9d5a20954b931680992f4b5c2d453e981a4e11035f556eaa20d941975296462f64
6
+ metadata.gz: ac766a2c7e331a771517b91ac6874b4ce790bdec5e61e0a226e9deced9e7ca7c0546186e46c7837e7d53e0c16492034d9b2c93a038611777122b9f3a14a080f6
7
+ data.tar.gz: e14a973bbbf5b79d6e747ed5bd9adaa160fe148d3d6bf4c7182c692f96304967826086a9c6a2ed498c3d9311bf7bbf8b7fc97deb0d32a00c463dba325c0896ea
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "https://gems.ruby-china.com"
1
+ source "https://mirrors.tuna.tsinghua.edu.cn/rubygems"
2
2
 
3
3
  # Specify your gem's dependencies in zleb.gemspec
4
4
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zleb (0.1.6)
4
+ zleb (0.1.7)
5
5
  awrence (~> 1.2, >= 1.2.1)
6
6
  concurrent-ruby
7
7
  dry-container (~> 0.7)
@@ -14,9 +14,10 @@ PATH
14
14
  semantic_logger (~> 4.7, >= 4.7.4)
15
15
 
16
16
  GEM
17
- remote: https://gems.ruby-china.com/
17
+ remote: https://mirrors.tuna.tsinghua.edu.cn/rubygems/
18
18
  specs:
19
19
  awrence (1.2.1)
20
+ bigdecimal (4.1.0)
20
21
  bigdecimal (4.1.0-java)
21
22
  concurrent-ruby (1.3.6)
22
23
  diff-lcs (1.6.2)
@@ -25,11 +26,11 @@ GEM
25
26
  zeitwerk (~> 2.6)
26
27
  dry-container (0.11.0)
27
28
  concurrent-ruby (~> 1.0)
28
- dry-core (1.2.0)
29
+ dry-core (1.1.0)
29
30
  concurrent-ruby (~> 1.0)
30
31
  logger
31
32
  zeitwerk (~> 2.6)
32
- dry-inflector (1.3.1)
33
+ dry-inflector (1.2.0)
33
34
  dry-initializer (3.2.0)
34
35
  dry-logic (1.6.0)
35
36
  bigdecimal
@@ -44,8 +45,7 @@ GEM
44
45
  dry-logic (>= 1.4, < 2)
45
46
  dry-types (>= 1.7, < 2)
46
47
  zeitwerk (~> 2.6)
47
- dry-types (1.9.1)
48
- bigdecimal (>= 3.0)
48
+ dry-types (1.7.1)
49
49
  concurrent-ruby (~> 1.0)
50
50
  dry-core (~> 1.0)
51
51
  dry-inflector (~> 1.0)
@@ -58,8 +58,11 @@ GEM
58
58
  dry-schema (>= 1.12, < 2)
59
59
  zeitwerk (~> 2.6)
60
60
  logger (1.7.0)
61
+ nio4r (2.7.5)
61
62
  nio4r (2.7.5-java)
62
63
  plissken (1.4.1)
64
+ puma (6.6.1)
65
+ nio4r (~> 2.0)
63
66
  puma (6.6.1-java)
64
67
  nio4r (~> 2.0)
65
68
  rack (3.2.5)
@@ -84,10 +87,11 @@ GEM
84
87
  rspec-support (3.13.7)
85
88
  semantic_logger (4.17.0)
86
89
  concurrent-ruby (~> 1.0)
87
- zeitwerk (2.7.5)
90
+ zeitwerk (2.6.18)
88
91
 
89
92
  PLATFORMS
90
93
  universal-java
94
+ x86_64-linux
91
95
 
92
96
  DEPENDENCIES
93
97
  rack-test
@@ -97,21 +101,24 @@ DEPENDENCIES
97
101
 
98
102
  CHECKSUMS
99
103
  awrence (1.2.1) sha256=dd1d214c12a91f449d1ef81d7ee3babc2816944e450752e7522c65521872483e
104
+ bigdecimal (4.1.0) sha256=6dc07767aa3dc456ccd48e7ae70a07b474e9afd7c5bc576f80bd6da5c8dd6cae
100
105
  bigdecimal (4.1.0-java) sha256=1623930ea8e5187d4229f2857f129a83247ccd1cade71a4bc7d8bf3b41bbba59
101
106
  concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab
102
107
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
103
108
  dry-configurable (1.3.0) sha256=882d862858567fc1210d2549d4c090f34370fc1bb7c5c1933de3fe792e18afa8
104
109
  dry-container (0.11.0) sha256=23be9381644d47343f3bf13b082b4255994ada0bfd88e0737eaaadc99d035229
105
- dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1
106
- dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc
110
+ dry-core (1.1.0) sha256=0903821a9707649a7da545a2cd88e20f3a663ab1c5288abd7f914fa7751ab195
111
+ dry-inflector (1.2.0) sha256=22f5d0b50fd57074ae57e2ca17e3b300e57564c218269dcf82ff3e42d3f38f2e
107
112
  dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3
108
113
  dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
109
114
  dry-schema (1.13.3) sha256=ff0ec847c7986ddb76145f9426ddacaa68c28b170c0f626fb8d30fcb431393e3
110
- dry-types (1.9.1) sha256=baebeecdb9f8395d6c9d227b62011279440943e3ef2468fe8ccc1ba11467f178
115
+ dry-types (1.7.1) sha256=12165841145a18dd22151f143707b90c8093f71e5ae06ee0f2301f5321f8cdb8
111
116
  dry-validation (1.10.0) sha256=352afd75629772570f54f03d3e7847ac345e628bf345874d49f1dabacc8ceaac
112
117
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
118
+ nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
113
119
  nio4r (2.7.5-java) sha256=d14779d2a9b012ec0148a53344fbb2ed2a3c4d90c5dd923bf281135ab983b2c9
114
120
  plissken (1.4.1) sha256=d8cf78eefb50e4109130e476f599e6f9c0912b7d8733fe167f8cff9dcf7ae50d
121
+ puma (6.6.1) sha256=b9b56e4a4ea75d1bfa6d9e1972ee2c9f43d0883f011826d914e8e37b3694ea1e
115
122
  puma (6.6.1-java) sha256=b5384f7320e3ceb5aa41c729f5ebbde360394aa8f77fcb82a092d63f8512c9c4
116
123
  rack (3.2.5) sha256=4cbd0974c0b79f7a139b4812004a62e4c60b145cba76422e288ee670601ed6d3
117
124
  rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463
@@ -124,8 +131,8 @@ CHECKSUMS
124
131
  rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47
125
132
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
126
133
  semantic_logger (4.17.0) sha256=c54b60d8596abe2e22bd4f20648d4f6c46e4287fba357779c7932335c8d130e9
127
- zeitwerk (2.7.5) sha256=d8da92128c09ea6ec62c949011b00ed4a20242b255293dd66bf41545398f73dd
128
- zleb (0.1.6)
134
+ zeitwerk (2.6.18) sha256=bd2d213996ff7b3b364cd342a585fbee9797dbc1c0c6d868dc4150cc75739781
135
+ zleb (0.1.7)
129
136
 
130
137
  BUNDLED WITH
131
- 4.0.9
138
+ 2.5.23
@@ -4,18 +4,21 @@ class Roda
4
4
  module RodaPlugins
5
5
  module MethodRoute
6
6
 
7
+ SENSITIVE_KEYS = %i[password password_confirmation secret token access_token authorization api_key].freeze
7
8
 
8
9
  def self.load_dependencies(app, _opts = OPTS)
9
10
  app.plugin :hash_routes
10
11
  app.plugin :json_parser
11
12
  end
12
-
13
+
13
14
  module InstanceMethods
14
15
  include SemanticLogger::Loggable
15
-
16
+
16
17
  end
17
18
 
18
19
  module RequestMethods
20
+ include SemanticLogger::Loggable
21
+
19
22
  def method_to(mod)
20
23
  r_path = remaining_path
21
24
  method_name = nil
@@ -25,7 +28,7 @@ class Roda
25
28
  segments.shift
26
29
  first_seg = segments.shift
27
30
  first_seg[0] = first_seg[0].upcase
28
- begin
31
+ begin
29
32
  klass = mod.const_get(first_seg, false)
30
33
  rescue NameError => e
31
34
  return
@@ -33,20 +36,54 @@ class Roda
33
36
  segments.unshift(request_method.downcase)
34
37
  method_name = segments.join("_").to_sym
35
38
 
36
- processer = klass.new({request: self, response: response, headers: headers, params: params, scope: scope})
37
- if processer.respond_to?(:init)
38
- processer.init
39
- end
40
- if processer.respond_to?(method_name)
41
- result = processer.send(method_name)
42
- else
43
- return
39
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
40
+
41
+ begin
42
+ processer = klass.new({request: self, response: response, headers: headers, params: params, scope: scope})
43
+ if processer.respond_to?(:init)
44
+ processer.init
45
+ end
46
+ if processer.respond_to?(method_name)
47
+ result = processer.send(method_name)
48
+ else
49
+ return
50
+ end
51
+ block_result(result)
52
+ rescue => e
53
+ duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round(2)
54
+ logger.error("API #{request_method} #{r_path}",
55
+ controller: klass.name,
56
+ action: method_name,
57
+ params: filter_sensitive_params(params),
58
+ duration_ms: duration_ms,
59
+ exception: e
60
+ )
61
+ raise
44
62
  end
45
- block_result(result)
63
+
64
+ duration_ms = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round(2)
65
+ status = response.status || 200
66
+
67
+ logger.info("API #{request_method} #{r_path}",
68
+ controller: klass.name,
69
+ action: method_name,
70
+ params: filter_sensitive_params(params),
71
+ status: status,
72
+ duration_ms: duration_ms
73
+ )
74
+
46
75
  halt
47
76
  end
48
77
  end
49
78
 
79
+ private
80
+
81
+ def filter_sensitive_params(params_hash)
82
+ return params_hash unless params_hash.is_a?(Hash)
83
+ params_hash.each_with_object({}) do |(k, v), filtered|
84
+ filtered[k] = MethodRoute::SENSITIVE_KEYS.include?(k.to_sym) ? "[FILTERED]" : v
85
+ end
86
+ end
50
87
  end
51
88
 
52
89
  module ClassMethods
data/lib/zleb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zleb
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zleb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - saidev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-03-29 00:00:00.000000000 Z
11
+ date: 2026-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roda