sql_tagger 0.0.3 → 0.0.4
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 +7 -0
- data/README.md +19 -0
- data/VERSION +1 -1
- data/lib/sql_tagger.rb +16 -8
- data/lib/sql_tagger/mysql.rb +1 -0
- data/lib/sql_tagger/mysql2.rb +7 -1
- data/lib/sql_tagger/pg.rb +32 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/sql_tagger/mysql2_spec.rb +28 -5
- data/spec/sql_tagger/mysql_spec.rb +18 -10
- data/spec/sql_tagger/pg_spec.rb +63 -0
- data/spec/sql_tagger_spec.rb +58 -33
- data/sql_tagger.gemspec +6 -2
- metadata +91 -80
- data/README.rdoc +0 -14
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
|
+
[](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.
|
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 =
|
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]
|
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]
|
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
|
-
#
|
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]
|
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.
|
92
|
-
|
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
|
data/lib/sql_tagger/mysql.rb
CHANGED
data/lib/sql_tagger/mysql2.rb
CHANGED
@@ -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,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.
|
18
|
+
expect(results.to_a).to eq([{:one => 1}])
|
19
19
|
end
|
20
20
|
|
21
|
-
it '
|
22
|
-
|
23
|
-
@db.
|
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.
|
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.
|
26
|
+
expect(result.fetch_row).to eq(['5'])
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
|
-
it '
|
29
|
-
@db.sql_tagger.
|
30
|
-
|
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.
|
43
|
+
expect(stmt.fetch).to eq(['9'])
|
39
44
|
stmt.free_result
|
40
45
|
stmt.close
|
41
46
|
end
|
42
47
|
|
43
|
-
it '
|
44
|
-
@db.sql_tagger.
|
45
|
-
|
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
|
data/spec/sql_tagger_spec.rb
CHANGED
@@ -1,74 +1,99 @@
|
|
1
1
|
require 'sql_tagger'
|
2
2
|
|
3
|
-
describe SqlTagger do
|
4
|
-
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
28
|
+
caller_result.push(
|
30
29
|
'/home/app/myapp/lib/document.rb:788',
|
31
30
|
'/home/app/myapp/runner.rb:29'
|
32
31
|
)
|
33
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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
|
-
|
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
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
56
|
-
|
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
|
-
|
61
|
-
|
62
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
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
|
-
|
19
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
-
|
49
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
-
|
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.
|
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
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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:
|
122
|
+
rubygems_version: 2.0.14.1
|
114
123
|
signing_key:
|
115
|
-
specification_version:
|
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
|