rspec-activerecord-formatter 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 796768aef6b284e761135f02bf4fde2991c6542905abd5084fc77e3fb8005f2b
4
- data.tar.gz: 459eab6e0f667b0c683d465a335d9f6f21ee3976d75440fc1c53a4c75c04e0f0
3
+ metadata.gz: 3eaf70a87ed79a750607124b849bc8f75325f3cbd8b27c6c6c378008bec7d058
4
+ data.tar.gz: 339da336745315f324dcac1a71ae2ec9800623b250c1f1cbb3e2bf7f7c1c2461
5
5
  SHA512:
6
- metadata.gz: fe56977ad258d136496454cdca232bb1516dd8e265fd6b5e3239ca6bba9b34286b3785a47e4bb8e42272cf1ed9fc69d4bc760b44c3e28ec0a8daeef16086e3ba
7
- data.tar.gz: bd6ed8ff7fa849d319d2e1bccfd9893fa7f6e647c71224279242849788bdaef46e1567ae002cbe43a468d7292cd11338d2713422b22fd9550d4e407b7441bc8b
6
+ metadata.gz: 671d5e6dc1b7a4abf41c831a26fe6d7f0e599babfb95bcdca2cc5e08e9704bfef855fc9327a349bbd5f5ad9e81032f529ca50d8cb09344589c35bd04c63a22ca
7
+ data.tar.gz: 27dd9d446ebf122ce2ef1fb442440a36965557e99f34e4fe730bcaa18607470b23dbb24dc0e0a8405961ea582bc9920817e9ac193d1dff33b19690a32b5f4cd1
@@ -3,12 +3,14 @@ require 'active_support/notifications'
3
3
  module ActiveRecordFormatterHelpers
4
4
  class Collector
5
5
  attr_reader :query_count, :objects_count, :total_queries, :total_objects,
6
- :query_names, :active_groups, :group_counts
6
+ :query_names, :active_groups, :group_counts, :groups_encountered
7
7
 
8
8
  SKIP_QUERIES = ["SELECT tablename FROM pg_tables", "select sum(ct) from (select count(*) ct from"]
9
9
 
10
10
  def initialize
11
+ #@unnamed_queries = []
11
12
  @query_count = 0
13
+ @groups_encountered = 0
12
14
  @objects_count = 0
13
15
  @total_queries = 0
14
16
  @total_objects = 0
@@ -41,6 +43,8 @@ module ActiveRecordFormatterHelpers
41
43
  end
42
44
 
43
45
  def group_started(group)
46
+ @groups_encountered += 1
47
+
44
48
  return unless group.parent_groups.length > 1
45
49
 
46
50
  active_groups.push(group_path(group))
@@ -77,8 +81,33 @@ module ActiveRecordFormatterHelpers
77
81
  if data[:name] == "SQL" && query_is_an_insert?(data[:sql])
78
82
  table = data[:sql].scan(/INSERT INTO "(\w+)"/).first.first
79
83
  name = "#{table} Create"
84
+ elsif query_is_a_full_table_delete?(data[:sql])
85
+ table = data[:sql].scan(/DELETE FROM "(\w+)"/).first.first
86
+ name = "Full Delete Table"
87
+ # TODO: truncate table
88
+ elsif query_is_transaction_management?(data[:sql])
89
+ name = "Transaction Management"
90
+ elsif query_is_schema_detection?(data[:sql])
91
+ name = "SCHEMA"
92
+ elsif query_is_trigger_management?(data[:sql])
93
+ name = "Trigger Management"
94
+ elsif query_refreshes_materialized_view?(data[:sql])
95
+ name = "Refresh Materialized View"
80
96
  end
81
97
 
98
+
99
+ # In older versions of Rails, insert statements are just counted as SQL
100
+ # queries, which means that all the queries are just bunchedup at the top.
101
+ # Makes this data pretty useless. So anyway, try to suss out a name for
102
+ # at least those insertions (which are much more frequent than, say,
103
+ # updates in a test suite anyway).
104
+ #if data[:name].nil? && query_is_a_delete?(data[:sql])
105
+ # table = data[:sql].scan(/DELETE FROM "(\w+)"/).first.first
106
+ # name = "#{table} Delete"
107
+ #end
108
+
109
+ #@unnamed_queries << data if name == "Unnamed"
110
+
82
111
  query_names[name] += 1
83
112
  end
84
113
 
@@ -89,7 +118,32 @@ module ActiveRecordFormatterHelpers
89
118
  # TODO: what happens if we try to create many records at once?
90
119
  # TODO: are there any false positives we need to worry about? false negatives?
91
120
  def query_is_an_insert?(query)
92
- query =~ /INSERT INTO/
121
+ query =~ /^INSERT INTO/
122
+ end
123
+
124
+ def query_is_a_delete?(query)
125
+ query =~ /^DELETE FROM/
126
+ end
127
+
128
+ def query_is_a_full_table_delete?(query)
129
+ query =~ /^DELETE FROM [a-z_\."]*;$/i
130
+ end
131
+
132
+ def query_is_transaction_management?(query)
133
+ query =~ /^(COMMIT|BEGIN|ROLLBACK|SAVEPOINT|RELEASE SAVEPOINT)/
134
+ end
135
+
136
+ def query_is_schema_detection?(query)
137
+ query =~ /SELECT .* FROM pg_tables/m ||
138
+ query =~ /SELECT .* FROM information_schema.views/
139
+ end
140
+
141
+ def query_is_trigger_management?(query)
142
+ query =~ /(DISABLE|ENABLE) TRIGGER ALL/m
143
+ end
144
+
145
+ def query_refreshes_materialized_view?(query)
146
+ query =~ /REFRESH MATERIALIZED VIEW/m
93
147
  end
94
148
  end
95
149
  end
@@ -26,6 +26,7 @@ module ActiveRecordFormatterHelpers
26
26
 
27
27
  File.open(file_path, "wb") do |f|
28
28
  f.puts "#{collector.total_objects} AR objects, #{collector.total_queries} AR queries"
29
+ f.puts "#{collector.groups_encountered} example groups executed"
29
30
 
30
31
  f.puts ""
31
32
  f.puts "Worst Example Groups by Object Creation"
@@ -6,7 +6,7 @@ $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
6
6
  Gem::Specification.new do |gem|
7
7
 
8
8
  gem.name = "rspec-activerecord-formatter"
9
- gem.version = "2.0.0"
9
+ gem.version = "2.1.0"
10
10
 
11
11
  gem.summary = "Adds object creations and queries to Rspec output."
12
12
  gem.description = "Creates a new formatter for ActiveRecord that can help you diagnose performance issues in RSpec"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-activerecord-formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Mastey
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -86,7 +86,7 @@ homepage: http://github.com/jmmastey/rspec-activerecord-formatter
86
86
  licenses:
87
87
  - MIT
88
88
  metadata: {}
89
- post_install_message:
89
+ post_install_message:
90
90
  rdoc_options: []
91
91
  require_paths:
92
92
  - lib
@@ -101,9 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.7.3
106
- signing_key:
104
+ rubygems_version: 3.1.4
105
+ signing_key:
107
106
  specification_version: 4
108
107
  summary: Adds object creations and queries to Rspec output.
109
108
  test_files: []