rspec-sql 0.0.0 → 0.0.1

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: b432f8fb44ff4ca401c638737b32836ffe8d6e1f4af9cfe11ad7ee5c6131c557
4
- data.tar.gz: '090f57ea9432f75110f666e57e8df787b203c53d2793c6b7ca24af05a4ed49a8'
3
+ metadata.gz: 604f3e80d1493fef761a5cd6c4cc1f2b16ddeaea989fd06a52f6e5266c30a015
4
+ data.tar.gz: caf7ab6da1bb00e2c49fae1be3ca2ed8c787adab7f3983e02ac0972f410f1140
5
5
  SHA512:
6
- metadata.gz: ff5a40e0967222a5163d273ff77ef94f2bbf58318d6189e38d063dcded3b070ac29c93fc2c4923c27b824ce6f4d686ed3eaebe893d615397c355f9ab66e3adf3
7
- data.tar.gz: 199a52a03863bb1a699835cc4de38fa91b0a12c77d0df111ff57dcf0ac1b1bda00f62f97bf11ef9b3e70b5e6bd8d607ee659977327b97a346da10696271f6643
6
+ metadata.gz: fecdb314d1af946b4c1d37807f25ece49c3d0ce2a969984c7d8ac9ec325afee4359021e3623792a85085c0c77e17f1510b568f7d43733eb0a12ee6151cf4e1bb
7
+ data.tar.gz: 01afcbf7343a73735ade838e1b0c1991cd8d4b62d9d38a9e75fc5c66b34c3d1fd34b38b8a97d3ddb9b297781624237e250e1775012f2e2cb4451240d62e90a14
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Sql
5
+ class QuerySummary
6
+ QUERY_TYPES = [:delete, :insert, :select, :update].freeze
7
+
8
+ attr_reader :summary
9
+
10
+ def initialize(queries)
11
+ @summary = {}
12
+ queries.each do |payload|
13
+ type = get_type(payload[:sql])
14
+ next if QUERY_TYPES.exclude?(type) || pg_query?(payload[:sql])
15
+
16
+ table = get_table(payload[:sql])
17
+ @summary[type] ||= {}
18
+ @summary[type][table] ||= 0
19
+ @summary[type][table] += 1
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def get_table(sql)
26
+ sql_parts = sql.split
27
+ case get_type(sql)
28
+ when :insert
29
+ sql_parts[2]
30
+ when :update
31
+ sql_parts[1]
32
+ else
33
+ table_index = sql_parts.index("FROM")
34
+ sql_parts[table_index + 1]
35
+ end.gsub(/(\\|")/, "").to_sym
36
+ end
37
+
38
+ def get_type(sql)
39
+ sql.split[0].downcase.to_sym
40
+ end
41
+
42
+ def pg_query?(sql)
43
+ sql.include?("SELECT a.attname") || sql.include?("pg_attribute")
44
+ end
45
+ end
46
+ end
47
+ end
data/lib/rspec/sql.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require "active_support"
4
4
  require "rspec"
5
5
 
6
+ require_relative "sql/query_summary"
7
+
6
8
  module RSpec
7
9
  module Sql; end
8
10
 
@@ -18,6 +20,8 @@ module RSpec
18
20
  @queries.size == expected.size
19
21
  elsif expected.is_a?(Array)
20
22
  query_names == expected
23
+ elsif expected.is_a?(Hash)
24
+ query_summary == expected
21
25
  else
22
26
  raise "What are you expecting?"
23
27
  end
@@ -52,6 +56,10 @@ module RSpec
52
56
  @queries.map { |q| "#{q[:name]} #{q[:sql]}" }
53
57
  end
54
58
 
59
+ def query_summary
60
+ Sql::QuerySummary.new(@queries).summary
61
+ end
62
+
55
63
  def scribe_queries(&)
56
64
  queries = []
57
65
 
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maikel Linke
8
- autorequire:
8
+ - Open Food Network contributors
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2024-02-29 00:00:00.000000000 Z
12
+ date: 2024-03-01 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
@@ -45,11 +46,12 @@ extensions: []
45
46
  extra_rdoc_files: []
46
47
  files:
47
48
  - lib/rspec/sql.rb
49
+ - lib/rspec/sql/query_summary.rb
48
50
  homepage: https://github.com/openfoodfoundation/rspec-sql
49
51
  licenses:
50
52
  - AGPL-3.0-or-later
51
53
  metadata: {}
52
- post_install_message:
54
+ post_install_message:
53
55
  rdoc_options: []
54
56
  require_paths:
55
57
  - lib
@@ -68,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
70
  version: '0'
69
71
  requirements: []
70
72
  rubygems_version: 3.3.26
71
- signing_key:
73
+ signing_key:
72
74
  specification_version: 4
73
75
  summary: RSpec::Sql matcher
74
76
  test_files: []