rspec-activerecord-formatter 0.1.0 → 0.2.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: 215510c55bb74fa62a54c9237eed2f99f795916c
4
- data.tar.gz: 57949cc504f9e0f5dfefa1e6bb94482c95279b7f
2
+ SHA256:
3
+ metadata.gz: 3c8cb5d2c352d6067bb7b6a1005ce9d80f257ef818e94da07b03530e705d5934
4
+ data.tar.gz: a21d87f0badc6b92de0906f3bc7782b6c13dbe89ee40b59ec1b07bf2a40ca1f1
5
5
  SHA512:
6
- metadata.gz: 5eae4c34002844511d9f683e2c22dc7135825ce36ed46c24f83239fe476551161940ce10dce02881e0f951d6952a189fb19d0ac8c586d5c443bc83452b2e7ffc
7
- data.tar.gz: adac5f5c0819573703708c2ee6d34362ff0f127f9c0b67f2c16126901cee2dd84a4ccde4f208120963b1d0b0691722fc9dbc2643cb2b4dd3353a9bec8f6c9bd7
6
+ metadata.gz: d31c6f727a9c54acde509ce7f8b66185eedeb7825ff18af6b7da27f583ed460e38fafcb17a65bd66b0ceadef2b5a2a2db9cdd7a6821d199568e4b2170a81f23f
7
+ data.tar.gz: 1265045f094776141c99699dc6f35514de052cb60c7c40893808bb6ebe4ace017c2244c55d3681adb16c3cc7472dcd197bd3e41566ee6cd17ad9a4e102cf556e
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
1
  .DS_Store
2
+ Gemfile.lock
3
+ coverage
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.simplecov ADDED
@@ -0,0 +1,10 @@
1
+ require 'coveralls'
2
+
3
+ SimpleCov.formatters = [
4
+ SimpleCov::Formatter::HTMLFormatter,
5
+ Coveralls::SimpleCov::Formatter
6
+ ]
7
+
8
+ SimpleCov.start do
9
+ add_filter './spec'
10
+ end
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ rvm:
5
+ - 2.3.3
6
+
7
+ before_install: gem install bundler
8
+ script: bundle exec rspec
data/README.md CHANGED
@@ -22,14 +22,18 @@ Normal bundle stuff.
22
22
  Usage
23
23
  ------------
24
24
 
25
- The current answer appears to be changing your `.rspec` initializer to include the following:
25
+ The current answer is to change your `.rspec` initializer to include the following:
26
26
 
27
- --require rails_helper
28
- --format ActiveRecordFormatter
27
+ --require rails_helper
28
+ --format ActiveRecordFormatter
29
29
 
30
30
  We have to include the rails_helper so that ActiveRecord is loaded prior to trying to load the
31
31
  formatter. That way, we can hook into AR creations.
32
32
 
33
+ You can also run the formatter as a one-off option to rspec:
34
+
35
+ rspec path/to/example_spec.rb --require rails_helper --format ActiveRecordFormatter
36
+
33
37
  Once you set the formatter, you should now see the number of objects created and total queries
34
38
  for each of your tests:
35
39
 
@@ -43,8 +47,10 @@ Next Steps
43
47
  ------------
44
48
  * The method I was using to count AR objects doesn't work well with DatabaseCleaner when not explicitly wiring the library into `before` blocks.
45
49
  I'd like to be able to go back to a method other than scanning for `INSERT INTO` strings.
46
- * Configuration, especially of the aligning of the metric output (to outdent it optionally).
50
+ * Configuration, especially formatting the output to optionally outdent the counts.
47
51
  * Add a `--profile`-like behavior to output the most offending tests.
52
+ * The current dependency versions are a vague guess. They can and should clearly be more lenient.
53
+ * I dunno, tests.
48
54
 
49
55
  Contributing
50
56
  ------------
@@ -0,0 +1 @@
1
+ require 'rspec/activerecord/formatter'
@@ -1,5 +1,71 @@
1
- require_relative "formatter/collector"
2
- require_relative "formatter/formatter"
1
+ require_relative "helpers/collector"
3
2
 
4
- module ActiveRecordFormatter
3
+ class ActiveRecordFormatter < ::RSpec::Core::Formatters::DocumentationFormatter
4
+ attr_reader :collector, :colorizer, :configuration
5
+
6
+ ::RSpec::Core::Formatters.register self, :start, :dump_summary,
7
+ :example_started, :example_passed, :example_failed
8
+
9
+ def initialize(output)
10
+ super
11
+
12
+ @colorizer = ::RSpec::Core::Formatters::ConsoleCodes
13
+ @collector = ActiveRecordFormatterHelpers::Collector.new
14
+ end
15
+
16
+ def start(start_notification)
17
+ output.puts "Recording and reporting ActiveRecord select and creation counts."
18
+ end
19
+
20
+ def example_started(example)
21
+ collector.reset_example
22
+ end
23
+
24
+ def dump_summary(summary)
25
+ formatted = "\nFinished in #{summary.formatted_duration} " \
26
+ "(files took #{summary.formatted_load_time} to load)\n" \
27
+ "#{colorized_expanded_totals(summary)}\n"
28
+
29
+ unless summary.failed_examples.empty?
30
+ formatted << summary.colorized_rerun_commands(colorizer) << "\n"
31
+ end
32
+
33
+ output.puts formatted
34
+ end
35
+
36
+ protected
37
+
38
+ def passed_output(example)
39
+ "#{current_indentation}#{example_counts}" +
40
+ colorizer.wrap(example.description.strip, :success)
41
+ end
42
+
43
+ def failure_output(example)
44
+ "#{current_indentation}#{example_counts}" +
45
+ colorizer.wrap("#{example.description.strip} (FAILED - #{next_failure_index})", :failure)
46
+ end
47
+
48
+ def example_counts(suffix: " ")
49
+ "(%02d, %02d)#{suffix}" % [collector.objects_count, collector.query_count]
50
+ end
51
+
52
+ def colorized_expanded_totals(summary)
53
+ if summary.failure_count > 0
54
+ colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.failure_color)
55
+ elsif summary.pending_count > 0
56
+ colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.pending_color)
57
+ else
58
+ colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.success_color)
59
+ end
60
+ end
61
+
62
+ def expanded_totals_line(summary)
63
+ summary_text = ::RSpec::Core::Formatters::Helpers.pluralize(summary.example_count, "example")
64
+ summary_text << ", " << ::RSpec::Core::Formatters::Helpers.pluralize(summary.failure_count, "failure")
65
+ summary_text << ", #{summary.pending_count} pending" if summary.pending_count > 0
66
+ summary_text << ", #{collector.total_objects} AR objects"
67
+ summary_text << ", #{collector.total_queries} AR queries"
68
+
69
+ summary_text
70
+ end
5
71
  end
@@ -1,6 +1,6 @@
1
1
  require 'active_support/notifications'
2
2
 
3
- module ActiveRecordFormatter
3
+ module ActiveRecordFormatterHelpers
4
4
  class Collector
5
5
  attr_reader :query_count, :objects_count, :total_queries, :total_objects
6
6
  SKIP_QUERIES = ["SELECT tablename FROM pg_tables", "select sum(ct) from (select count(*) ct from"]
@@ -3,12 +3,10 @@
3
3
  lib_dir = File.join(File.dirname(__FILE__),'lib')
4
4
  $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
5
5
 
6
- require 'rspec/activerecord/formatter/version'
7
-
8
6
  Gem::Specification.new do |gem|
9
7
 
10
8
  gem.name = "rspec-activerecord-formatter"
11
- gem.version = ActiveRecordFormatter::VERSION
9
+ gem.version = "0.2.0"
12
10
 
13
11
  gem.summary = "Adds object creations and queries to Rspec output."
14
12
  gem.description = "Creates a new formatter for ActiveRecord that can help you diagnose performance issues in RSpec"
@@ -31,4 +29,6 @@ Gem::Specification.new do |gem|
31
29
  gem.add_dependency "bundler", "~> 1.9"
32
30
  gem.add_dependency "activesupport", ">= 4.0"
33
31
  gem.add_dependency "rspec", "~> 3.4"
32
+
33
+ gem.add_development_dependency "coveralls"
34
34
  end
@@ -0,0 +1,2 @@
1
+ RSpec.describe ActiveRecordFormatter::Collector do
2
+ end
@@ -0,0 +1,2 @@
1
+ RSpec.describe ActiveRecordFormatter::Formatter do
2
+ end
@@ -0,0 +1,54 @@
1
+ require 'simplecov'
2
+
3
+ require 'rspec/activerecord/formatter'
4
+
5
+ # This file was generated by the `rspec --init` command. Conventionally, all
6
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
7
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
8
+ # this file to always be loaded, without a need to explicitly require it in any
9
+ # files.
10
+ #
11
+ # Given that it is always loaded, you are encouraged to keep this file as
12
+ # light-weight as possible. Requiring heavyweight dependencies from this file
13
+ # will add to the boot time of your test suite on EVERY test run, even for an
14
+ # individual file that may not need all of that loaded. Instead, consider making
15
+ # a separate helper file that requires the additional dependencies and performs
16
+ # the additional setup, and require it from the spec files that actually need
17
+ # it.
18
+ #
19
+ # The `.rspec` file also contains a few flags that are not defaults but that
20
+ # users commonly want.
21
+ #
22
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
23
+
24
+ RSpec.configure do |config|
25
+ # This allows you to limit a spec run to individual examples or groups
26
+ # you care about by tagging them with `:focus` metadata. When nothing
27
+ # is tagged with `:focus`, all examples get run. RSpec also provides
28
+ # aliases for `it`, `describe`, and `context` that include `:focus`
29
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
30
+ config.filter_run_when_matching :focus
31
+
32
+ # Limits the available syntax to the non-monkey patched syntax that is
33
+ # recommended. For more details, see:
34
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
35
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
36
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
37
+ config.disable_monkey_patching!
38
+
39
+ # This setting enables warnings. It's recommended, but in some cases may
40
+ # be too noisy due to issues in dependencies.
41
+ config.warnings = true
42
+
43
+ # Run specs in random order to surface order dependencies. If you find an
44
+ # order dependency and want to debug it, you can fix the order by providing
45
+ # the seed, which is printed after each run.
46
+ # --seed 1234
47
+ config.order = :random
48
+
49
+ # Seed global randomization in this process using the `--seed` CLI option.
50
+ # Setting this allows you to use `--seed` to deterministically reproduce
51
+ # test failures related to randomization by passing the same `--seed` value
52
+ # as the one that triggered the failure.
53
+ Kernel.srand config.seed
54
+ end
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-activerecord-formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Mastey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-16 00:00:00.000000000 Z
11
+ date: 2019-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.9'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '4.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '3.4'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Creates a new formatter for ActiveRecord that can help you diagnose performance
56
70
  issues in RSpec
57
71
  email: jmmastey@gmail.com
@@ -61,18 +75,23 @@ extra_rdoc_files:
61
75
  - CODE_OF_CONDUCT.md
62
76
  - README.md
63
77
  files:
64
- - .gitignore
78
+ - ".gitignore"
79
+ - ".rspec"
80
+ - ".simplecov"
81
+ - ".travis.yml"
65
82
  - CODE_OF_CONDUCT.md
66
83
  - Gemfile
67
84
  - MIT-LICENSE
68
85
  - README.md
69
86
  - doc/images/demo_1.png
70
87
  - doc/images/demo_2.png
88
+ - lib/rspec-activerecord-formatter.rb
71
89
  - lib/rspec/activerecord/formatter.rb
72
- - lib/rspec/activerecord/formatter/collector.rb
73
- - lib/rspec/activerecord/formatter/formatter.rb
74
- - lib/rspec/activerecord/formatter/version.rb
90
+ - lib/rspec/activerecord/helpers/collector.rb
75
91
  - rspec-activerecord-formatter.gemspec
92
+ - spec/collector_spec.rb
93
+ - spec/formatter_spec.rb
94
+ - spec/spec_helper.rb
76
95
  homepage: http://github.com/jmmastey/rspec-activerecord-formatter
77
96
  licenses:
78
97
  - MIT
@@ -83,17 +102,17 @@ require_paths:
83
102
  - lib
84
103
  required_ruby_version: !ruby/object:Gem::Requirement
85
104
  requirements:
86
- - - '>='
105
+ - - ">="
87
106
  - !ruby/object:Gem::Version
88
107
  version: '0'
89
108
  required_rubygems_version: !ruby/object:Gem::Requirement
90
109
  requirements:
91
- - - '>='
110
+ - - ">="
92
111
  - !ruby/object:Gem::Version
93
112
  version: '0'
94
113
  requirements: []
95
114
  rubyforge_project:
96
- rubygems_version: 2.0.14
115
+ rubygems_version: 2.7.6
97
116
  signing_key:
98
117
  specification_version: 4
99
118
  summary: Adds object creations and queries to Rspec output.
@@ -1,71 +0,0 @@
1
- module ActiveRecordFormatter
2
- class Formatter < ::RSpec::Core::Formatters::DocumentationFormatter
3
- attr_reader :collector, :colorizer, :configuration
4
-
5
- ::RSpec::Core::Formatters.register self, :start, :dump_summary,
6
- :example_started, :example_passed, :example_failed
7
-
8
- def initialize(output)
9
- super
10
-
11
- @colorizer = ::RSpec::Core::Formatters::ConsoleCodes
12
- @collector = ActiveRecordFormatter::Collector.new
13
- end
14
-
15
- def start(start_notification)
16
- output.puts "Recording and reporting ActiveRecord select and creation counts."
17
- end
18
-
19
- def example_started(example)
20
- collector.reset_example
21
- end
22
-
23
- def dump_summary(summary)
24
- formatted = "\nFinished in #{summary.formatted_duration} " \
25
- "(files took #{summary.formatted_load_time} to load)\n" \
26
- "#{colorized_expanded_totals(summary)}\n"
27
-
28
- unless summary.failed_examples.empty?
29
- formatted << summary.colorized_rerun_commands(colorizer) << "\n"
30
- end
31
-
32
- output.puts formatted
33
- end
34
-
35
- protected
36
-
37
- def passed_output(example)
38
- "#{current_indentation}#{example_counts}" +
39
- colorizer.wrap(example.description.strip, :success)
40
- end
41
-
42
- def failure_output(example)
43
- "#{current_indentation}#{example_counts}" +
44
- colorizer.wrap("#{example.description.strip} (FAILED - #{next_failure_index})", :failure)
45
- end
46
-
47
- def example_counts(suffix: " ")
48
- "(%02d, %02d)#{suffix}" % [collector.objects_count, collector.query_count]
49
- end
50
-
51
- def colorized_expanded_totals(summary)
52
- if summary.failure_count > 0
53
- colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.failure_color)
54
- elsif summary.pending_count > 0
55
- colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.pending_color)
56
- else
57
- colorizer.wrap(expanded_totals_line(summary), RSpec.configuration.success_color)
58
- end
59
- end
60
-
61
- def expanded_totals_line(summary)
62
- summary_text = ::RSpec::Core::Formatters::Helpers.pluralize(summary.example_count, "example")
63
- summary_text << ", " << ::RSpec::Core::Formatters::Helpers.pluralize(summary.failure_count, "failure")
64
- summary_text << ", #{summary.pending_count} pending" if summary.pending_count > 0
65
- summary_text << ", #{collector.total_objects} AR objects"
66
- summary_text << ", #{collector.total_queries} AR queries"
67
-
68
- summary_text
69
- end
70
- end
71
- end
@@ -1,3 +0,0 @@
1
- module ActiveRecordFormatter
2
- VERSION = '0.1.0'
3
- end