sql_safety_net 2.0.1 → 2.0.2

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
  SHA1:
3
- metadata.gz: 95c009f77c241b91a184dcb900e781a4f6290561
4
- data.tar.gz: c5c404c3fd88708adf9460d877dea543b48c5d3e
3
+ metadata.gz: 8bea9f78919f0aeda8e3d9a7e63d91c951f6fce7
4
+ data.tar.gz: ec3d635668247f26bf19b93eacacaef930e2e328
5
5
  SHA512:
6
- metadata.gz: 83daf270812be2bfce093ec9861855feba974d12ce1e9d0963fefa70099c5162d4ac82f0015407dd7f95db7cfa67adcee674a2251e5f75e24a11c99977c400ef
7
- data.tar.gz: 17e441031c94574f0a1c8df959f65ff7a4ef4fbdce08b0854abc6dfdbcf3c9bb1899691ae0a16701402fbad27ca951fc6a268e57c19eb3f35c05303e3b8aef0a
6
+ metadata.gz: de20705e4e92e7c9979640ed70aaebe0c1b7079ec688e530a96220cdd3da383175533b71269b4ea06843ea50488d0c21a90d97fce0bd40d7bb8bacd8d7b4d137
7
+ data.tar.gz: 0078dcbd525431aaa892514e7543c29794f74b56b8949be06cc4bb7e47a4334fd65233e5d8a9ee8d2edca98113d97e80281b85c0734a1b12a0cfd03afc69a0d3
data/.gitignore CHANGED
@@ -1,8 +1,7 @@
1
- Gemfile.lock
2
- *.swm
3
- *.swn
4
- *.swo
5
- *.swp
1
+ *.sw[mnop]
6
2
  *.gem
7
- coverage
8
- pkg
3
+ /Gemfile.lock
4
+ /gemfiles/*.lock
5
+ /.bundle
6
+ /coverage
7
+ /pkg
data/Appraisals ADDED
@@ -0,0 +1,20 @@
1
+ # Install gems for all appraisal definitions:
2
+ #
3
+ # $ appraisal install
4
+ #
5
+ # To run tests on different versions:
6
+ #
7
+ # $ appraisal activerecord_x.x rspec spec
8
+
9
+ [
10
+ [ '3.2', '~> 3.2.0' ],
11
+ [ '4.0', '~> 4.0.0' ],
12
+ [ '4.1', '~> 4.1.0' ],
13
+ [ '4.2', '~> 4.2.0' ],
14
+ ].each do |ver_name, ver_req|
15
+ appraise "rails_#{ver_name}" do
16
+ gem 'activerecord', ver_req
17
+ gem 'activesupport', ver_req
18
+ gem 'actionpack', ver_req
19
+ end
20
+ end
data/Rakefile CHANGED
@@ -1 +1,21 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'bundler/setup'
3
+
4
+ # Note: if you get this error: "Bundler could not find compatible versions for gem ..."
5
+ # try deleting Gemfile.lock (usually happens when switching branches).
6
+
7
+ task default: :appraise_all
8
+
9
+ # This is slightly different from 'appraisal COMMAND' because it continues even if a definition fails.
10
+ desc "Run rspecs for all appraisals"
11
+ task :appraise_all do
12
+ success_map = {}
13
+ `bundle exec appraisal list`.lines.map(&:chomp).each do |appraise_def|
14
+ success = system('appraisal', appraise_def, 'rspec', 'spec')
15
+ success_map[appraise_def] = success
16
+ end
17
+ puts "\n===== Test Summary ====="
18
+ success_map.each do |appraise_def, success|
19
+ puts "#{appraise_def}: #{success ? 'no failures (but check pending)' : 'failed'}"
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 3.2.0"
6
+ gem "activesupport", "~> 3.2.0"
7
+ gem "actionpack", "~> 3.2.0"
8
+
9
+ gemspec :path => "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.0.0"
6
+ gem "activesupport", "~> 4.0.0"
7
+ gem "actionpack", "~> 4.0.0"
8
+
9
+ gemspec :path => "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.1.0"
6
+ gem "activesupport", "~> 4.1.0"
7
+ gem "actionpack", "~> 4.1.0"
8
+
9
+ gemspec :path => "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 4.2.0"
6
+ gem "activesupport", "~> 4.2.0"
7
+ gem "actionpack", "~> 4.2.0"
8
+
9
+ gemspec :path => "../"
@@ -35,24 +35,17 @@ module SqlSafetyNet
35
35
  results = yield
36
36
  elapsed_time = Time.now - start_time
37
37
 
38
- expanded_sql = sql
39
- unless binds.empty?
40
- sql = "#{sql} #{binds.collect{|col, val| [col.name, val]}.inspect}"
41
- end
42
- rows = results.size
38
+ # In Rails 4, results is an ActiveRecord::Result, so use #count
39
+ row_count = results.count
43
40
  result_size = 0
44
41
  results.each do |row|
45
42
  values = row.is_a?(Hash) ? row.values : row
46
43
  values.each{|val| result_size += val.to_s.size if val}
47
44
  end
48
45
  cached = CacheStore.in_fetch_block?
49
- sql_str = nil
50
- if method(:to_sql).arity == 1
51
- sql_str = (sql.is_a?(String) ? sql : to_sql(sql))
52
- else
53
- sql_str = to_sql(sql, binds)
54
- end
55
- query_info = QueryInfo.new(sql_str, :elapsed_time => elapsed_time, :rows => rows, :result_size => result_size, :cached => cached)
46
+
47
+ query_info = QueryInfo.new(append_binds(sql, binds), :elapsed_time => elapsed_time,
48
+ :rows => row_count, :result_size => result_size, :cached => cached)
56
49
  queries << query_info
57
50
 
58
51
  # If connection includes a query plan analyzer then alert on issues in the query plan.
@@ -67,6 +60,14 @@ module SqlSafetyNet
67
60
  yield
68
61
  end
69
62
  end
70
-
63
+
64
+ # the returned string is for display only; it's not valid sql
65
+ def append_binds(sql_str, binds)
66
+ if binds.empty?
67
+ sql_str
68
+ else
69
+ "#{sql_str} #{binds.map {|col, val| [col.name, val] }.inspect}"
70
+ end
71
+ end
71
72
  end
72
73
  end
@@ -1,3 +1,3 @@
1
1
  module SqlSafetyNet
2
- VERSION = '2.0.1'.freeze
2
+ VERSION = '2.0.2'.freeze
3
3
  end
@@ -1,6 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SqlSafetyNet::ConnectionAdapter do
4
+ # ActiveRecord 4's conn.select returns an ActiveRecord::Result. This normalizes it so we can test on both AR 3.2 & 4.x
5
+ def hashify_select_result(results)
6
+ results.respond_to?(:to_hash) ? results.to_hash : results
7
+ end
4
8
 
5
9
  let(:connection){ SqlSafetyNet::TestModel.connection }
6
10
 
@@ -17,7 +21,9 @@ describe SqlSafetyNet::ConnectionAdapter do
17
21
 
18
22
  it "should analyze queries in the select method" do
19
23
  connection.should_receive(:analyze_query).with("select name, value from test_models", "SQL", []).and_yield
20
- connection.send(:select, "select name, value from test_models", "SQL").should == [{"name"=>"test", "value"=>10}]
24
+ hashify_select_result(
25
+ connection.send(:select, "select name, value from test_models", "SQL")
26
+ ).should == [{"name"=>"test", "value"=>10}]
21
27
  end
22
28
  end
23
29
 
@@ -34,7 +40,7 @@ describe SqlSafetyNet::ConnectionAdapter do
34
40
  it "should analyze select statements" do
35
41
  SqlSafetyNet::QueryAnalysis.capture do |analysis|
36
42
  results = connection.send(:select, "select name, value from test_models order by name")
37
- results.should == [{"name" => "foo", "value" => 100}, {"name" => "test", "value" => 10}]
43
+ hashify_select_result(results).should == [{"name" => "foo", "value" => 100}, {"name" => "test", "value" => 10}]
38
44
  analysis.queries.size.should == 1
39
45
  query_info = analysis.queries.first
40
46
  query_info.sql.should == "select name, value from test_models order by name"
@@ -44,20 +50,17 @@ describe SqlSafetyNet::ConnectionAdapter do
44
50
  end
45
51
  end
46
52
 
47
- # ActiveRecord < 3.1 doesn't have the binds parameter
48
- if ActiveRecord::VERSION::MAJOR > 3 || (ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR >= 1)
49
- it "should analyze select statements using bind variables" do
50
- SqlSafetyNet::QueryAnalysis.capture do |analysis|
51
- name_column = SqlSafetyNet::TestModel.columns_hash["name"]
52
- results = connection.send(:select, "select name, value from test_models where name = ? order by name", "SQL", [[name_column, "foo"]])
53
- results.should == [{"name" => "foo", "value" => 100}]
54
- analysis.queries.size.should == 1
55
- query_info = analysis.queries.first
56
- query_info.sql.should == 'select name, value from test_models where name = ? order by name [["name", "foo"]]'
57
- query_info.rows.should == 1
58
- query_info.result_size.should == 6
59
- query_info.elapsed_time.should > 0
60
- end
53
+ it "should analyze select statements using bind variables" do
54
+ SqlSafetyNet::QueryAnalysis.capture do |analysis|
55
+ name_column = SqlSafetyNet::TestModel.columns_hash["name"]
56
+ results = connection.send(:select, "select name, value from test_models where name = ? order by name", "SQL", [[name_column, "foo"]])
57
+ hashify_select_result(results).should == [{"name" => "foo", "value" => 100}]
58
+ analysis.queries.size.should == 1
59
+ query_info = analysis.queries.first
60
+ query_info.sql.should == 'select name, value from test_models where name = ? order by name [["name", "foo"]]'
61
+ query_info.rows.should == 1
62
+ query_info.result_size.should == 6
63
+ query_info.elapsed_time.should > 0
61
64
  end
62
65
  end
63
66
 
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,5 @@
1
- require 'rubygems'
2
-
3
- active_record_version = ENV['ACTIVE_RECORD_VERSION'] || ">=3.2.0"
4
- gem 'activerecord', active_record_version
5
- gem 'activesupport', active_record_version
6
1
  require 'active_support/all'
7
2
  require 'active_record'
8
- puts "Testing against activerecord #{ActiveRecord::VERSION::STRING}"
9
3
 
10
4
  begin
11
5
  require 'simplecov'
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'sql_safety_net/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'sql_safety_net'
7
- spec.version = SqlSafetyNet::VERSION
7
+ spec.version = SqlSafetyNet::VERSION.dup # ruby 1.9 needs dup
8
8
  spec.authors = ['Brian Durand', 'Milan Dobrota']
9
9
  spec.email = ['mdobrota@tribpub.com']
10
10
  spec.summary = 'Debug SQL statements in ActiveRecord'
@@ -16,12 +16,13 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ['lib']
18
18
 
19
- spec.add_runtime_dependency 'activesupport', '~> 3.2.0'
20
- spec.add_runtime_dependency 'activerecord', '~> 3.2.0'
21
- spec.add_runtime_dependency 'actionpack', '~> 3.2.0'
19
+ spec.add_runtime_dependency 'activesupport', '>= 3.2.0', '< 4.3'
20
+ spec.add_runtime_dependency 'activerecord' , '>= 3.2.0', '< 4.3'
21
+ spec.add_runtime_dependency 'actionpack' , '>= 3.2.0', '< 4.3'
22
22
 
23
- spec.add_development_dependency 'rspec', '~> 2.8.0'
23
+ spec.add_development_dependency 'rspec' , '~> 2.99'
24
24
  spec.add_development_dependency 'sqlite3-ruby', '>= 0'
25
- spec.add_development_dependency 'bundler', '~> 1.7'
26
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'bundler' , '~> 1.7'
26
+ spec.add_development_dependency 'rake' , '~> 10.0'
27
+ spec.add_development_dependency 'appraisal' , '~> 2.0'
27
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_safety_net
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Durand
@@ -9,64 +9,82 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-31 00:00:00.000000000 Z
12
+ date: 2015-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: 3.2.0
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '4.3'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - "~>"
28
+ - - ">="
26
29
  - !ruby/object:Gem::Version
27
30
  version: 3.2.0
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.3'
28
34
  - !ruby/object:Gem::Dependency
29
35
  name: activerecord
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
32
- - - "~>"
38
+ - - ">="
33
39
  - !ruby/object:Gem::Version
34
40
  version: 3.2.0
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '4.3'
35
44
  type: :runtime
36
45
  prerelease: false
37
46
  version_requirements: !ruby/object:Gem::Requirement
38
47
  requirements:
39
- - - "~>"
48
+ - - ">="
40
49
  - !ruby/object:Gem::Version
41
50
  version: 3.2.0
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '4.3'
42
54
  - !ruby/object:Gem::Dependency
43
55
  name: actionpack
44
56
  requirement: !ruby/object:Gem::Requirement
45
57
  requirements:
46
- - - "~>"
58
+ - - ">="
47
59
  - !ruby/object:Gem::Version
48
60
  version: 3.2.0
61
+ - - "<"
62
+ - !ruby/object:Gem::Version
63
+ version: '4.3'
49
64
  type: :runtime
50
65
  prerelease: false
51
66
  version_requirements: !ruby/object:Gem::Requirement
52
67
  requirements:
53
- - - "~>"
68
+ - - ">="
54
69
  - !ruby/object:Gem::Version
55
70
  version: 3.2.0
71
+ - - "<"
72
+ - !ruby/object:Gem::Version
73
+ version: '4.3'
56
74
  - !ruby/object:Gem::Dependency
57
75
  name: rspec
58
76
  requirement: !ruby/object:Gem::Requirement
59
77
  requirements:
60
78
  - - "~>"
61
79
  - !ruby/object:Gem::Version
62
- version: 2.8.0
80
+ version: '2.99'
63
81
  type: :development
64
82
  prerelease: false
65
83
  version_requirements: !ruby/object:Gem::Requirement
66
84
  requirements:
67
85
  - - "~>"
68
86
  - !ruby/object:Gem::Version
69
- version: 2.8.0
87
+ version: '2.99'
70
88
  - !ruby/object:Gem::Dependency
71
89
  name: sqlite3-ruby
72
90
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +127,20 @@ dependencies:
109
127
  - - "~>"
110
128
  - !ruby/object:Gem::Version
111
129
  version: '10.0'
130
+ - !ruby/object:Gem::Dependency
131
+ name: appraisal
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '2.0'
137
+ type: :development
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '2.0'
112
144
  description: Debug SQL statements in ActiveRecord by displaying warnings on bad queries.
113
145
  email:
114
146
  - mdobrota@tribpub.com
@@ -117,10 +149,15 @@ extensions: []
117
149
  extra_rdoc_files: []
118
150
  files:
119
151
  - ".gitignore"
152
+ - Appraisals
120
153
  - Gemfile
121
154
  - License.txt
122
155
  - README.rdoc
123
156
  - Rakefile
157
+ - gemfiles/rails_3.2.gemfile
158
+ - gemfiles/rails_4.0.gemfile
159
+ - gemfiles/rails_4.1.gemfile
160
+ - gemfiles/rails_4.2.gemfile
124
161
  - lib/sql_safety_net.rb
125
162
  - lib/sql_safety_net/cache_store.rb
126
163
  - lib/sql_safety_net/configuration.rb