sql_safety_net 2.0.1 → 2.0.2

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: 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