rspeckled 0.0.42 → 0.0.43

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
2
  SHA1:
3
- metadata.gz: 32e2265b9ea0b673c49c7c09898d52d1acb6b94f
4
- data.tar.gz: e16b8b2f8ec84dc74408b45bbdd240267132db2e
3
+ metadata.gz: f6e5d300b5c651540f35e47cd75b444aa8045c3e
4
+ data.tar.gz: c6f152d7d477bb87bae569e1e72004573c8d3430
5
5
  SHA512:
6
- metadata.gz: c1312419fadc760ddc0a57b798dbb5b2043bba0261b2fda518fc0de35caf56780d83409107808ceef57cd264fcc543885891007c1d535183cd58bdae56a52ad5
7
- data.tar.gz: b1a15c6ef5e346882a36f5b37892ef11ee9503553fd86995d9fed03b23bb44042ab2e5a982e02c2828fdfc79d9dccb8906a7e13196a7ba4859a4e8ff75a2da1e
6
+ metadata.gz: 7d815ce7792064fa3f0f7f6e0e8ce3ab73cadc66873cb3f09232ad6c3ff41fedf9274d8421e2d9f7741ecc15d43a906772459ea07220196f2df0e53eb7240108
7
+ data.tar.gz: 15812a30b93a864d6d2d7ff964e91e51154b031e19e717e757aa95a1df30e413dad40a2c63b50e96014f4e1ea77aaa41002fe8bce128ae89b8212ca5a15297f9
checksums.yaml.gz.sig CHANGED
Binary file
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rspeckled
4
+ module Reporting
5
+ class Example
6
+ IGNORED_QUERIES_PATTERN = %r{
7
+ (
8
+ pg_table|
9
+ pg_attribute|
10
+ pg_namespace|
11
+ show\stables|
12
+ pragma|
13
+ sqlite_master/rollback|
14
+ ^TRUNCATE TABLE|
15
+ ^ALTER TABLE|
16
+ ^BEGIN|
17
+ ^COMMIT|
18
+ ^ROLLBACK|
19
+ ^RELEASE|
20
+ ^SAVEPOINT
21
+ )
22
+ }xi
23
+
24
+ attr_accessor :counts,
25
+ :example
26
+
27
+ def initialize(example)
28
+ self.counts = Hash.new(0)
29
+ self.example = example
30
+ end
31
+
32
+ def file
33
+ metadata[:file_path]
34
+ end
35
+
36
+ def line_number
37
+ metadata[:line_number]
38
+ end
39
+
40
+ def status
41
+ execution_result.status
42
+ end
43
+
44
+ def time
45
+ execution_result.run_time
46
+ end
47
+
48
+ def description
49
+ metadata[:full_description]
50
+ end
51
+
52
+ def exception
53
+ execution_result.exception
54
+ end
55
+
56
+ def query_count
57
+ counts[:query_count]
58
+ end
59
+
60
+ def query_time
61
+ counts[:query_time]
62
+ end
63
+
64
+ def request_count
65
+ counts[:request_count]
66
+ end
67
+
68
+ def request_time
69
+ counts[:request_time]
70
+ end
71
+
72
+ def log_query(query, start, finish)
73
+ return if query[:sql] =~ IGNORED_QUERIES_PATTERN
74
+
75
+ counts[:query_count] += 1
76
+ counts[:query_time] += (finish - start)
77
+ end
78
+
79
+ def log_request(_request, start, finish)
80
+ counts[:request_count] += 1
81
+ counts[:request_time] += (finish - start)
82
+ end
83
+
84
+ private
85
+
86
+ def metadata
87
+ example.metadata
88
+ end
89
+
90
+ def execution_result
91
+ @execution_result ||= begin
92
+ if example.execution_result.is_a?(Hash)
93
+ OpenStruct.new(example.execution_result)
94
+ else
95
+ example.execution_result
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'csv'
4
+
5
+ module Rspeckled
6
+ module Reporting
7
+ module Outputs
8
+ class Csv
9
+ FIELDS = %w{
10
+ branch
11
+ commit_hash
12
+ date
13
+ file
14
+ line_number
15
+ status
16
+ exception
17
+ time
18
+ query_count
19
+ query_time
20
+ query_percentage
21
+ request_count
22
+ request_time
23
+ request_percentage
24
+ description
25
+ }.freeze
26
+
27
+ attr_accessor :output
28
+
29
+ def initialize
30
+ self.output = CSV.open('log/rspec_report.csv', 'a').tap { |csv| csv << FIELDS }
31
+ end
32
+
33
+ def insert(data)
34
+ output << FIELDS.map do |field|
35
+ data.fetch(field.to_sym)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rspeckled
4
+ module Reporting
5
+ module Outputs
6
+ class Text
7
+ FIELDS = {
8
+ :branch => '%-<branch>s',
9
+ :commit_hash => '%-8.8<commit_hash>s',
10
+ :date => '%-<date>s',
11
+ :file => '%-80.80<file>s',
12
+ :status => '%-7.7<status>s',
13
+ :time => '%7.4<time>f',
14
+ :query_count => '%3<query_count>d',
15
+ :query_time => '%7.4<query_time>f',
16
+ :query_percentage => '%5.2<query_percentage>f%%',
17
+ :request_count => '%3<request_count>d',
18
+ :request_time => '%7.4<request_time>f',
19
+ :request_percentage => '%5.2<request_percentage>f%%',
20
+ :description => '%-80.80<description>s',
21
+ }.freeze
22
+
23
+ attr_accessor :output
24
+
25
+ def initialize
26
+ self.output = File.open('log/rspec_report.txt', 'a')
27
+ end
28
+
29
+ def insert(data)
30
+ data[:file] = data[:file].gsub(%r{^\./spec/}, './') + ':' + data[:line_number].to_s
31
+
32
+ format_string = FIELDS.values.join(' - ') + "\n"
33
+
34
+ output.printf(format_string, data)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rspeckled
4
+ module Reporting
5
+ class Runner
6
+ FIELDS = %w{
7
+ branch
8
+ commit_hash
9
+ date
10
+ file
11
+ line_number
12
+ status
13
+ exception
14
+ time
15
+ query_count
16
+ query_time
17
+ request_count
18
+ request_time
19
+ description
20
+ }.freeze
21
+
22
+ attr_accessor :example,
23
+ :outputters
24
+
25
+ def initialize(outputters: [
26
+ Rspeckled::Reporting::Outputs::Text,
27
+ Rspeckled::Reporting::Outputs::Csv,
28
+ ])
29
+
30
+ self.outputters = outputters.map(&:new)
31
+ end
32
+
33
+ def start(_notification)
34
+ ActiveSupport::Notifications.subscribe('sql.active_record') do |_name, start, finish, _id, query|
35
+ example&.log_query(query, start, finish)
36
+ end
37
+
38
+ ActiveSupport::Notifications.subscribe('process_action.action_controller') do |_name, start, finish, _id, request|
39
+ example&.log_request(request, start, finish)
40
+ end
41
+ end
42
+
43
+ def example_started(notification)
44
+ self.example = Example.new(notification.example)
45
+ end
46
+
47
+ # rubocop:disable Metrics/AbcSize
48
+ def example_finished(_notification)
49
+ outputters.each do |outputter|
50
+ outputter.insert(
51
+ :branch => `git rev-parse --abbrev-ref HEAD`.chomp,
52
+ :commit_hash => `git rev-parse HEAD`.chomp,
53
+ :date => Time.parse(`git show -s --format=%ci HEAD`.chomp),
54
+ :file => example.file,
55
+ :line_number => example.line_number,
56
+ :description => example.description,
57
+ :status => example.status,
58
+ :exception => example.exception,
59
+ :time => example.time,
60
+ :query_count => example.query_count,
61
+ :query_time => example.query_time,
62
+ :query_percentage => example.query_time / example.time * 100.0,
63
+ :request_count => example.request_count,
64
+ :request_time => example.request_time,
65
+ :request_percentage => example.request_time / example.time * 100.0
66
+ )
67
+ end
68
+ end
69
+ # rubocop:enable Metrics/AbcSize
70
+
71
+ alias example_passed example_finished
72
+ alias example_pending example_finished
73
+ alias example_failed example_finished
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspeckled/reporting/outputs/csv'
4
+ require 'rspeckled/reporting/outputs/text'
5
+ require 'rspeckled/reporting/example'
6
+ require 'rspeckled/reporting/runner'
@@ -4,6 +4,7 @@
4
4
  require 'rspeckled/plugins/code_climate'
5
5
  require 'rspeckled/plugins/simple_cov'
6
6
 
7
+ require 'rspeckled/reporting'
7
8
  require 'rspeckled/support'
8
9
  require 'rspeckled/helpers'
9
10
  require 'rspeckled/plugins'
@@ -50,6 +50,13 @@ RSpec.configure do |config|
50
50
  config.profile_examples = [(config.files_to_run.length * 0.1).to_i, 10].max
51
51
  end
52
52
 
53
+ config.reporter.register_listener Rspeckled::Reporting::Runner.new,
54
+ :example_failed,
55
+ :example_passed,
56
+ :example_pending,
57
+ :example_started,
58
+ :start
59
+
53
60
  ##############################################################################
54
61
  # FORMATTING
55
62
  ##############################################################################
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rspeckled
4
- VERSION = '0.0.42'
4
+ VERSION = '0.0.43'
5
5
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspeckled
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.42
4
+ version: 0.0.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - thegranddesign
@@ -31,7 +31,7 @@ cert_chain:
31
31
  Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
32
32
  iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
33
33
  -----END CERTIFICATE-----
34
- date: 2018-04-04 00:00:00.000000000 Z
34
+ date: 2018-04-17 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
@@ -144,6 +144,11 @@ files:
144
144
  - lib/rspeckled/plugins/vcr.rb
145
145
  - lib/rspeckled/plugins/webmock.rb
146
146
  - lib/rspeckled/plugins/wisper.rb
147
+ - lib/rspeckled/reporting.rb
148
+ - lib/rspeckled/reporting/example.rb
149
+ - lib/rspeckled/reporting/outputs/csv.rb
150
+ - lib/rspeckled/reporting/outputs/text.rb
151
+ - lib/rspeckled/reporting/runner.rb
147
152
  - lib/rspeckled/spec_helpers/active_record_basic.rb
148
153
  - lib/rspeckled/spec_helpers/active_record_connection_setup.rb
149
154
  - lib/rspeckled/spec_helpers/rails.rb
metadata.gz.sig CHANGED
Binary file