meta_request 0.7.2 → 0.7.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/meta_request/app_notifications.rb +25 -26
- data/lib/meta_request/app_request.rb +2 -1
- data/lib/meta_request/config.rb +2 -0
- data/lib/meta_request/event.rb +23 -17
- data/lib/meta_request/log_interceptor.rb +10 -8
- data/lib/meta_request/middlewares/app_request_handler.rb +7 -6
- data/lib/meta_request/middlewares/headers.rb +3 -2
- data/lib/meta_request/middlewares/meta_request_handler.rb +4 -2
- data/lib/meta_request/middlewares.rb +5 -3
- data/lib/meta_request/railtie.rb +3 -5
- data/lib/meta_request/storage.rb +2 -0
- data/lib/meta_request/utils.rb +4 -1
- data/lib/meta_request/version.rb +3 -1
- data/lib/meta_request.rb +12 -10
- metadata +41 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e49088dd0f59edb460bd290208da99950c27d80b53a89ec118eff7e92456081
|
4
|
+
data.tar.gz: 176cf5c3b6acc39a80c962e3e1bc6d2d2a7bbce8c492bd5055bcb18d592fc1a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c91cd99b7cbf908d8aa04fd2781296be408921eb4ea1b4504fa10a586fa216f55f68798bd2f6304ab0e5be3a1300c00347adcc3add55ffb15285298b2db3e5f
|
7
|
+
data.tar.gz: 6ef328ed871cc4705fece9ffc7ab0642a8763b40d24848ecedc9e7754a5636164484be069d6655596a1be7be2a8b94fab28fab5916645a577bdb148ca736df0a
|
@@ -1,17 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
4
|
class AppNotifications
|
3
|
-
|
4
5
|
# these are the specific keys in the cache payload that we display in the
|
5
6
|
# panel view
|
6
|
-
CACHE_KEY_COLUMNS = [
|
7
|
+
CACHE_KEY_COLUMNS = %i[key hit options type].freeze
|
7
8
|
|
8
9
|
# define this here so we can pass it in to all of our cache subscribe calls
|
9
|
-
CACHE_BLOCK =
|
10
|
+
CACHE_BLOCK = proc { |*args|
|
10
11
|
name, start, ending, transaction_id, payload = args
|
11
12
|
|
12
13
|
# from http://edgeguides.rubyonrails.org/active_support_instrumentation.html#cache-fetch-hit-active-support
|
13
14
|
#
|
14
|
-
# :super_operation
|
15
|
+
# :super_operation :fetch is added when a read is used with #fetch
|
15
16
|
#
|
16
17
|
# so if :super_operation is present, we'll use it for the type. otherwise
|
17
18
|
# strip (say) 'cache_delete.active_support' down to 'delete'
|
@@ -36,17 +37,17 @@ module MetaRequest
|
|
36
37
|
# display sequel events without modification. otherwise the ui would need to
|
37
38
|
# be modified to support a sequel tab (or to change the display name on the
|
38
39
|
# active_record tab when necessary - which maybe makes more sense?)
|
39
|
-
SQL_EVENT_NAME =
|
40
|
+
SQL_EVENT_NAME = 'sql.active_record'
|
40
41
|
|
41
|
-
SQL_BLOCK =
|
42
|
-
|
42
|
+
SQL_BLOCK = proc { |*args|
|
43
|
+
_name, start, ending, transaction_id, payload = args
|
43
44
|
callsite = Utils.dev_callsite(caller)
|
44
45
|
payload.merge!(callsite) if callsite
|
45
46
|
|
46
47
|
Event.new(SQL_EVENT_NAME, start, ending, transaction_id, payload)
|
47
48
|
}
|
48
49
|
|
49
|
-
VIEW_BLOCK =
|
50
|
+
VIEW_BLOCK = proc { |*args|
|
50
51
|
name, start, ending, transaction_id, payload = args
|
51
52
|
payload[:identifier] = MetaRequest::Utils.sub_source_path(payload[:identifier])
|
52
53
|
|
@@ -56,34 +57,32 @@ module MetaRequest
|
|
56
57
|
# Subscribe to all events relevant to RailsPanel
|
57
58
|
#
|
58
59
|
def self.subscribe
|
59
|
-
new
|
60
|
-
subscribe(
|
61
|
-
subscribe(
|
62
|
-
subscribe(
|
63
|
-
subscribe(
|
64
|
-
subscribe(
|
65
|
-
subscribe(
|
66
|
-
subscribe(
|
60
|
+
new
|
61
|
+
.subscribe('meta_request.log')
|
62
|
+
.subscribe('sql.active_record', &SQL_BLOCK)
|
63
|
+
.subscribe('sql.sequel', &SQL_BLOCK)
|
64
|
+
.subscribe('render_partial.action_view', &VIEW_BLOCK)
|
65
|
+
.subscribe('render_template.action_view', &VIEW_BLOCK)
|
66
|
+
.subscribe('process_action.action_controller.exception')
|
67
|
+
.subscribe('process_action.action_controller') do |*args|
|
67
68
|
name, start, ending, transaction_id, payload = args
|
68
69
|
payload[:status] = '500' if payload[:exception]
|
69
70
|
Event.new(name, start, ending, transaction_id, payload)
|
70
|
-
end
|
71
|
-
subscribe(
|
72
|
-
subscribe(
|
73
|
-
subscribe(
|
74
|
-
subscribe(
|
75
|
-
subscribe(
|
76
|
-
subscribe(
|
71
|
+
end
|
72
|
+
.subscribe('cache_read.active_support', &CACHE_BLOCK)
|
73
|
+
.subscribe('cache_generate.active_support', &CACHE_BLOCK)
|
74
|
+
.subscribe('cache_fetch_hit.active_support', &CACHE_BLOCK)
|
75
|
+
.subscribe('cache_write.active_support', &CACHE_BLOCK)
|
76
|
+
.subscribe('cache_delete.active_support', &CACHE_BLOCK)
|
77
|
+
.subscribe('cache_exist?.active_support', &CACHE_BLOCK)
|
77
78
|
end
|
78
79
|
|
79
80
|
def subscribe(event_name)
|
80
81
|
ActiveSupport::Notifications.subscribe(event_name) do |*args|
|
81
|
-
event = block_given
|
82
|
+
event = block_given? ? yield(*args) : Event.new(*args)
|
82
83
|
AppRequest.current.events << event if AppRequest.current
|
83
84
|
end
|
84
85
|
self
|
85
86
|
end
|
86
|
-
|
87
87
|
end
|
88
|
-
|
89
88
|
end
|
data/lib/meta_request/config.rb
CHANGED
data/lib/meta_request/event.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support'
|
2
4
|
require 'active_support/json'
|
3
5
|
require 'active_support/core_ext'
|
4
6
|
|
5
7
|
module MetaRequest
|
6
|
-
|
7
8
|
# Subclass of ActiveSupport Event that is JSON encodable
|
8
9
|
#
|
9
10
|
class Event < ActiveSupport::Notifications::Event
|
10
|
-
NOT_JSON_ENCODABLE = 'Not JSON Encodable'
|
11
|
+
NOT_JSON_ENCODABLE = 'Not JSON Encodable'
|
11
12
|
|
12
13
|
attr_reader :duration
|
13
14
|
|
@@ -27,7 +28,7 @@ module MetaRequest
|
|
27
28
|
end
|
28
29
|
trace.unshift "#{exception.class} (#{exception.message})"
|
29
30
|
trace.map do |call|
|
30
|
-
Event.new('process_action.action_controller.exception', 0, 0, nil,
|
31
|
+
Event.new('process_action.action_controller.exception', 0, 0, nil, call: call)
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
@@ -35,38 +36,43 @@ module MetaRequest
|
|
35
36
|
|
36
37
|
def json_encodable(payload)
|
37
38
|
return {} unless payload.is_a?(Hash)
|
38
|
-
|
39
|
+
|
40
|
+
transform_hash(payload, deep: true) do |hash, key, value|
|
39
41
|
if value.class.to_s == 'ActionDispatch::Http::Headers'
|
40
42
|
value = value.to_h.select { |k, _| k.upcase == k }
|
41
|
-
elsif
|
43
|
+
elsif not_encodable?(value)
|
42
44
|
value = NOT_JSON_ENCODABLE
|
43
45
|
end
|
44
46
|
|
45
47
|
begin
|
46
|
-
value.to_json(:
|
48
|
+
value.to_json(methods: [:duration])
|
47
49
|
new_value = value
|
48
|
-
rescue
|
50
|
+
rescue StandardError
|
49
51
|
new_value = NOT_JSON_ENCODABLE
|
50
52
|
end
|
51
53
|
hash[key] = new_value
|
52
|
-
|
54
|
+
end.with_indifferent_access
|
55
|
+
end
|
56
|
+
|
57
|
+
def not_encodable?(value)
|
58
|
+
(defined?(ActiveRecord) && value.is_a?(ActiveRecord::ConnectionAdapters::AbstractAdapter)) ||
|
59
|
+
(defined?(ActionDispatch) &&
|
60
|
+
(value.is_a?(ActionDispatch::Request) || value.is_a?(ActionDispatch::Response)))
|
53
61
|
end
|
54
62
|
|
55
63
|
# https://gist.github.com/dbenhur/1070399
|
56
|
-
def transform_hash(original, options={}, &block)
|
64
|
+
def transform_hash(original, options = {}, &block)
|
57
65
|
options[:safe_descent] ||= {}
|
58
66
|
new_hash = {}
|
59
67
|
options[:safe_descent][original.object_id] = new_hash
|
60
|
-
original.
|
61
|
-
if
|
62
|
-
value = options[:safe_descent].fetch(
|
68
|
+
original.each_with_object(new_hash) do |(key, value), result|
|
69
|
+
if options[:deep] && Hash === value
|
70
|
+
value = options[:safe_descent].fetch(value.object_id) do
|
63
71
|
transform_hash(value, options, &block)
|
64
|
-
|
72
|
+
end
|
65
73
|
end
|
66
|
-
block.call(result,key,value)
|
67
|
-
|
68
|
-
}
|
74
|
+
block.call(result, key, value)
|
75
|
+
end
|
69
76
|
end
|
70
|
-
|
71
77
|
end
|
72
78
|
end
|
@@ -1,44 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
4
|
module LogInterceptor
|
3
|
-
|
4
|
-
def debug(message=nil, *args)
|
5
|
+
def debug(message = nil, *args)
|
5
6
|
push_event(:debug, message)
|
6
7
|
super
|
7
8
|
end
|
8
9
|
|
9
|
-
def info(message=nil, *args)
|
10
|
+
def info(message = nil, *args)
|
10
11
|
push_event(:info, message)
|
11
12
|
super
|
12
13
|
end
|
13
14
|
|
14
|
-
def warn(message=nil, *args)
|
15
|
+
def warn(message = nil, *args)
|
15
16
|
push_event(:warn, message)
|
16
17
|
super
|
17
18
|
end
|
18
19
|
|
19
|
-
def error(message=nil, *args)
|
20
|
+
def error(message = nil, *args)
|
20
21
|
push_event(:error, message)
|
21
22
|
super
|
22
23
|
end
|
23
24
|
|
24
|
-
def fatal(message=nil, *args)
|
25
|
+
def fatal(message = nil, *args)
|
25
26
|
push_event(:fatal, message)
|
26
27
|
super
|
27
28
|
end
|
28
29
|
|
29
|
-
def unknown(message=nil, *args)
|
30
|
+
def unknown(message = nil, *args)
|
30
31
|
push_event(:unknown, message)
|
31
32
|
super
|
32
33
|
end
|
33
34
|
|
34
35
|
private
|
36
|
+
|
35
37
|
def push_event(level, message)
|
36
38
|
callsite = AppRequest.current && Utils.dev_callsite(caller.drop(1))
|
37
39
|
if callsite
|
38
40
|
payload = callsite.merge(message: message, level: level)
|
39
41
|
AppRequest.current.events << Event.new('meta_request.log', 0, 0, 0, payload)
|
40
42
|
end
|
41
|
-
rescue
|
43
|
+
rescue StandardError => e
|
42
44
|
MetaRequest.config.logger.fatal(e.message + "\n " + e.backtrace.join("\n "))
|
43
45
|
end
|
44
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
|
3
5
|
module MetaRequest
|
@@ -8,19 +10,19 @@ module MetaRequest
|
|
8
10
|
end
|
9
11
|
|
10
12
|
def call(env)
|
11
|
-
app_request = AppRequest.new env[
|
13
|
+
app_request = AppRequest.new env['action_dispatch.request_id']
|
12
14
|
app_request.current!
|
13
15
|
@app.call(env)
|
14
|
-
rescue
|
16
|
+
rescue StandardError => e
|
15
17
|
if defined?(ActionDispatch::ExceptionWrapper)
|
16
18
|
wrapper = if ActionDispatch::ExceptionWrapper.method_defined? :env
|
17
|
-
ActionDispatch::ExceptionWrapper.new(env,
|
19
|
+
ActionDispatch::ExceptionWrapper.new(env, e)
|
18
20
|
else
|
19
|
-
ActionDispatch::ExceptionWrapper.new(env['action_dispatch.backtrace_cleaner'],
|
21
|
+
ActionDispatch::ExceptionWrapper.new(env['action_dispatch.backtrace_cleaner'], e)
|
20
22
|
end
|
21
23
|
app_request.events.push(*Event.events_for_exception(wrapper))
|
22
24
|
else
|
23
|
-
app_request.events.push(*Event.events_for_exception(
|
25
|
+
app_request.events.push(*Event.events_for_exception(e))
|
24
26
|
end
|
25
27
|
raise
|
26
28
|
ensure
|
@@ -29,4 +31,3 @@ module MetaRequest
|
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rack/contrib/response_headers'
|
2
4
|
|
3
5
|
module MetaRequest
|
@@ -29,9 +31,8 @@ module MetaRequest
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def assets_prefix
|
32
|
-
"/#{@app_config.assets.prefix[
|
34
|
+
"/#{@app_config.assets.prefix[%r{\A/?(.*?)/?\z}, 1]}/"
|
33
35
|
end
|
34
|
-
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
4
|
module Middlewares
|
3
5
|
class MetaRequestHandler
|
@@ -6,7 +8,7 @@ module MetaRequest
|
|
6
8
|
end
|
7
9
|
|
8
10
|
def call(env)
|
9
|
-
request_id = env[
|
11
|
+
request_id = env['PATH_INFO'][%r{/__meta_request/(.+)\.json$}, 1]
|
10
12
|
if request_id
|
11
13
|
events_json(request_id)
|
12
14
|
else
|
@@ -18,7 +20,7 @@ module MetaRequest
|
|
18
20
|
|
19
21
|
def events_json(request_id)
|
20
22
|
events_json = Storage.new(request_id).read
|
21
|
-
[200, {
|
23
|
+
[200, { 'Content-Type' => 'text/plain; charset=utf-8' }, [events_json]]
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
4
|
module Middlewares
|
3
|
-
autoload :Headers,
|
4
|
-
autoload :AppRequestHandler,
|
5
|
-
autoload :MetaRequestHandler,
|
5
|
+
autoload :Headers, 'meta_request/middlewares/headers'
|
6
|
+
autoload :AppRequestHandler, 'meta_request/middlewares/app_request_handler'
|
7
|
+
autoload :MetaRequestHandler, 'meta_request/middlewares/meta_request_handler'
|
6
8
|
end
|
7
9
|
end
|
data/lib/meta_request/railtie.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/railtie'
|
2
4
|
|
3
5
|
module MetaRequest
|
4
6
|
class Railtie < ::Rails::Railtie
|
5
|
-
|
6
7
|
initializer 'meta_request.inject_middlewares' do |app|
|
7
8
|
app.middleware.use Middlewares::MetaRequestHandler
|
8
9
|
|
@@ -16,14 +17,11 @@ module MetaRequest
|
|
16
17
|
end
|
17
18
|
|
18
19
|
initializer 'meta_request.log_interceptor' do
|
19
|
-
Rails.logger
|
20
|
+
Rails.logger&.extend(LogInterceptor)
|
20
21
|
end
|
21
22
|
|
22
23
|
initializer 'meta_request.subscribe_to_notifications' do
|
23
24
|
AppNotifications.subscribe
|
24
25
|
end
|
25
|
-
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
29
|
-
|
data/lib/meta_request/storage.rb
CHANGED
data/lib/meta_request/utils.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
4
|
module Utils
|
3
|
-
|
5
|
+
module_function
|
4
6
|
|
5
7
|
def dev_callsite(caller)
|
6
8
|
app_line = caller.detect { |c| c.start_with? MetaRequest.rails_root }
|
@@ -19,6 +21,7 @@ module MetaRequest
|
|
19
21
|
rails_root = MetaRequest.rails_root
|
20
22
|
source_path = MetaRequest.config.source_path
|
21
23
|
return path if rails_root == source_path
|
24
|
+
|
22
25
|
path.sub(rails_root, source_path)
|
23
26
|
end
|
24
27
|
end
|
data/lib/meta_request/version.rb
CHANGED
data/lib/meta_request.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MetaRequest
|
2
|
-
autoload :VERSION,
|
3
|
-
autoload :Config,
|
4
|
-
autoload :Event,
|
5
|
-
autoload :AppRequest,
|
6
|
-
autoload :Storage,
|
7
|
-
autoload :Middlewares,
|
8
|
-
autoload :LogInterceptor,
|
9
|
-
autoload :AppNotifications,
|
10
|
-
autoload :Utils,
|
4
|
+
autoload :VERSION, 'meta_request/version'
|
5
|
+
autoload :Config, 'meta_request/config'
|
6
|
+
autoload :Event, 'meta_request/event'
|
7
|
+
autoload :AppRequest, 'meta_request/app_request'
|
8
|
+
autoload :Storage, 'meta_request/storage'
|
9
|
+
autoload :Middlewares, 'meta_request/middlewares'
|
10
|
+
autoload :LogInterceptor, 'meta_request/log_interceptor'
|
11
|
+
autoload :AppNotifications, 'meta_request/app_notifications'
|
12
|
+
autoload :Utils, 'meta_request/utils'
|
11
13
|
|
12
14
|
def self.config
|
13
15
|
@config ||= Config.new
|
@@ -24,4 +26,4 @@ module MetaRequest
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
require
|
29
|
+
require 'meta_request/railtie'
|
metadata
CHANGED
@@ -1,55 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meta_request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dejan Simic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rack-contrib
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: '1.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: railties
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 3.0.0
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '7.1'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: 3.0.0
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '7.1'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rspec
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 3.8.0
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 3.8.0
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rubocop
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 0.74.0
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.74.0
|
53
81
|
description: Supporting gem for Rails Panel (Google Chrome extension for Rails development)
|
54
82
|
email: desimic@gmail.com
|
55
83
|
executables: []
|
@@ -90,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
118
|
- !ruby/object:Gem::Version
|
91
119
|
version: '0'
|
92
120
|
requirements: []
|
93
|
-
rubygems_version: 3.
|
121
|
+
rubygems_version: 3.3.7
|
94
122
|
signing_key:
|
95
123
|
specification_version: 4
|
96
124
|
summary: Request your Rails request
|