meta_request 0.7.2 → 0.7.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|