sql_tagger 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9b7df0d78b3a94e79c9a8dbe4004b6b42a6b2ca2
4
+ data.tar.gz: 96f28433e8752ffd4c3ffd413ffdc8aa7078967b
5
+ SHA512:
6
+ metadata.gz: b1505eab9c0b0f24dc4fc324b9d360d1e52810e957252c2eef814ba6996c384ce72b78fe173057a62a5d3d15603c08a3c43884979378e6d0f6d81df9f2673e93
7
+ data.tar.gz: b0d48bd55f0f659f5d71e494808dff705079b1726495a3f8ad22914c90e69197e880a2aa92d245f53a9d8875fbc7b680741989bc367d4c382af31d6e514b8717
data/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # sql\_tagger
2
+
3
+ [![Build Status](https://travis-ci.org/SlideShareInc/sql_tagger.svg?branch=master)](https://travis-ci.org/SlideShareInc/sql_tagger)
4
+
5
+ sql\_tagger is a gem that inserts comments into SQL queries. These comments
6
+ include a string from `Kernel#caller` that (hopefully) reveals what Ruby code
7
+ was responsible for performing the query.
8
+
9
+ To use this, just require the appropriate file. For example, to use this with
10
+ the `mysql` gem, write `require 'sql_tagger/mysql'` instead of `require
11
+ 'mysql'`.
12
+
13
+ Before:
14
+
15
+ SELECT 1
16
+
17
+ After:
18
+
19
+ /* program.rb:25:in `some_method' */ SELECT 1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/sql_tagger.rb CHANGED
@@ -2,6 +2,7 @@ require 'set'
2
2
 
3
3
  # Instances of this class insert stack trace comments into SQL queries.
4
4
  class SqlTagger
5
+ # Version string
5
6
  VERSION = IO.read(
6
7
  File.join(File.dirname(__FILE__), '..', 'VERSION')
7
8
  ).chomp.freeze
@@ -16,7 +17,7 @@ class SqlTagger
16
17
  attr_reader :exclusion_cache
17
18
 
18
19
  def initialize
19
- @exclusion_pattern = /^#{RbConfig::CONFIG['prefix']}|\/bundle\/|\/vendor\//
20
+ @exclusion_pattern = %r{\A#{RbConfig::CONFIG['prefix']}|/gems/}
20
21
  @exclusion_cache = Set.new
21
22
  end
22
23
 
@@ -26,7 +27,7 @@ class SqlTagger
26
27
  # For example, given "SELECT 1", this will return something like
27
28
  # "/* program.rb:25:in `some_method' */ SELECT 1".
28
29
  #
29
- # @param [String] sql SQL query string
30
+ # @param sql [String] SQL query string
30
31
  # @return [String] query string with a comment at the beginning
31
32
  def tag(sql)
32
33
  caller(2).each do |string|
@@ -44,7 +45,7 @@ class SqlTagger
44
45
 
45
46
  # Sets +@exclusion_pattern+.
46
47
  #
47
- # @param [Regexp] regexp regular expression to be used to skip stack strings
48
+ # @param regexp [Regexp] regular expression to be used to skip stack strings
48
49
  def exclusion_pattern=(regexp)
49
50
  @exclusion_pattern = regexp
50
51
  @exclusion_cache.clear
@@ -57,9 +58,12 @@ class SqlTagger
57
58
  attr_accessor :default
58
59
  end
59
60
 
60
- # Mixin that monkey patches the receiver's +initialize+ method to set
61
- # +@sql_tagger+.
61
+ # @see .included
62
62
  module Initializer
63
+ # Callback that monkey patches the receiver's +initialize+ method to set
64
+ # +@sql_tagger+.
65
+ #
66
+ # @param base [Module]
63
67
  def self.included(base)
64
68
  base.send(:alias_method, :initialize_without_sql_tagger, :initialize)
65
69
  base.send(:alias_method, :initialize, :initialize_with_sql_tagger)
@@ -74,22 +78,26 @@ class SqlTagger
74
78
  # @return [SqlTagger] the SqlTagger used to tag queries for this instance
75
79
  attr_accessor :sql_tagger
76
80
 
81
+ # Sets +@sql_tagger+ before initializing
77
82
  def initialize_with_sql_tagger(*args, &block)
78
83
  @sql_tagger = SqlTagger.default
79
84
  initialize_without_sql_tagger(*args, &block)
80
85
  end
81
86
  end
82
87
 
88
+ # Extend this module in your adapter module
83
89
  module ModuleMethods
84
90
  # Callback that includes SqlTagger::Initializer and does method aliasing.
85
91
  #
86
- # @param [Module] base
92
+ # @param base [Module]
87
93
  def included(base)
88
94
  base.send(:include, SqlTagger::Initializer)
89
95
  self.instance_methods.map(&:to_s).grep(/_with_sql_tagger$/).each do |with_method|
90
96
  target = with_method.sub(/_with_sql_tagger$/, '')
91
- base.send(:alias_method, "#{target}_without_sql_tagger", target)
92
- base.send(:alias_method, target, with_method)
97
+ if base.method_defined?(target)
98
+ base.send(:alias_method, "#{target}_without_sql_tagger", target)
99
+ base.send(:alias_method, target, with_method)
100
+ end
93
101
  end
94
102
  end
95
103
  end
@@ -1,6 +1,7 @@
1
1
  require 'sql_tagger'
2
2
  require 'mysql'
3
3
 
4
+ # Adapter for +Mysql+ from the mysql gem
4
5
  module SqlTagger::Mysql
5
6
  extend SqlTagger::ModuleMethods
6
7
 
@@ -1,13 +1,19 @@
1
1
  require 'sql_tagger'
2
2
  require 'mysql2'
3
3
 
4
+ # Adapter for +Mysql2::Client+ from the mysql2 gem
4
5
  module SqlTagger::Mysql2
5
6
  extend SqlTagger::ModuleMethods
6
7
 
7
8
  # @see Mysql2::Client#query
8
- def query_with_sql_tagger(sql, opts ={})
9
+ def query_with_sql_tagger(sql, opts = {})
9
10
  query_without_sql_tagger(@sql_tagger.tag(sql), opts)
10
11
  end
12
+
13
+ # @see Mysql2::Client#prepare
14
+ def prepare_with_sql_tagger(sql)
15
+ prepare_without_sql_tagger(@sql_tagger.tag(sql))
16
+ end
11
17
  end
12
18
 
13
19
  Mysql2::Client.send(:include, SqlTagger::Mysql2)
@@ -0,0 +1,32 @@
1
+ require 'sql_tagger'
2
+ require 'pg'
3
+
4
+ # Adapter for +PG::Connection+ from the pg gem
5
+ module SqlTagger::PG
6
+ extend SqlTagger::ModuleMethods
7
+
8
+ # I wouldn't be surprised if I missed a method (checked against pg 0.18.4)
9
+
10
+ [
11
+ :async_exec,
12
+ :async_query,
13
+ :exec,
14
+ :exec_params,
15
+ :query,
16
+ :send_query,
17
+ ].each do |method|
18
+ define_method("#{method}_with_sql_tagger") do |*args, &blk|
19
+ sql = @sql_tagger.tag(args[0])
20
+ __send__("#{method}_without_sql_tagger", sql, *args[1..-1], &blk)
21
+ end
22
+ end
23
+
24
+ [:prepare, :send_prepare].each do |method|
25
+ define_method("#{method}_with_sql_tagger") do |*args, &blk|
26
+ sql = @sql_tagger.tag(args[1])
27
+ __send__("#{method}_without_sql_tagger", args[0], sql, *args[2..-1], &blk)
28
+ end
29
+ end
30
+ end
31
+
32
+ PG::Connection.send(:include, SqlTagger::PG)
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  shared_examples_for 'connections with sql_tagger' do
2
2
  it 'assigns SqlTagger.default to @sql_tagger' do
3
- @db.sql_tagger.should == SqlTagger.default
3
+ expect(@db.sql_tagger).to eq(SqlTagger.default)
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'sql_tagger/mysql2'
3
3
 
4
- describe Mysql2::Client do
4
+ RSpec.describe Mysql2::Client do
5
5
  before :all do
6
6
  @db = Mysql2::Client.new
7
7
  end
@@ -15,12 +15,35 @@ describe Mysql2::Client do
15
15
  describe '#query' do
16
16
  it 'works' do
17
17
  results = @db.query('SELECT 1 AS one', :symbolize_keys => true)
18
- results.to_a.should == [{:one => 1}]
18
+ expect(results.to_a).to eq([{:one => 1}])
19
19
  end
20
20
 
21
- it 'calls SqlTagger#tag' do
22
- @db.sql_tagger.should_receive(:tag).and_return('/* something.rb */ SELECT 1')
23
- @db.query('SELECT 1')
21
+ it 'passes a tagged query to the original method' do
22
+ query = 'SELECT 1'
23
+ allow(@db.sql_tagger).to receive(:tag).with(query).
24
+ and_return("/* something.rb */ #{query}")
25
+ expect(@db).to receive(:query_without_sql_tagger).
26
+ with("/* something.rb */ #{query}", {})
27
+ @db.query(query)
28
+ end
29
+ end
30
+
31
+ describe '#prepare' do
32
+ let(:query) { 'SELECT ? AS num' }
33
+
34
+ it 'works' do
35
+ stmt = @db.prepare(query)
36
+ result = stmt.execute(7)
37
+ expect(result.to_a).to eq([{'num' => 7}])
38
+ stmt.close
39
+ end
40
+
41
+ it 'passes a tagged query to the original method' do
42
+ allow(@db.sql_tagger).to receive(:tag).with(query).
43
+ and_return("/* something.rb */ #{query}")
44
+ expect(@db).to receive(:prepare_without_sql_tagger).
45
+ with("/* something.rb */ #{query}")
46
+ @db.prepare(query)
24
47
  end
25
48
  end
26
49
  end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
  require 'sql_tagger/mysql'
3
3
 
4
- describe Mysql do
4
+ RSpec.describe Mysql do
5
+ let(:query) { 'SELECT 1' }
6
+
5
7
  before :all do
6
8
  @db = Mysql.new
7
9
  end
@@ -15,19 +17,22 @@ describe Mysql do
15
17
  describe '#query' do
16
18
  it 'works' do
17
19
  result = @db.query('SELECT 2')
18
- result.fetch_row.should == ['2']
20
+ expect(result.fetch_row).to eq(['2'])
19
21
  result.free
20
22
  end
21
23
 
22
24
  it 'works when given a block' do
23
25
  @db.query('SELECT 5') do |result|
24
- result.fetch_row.should == ['5']
26
+ expect(result.fetch_row).to eq(['5'])
25
27
  end
26
28
  end
27
29
 
28
- it 'calls SqlTagger#tag' do
29
- @db.sql_tagger.should_receive(:tag).and_return('/* something.rb */ SELECT 1')
30
- @db.query('SELECT 1').free
30
+ it 'passes a tagged query to the original method' do
31
+ allow(@db.sql_tagger).to receive(:tag).with(query).
32
+ and_return("/* something.rb */ #{query}")
33
+ expect(@db).to receive(:query_without_sql_tagger).
34
+ with("/* something.rb */ #{query}")
35
+ @db.query(query)
31
36
  end
32
37
  end
33
38
 
@@ -35,14 +40,17 @@ describe Mysql do
35
40
  it 'works' do
36
41
  stmt = @db.prepare('SELECT ?')
37
42
  stmt.execute(9)
38
- stmt.fetch.should == ['9']
43
+ expect(stmt.fetch).to eq(['9'])
39
44
  stmt.free_result
40
45
  stmt.close
41
46
  end
42
47
 
43
- it 'calls SqlTagger#tag' do
44
- @db.sql_tagger.should_receive(:tag).and_return('/* something.rb */ SELECT 1')
45
- @db.prepare('SELECT 1').close
48
+ it 'passes a tagged query to the original method' do
49
+ allow(@db.sql_tagger).to receive(:tag).with(query).
50
+ and_return("/* something.rb */ #{query}")
51
+ expect(@db).to receive(:prepare_without_sql_tagger).
52
+ with("/* something.rb */ #{query}")
53
+ @db.prepare(query)
46
54
  end
47
55
  end
48
56
  end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'sql_tagger/pg'
3
+
4
+ RSpec.describe PG::Connection do
5
+ let(:query) { 'SELECT 1 AS num' }
6
+
7
+ before :context do
8
+ @db = PG.connect(dbname: 'postgres')
9
+ end
10
+
11
+ after :context do
12
+ @db.finish
13
+ end
14
+
15
+ it_should_behave_like 'connections with sql_tagger'
16
+
17
+ [
18
+ :async_exec,
19
+ :async_query,
20
+ :exec,
21
+ :exec_params,
22
+ :query,
23
+ :send_query,
24
+ ].each do |method|
25
+ describe "##{method}" do
26
+ it 'works' do
27
+ result = @db.__send__(method, query)
28
+ if method == :send_query
29
+ result = @db.get_last_result
30
+ end
31
+ expect(result.to_a).to eq([{'num' => '1'}])
32
+ end
33
+
34
+ it 'passes a tagged query to the original method' do
35
+ allow(@db.sql_tagger).to receive(:tag).with(query).
36
+ and_return("/* something.rb */ #{query}")
37
+ expect(@db).to receive("#{method}_without_sql_tagger").
38
+ with("/* something.rb */ #{query}")
39
+ @db.__send__(method, query)
40
+ end
41
+ end
42
+ end
43
+
44
+ [:prepare, :send_prepare].each do |method|
45
+ describe "##{method}" do
46
+ it 'works' do
47
+ statement_name = "#{method}_test_works"
48
+ @db.__send__(method, statement_name, query)
49
+ result = @db.exec_prepared(statement_name)
50
+ expect(result.to_a).to eq([{'num' => '1'}])
51
+ end
52
+
53
+ it 'passes a tagged query to the original method' do
54
+ statement_name = "#{method}_test_calls"
55
+ allow(@db.sql_tagger).to receive(:tag).with(query).
56
+ and_return("/* something.rb */ #{query}")
57
+ expect(@db).to receive("#{method}_without_sql_tagger").
58
+ with(statement_name, "/* something.rb */ #{query}")
59
+ @db.__send__(method, statement_name, query)
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,74 +1,99 @@
1
1
  require 'sql_tagger'
2
2
 
3
- describe SqlTagger do
4
- before :each do
5
- @sql_tagger = SqlTagger.new
6
- end
3
+ RSpec.describe SqlTagger do
4
+ subject(:sql_tagger) { SqlTagger.new }
7
5
 
8
6
  describe '#tag' do
9
- before :each do
10
- prefix = '/usr'
11
- @sql_tagger.exclusion_pattern = /^#{prefix}/
12
-
13
- @stack_strings_to_skip = [
14
- "#{prefix}/lib//gems/activerecord-2.3.5/lib/active_record/base.rb:500",
15
- "#{prefix}//gems/actionpack-2.3.5/lib/something.rb:20",
7
+ let(:prefix) { '/usr' }
8
+ let(:stack_strings_to_skip) do
9
+ [
10
+ "#{prefix}/lib/gems/activerecord-2.3.5/lib/active_record/base.rb:500",
11
+ "#{prefix}/gems/actionpack-2.3.5/lib/something.rb:20",
16
12
  ]
17
- @valid_stack_string = '/home/app/myapp/lib/user.rb:150'
18
- @caller_result = @stack_strings_to_skip + [@valid_stack_string]
19
- @sql_tagger.stub!(:caller => @caller_result)
13
+ end
14
+ let(:valid_stack_string) { '/home/app/myapp/lib/user.rb:150' }
15
+ let(:caller_result) { stack_strings_to_skip + [valid_stack_string] }
16
+ let(:sql) { 'SELECT 1' }
20
17
 
21
- @sql = 'SELECT 1'
18
+ before :each do
19
+ sql_tagger.exclusion_pattern = /^#{prefix}/
20
+ allow(sql_tagger).to receive(:caller).and_return(caller_result)
22
21
  end
23
22
 
24
23
  it 'skips stack strings that match @exclusion_pattern' do
25
- @sql_tagger.tag(@sql).should == "/* #{@valid_stack_string} */ #{@sql}"
24
+ expect(sql_tagger.tag(sql)).to eq("/* #{valid_stack_string} */ #{sql}")
26
25
  end
27
26
 
28
27
  it 'returns the 1st stack string that does not match @exclusion_pattern' do
29
- @caller_result.push(
28
+ caller_result.push(
30
29
  '/home/app/myapp/lib/document.rb:788',
31
30
  '/home/app/myapp/runner.rb:29'
32
31
  )
33
- @sql_tagger.tag(@sql).should == "/* #{@valid_stack_string} */ #{@sql}"
32
+ expect(sql_tagger.tag(sql)).to eq("/* #{valid_stack_string} */ #{sql}")
34
33
  end
35
34
 
36
35
  it 'adds skipped stack strings into @exclusion_cache' do
37
- @sql_tagger.exclusion_cache.should be_empty
38
- @sql_tagger.tag(@sql)
39
- @stack_strings_to_skip.each do |string|
40
- @sql_tagger.exclusion_cache.should include(string)
36
+ expect(sql_tagger.exclusion_cache).to be_empty
37
+ sql_tagger.tag(sql)
38
+ stack_strings_to_skip.each do |string|
39
+ expect(sql_tagger.exclusion_cache).to include(string)
41
40
  end
42
- @sql_tagger.exclusion_cache.size.should == @stack_strings_to_skip.length
41
+ expect(sql_tagger.exclusion_cache.size).to eq(stack_strings_to_skip.length)
43
42
  end
44
43
 
45
44
  it 'skips strings in @exclusion_cache' do
46
45
  correct_string = '/home/myapp/i.rb:2890'
47
- @caller_result.push(correct_string)
48
- @sql_tagger.exclusion_cache.add(@valid_stack_string)
49
- @sql_tagger.tag(@sql).should == "/* #{correct_string} */ #{@sql}"
46
+ caller_result.push(correct_string)
47
+ sql_tagger.exclusion_cache.add(valid_stack_string)
48
+ expect(sql_tagger.tag(sql)).to eq("/* #{correct_string} */ #{sql}")
50
49
  end
51
50
  end
52
51
 
53
52
  describe '#exclusion_pattern=' do
54
53
  it 'sets @exclusion_pattern' do
55
- @sql_tagger.exclusion_pattern = /regexp/
56
- @sql_tagger.exclusion_pattern.should == /regexp/
54
+ sql_tagger.exclusion_pattern = /regexp/
55
+ expect(sql_tagger.exclusion_pattern).to eq(/regexp/)
57
56
  end
58
57
 
59
58
  it 'clears @exclusion_cache' do
60
- @sql_tagger.exclusion_cache.merge(['/usr', '/opt'])
61
- @sql_tagger.exclusion_pattern = /regexp/
62
- @sql_tagger.exclusion_cache.should be_empty
59
+ sql_tagger.exclusion_cache.merge(['/usr', '/opt'])
60
+ sql_tagger.exclusion_pattern = /regexp/
61
+ expect(sql_tagger.exclusion_cache).to be_empty
63
62
  end
64
63
  end
65
64
 
66
65
  describe '.default' do
67
66
  it 'returns a functional SqlTagger' do
68
- SqlTagger.default.should be_a(SqlTagger)
67
+ expect(SqlTagger.default).to be_a(SqlTagger)
69
68
  # The following is to ensure that SqlTagger.default is set after
70
69
  # #initialize is defined.
71
- SqlTagger.default.exclusion_pattern.should be_a(Regexp)
70
+ expect(SqlTagger.default.exclusion_pattern).to be_a(Regexp)
71
+ end
72
+ end
73
+
74
+ describe SqlTagger::ModuleMethods do
75
+ describe '#included' do
76
+ let(:adapter_class) do
77
+ Module.new do
78
+ extend SqlTagger::ModuleMethods
79
+
80
+ def foo_with_sql_tagger; end
81
+
82
+ def bar_with_sql_tagger; end
83
+ end
84
+ end
85
+
86
+ let(:receiver_class) do
87
+ Class.new do
88
+ def foo; end
89
+ end
90
+ end
91
+
92
+ it 'does not fail for methods that do not exist on the receiver' do
93
+ expect {
94
+ receiver_class.send(:include, adapter_class)
95
+ }.not_to raise_error
96
+ end
72
97
  end
73
98
  end
74
99
  end
data/sql_tagger.gemspec CHANGED
@@ -5,12 +5,16 @@ Gem::Specification.new do |s|
5
5
  s.homepage = 'https://github.com/SlideShareInc/sql_tagger'
6
6
  s.summary = 'Stack trace comments for SQL queries'
7
7
  s.description = 'sql_tagger inserts stack trace comments into SQL queries.'
8
+ s.license = 'MIT'
8
9
 
9
- s.add_development_dependency('rspec')
10
+ s.add_development_dependency('rspec', '~> 3.4')
11
+
12
+ s.add_development_dependency('appraisal', '~> 2.1.0')
10
13
  s.add_development_dependency('mysql')
11
14
  s.add_development_dependency('mysql2')
15
+ s.add_development_dependency('pg')
12
16
 
13
- s.files = ['MIT-LICENSE', 'README.rdoc', 'VERSION', 'sql_tagger.gemspec'] +
17
+ s.files = ['MIT-LICENSE', 'README.md', 'VERSION', 'sql_tagger.gemspec'] +
14
18
  Dir.glob('lib/**/*')
15
19
 
16
20
  s.test_files = Dir.glob('spec/**/*')
metadata CHANGED
@@ -1,121 +1,132 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sql_tagger
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Toby Hsieh
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-07-11 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '3.4'
20
+ type: :development
23
21
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.0
33
34
  type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: mysql
37
35
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: mysql
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
47
48
  type: :development
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
50
56
  name: mysql2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
51
63
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
61
76
  type: :development
62
- version_requirements: *id003
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
63
83
  description: sql_tagger inserts stack trace comments into SQL queries.
64
84
  email:
65
85
  executables: []
66
-
67
86
  extensions: []
68
-
69
87
  extra_rdoc_files: []
70
-
71
- files:
88
+ files:
72
89
  - MIT-LICENSE
73
- - README.rdoc
90
+ - README.md
74
91
  - VERSION
75
92
  - sql_tagger.gemspec
76
93
  - lib/sql_tagger/mysql.rb
77
94
  - lib/sql_tagger/mysql2.rb
95
+ - lib/sql_tagger/pg.rb
78
96
  - lib/sql_tagger.rb
79
97
  - spec/spec_helper.rb
80
98
  - spec/sql_tagger/mysql2_spec.rb
81
99
  - spec/sql_tagger/mysql_spec.rb
100
+ - spec/sql_tagger/pg_spec.rb
82
101
  - spec/sql_tagger_spec.rb
83
- has_rdoc: true
84
102
  homepage: https://github.com/SlideShareInc/sql_tagger
85
- licenses: []
86
-
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
87
106
  post_install_message:
88
107
  rdoc_options: []
89
-
90
- require_paths:
108
+ require_paths:
91
109
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: 3
98
- segments:
99
- - 0
100
- version: "0"
101
- required_rubygems_version: !ruby/object:Gem::Requirement
102
- none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
110
120
  requirements: []
111
-
112
121
  rubyforge_project:
113
- rubygems_version: 1.3.7
122
+ rubygems_version: 2.0.14.1
114
123
  signing_key:
115
- specification_version: 3
124
+ specification_version: 4
116
125
  summary: Stack trace comments for SQL queries
117
- test_files:
126
+ test_files:
118
127
  - spec/spec_helper.rb
119
128
  - spec/sql_tagger/mysql2_spec.rb
120
129
  - spec/sql_tagger/mysql_spec.rb
130
+ - spec/sql_tagger/pg_spec.rb
121
131
  - spec/sql_tagger_spec.rb
132
+ has_rdoc:
data/README.rdoc DELETED
@@ -1,14 +0,0 @@
1
- = sql_tagger
2
-
3
- +sql_tagger+ is a gem that inserts comments into SQL queries. These comments
4
- include a string from <tt>Kernel#caller</tt> that (hopefully) reveals what Ruby
5
- code was responsible for performing the query.
6
-
7
- To use this, just require the appropriate file. For example, to use this with
8
- the +mysql+ gem, perform <tt>require 'sql_tagger/mysql'</tt> instead of
9
- <tt>require 'mysql'</tt>.
10
-
11
- Before:
12
- SELECT 1
13
- After:
14
- /* program.rb:25:in `some_method' */ SELECT 1