http_logger 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6ee341e7cf002e7155641272ce0e6518d9e42092
4
- data.tar.gz: bf7be16847384cfbc8eb935708b70f9d388c19f5
2
+ SHA256:
3
+ metadata.gz: 2ee612be76637a3fa5e75db03b7fa33a7016d3b4f509c32295580e002df73bd2
4
+ data.tar.gz: f7ef81b6d4c9d61dfa37626794a6bb725c1e83b36b29d824bf70bd5215bfb4e8
5
5
  SHA512:
6
- metadata.gz: 5954d2a816a4014eaf113bc438c0be9e69ad95ad1afbe4b06f332aa87f6ce8c108e74b54c63013d0cd6942b070bef12394c0454f7214f3b436cda43b887d7ebc
7
- data.tar.gz: 74e882cb119517efb27ae14b554054b09f5e7071e31d1375808d4cf976f29ebb54bcd4d5132edf6da47714ce2ee5f87d042abce22a66be48a8b3fee99b012721
6
+ metadata.gz: 9d81717a77786fb2bffb89c9cce68bc1f9ef8c6d4f2960a945324db0c53831cd8c78643e3c21779f1250cf862e2dcaa5a3d6610eb5fb934c2a15ed296225c416
7
+ data.tar.gz: 90132a5f50f91d39542f255680e577bd755254815df1f5332d71c73db76eadc2862a30d9b43dfc04e6cb50ce7aea30dc5143997c41a3c3cff07616eea342b285
data/Gemfile CHANGED
@@ -1,10 +1,9 @@
1
1
  source "http://rubygems.org"
2
2
 
3
-
4
3
  group :development do
5
- gem "debugger", :platform => "ruby_19"
4
+ gem "byebug"
5
+ gem "webmock"
6
6
  gem "rspec"
7
7
  gem "bundler"
8
8
  gem "jeweler"
9
- gem "fakeweb"
10
9
  end
@@ -1,79 +1,86 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- addressable (2.3.6)
5
- atomic (1.1.16)
6
- builder (3.2.2)
7
- columnize (0.3.6)
8
- debugger (1.2.1)
9
- columnize (>= 0.3.1)
10
- debugger-linecache (~> 1.1.1)
11
- debugger-ruby_core_source (~> 1.1.4)
12
- debugger-linecache (1.1.2)
13
- debugger-ruby_core_source (>= 1.1.1)
14
- debugger-ruby_core_source (1.1.4)
4
+ addressable (2.4.0)
5
+ builder (3.2.4)
6
+ byebug (11.1.1)
7
+ crack (0.4.3)
8
+ safe_yaml (~> 1.0.0)
15
9
  descendants_tracker (0.0.4)
16
10
  thread_safe (~> 0.3, >= 0.3.1)
17
- diff-lcs (1.1.3)
18
- fakeweb (1.3.0)
19
- faraday (0.9.0)
11
+ diff-lcs (1.3)
12
+ faraday (0.9.2)
20
13
  multipart-post (>= 1.2, < 3)
21
- git (1.2.6)
22
- github_api (0.11.3)
23
- addressable (~> 2.3)
24
- descendants_tracker (~> 0.0.1)
14
+ git (1.5.0)
15
+ github_api (0.16.0)
16
+ addressable (~> 2.4.0)
17
+ descendants_tracker (~> 0.0.4)
25
18
  faraday (~> 0.8, < 0.10)
26
- hashie (>= 1.2)
27
- multi_json (>= 1.7.5, < 2.0)
28
- nokogiri (~> 1.6.0)
29
- oauth2
30
- hashie (2.0.5)
31
- highline (1.6.21)
32
- jeweler (2.0.1)
19
+ hashie (>= 3.4)
20
+ mime-types (>= 1.16, < 3.0)
21
+ oauth2 (~> 1.0)
22
+ hashdiff (1.0.0)
23
+ hashie (4.0.0)
24
+ highline (2.0.3)
25
+ jeweler (2.3.9)
33
26
  builder
34
- bundler (>= 1.0)
27
+ bundler
35
28
  git (>= 1.2.5)
36
- github_api
29
+ github_api (~> 0.16.0)
37
30
  highline (>= 1.6.15)
38
31
  nokogiri (>= 1.5.10)
32
+ psych
39
33
  rake
40
34
  rdoc
41
- json (1.8.1)
42
- jwt (0.1.11)
43
- multi_json (>= 1.5)
44
- mini_portile (0.5.3)
45
- multi_json (1.9.2)
46
- multi_xml (0.5.5)
47
- multipart-post (2.0.0)
48
- nokogiri (1.6.1)
49
- mini_portile (~> 0.5.0)
50
- oauth2 (0.9.3)
51
- faraday (>= 0.8, < 0.10)
52
- jwt (~> 0.1.8)
35
+ semver2
36
+ jwt (2.2.1)
37
+ mime-types (2.99.3)
38
+ mini_portile2 (2.4.0)
39
+ multi_json (1.14.1)
40
+ multi_xml (0.6.0)
41
+ multipart-post (2.1.1)
42
+ nokogiri (1.10.7)
43
+ mini_portile2 (~> 2.4.0)
44
+ oauth2 (1.4.2)
45
+ faraday (>= 0.8, < 2.0)
46
+ jwt (>= 1.0, < 3.0)
53
47
  multi_json (~> 1.3)
54
48
  multi_xml (~> 0.5)
55
- rack (~> 1.2)
56
- rack (1.5.2)
57
- rake (10.2.2)
58
- rdoc (4.1.1)
59
- json (~> 1.4)
60
- rspec (2.9.0)
61
- rspec-core (~> 2.9.0)
62
- rspec-expectations (~> 2.9.0)
63
- rspec-mocks (~> 2.9.0)
64
- rspec-core (2.9.0)
65
- rspec-expectations (2.9.1)
66
- diff-lcs (~> 1.1.3)
67
- rspec-mocks (2.9.0)
68
- thread_safe (0.3.1)
69
- atomic (>= 1.1.7, < 2)
49
+ rack (>= 1.2, < 3)
50
+ psych (3.1.0)
51
+ rack (2.1.1)
52
+ rake (13.0.1)
53
+ rdoc (6.2.1)
54
+ rspec (3.9.0)
55
+ rspec-core (~> 3.9.0)
56
+ rspec-expectations (~> 3.9.0)
57
+ rspec-mocks (~> 3.9.0)
58
+ rspec-core (3.9.1)
59
+ rspec-support (~> 3.9.1)
60
+ rspec-expectations (3.9.0)
61
+ diff-lcs (>= 1.2.0, < 2.0)
62
+ rspec-support (~> 3.9.0)
63
+ rspec-mocks (3.9.1)
64
+ diff-lcs (>= 1.2.0, < 2.0)
65
+ rspec-support (~> 3.9.0)
66
+ rspec-support (3.9.2)
67
+ safe_yaml (1.0.5)
68
+ semver2 (3.4.2)
69
+ thread_safe (0.3.6)
70
+ webmock (3.8.0)
71
+ addressable (>= 2.3.6)
72
+ crack (>= 0.3.2)
73
+ hashdiff (>= 0.4.0, < 2.0.0)
70
74
 
71
75
  PLATFORMS
72
76
  ruby
73
77
 
74
78
  DEPENDENCIES
75
79
  bundler
76
- debugger
77
- fakeweb
80
+ byebug
78
81
  jeweler
79
82
  rspec
83
+ webmock
84
+
85
+ BUNDLED WITH
86
+ 2.0.1
data/Readme.md CHANGED
@@ -27,6 +27,7 @@ HttpLogger.log_headers = false # Default: false
27
27
  HttpLogger.log_request_body = false # Default: true
28
28
  HttpLogger.log_response_body = false # Default: true
29
29
  HttpLogger.level = :info # Desired log level as a symbol. Default: :debug
30
+ HttpLogger.collapse_body_limit # Change default truncate limit. Default: 5000
30
31
  ```
31
32
 
32
33
  ## Alternative
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 0.6.0
@@ -2,18 +2,18 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: http_logger 0.5.1 ruby lib
5
+ # stub: http_logger 0.6.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = "http_logger"
9
- s.version = "0.5.1"
8
+ s.name = "http_logger".freeze
9
+ s.version = "0.6.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Bogdan Gusiev"]
14
- s.date = "2014-11-07"
15
- s.description = "This gem keep an eye on every Net::HTTP library usage and dump all request and response data to the log file"
16
- s.email = "agresso@gmail.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Bogdan Gusiev".freeze]
14
+ s.date = "2020-01-27"
15
+ s.description = "This gem keep an eye on every Net::HTTP library usage and dump all request and response data to the log file".freeze
16
+ s.email = "agresso@gmail.com".freeze
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE.txt"
19
19
  ]
@@ -34,33 +34,33 @@ Gem::Specification.new do |s|
34
34
  "spec/http_logger_spec.rb",
35
35
  "spec/spec_helper.rb"
36
36
  ]
37
- s.homepage = "http://github.com/railsware/http_logger"
38
- s.licenses = ["MIT"]
39
- s.rubygems_version = "2.2.2"
40
- s.summary = "Log your http api calls just like SQL queries"
37
+ s.homepage = "http://github.com/railsware/http_logger".freeze
38
+ s.licenses = ["MIT".freeze]
39
+ s.rubygems_version = "2.7.8".freeze
40
+ s.summary = "Log your http api calls just like SQL queries".freeze
41
41
 
42
42
  if s.respond_to? :specification_version then
43
43
  s.specification_version = 4
44
44
 
45
45
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_development_dependency(%q<debugger>, [">= 0"])
47
- s.add_development_dependency(%q<rspec>, [">= 0"])
48
- s.add_development_dependency(%q<bundler>, [">= 0"])
49
- s.add_development_dependency(%q<jeweler>, [">= 0"])
50
- s.add_development_dependency(%q<fakeweb>, [">= 0"])
46
+ s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
47
+ s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
48
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
50
+ s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
51
51
  else
52
- s.add_dependency(%q<debugger>, [">= 0"])
53
- s.add_dependency(%q<rspec>, [">= 0"])
54
- s.add_dependency(%q<bundler>, [">= 0"])
55
- s.add_dependency(%q<jeweler>, [">= 0"])
56
- s.add_dependency(%q<fakeweb>, [">= 0"])
52
+ s.add_dependency(%q<byebug>.freeze, [">= 0"])
53
+ s.add_dependency(%q<webmock>.freeze, [">= 0"])
54
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
55
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
56
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
57
57
  end
58
58
  else
59
- s.add_dependency(%q<debugger>, [">= 0"])
60
- s.add_dependency(%q<rspec>, [">= 0"])
61
- s.add_dependency(%q<bundler>, [">= 0"])
62
- s.add_dependency(%q<jeweler>, [">= 0"])
63
- s.add_dependency(%q<fakeweb>, [">= 0"])
59
+ s.add_dependency(%q<byebug>.freeze, [">= 0"])
60
+ s.add_dependency(%q<webmock>.freeze, [">= 0"])
61
+ s.add_dependency(%q<rspec>.freeze, [">= 0"])
62
+ s.add_dependency(%q<bundler>.freeze, [">= 0"])
63
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
64
64
  end
65
65
  end
66
66
 
@@ -77,7 +77,7 @@ class HttpLogger
77
77
  end
78
78
 
79
79
  def request_url(http, request)
80
- URI.decode("http#{"s" if http.use_ssl?}://#{http.address}:#{http.port}#{request.path}")
80
+ URI::DEFAULT_PARSER.unescape("http#{"s" if http.use_ssl?}://#{http.address}:#{http.port}#{request.path}")
81
81
  end
82
82
 
83
83
  def log_request_headers(request)
@@ -87,7 +87,7 @@ class HttpLogger
87
87
  end
88
88
 
89
89
  HTTP_METHODS_WITH_BODY = Set.new(%w(POST PUT GET PATCH))
90
-
90
+
91
91
  def log_request_body(request)
92
92
  if self.class.log_request_body
93
93
  if HTTP_METHODS_WITH_BODY.include?(request.method)
@@ -103,13 +103,13 @@ class HttpLogger
103
103
  end
104
104
 
105
105
  def log_response_headers(response)
106
- if self.class.log_headers
106
+ if HttpLogger.log_headers
107
107
  response.each_capitalized { |k,v| log("HTTP response header", "#{k}: #{v}") }
108
108
  end
109
109
  end
110
110
 
111
111
  def log_response_body(body)
112
- if self.class.log_response_body
112
+ if HttpLogger.log_response_body
113
113
  if body.is_a?(Net::ReadAdapter)
114
114
  log("Response body", "<impossible to log>")
115
115
  else
@@ -126,23 +126,40 @@ class HttpLogger
126
126
 
127
127
  def ignored?(http, request)
128
128
  url = request_url(http, request)
129
- self.class.ignore.any? do |pattern|
129
+ HttpLogger.ignore.any? do |pattern|
130
130
  url =~ pattern
131
131
  end
132
132
  end
133
133
 
134
134
  def fakeweb?(http, request)
135
- return false unless defined?(::FakeWeb)
136
- uri = ::FakeWeb::Utility.request_uri_as_string(http, request)
135
+ return false unless defined?(::WebMock)
136
+ uri = request_uri_as_string(http, request)
137
137
  method = request.method.downcase.to_sym
138
- ::FakeWeb.registered_uri?(method, uri)
138
+ signature = WebMock::RequestSignature.new(method, uri)
139
+ ::WebMock.registered_request?(signature)
140
+ end
141
+
142
+ def request_uri_as_string(net_http, request)
143
+ protocol = net_http.use_ssl? ? "https" : "http"
144
+
145
+ path = request.path
146
+ path = URI.parse(request.path).request_uri if request.path =~ /^http/
147
+
148
+ if request["authorization"] =~ /^Basic /
149
+ userinfo = FakeWeb::Utility.decode_userinfo_from_header(request["authorization"])
150
+ userinfo = FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo) + "@"
151
+ else
152
+ userinfo = ""
153
+ end
154
+
155
+ "#{protocol}://#{userinfo}#{net_http.address}:#{net_http.port}#{path}"
139
156
  end
140
157
 
141
158
  def truncate_body(body)
142
159
  if collapse_body_limit && collapse_body_limit > 0 && body && body.size >= collapse_body_limit
143
160
  body_piece_size = collapse_body_limit / 2
144
- body[0..body_piece_size] +
145
- "\n\n<some data truncated>\n\n" +
161
+ body[0..body_piece_size] +
162
+ "\n\n<some data truncated>\n\n" +
146
163
  body[(body.size - body_piece_size)..body.size]
147
164
  else
148
165
  body
@@ -173,33 +190,18 @@ class HttpLogger
173
190
  end
174
191
  end
175
192
 
176
- class Net::HTTP
177
-
178
- def self.log_headers=(value)
179
- HttpLogger.deprecate_config("log_headers")
180
- HttpLogger.log_headers = value
181
- end
182
-
183
- def self.colorize=(value)
184
- HttpLogger.deprecate_config("colorize")
185
- HttpLogger.colorize = value
186
- end
187
-
188
- def self.logger=(value)
189
- HttpLogger.deprecate_config("logger")
190
- HttpLogger.logger = value
191
- end
192
-
193
-
194
- alias_method :request_without_logging, :request
195
-
193
+ module NetHttpLogger
196
194
  def request(request, body = nil, &block)
197
195
  HttpLogger.perform(self, request, body) do
198
- request_without_logging(request, body, &block)
196
+ super(request, body, &block)
199
197
  end
200
198
  end
199
+ end
201
200
 
201
+ if defined?(::WebMock)
202
+ WebMock::HttpLibAdapters::NetHttpAdapter.instance_variable_get("@webMockNetHTTP").prepend(NetHttpLogger)
202
203
  end
204
+ Net::HTTP.prepend(NetHttpLogger)
203
205
 
204
206
  if defined?(Rails)
205
207
 
@@ -7,8 +7,14 @@ describe HttpLogger do
7
7
  # flush log
8
8
  f = File.open(LOGFILE, "w")
9
9
  f.close
10
+ stub_request(:any, url).to_return(
11
+ body: response_body,
12
+ headers: {"X-Http-logger" => true},
13
+ )
10
14
  end
11
15
 
16
+ let(:response_body) { "Success" }
17
+
12
18
  let(:url) { "http://google.com/" }
13
19
  let(:uri) { URI.parse(url) }
14
20
  let(:request) do
@@ -33,7 +39,7 @@ describe HttpLogger do
33
39
  let(:url) { "http://google.com?query=a%20b"}
34
40
 
35
41
  it { subject.should include("query=a b")}
36
-
42
+
37
43
  end
38
44
 
39
45
  context "when headers logging is on" do
@@ -48,7 +54,7 @@ describe HttpLogger do
48
54
  after(:each) do
49
55
  HttpLogger.log_headers = false
50
56
  end
51
-
57
+
52
58
  end
53
59
 
54
60
  describe "post request" do
@@ -60,8 +66,8 @@ describe HttpLogger do
60
66
  it {should include("Request body")}
61
67
  it {should include("a=hello&b=1")}
62
68
  context "with too long body" do
69
+ let(:response_body) { long_body }
63
70
  let(:url) do
64
- FakeWeb.register_uri(:post, "http://github.com", :body => long_body)
65
71
  "http://github.com/"
66
72
  end
67
73
  it { should include("12,Dodo case,dodo@case.com,tech@dodcase.com,single elimination\n")}
@@ -82,7 +88,7 @@ describe HttpLogger do
82
88
  it {should include("Request body")}
83
89
  it {should include("a=hello&b=1")}
84
90
  end
85
-
91
+
86
92
  describe "generic request" do
87
93
  let(:request) do
88
94
  http = Net::HTTP.new(uri.host, uri.port)
@@ -114,8 +120,9 @@ describe HttpLogger do
114
120
 
115
121
  context "with long response body" do
116
122
 
123
+ let(:response_body) { long_body }
117
124
  let(:url) do
118
- FakeWeb.register_uri(:get, "http://github.com", :body => long_body)
125
+ stub_request(:get, "http://github.com/").to_return(body: long_body)
119
126
  "http://github.com"
120
127
  end
121
128
 
@@ -131,8 +138,8 @@ describe HttpLogger do
131
138
  HttpLogger.log_response_body = false
132
139
  end
133
140
 
141
+ let(:response_body) { long_body }
134
142
  let(:url) do
135
- FakeWeb.register_uri(:get, "http://github.com", :body => long_body)
136
143
  "http://github.com"
137
144
  end
138
145
 
@@ -145,14 +152,16 @@ describe HttpLogger do
145
152
 
146
153
  context "ignore option is set" do
147
154
 
148
- let(:url) { "http://rpm.newrelic.com/hello/world"}
155
+ let(:url) do
156
+ "http://rpm.newrelic.com/hello/world"
157
+ end
149
158
 
150
159
  before(:each) do
151
160
  HttpLogger.ignore = [/rpm\.newrelic\.com/]
152
161
  end
153
162
 
154
163
  it { should be_empty}
155
-
164
+
156
165
  after(:each) do
157
166
  HttpLogger.ignore = []
158
167
  end
@@ -160,14 +169,17 @@ describe HttpLogger do
160
169
 
161
170
  context "when level is set" do
162
171
 
163
- let(:url) { "http://rpm.newrelic.com/hello/world"}
172
+ let(:url) do
173
+ stub_request(:get, "http://rpm.newrelic.com/hello/world").to_return(body: "")
174
+ "http://rpm.newrelic.com/hello/world"
175
+ end
164
176
 
165
177
  before(:each) do
166
178
  HttpLogger.level = :info
167
179
  end
168
180
 
169
181
  it { should_not be_empty }
170
-
182
+
171
183
  after(:each) do
172
184
  HttpLogger.level = :debug
173
185
  end
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
- require 'fakeweb'
4
+ require 'webmock/rspec'
5
5
  require 'http_logger'
6
6
  require "logger"
7
7
  require "fileutils"
@@ -11,10 +11,9 @@ require "fileutils"
11
11
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
12
 
13
13
  LOGFILE = 'http.log'
14
- RSpec.configure do |config|
15
-
16
14
 
15
+ RSpec.configure do |config|
16
+ config.expect_with(:rspec) { |c| c.syntax = :should }
17
17
  FileUtils.rm_f(LOGFILE)
18
18
  HttpLogger.logger = Logger.new(LOGFILE)
19
-
20
19
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bogdan Gusiev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-07 00:00:00.000000000 Z
11
+ date: 2020-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: debugger
14
+ name: byebug
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: webmock
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: jeweler
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: fakeweb
70
+ name: jeweler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  requirements: []
125
125
  rubyforge_project:
126
- rubygems_version: 2.2.2
126
+ rubygems_version: 2.7.8
127
127
  signing_key:
128
128
  specification_version: 4
129
129
  summary: Log your http api calls just like SQL queries