wtf-tools 1.0.1 → 1.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 +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