wtf-tools 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -5
- data/example/dump.rb +6 -2
- data/example/timing.rb +3 -1
- data/lib/wtf-tools.rb +17 -4
- data/lib/wtf/dumper.rb +54 -29
- data/lib/wtf/method_tracker.rb +2 -1
- data/lib/wtf/query_tracker.rb +1 -1
- data/wtf-tools.gemspec +24 -24
- metadata +3 -9
- data/test/test_dumper.rb +0 -8
- data/test/test_method_tracker.rb +0 -8
- data/test/test_timing.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57c0c8fb5737da67755dd7eb6736617ece8b31b7
|
4
|
+
data.tar.gz: 3f53602929c2cbb6a99e69ab2f54ad7f17024dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3037df787128aee6fff83d936488f9870256f800c188ab935aa473ddb7b5c8d85f2ff225fdf75ecfb1c00e71bacc9b23397580ac5e7212c1b0f97c80b6029a2
|
7
|
+
data.tar.gz: 244a0c3410d67d00a1cc62962f80828b25a39a7f414f61a1c6526e06b8bd92721f7af49f039c0b9a7abea2d69a839150ea8e071406e189e0aa17c8b86ae2386b
|
data/README.md
CHANGED
@@ -21,6 +21,7 @@ Usage examples
|
|
21
21
|
WTF? my_var # basic
|
22
22
|
WTF? my_var, other_var, { some: data }, :pp # more data, option: pretty-print
|
23
23
|
WTF? :label, records, :bare, :time # multiple options given
|
24
|
+
data.wtf(:time).some_method # inline call
|
24
25
|
```
|
25
26
|
|
26
27
|
Supported options
|
@@ -43,12 +44,9 @@ Formatting
|
|
43
44
|
:bare modifier, ActiveRecord with just id attributs: #<MyClass id: 1234>
|
44
45
|
|
45
46
|
Output control
|
46
|
-
|
47
|
-
:log to Rails default logger
|
47
|
+
:puts to STDOUT (default)
|
48
48
|
:file to a separate file in configured location
|
49
|
-
:
|
50
|
-
:redis to a Redis list on key 'wtf', expiring in 30min
|
51
|
-
:raise raise the string containing data as exception
|
49
|
+
:error raise the string containing data as exception
|
52
50
|
```
|
53
51
|
|
54
52
|
---
|
data/example/dump.rb
CHANGED
@@ -7,8 +7,10 @@ require 'active_support/logger'
|
|
7
7
|
require 'fileutils'
|
8
8
|
|
9
9
|
WTF.options = {
|
10
|
-
:
|
11
|
-
:
|
10
|
+
files: './wtf',
|
11
|
+
output: {
|
12
|
+
default: ActiveSupport::Logger.new('./example.log'),
|
13
|
+
}
|
12
14
|
}
|
13
15
|
|
14
16
|
data = { 'some' => { 'nested' => { 'data' => 17 } }, :question => %w(life universe and everything), :answer => 42 }
|
@@ -24,3 +26,5 @@ WTF? data, :pp, :nl
|
|
24
26
|
WTF? data, :json, :nl
|
25
27
|
|
26
28
|
WTF? data, :yaml, :no, :file
|
29
|
+
|
30
|
+
data.wtf(:file).size
|
data/example/timing.rb
CHANGED
@@ -9,7 +9,9 @@ WTF.time {
|
|
9
9
|
|
10
10
|
# logging time with specified precision and options
|
11
11
|
WTF.options = {
|
12
|
-
:
|
12
|
+
output: {
|
13
|
+
default: ActiveSupport::Logger.new('./example.log'),
|
14
|
+
}
|
13
15
|
}
|
14
16
|
result = WTF.time(4, :nl) {
|
15
17
|
sleep 3.12346
|
data/lib/wtf-tools.rb
CHANGED
@@ -13,8 +13,16 @@ module WTF
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def files_path
|
16
|
-
|
17
|
-
|
16
|
+
if options[:files]
|
17
|
+
dirs = FileUtils.mkdir_p(options[:files])
|
18
|
+
dirs.first
|
19
|
+
else
|
20
|
+
Dir.getwd
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def output_options
|
25
|
+
Hash(options[:output])
|
18
26
|
end
|
19
27
|
|
20
28
|
# TODO: separately track ActiveRecord finders usage in the related methods
|
@@ -42,7 +50,7 @@ module WTF
|
|
42
50
|
before = AbsoluteTime.now
|
43
51
|
result = yield
|
44
52
|
duration = AbsoluteTime.now - before
|
45
|
-
WTF::Dumper.new(duration.round(precision), *args)
|
53
|
+
WTF::Dumper.new(duration.round(precision), *args).call
|
46
54
|
result
|
47
55
|
end
|
48
56
|
end
|
@@ -50,7 +58,12 @@ end
|
|
50
58
|
|
51
59
|
Object.class_eval do
|
52
60
|
def WTF?(*args)
|
53
|
-
WTF::Dumper.new(*args)
|
61
|
+
WTF::Dumper.new(*args).call
|
54
62
|
nil
|
55
63
|
end
|
64
|
+
|
65
|
+
def wtf(*args)
|
66
|
+
WTF::Dumper.new(self, *args).call
|
67
|
+
self
|
68
|
+
end
|
56
69
|
end
|
data/lib/wtf/dumper.rb
CHANGED
@@ -1,26 +1,32 @@
|
|
1
1
|
module WTF
|
2
2
|
class Dumper
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
PREFIX_OPTIONS = [:time, :nl, :no].freeze
|
4
|
+
FORMAT_OPTIONS = [:pp, :yaml, :json, :text, :line, :csv].freeze
|
5
|
+
MODIFY_OPTIONS = [:bare].freeze
|
6
|
+
OUTPUT_OPTIONS = [:puts, :error, :file].freeze
|
7
|
+
|
8
|
+
OPTIONS = (PREFIX_OPTIONS + FORMAT_OPTIONS + MODIFY_OPTIONS + OUTPUT_OPTIONS).freeze
|
9
9
|
|
10
10
|
attr_reader :options
|
11
11
|
|
12
12
|
def initialize(*args)
|
13
13
|
@options = {}
|
14
|
-
while
|
14
|
+
while is_option?(args.last)
|
15
15
|
@options[args.pop] = true
|
16
16
|
end
|
17
|
+
end
|
17
18
|
|
19
|
+
def call
|
18
20
|
data = prefix(args) << format(args)
|
19
21
|
output(data)
|
20
22
|
end
|
21
23
|
|
22
24
|
private
|
23
25
|
|
26
|
+
def is_option?(sym)
|
27
|
+
OPTIONS.include?(sym) or WTF.output_options.key?(sym)
|
28
|
+
end
|
29
|
+
|
24
30
|
def prefix(args)
|
25
31
|
data = ''
|
26
32
|
return data if options[:no]
|
@@ -54,28 +60,6 @@ module WTF
|
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
57
|
-
def output(data)
|
58
|
-
case
|
59
|
-
when options[:page]
|
60
|
-
(Thread.current[:wtf] ||= []) << data
|
61
|
-
when options[:file]
|
62
|
-
time = Time.now.strftime('%m%d_%H%M%S')
|
63
|
-
file = "#{WTF.files_path}/wtf_#{time}_#{rand(10000)}.txt"
|
64
|
-
File.write(file, data)
|
65
|
-
when options[:raise]
|
66
|
-
raise StandardError, data
|
67
|
-
when options[:redis]
|
68
|
-
WTF.options[:redis].rpush('wtf', data)
|
69
|
-
WTF.options[:redis].expire('wtf', 30*60)
|
70
|
-
when options[:log]
|
71
|
-
Rails.logger.info(data)
|
72
|
-
when WTF.options[:default]
|
73
|
-
WTF.options[:default].info(data)
|
74
|
-
else
|
75
|
-
puts data
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
63
|
def cleanup(str, bare = false)
|
80
64
|
# remove array parentheses
|
81
65
|
str.gsub!(/^\[|\]$/,'')
|
@@ -83,5 +67,46 @@ module WTF
|
|
83
67
|
str.gsub!(/#<[A-Z]\w+ id: \d+\K.*?>/, '>') if bare
|
84
68
|
str
|
85
69
|
end
|
70
|
+
|
71
|
+
def output(data)
|
72
|
+
selected = (OUTPUT_OPTIONS + WTF.output_options.keys).select { |how| options[how] }
|
73
|
+
selected << :default if selected.empty?
|
74
|
+
selected.each do |how|
|
75
|
+
Output.new(data).call(how)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Output
|
80
|
+
attr_reader :data
|
81
|
+
|
82
|
+
def initialize(data)
|
83
|
+
@data = data
|
84
|
+
end
|
85
|
+
|
86
|
+
def call(meth)
|
87
|
+
if block = WTF.output_options[meth]
|
88
|
+
block.call(meth)
|
89
|
+
else
|
90
|
+
send(meth)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def puts
|
97
|
+
STDOUT.puts(data)
|
98
|
+
end
|
99
|
+
alias_method :default, :puts
|
100
|
+
|
101
|
+
def file
|
102
|
+
time = Time.now.strftime('%m%d_%H%M%S')
|
103
|
+
file = File.join(WTF.files_path, "wtf_#{time}_#{rand(10000)}.txt")
|
104
|
+
File.write(file, data)
|
105
|
+
end
|
106
|
+
|
107
|
+
def error
|
108
|
+
raise StandardError, data
|
109
|
+
end
|
110
|
+
end
|
86
111
|
end
|
87
112
|
end
|
data/lib/wtf/method_tracker.rb
CHANGED
@@ -82,7 +82,8 @@ module WTF
|
|
82
82
|
data.unshift(%w(class method count time heap_mb))
|
83
83
|
|
84
84
|
time = Time.now.strftime('%m%d_%H%M%S')
|
85
|
-
File.
|
85
|
+
file = File.join(WTF.files_path, "track_#{time}_#{rand(10000)}.csv")
|
86
|
+
File.write(file, data.map(&:to_csv).join)
|
86
87
|
end
|
87
88
|
end
|
88
89
|
end
|
data/lib/wtf/query_tracker.rb
CHANGED
@@ -28,7 +28,7 @@ module WTF
|
|
28
28
|
def on_sql(sql)
|
29
29
|
trackables.each do |it|
|
30
30
|
if match(it.pattern, sql)
|
31
|
-
WTF::Dumper.new(:sql, sql, *caller.take(it.options[:size] || 30), :line)
|
31
|
+
WTF::Dumper.new(:sql, sql, *caller.take(it.options[:size] || 30), :line).call
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/wtf-tools.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = 'wtf-tools'
|
3
|
-
s.version = '1.0.
|
4
|
-
s.date = '2014-10-14'
|
5
|
-
s.platform = Gem::Platform::RUBY
|
6
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.0.0")
|
7
|
-
s.summary = 'tools for debugging and profiling Ruby on Rails projects'
|
8
|
-
s.license = 'MIT'
|
9
|
-
|
10
|
-
s.description = <<-EOF
|
11
|
-
WTF-tools offers some flexible options for your puts-style Ruby debugging needs,
|
12
|
-
and method-level profiling for Ruby on Rails projects.
|
13
|
-
EOF
|
14
|
-
|
15
|
-
s.files = Dir['{lib/**/*,example/*,test/*}'] + %w(LICENSE Rakefile README.md wtf-tools.gemspec)
|
16
|
-
s.require_path = 'lib'
|
17
|
-
s.test_files = Dir['test/*.rb']
|
18
|
-
|
19
|
-
s.author = 'Remigijus Jodelis'
|
20
|
-
s.email = 'remigijus.jodelis@gmail.com'
|
21
|
-
s.homepage = 'http://github.com/remigijusj/wtf-tools'
|
22
|
-
|
23
|
-
s.add_runtime_dependency 'absolute_time', '~> 1.0'
|
24
|
-
end
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'wtf-tools'
|
3
|
+
s.version = '1.0.2'
|
4
|
+
s.date = '2014-10-14'
|
5
|
+
s.platform = Gem::Platform::RUBY
|
6
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.0.0")
|
7
|
+
s.summary = 'tools for debugging and profiling Ruby on Rails projects'
|
8
|
+
s.license = 'MIT'
|
9
|
+
|
10
|
+
s.description = <<-EOF
|
11
|
+
WTF-tools offers some flexible options for your puts-style Ruby debugging needs,
|
12
|
+
and method-level profiling for Ruby on Rails projects.
|
13
|
+
EOF
|
14
|
+
|
15
|
+
s.files = Dir['{lib/**/*,example/*,test/*}'] + %w(LICENSE Rakefile README.md wtf-tools.gemspec)
|
16
|
+
s.require_path = 'lib'
|
17
|
+
s.test_files = Dir['test/*.rb']
|
18
|
+
|
19
|
+
s.author = 'Remigijus Jodelis'
|
20
|
+
s.email = 'remigijus.jodelis@gmail.com'
|
21
|
+
s.homepage = 'http://github.com/remigijusj/wtf-tools'
|
22
|
+
|
23
|
+
s.add_runtime_dependency 'absolute_time', '~> 1.0'
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wtf-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Remigijus Jodelis
|
@@ -42,9 +42,6 @@ files:
|
|
42
42
|
- lib/wtf/dumper.rb
|
43
43
|
- lib/wtf/method_tracker.rb
|
44
44
|
- lib/wtf/query_tracker.rb
|
45
|
-
- test/test_dumper.rb
|
46
|
-
- test/test_method_tracker.rb
|
47
|
-
- test/test_timing.rb
|
48
45
|
- wtf-tools.gemspec
|
49
46
|
homepage: http://github.com/remigijusj/wtf-tools
|
50
47
|
licenses:
|
@@ -66,11 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
63
|
version: '0'
|
67
64
|
requirements: []
|
68
65
|
rubyforge_project:
|
69
|
-
rubygems_version: 2.
|
66
|
+
rubygems_version: 2.5.1
|
70
67
|
signing_key:
|
71
68
|
specification_version: 4
|
72
69
|
summary: tools for debugging and profiling Ruby on Rails projects
|
73
|
-
test_files:
|
74
|
-
- test/test_dumper.rb
|
75
|
-
- test/test_method_tracker.rb
|
76
|
-
- test/test_timing.rb
|
70
|
+
test_files: []
|
data/test/test_dumper.rb
DELETED
data/test/test_method_tracker.rb
DELETED