pig-ci-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rubocop.yml +24 -0
  4. data/.travis.yml +21 -0
  5. data/CHANGELOG.md +5 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/LICENSE +21 -0
  9. data/README.md +124 -0
  10. data/Rakefile +10 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/config/locales/pig_ci/en.yml +43 -0
  14. data/lib/pig_ci.rb +146 -0
  15. data/lib/pig_ci/api.rb +14 -0
  16. data/lib/pig_ci/api/reports.rb +36 -0
  17. data/lib/pig_ci/decorator.rb +9 -0
  18. data/lib/pig_ci/decorator/report_terminal_decorator.rb +19 -0
  19. data/lib/pig_ci/metric.rb +4 -0
  20. data/lib/pig_ci/metric/current.rb +30 -0
  21. data/lib/pig_ci/metric/historial/change_percentage.rb +37 -0
  22. data/lib/pig_ci/metric/historical.rb +52 -0
  23. data/lib/pig_ci/profiler.rb +41 -0
  24. data/lib/pig_ci/profiler/database_request.rb +5 -0
  25. data/lib/pig_ci/profiler/memory.rb +16 -0
  26. data/lib/pig_ci/profiler/request_time.rb +17 -0
  27. data/lib/pig_ci/profiler_engine.rb +40 -0
  28. data/lib/pig_ci/profiler_engine/rails.rb +61 -0
  29. data/lib/pig_ci/report.rb +64 -0
  30. data/lib/pig_ci/report/database_request.rb +2 -0
  31. data/lib/pig_ci/report/memory.rb +15 -0
  32. data/lib/pig_ci/report/request_time.rb +2 -0
  33. data/lib/pig_ci/summary.rb +4 -0
  34. data/lib/pig_ci/summary/html.rb +49 -0
  35. data/lib/pig_ci/summary/terminal.rb +30 -0
  36. data/lib/pig_ci/version.rb +3 -0
  37. data/lib/pig_ci/views/index.erb +70 -0
  38. data/lib/pig_ci/views/report.erb +30 -0
  39. data/pig_ci.gemspec +47 -0
  40. data/public/assets/application.css +3 -0
  41. data/public/assets/application.js +109 -0
  42. metadata +266 -0
@@ -0,0 +1,2 @@
1
+ class PigCI::Report::DatabaseRequest < PigCI::Report
2
+ end
@@ -0,0 +1,15 @@
1
+ class PigCI::Report::Memory < PigCI::Report
2
+ def self.format_row(_unformatted_row)
3
+ row = super
4
+ row[:max] = (row[:max] / bytes_in_a_megabyte).round(PigCI.report_memory_precision)
5
+ row[:min] = (row[:min] / bytes_in_a_megabyte).round(PigCI.report_memory_precision)
6
+ row[:mean] = (row[:mean] / bytes_in_a_megabyte).round(PigCI.report_memory_precision)
7
+ row[:total] = (row[:total] / bytes_in_a_megabyte).round(PigCI.report_memory_precision)
8
+
9
+ row
10
+ end
11
+
12
+ def self.bytes_in_a_megabyte
13
+ @bytes_in_a_megabyte ||= BigDecimal(1_048_576)
14
+ end
15
+ end
@@ -0,0 +1,2 @@
1
+ class PigCI::Report::RequestTime < PigCI::Report
2
+ end
@@ -0,0 +1,4 @@
1
+ class PigCI::Summary; end
2
+
3
+ require 'pig_ci/summary/html'
4
+ require 'pig_ci/summary/terminal'
@@ -0,0 +1,49 @@
1
+ # This will make human friendly HTML report for developers to compare runs locally.
2
+ # It aims to save to the project root in /pig-ci.
3
+ # It is inspired by https://github.com/colszowka/simplecov-html
4
+
5
+ require 'erb'
6
+
7
+ class PigCI::Summary::HTML < PigCI::Summary
8
+ def initialize(reports:)
9
+ @reports = reports
10
+ end
11
+
12
+ def save!
13
+ copy_assets!
14
+ File.write(index_file_path, template('index').result(binding))
15
+
16
+ puts I18n.t('pig_ci.summary.saved_successfully', output_directory: PigCI.output_directory)
17
+ end
18
+
19
+ private
20
+
21
+ def render_report(report)
22
+ template('report').result(binding)
23
+ end
24
+
25
+ def timestamps
26
+ @reports.first.timestamps
27
+ end
28
+
29
+ def template(name)
30
+ ERB.new(File.read(File.join(File.dirname(__FILE__), '../views', "#{name}.erb")))
31
+ end
32
+
33
+ def index_file_path
34
+ PigCI.output_directory.join('index.html')
35
+ end
36
+
37
+ def copy_assets!
38
+ Dir.mkdir(output_assets_directory) unless File.exist?(output_assets_directory)
39
+ FileUtils.copy_entry(assets_directory, output_assets_directory)
40
+ end
41
+
42
+ def output_assets_directory
43
+ PigCI.output_directory.join('assets')
44
+ end
45
+
46
+ def assets_directory
47
+ File.join(File.dirname(__FILE__), '../../../public/assets')
48
+ end
49
+ end
@@ -0,0 +1,30 @@
1
+ require 'terminal-table'
2
+
3
+ class PigCI::Summary::Terminal < PigCI::Summary
4
+ def initialize(reports:)
5
+ @reports = reports
6
+ @timestamp = PigCI.run_timestamp
7
+ end
8
+
9
+ def print!
10
+ @reports.each do |report|
11
+ print_report(report)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def print_report(report)
18
+ puts "#{report.i18n_name}:\n"
19
+
20
+ table = ::Terminal::Table.new headings: report.headings do |t|
21
+ report.sorted_and_formatted_data_for(@timestamp)[0..PigCI.terminal_report_row_limit]
22
+ .collect { |data| PigCI::Decorator::ReportTerminalDecorator.new(data) }
23
+ .each do |data|
24
+ t << report.column_keys.collect { |key| data.send(key) }
25
+ end
26
+ end
27
+ puts table
28
+ puts "\n"
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module PigCI
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,70 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <title>PigCI Results</title>
8
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
9
+ <link rel="stylesheet" href="assets/application.css">
10
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
11
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
12
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
13
+ </head>
14
+ <body>
15
+
16
+ <div class="container">
17
+ <header class="py-3">
18
+ <div class="row">
19
+ <div class="col-6">
20
+ <a href="https://pigci.com/" target="_blank" rel="noopener">
21
+ <img src="https://cdn.pigci.com/logos/pig-ci.svg" class="float-left mr-4" alt="PigCI Logo" />
22
+ </a>
23
+ <h1><%= I18n.t('.pig_ci.summary.title') %></h1>
24
+ </div>
25
+ <div class="col">
26
+ <div class="dropdown float-right">
27
+ <a class="btn btn-primary dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
28
+ <%= I18n.t('.pig_ci.summary.view_historic_reports') %>
29
+ </a>
30
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
31
+ <form class="inline-form">
32
+ <% timestamps.each_with_index do |timestamp, index| %>
33
+ <label class="dropdown-item form-check form-check-label" data-toggle="collapse" data-target=".timestamp-<%= timestamp %>" aria-expanded="<%= index.zero? ? 'true' : 'false' %>">
34
+ <input type="checkbox" class="form-check-input" id="collapseHistoricReport<%= timestamp %>" <%= 'checked="checked"' if index.zero? %>>
35
+ <%= Time.at(timestamp.to_s.to_i) %>
36
+ </label>
37
+ <% end %>
38
+ </form>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </header>
44
+
45
+ <div data-pig-ci-results class="mt-4">
46
+ <ul class="nav nav-tabs" role="tablist">
47
+ <% @reports.each_with_index do |report, index| %>
48
+ <li class="nav-item">
49
+ <a class="nav-link <%= 'active' if index.zero? %>" data-toggle="tab" href="#<%= report.i18n_key %>" role="tab" aria-controls="<%= report.i18n_key %>-tab" aria-selected="<%= index.zero? ? 'true' : 'false' %>"><%= report.i18n_name %></a>
50
+ </li>
51
+ <% end %>
52
+ </ul>
53
+
54
+ <article>
55
+ <div class="tab-content mt-4">
56
+ <% @reports.each_with_index do |report, index| %>
57
+ <section class="tab-pane fade <%= 'show active' if index.zero? %>" id="<%= report.i18n_key %>" role="tabpanel" aria-labelledby="<%= report.i18n_key %>-tab">
58
+ <%= render_report(report) %>
59
+ </section>
60
+ <% end %>
61
+ </div>
62
+ </article>
63
+ </div>
64
+
65
+ <footer class="mt-3 py-3 text-muted text-small">
66
+ <%= I18n.t('.pig_ci.summary.footer_html', generated_at: Time.now.utc) %>
67
+ </footer>
68
+ </div>
69
+ </body>
70
+ </html>
@@ -0,0 +1,30 @@
1
+ <div data-profiler="<%= report.i18n_key %>">
2
+ <h2 class="sr-only"><%= report.i18n_name %></h2>
3
+
4
+ <% report.historical_data.each_with_index do |(timestamp, historic_data), index| %>
5
+ <div class="collapse <%= 'show' if index.zero? %> timestamp-<%= timestamp %>">
6
+ <h3 class="h5 text-muted"><%= Time.at(timestamp.to_s.to_i) %></h3>
7
+
8
+ <div class="table-responsive mt-2 mb-3">
9
+ <table class="table">
10
+ <thead>
11
+ <tr>
12
+ <% report.headings.each do |heading| %>
13
+ <th><%= heading %></th>
14
+ <% end %>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% report.sorted_and_formatted_data_for(timestamp).each do |historic_row| %>
19
+ <tr>
20
+ <% report.column_keys.each do |column_key| %>
21
+ <td><%= historic_row[column_key] %></td>
22
+ <% end %>
23
+ </tr>
24
+ <% end %>
25
+ </tbody>
26
+ </table>
27
+ </div>
28
+ </div>
29
+ <% end %>
30
+ </div>
data/pig_ci.gemspec ADDED
@@ -0,0 +1,47 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'pig_ci/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'pig-ci-rails'
7
+ spec.version = PigCI::VERSION
8
+ spec.authors = ['Mike Rogers']
9
+ spec.email = ['me@mikerogers.io']
10
+
11
+ spec.summary = 'Mintor metrics such a memory usage as part of testing'
12
+ spec.description = 'A gem for Ruby on Rails that will report key metrics (memory, request time & SQL Requests) for request & feature tests.'
13
+ spec.homepage = "https://github.com/PigCI/pig-ci-rails"
14
+
15
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
16
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
17
+ if spec.respond_to?(:metadata)
18
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
19
+ else
20
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
21
+ 'public gem pushes.'
22
+ end
23
+
24
+ # Specify which files should be added to the gem when it is released.
25
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
27
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
+ end
29
+ spec.require_paths = ['lib']
30
+ spec.required_ruby_version = '>= 2.3'
31
+
32
+ spec.add_dependency 'activesupport', '>= 4.2'
33
+ spec.add_dependency 'colorize', '>= 0.8.1'
34
+ spec.add_dependency 'get_process_mem', '~> 0.2.3'
35
+ spec.add_dependency 'httparty', '>= 0.16'
36
+ spec.add_dependency 'i18n', '>= 1.0'
37
+ spec.add_dependency 'rails', '>= 4.2.0'
38
+ spec.add_dependency 'terminal-table', '~> 1.8.0'
39
+
40
+ spec.add_development_dependency 'bundler', '~> 2.0'
41
+ spec.add_development_dependency 'rake', '~> 12.3'
42
+ spec.add_development_dependency 'webmock', '~> 3.6.0'
43
+
44
+ spec.add_development_dependency 'json-schema', '~> 2.8.1'
45
+ spec.add_development_dependency 'rspec', '~> 3.8.0'
46
+ spec.add_development_dependency 'simplecov', '~> 0.17.0'
47
+ end
@@ -0,0 +1,3 @@
1
+ .dropdown-item--historic-reports[aria-expanded="true"] {
2
+ font-weight: bold;
3
+ }
@@ -0,0 +1,109 @@
1
+ class PigCIProfilers extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ this.data = JSON.parse(this.querySelector('[data-pig-ci-json]').innerText);
5
+ }
6
+
7
+ connectedCallback() {
8
+ if(this.rendered) { return; }
9
+
10
+ this.innerHTML = this._renderTable();
11
+ }
12
+
13
+ _renderTable(){
14
+ var tablesHtml = '';
15
+
16
+ for(const profiler in this.data) {
17
+ tablesHtml += `
18
+ <h2>${profiler}</h2>
19
+ <table class="table">
20
+ <thead>
21
+ <tr>
22
+ ${this._renderTableHeaders(profiler)}
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ ${this._renderTableBody(profiler)}
27
+ </tbody>
28
+ </table>
29
+ `;
30
+ }
31
+
32
+ return tablesHtml;
33
+ }
34
+
35
+ _renderTableHeaders(profiler){
36
+ return Object.keys(this.data[profiler][0]).map(function(currentValue){
37
+ return `<th>${currentValue}</th>`;
38
+ }).join('');
39
+ }
40
+
41
+ _renderTableBody(profiler){
42
+ var finalOutput = '';
43
+
44
+ for(const row in this.data[profiler]) {
45
+ finalOutput += `
46
+ <tr>
47
+ ${this._renderTableRow(this.data[profiler][row])}
48
+ </tr>
49
+ `;
50
+ }
51
+
52
+ return finalOutput;
53
+ }
54
+
55
+ _renderTableRow(row){
56
+ return Object.values(row).map(function(currentValue){
57
+ return `<td>${currentValue}</td>`;
58
+ }).join('');
59
+ }
60
+ }
61
+ customElements.define('pig-ci-profilers', PigCIProfilers);
62
+
63
+
64
+ class PigCIResults extends HTMLElement {
65
+ constructor() {
66
+ super();
67
+ this.data = JSON.parse(this.querySelector('[data-pig-ci-json]').innerText);
68
+ }
69
+
70
+ connectedCallback() {
71
+ if(this.rendered) { return; }
72
+
73
+ this.innerHTML = this._renderNavTabs() + this._renderTestRun();
74
+ }
75
+
76
+ _renderNavTabs(){
77
+ var navTabs = '<ul class="nav nav-tabs mt-4" id="myTab" role="tablist">';
78
+
79
+ for(const timestamp in this.data) {
80
+ navTabs += `
81
+ <li class="nav-item">
82
+ <a class="nav-link" data-toggle="tab" href="#timestamp-${timestamp}" role="tab" aria-controls="${timestamp}">${new Date(timestamp * 1000).toLocaleString()}</a>
83
+ </li>
84
+ `;
85
+ }
86
+ navTabs += `</ul>`;
87
+
88
+ return navTabs;
89
+ }
90
+
91
+ _renderTestRun(){
92
+ var testRunHtml = '<div class="tab-content mt-3">';
93
+
94
+ for(const timestamp in this.data) {
95
+ testRunHtml += `
96
+ <div class="tab-pane fade show" id="timestamp-${timestamp}" role="tabpanel" aria-labelledby="${timestamp}-tab">
97
+ <pig-ci-profilers>
98
+ <script data-pig-ci-json type="application/json">${JSON.stringify(this.data[timestamp])}</script>
99
+ </pig-ci-profilers>
100
+ </div>
101
+ `;
102
+ }
103
+
104
+ testRunHtml += '</div>';
105
+ return testRunHtml;
106
+ }
107
+
108
+ }
109
+ customElements.define('pig-ci-results', PigCIResults);
metadata ADDED
@@ -0,0 +1,266 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pig-ci-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Rogers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: get_process_mem
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: httparty
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0.16'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0.16'
69
+ - !ruby/object:Gem::Dependency
70
+ name: i18n
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 4.2.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 4.2.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: terminal-table
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.8.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.8.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '12.3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '12.3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: webmock
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 3.6.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 3.6.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: json-schema
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 2.8.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 2.8.1
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 3.8.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 3.8.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.17.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.17.0
195
+ description: A gem for Ruby on Rails that will report key metrics (memory, request
196
+ time & SQL Requests) for request & feature tests.
197
+ email:
198
+ - me@mikerogers.io
199
+ executables: []
200
+ extensions: []
201
+ extra_rdoc_files: []
202
+ files:
203
+ - ".gitignore"
204
+ - ".rubocop.yml"
205
+ - ".travis.yml"
206
+ - CHANGELOG.md
207
+ - CODE_OF_CONDUCT.md
208
+ - Gemfile
209
+ - LICENSE
210
+ - README.md
211
+ - Rakefile
212
+ - bin/console
213
+ - bin/setup
214
+ - config/locales/pig_ci/en.yml
215
+ - lib/pig_ci.rb
216
+ - lib/pig_ci/api.rb
217
+ - lib/pig_ci/api/reports.rb
218
+ - lib/pig_ci/decorator.rb
219
+ - lib/pig_ci/decorator/report_terminal_decorator.rb
220
+ - lib/pig_ci/metric.rb
221
+ - lib/pig_ci/metric/current.rb
222
+ - lib/pig_ci/metric/historial/change_percentage.rb
223
+ - lib/pig_ci/metric/historical.rb
224
+ - lib/pig_ci/profiler.rb
225
+ - lib/pig_ci/profiler/database_request.rb
226
+ - lib/pig_ci/profiler/memory.rb
227
+ - lib/pig_ci/profiler/request_time.rb
228
+ - lib/pig_ci/profiler_engine.rb
229
+ - lib/pig_ci/profiler_engine/rails.rb
230
+ - lib/pig_ci/report.rb
231
+ - lib/pig_ci/report/database_request.rb
232
+ - lib/pig_ci/report/memory.rb
233
+ - lib/pig_ci/report/request_time.rb
234
+ - lib/pig_ci/summary.rb
235
+ - lib/pig_ci/summary/html.rb
236
+ - lib/pig_ci/summary/terminal.rb
237
+ - lib/pig_ci/version.rb
238
+ - lib/pig_ci/views/index.erb
239
+ - lib/pig_ci/views/report.erb
240
+ - pig_ci.gemspec
241
+ - public/assets/application.css
242
+ - public/assets/application.js
243
+ homepage: https://github.com/PigCI/pig-ci-rails
244
+ licenses: []
245
+ metadata:
246
+ allowed_push_host: https://rubygems.org
247
+ post_install_message:
248
+ rdoc_options: []
249
+ require_paths:
250
+ - lib
251
+ required_ruby_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '2.3'
256
+ required_rubygems_version: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - ">="
259
+ - !ruby/object:Gem::Version
260
+ version: '0'
261
+ requirements: []
262
+ rubygems_version: 3.0.3
263
+ signing_key:
264
+ specification_version: 4
265
+ summary: Mintor metrics such a memory usage as part of testing
266
+ test_files: []