rails-profiler 0.23.0 → 0.24.0

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: 893d3965287ddebc00378c605ff16d13734a4fd97c7016d2c613c0eb3c6b709b
4
- data.tar.gz: 9574f00d346286e72d4d47abdab4d60520053b5f16b6f16c701ba178c24ab4ce
3
+ metadata.gz: 7470de2ae63f1df27d88a861cfc022dbd4a7323e69195d7d0987dab1ada89689
4
+ data.tar.gz: eb002b0b052032a60e1f348cde049f8957bee12f6305a81c3081c8217f036d22
5
5
  SHA512:
6
- metadata.gz: 1e0f22f1aa90112910678954253843a3d4bb245029a829359e195f99dc9e5bbc87c0f43d0333959dfa00f7d612cd83fb111c81cdb63767435751a2de26eae4bd
7
- data.tar.gz: '058f8f1228758f62939eb97ee0b6124b737c053d00634971df9905bc7732c61936ece855280c14da509cc1bee981ef6a7185bc3c72652d3a2b816b97f9628765'
6
+ metadata.gz: a6dea6a9037b7d031699b1604722de35dcdc0ed59116c346ad4b627c986ac1af532740f0c7293321a3ccd468c6f0e5c44ef7765ea93ea2b7897948a93474b622
7
+ data.tar.gz: 9c8bd2f0a48dfd3670a4089c5b4a29f00943d7ed282bb4b30e2a58bb198812203385680b0be0352df4a46d53668679377c964def5385f1c29c3d12cbc0467469
@@ -72,6 +72,11 @@ module Profiler
72
72
  require_relative "tools/query_jobs"
73
73
  require_relative "tools/query_mailers"
74
74
  require_relative "tools/clear_profiles"
75
+ require_relative "tools/list_env_vars"
76
+ require_relative "tools/set_env_var"
77
+ require_relative "tools/delete_env_var"
78
+ require_relative "tools/reset_env_var"
79
+ require_relative "tools/reset_all_env_vars"
75
80
 
76
81
  [
77
82
  define_tool(
@@ -207,6 +212,57 @@ module Profiler
207
212
  }
208
213
  },
209
214
  handler: Tools::ClearProfiles
215
+ ),
216
+ define_tool(
217
+ name: "list_env_vars",
218
+ description: "List environment variables. By default shows only active overrides. Pass include_all: true to see all ENV vars.",
219
+ input_schema: {
220
+ properties: {
221
+ include_all: { type: "boolean", description: "If true, return all ENV variables (not just overrides). Default: false." },
222
+ filter: { type: "string", description: "Case-insensitive substring filter on key name." }
223
+ }
224
+ },
225
+ handler: Tools::ListEnvVars
226
+ ),
227
+ define_tool(
228
+ name: "set_env_var",
229
+ description: "Set an environment variable and persist the override across app restarts.",
230
+ input_schema: {
231
+ properties: {
232
+ key: { type: "string", description: "Environment variable name (required)" },
233
+ value: { type: "string", description: "New value (required)" }
234
+ },
235
+ required: ["key", "value"]
236
+ },
237
+ handler: Tools::SetEnvVar
238
+ ),
239
+ define_tool(
240
+ name: "delete_env_var",
241
+ description: "Delete an environment variable for this session (persisted across restarts until reset).",
242
+ input_schema: {
243
+ properties: {
244
+ key: { type: "string", description: "Environment variable name (required)" }
245
+ },
246
+ required: ["key"]
247
+ },
248
+ handler: Tools::DeleteEnvVar
249
+ ),
250
+ define_tool(
251
+ name: "reset_env_var",
252
+ description: "Restore an overridden environment variable to its original value.",
253
+ input_schema: {
254
+ properties: {
255
+ key: { type: "string", description: "Environment variable name to restore (required)" }
256
+ },
257
+ required: ["key"]
258
+ },
259
+ handler: Tools::ResetEnvVar
260
+ ),
261
+ define_tool(
262
+ name: "reset_all_env_vars",
263
+ description: "Restore all overridden environment variables to their original values.",
264
+ input_schema: { properties: {} },
265
+ handler: Tools::ResetAllEnvVars
210
266
  )
211
267
  ]
212
268
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Profiler
4
+ module MCP
5
+ module Tools
6
+ class DeleteEnvVar
7
+ def self.call(params)
8
+ key = params["key"].to_s.strip
9
+
10
+ return [{ type: "text", text: "Error: key cannot be blank." }] if key.empty?
11
+
12
+ Profiler.env_override_store.delete(key)
13
+ ENV.delete(key)
14
+
15
+ [{ type: "text", text: "Deleted #{key}. Override persisted — will remain deleted across restarts until reset." }]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Profiler
4
+ module MCP
5
+ module Tools
6
+ class ListEnvVars
7
+ def self.call(params)
8
+ include_all = params["include_all"]
9
+ filter = params["filter"]&.downcase
10
+
11
+ if include_all
12
+ vars = ENV.to_h.sort.to_h
13
+ overrides = Profiler.env_override_store.all_overrides
14
+
15
+ vars = vars.select { |k, _| k.downcase.include?(filter) } if filter
16
+
17
+ if vars.empty?
18
+ return [{ type: "text", text: "No environment variables match filter '#{params["filter"]}'." }]
19
+ end
20
+
21
+ rows = vars.map do |key, value|
22
+ override = overrides[key]
23
+ overridden = override ? "✓ (was: #{override["original"] || "(unset)"})" : ""
24
+ "| #{key} | #{value} | #{overridden} |"
25
+ end
26
+
27
+ text = "**ENV variables (#{vars.size}#{filter ? ", filtered by '#{params["filter"]}'" : ""})**\n\n"
28
+ text += "| Key | Current Value | Overridden |\n"
29
+ text += "|-----|--------------|------------|\n"
30
+ text += rows.join("\n")
31
+ else
32
+ overrides = Profiler.env_override_store.all_overrides
33
+ overrides = overrides.select { |k, _| k.downcase.include?(filter) } if filter
34
+
35
+ if overrides.empty?
36
+ msg = filter ? "No overrides match filter '#{params["filter"]}'." : "No overrides active."
37
+ return [{ type: "text", text: msg }]
38
+ end
39
+
40
+ rows = overrides.map do |key, entry|
41
+ current = entry["value"] == EnvOverrideStore::DELETED_SENTINEL ? "(deleted)" : entry["value"]
42
+ original = entry["original"] || "(unset)"
43
+ "| #{key} | #{current} | #{original} |"
44
+ end
45
+
46
+ text = "**Active ENV overrides (#{overrides.size})**\n\n"
47
+ text += "| Key | Current Value | Original Value |\n"
48
+ text += "|-----|--------------|----------------|\n"
49
+ text += rows.join("\n")
50
+ end
51
+
52
+ [{ type: "text", text: text }]
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Profiler
4
+ module MCP
5
+ module Tools
6
+ class ResetAllEnvVars
7
+ def self.call(_params)
8
+ overrides = Profiler.env_override_store.all_overrides
9
+ count = overrides.size
10
+
11
+ if count.zero?
12
+ return [{ type: "text", text: "No active overrides to reset." }]
13
+ end
14
+
15
+ Profiler.env_override_store.reset_all
16
+
17
+ [{ type: "text", text: "Reset #{count} environment variable#{"s" if count != 1} to original values." }]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Profiler
4
+ module MCP
5
+ module Tools
6
+ class ResetEnvVar
7
+ def self.call(params)
8
+ key = params["key"].to_s.strip
9
+
10
+ return [{ type: "text", text: "Error: key cannot be blank." }] if key.empty?
11
+
12
+ overrides = Profiler.env_override_store.all_overrides
13
+ unless overrides.key?(key)
14
+ return [{ type: "text", text: "No active override for #{key}." }]
15
+ end
16
+
17
+ original = overrides[key]["original"]
18
+ Profiler.env_override_store.reset(key)
19
+
20
+ restored = original || "(unset)"
21
+ [{ type: "text", text: "Reset #{key} to original value: #{restored}" }]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Profiler
4
+ module MCP
5
+ module Tools
6
+ class SetEnvVar
7
+ def self.call(params)
8
+ key = params["key"].to_s.strip
9
+ value = params["value"].to_s
10
+
11
+ return [{ type: "text", text: "Error: key cannot be blank." }] if key.empty?
12
+
13
+ Profiler.env_override_store.set(key, value)
14
+ ENV[key] = value
15
+
16
+ [{ type: "text", text: "Set #{key}=#{value}" }]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Profiler
4
- VERSION = "0.23.0"
4
+ VERSION = "0.24.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sébastien Duplessy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-05-27 00:00:00.000000000 Z
11
+ date: 2026-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -161,14 +161,19 @@ files:
161
161
  - lib/profiler/mcp/server.rb
162
162
  - lib/profiler/mcp/tools/analyze_queries.rb
163
163
  - lib/profiler/mcp/tools/clear_profiles.rb
164
+ - lib/profiler/mcp/tools/delete_env_var.rb
164
165
  - lib/profiler/mcp/tools/explain_query.rb
165
166
  - lib/profiler/mcp/tools/get_profile_ajax.rb
166
167
  - lib/profiler/mcp/tools/get_profile_detail.rb
167
168
  - lib/profiler/mcp/tools/get_profile_dumps.rb
168
169
  - lib/profiler/mcp/tools/get_profile_http.rb
170
+ - lib/profiler/mcp/tools/list_env_vars.rb
169
171
  - lib/profiler/mcp/tools/query_jobs.rb
170
172
  - lib/profiler/mcp/tools/query_mailers.rb
171
173
  - lib/profiler/mcp/tools/query_profiles.rb
174
+ - lib/profiler/mcp/tools/reset_all_env_vars.rb
175
+ - lib/profiler/mcp/tools/reset_env_var.rb
176
+ - lib/profiler/mcp/tools/set_env_var.rb
172
177
  - lib/profiler/middleware/cors_middleware.rb
173
178
  - lib/profiler/middleware/profiler_middleware.rb
174
179
  - lib/profiler/middleware/toolbar_injector.rb