putter 0.4.0 → 0.4.1
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/CHANGELOG.md +7 -1
- data/Gemfile.lock +2 -2
- data/README.md +12 -12
- data/lib/putter/configuration.rb +3 -1
- data/lib/putter/follower.rb +5 -48
- data/lib/putter/follower_data.rb +41 -0
- data/lib/putter/version.rb +1 -1
- data/lib/putter/watcher.rb +1 -1
- data/lib/putter/watcher_data.rb +8 -8
- data/lib/putter.rb +32 -19
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72890e1762d7aad4835c7be72838d2409ecfd101
|
4
|
+
data.tar.gz: 0e24d52624633980ca47e6f1a2830e037d016a99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a575a07d97f70930a795fdfea66d6c14d4ee27a41eee406206fdde067e71f847576e04065702f2ef4611cc6d52b019c4cf32fccaf2fe18628346895de8c44be0
|
7
|
+
data.tar.gz: bf1e697ce25b56fd736742b3a15303547249e355c804326a04951c3f36331505b066bbdda01a0097fd01ef248687a16a48ed73c24f272c9def9d2da78a57d865
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# CHANGELOG
|
2
|
-
### 0.4.
|
2
|
+
### 0.4.1 - 2016-10-16
|
3
|
+
- By default, Putter will not run in production mode in Rails, this can be allow via configuration
|
4
|
+
- By default, Putter will ignore methods from ActiveRecord::Base if it is present
|
5
|
+
- Do not re-define a method if it is whitelisted
|
6
|
+
- Code cleanup and README updates
|
7
|
+
|
8
|
+
### 0.4.0 - 2016-08-18
|
3
9
|
- Add methods option to `Putter.watch`
|
4
10
|
- Refactor watch method to use registry
|
5
11
|
- Refactor method creation specs
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ Putter is a tool for more easily implementing puts debugging. Instead of litteri
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem
|
12
|
+
gem "putter"
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -112,7 +112,7 @@ Putter currently has 3 configuration options:
|
|
112
112
|
|
113
113
|
```ruby
|
114
114
|
Putter.configure do |config|
|
115
|
-
#
|
115
|
+
# "print_strategy" takes a block that receives a data object with the label, line,
|
116
116
|
# method, args string, and result respectively. This block will be used after each method
|
117
117
|
# is called, it must contain puts or logger calls, to print or any other method callbacks
|
118
118
|
# that are helpful.
|
@@ -121,24 +121,24 @@ Putter.configure do |config|
|
|
121
121
|
puts "#{data.line} - Label: #{data.label}, Method: #{data.method}, Args: #{data.args}, Result: #{data.result}"
|
122
122
|
end
|
123
123
|
|
124
|
-
#
|
124
|
+
# "ignore_methods_from" takes an array of class names and will ignore both class and instance methods
|
125
125
|
# from those classes when adding methods to the proxy and adding debug output
|
126
|
-
# Defaults to [Object]
|
126
|
+
# Defaults to [Object] or [Object, ActiveRecord::Based] if defined
|
127
127
|
config.ignore_methods_from = [Object, ActiveRecord::Base]
|
128
128
|
|
129
|
-
#
|
129
|
+
# "methods_whitelist" takes an array of methods and will always proxy and debug those methods
|
130
130
|
# regardless of whether or not the class is ignored and regardless of what methods are passed
|
131
|
-
# in when running
|
131
|
+
# in when running "Putter.follow" or "Putter.watch"
|
132
|
+
# Defaults to []
|
132
133
|
config.methods_whitelist = [:to_s]
|
134
|
+
|
135
|
+
# "allow_production" takes a boolean and determines whether or not Putter will run if
|
136
|
+
# `Rails.env == "production"`
|
137
|
+
# Defaults to false
|
138
|
+
config.allow_production = false
|
133
139
|
end
|
134
140
|
```
|
135
141
|
|
136
|
-
## Planned Features
|
137
|
-
Feel free to open a PR to implement any of these if they are not yet added:
|
138
|
-
|
139
|
-
- Active Record specific printing
|
140
|
-
- Checking Rails.env to double check that putter is not called in production
|
141
|
-
|
142
142
|
## Contributing
|
143
143
|
|
144
144
|
Bug reports and pull requests are welcome on GitHub at https://github.com/dewyze/putter. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/lib/putter/configuration.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module Putter
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :print_strategy
|
3
|
+
attr_accessor :print_strategy, :allow_production
|
4
4
|
attr_writer :ignore_methods_from, :methods_whitelist
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
@ignore_methods_from = [Object]
|
8
|
+
@ignore_methods_from << ActiveRecord::Base if defined?(ActiveRecord::Base)
|
8
9
|
@print_strategy = PrintStrategy::Default
|
10
|
+
@allow_production = false
|
9
11
|
@methods_whitelist = []
|
10
12
|
end
|
11
13
|
|
data/lib/putter/follower.rb
CHANGED
@@ -2,7 +2,7 @@ module Putter
|
|
2
2
|
class Follower < BasicObject
|
3
3
|
include MethodCreator
|
4
4
|
|
5
|
-
attr_reader :object, :
|
5
|
+
attr_reader :object, :proxy
|
6
6
|
|
7
7
|
def initialize(obj, options={})
|
8
8
|
@object = obj
|
@@ -12,11 +12,11 @@ module Putter
|
|
12
12
|
rescue ::NoMethodError
|
13
13
|
::Kernel.raise ::Putter::BasicObjectError
|
14
14
|
end
|
15
|
-
|
15
|
+
@data = FollowerData.new(@object, @proxy, options)
|
16
16
|
end
|
17
17
|
|
18
18
|
def method_missing(method, *args, &blk)
|
19
|
-
if
|
19
|
+
if @data.add_method?(method)
|
20
20
|
add_method(method)
|
21
21
|
end
|
22
22
|
|
@@ -28,52 +28,9 @@ module Putter
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def add_method(method)
|
31
|
-
|
31
|
+
proxy_method_data = ProxyMethodData.new(label: @data.label, method: method)
|
32
32
|
|
33
|
-
add_putter_instance_method_to_proxy(@proxy,
|
34
|
-
end
|
35
|
-
|
36
|
-
def _add_method?(method)
|
37
|
-
return true if _is_whitelisted_method?(method)
|
38
|
-
return false if _is_ignored_method?(method)
|
39
|
-
return false if @proxy.instance_methods.include?(method)
|
40
|
-
return @proxy_all_methods || proxied_methods.include?(method.to_s)
|
41
|
-
end
|
42
|
-
|
43
|
-
def _is_ignored_method?(method)
|
44
|
-
::Putter.configuration.ignore_methods_from.each do |klass|
|
45
|
-
return true if klass.methods.include?(method.to_sym)
|
46
|
-
return true if klass.instance_methods.include?(method.to_sym)
|
47
|
-
end
|
48
|
-
return false
|
49
|
-
end
|
50
|
-
|
51
|
-
def _is_whitelisted_method?(method)
|
52
|
-
::Putter.configuration.methods_whitelist.map(&:to_sym).include?(method.to_sym)
|
53
|
-
end
|
54
|
-
|
55
|
-
def _set_label(label)
|
56
|
-
if !label.nil?
|
57
|
-
@label = label
|
58
|
-
elsif @object.class == ::Class
|
59
|
-
@label = @object.name
|
60
|
-
else
|
61
|
-
@label = @object.class.name + " instance"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def _set_methods(methods)
|
66
|
-
if methods.nil?
|
67
|
-
@proxy_all_methods = true
|
68
|
-
else
|
69
|
-
@proxied_methods = methods.map(&:to_s)
|
70
|
-
@proxy_all_methods = false
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def _set_options(options)
|
75
|
-
_set_label(options[:label])
|
76
|
-
_set_methods(options[:methods])
|
33
|
+
add_putter_instance_method_to_proxy(@proxy, proxy_method_data)
|
77
34
|
end
|
78
35
|
end
|
79
36
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Putter
|
2
|
+
class FollowerData
|
3
|
+
attr_accessor :label
|
4
|
+
|
5
|
+
def initialize(object, proxy, options)
|
6
|
+
@proxy = proxy
|
7
|
+
@proxied_methods = options[:methods] || []
|
8
|
+
_set_label(options[:label], object)
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_method?(method)
|
12
|
+
return false if @proxy.instance_methods.include?(method)
|
13
|
+
return true if _is_whitelisted_method?(method)
|
14
|
+
return false if _is_ignored_method?(method)
|
15
|
+
return true if @proxied_methods.empty?
|
16
|
+
return true if @proxied_methods.include?(method)
|
17
|
+
end
|
18
|
+
|
19
|
+
def _set_label(label, object)
|
20
|
+
if !label.nil?
|
21
|
+
@label = label
|
22
|
+
elsif object.class == Class
|
23
|
+
@label = object.name
|
24
|
+
else
|
25
|
+
@label = object.class.name + " instance"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def _is_whitelisted_method?(method)
|
30
|
+
::Putter.configuration.methods_whitelist.map(&:to_sym).include?(method.to_sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
def _is_ignored_method?(method)
|
34
|
+
::Putter.configuration.ignore_methods_from.each do |klass|
|
35
|
+
return true if klass.methods.include?(method.to_sym)
|
36
|
+
return true if klass.instance_methods.include?(method.to_sym)
|
37
|
+
end
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/putter/version.rb
CHANGED
data/lib/putter/watcher.rb
CHANGED
@@ -30,7 +30,7 @@ module Putter
|
|
30
30
|
proxy = MethodProxy.new
|
31
31
|
|
32
32
|
Putter::Watcher.methods_for(klass).each do |method|
|
33
|
-
data = ProxyMethodData.new(
|
33
|
+
data = ProxyMethodData.new(label: Putter::Watcher.label_for(klass), method: method)
|
34
34
|
add_putter_class_method_to_proxy(proxy, data)
|
35
35
|
end
|
36
36
|
|
data/lib/putter/watcher_data.rb
CHANGED
@@ -3,25 +3,25 @@ module Putter
|
|
3
3
|
attr_accessor :label, :proxy_methods
|
4
4
|
|
5
5
|
def initialize(options, klass)
|
6
|
-
_set_label(options[:label], klass)
|
7
|
-
_set_methods(options[:methods], klass)
|
6
|
+
@label = _set_label(options[:label], klass)
|
7
|
+
@proxy_methods = _set_methods(options[:methods], klass.singleton_class)
|
8
8
|
end
|
9
9
|
|
10
10
|
def _set_label(label, klass)
|
11
11
|
if !label.nil? && label != ""
|
12
|
-
|
12
|
+
label
|
13
13
|
else
|
14
|
-
|
14
|
+
klass.name
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def _set_methods(methods,
|
18
|
+
def _set_methods(methods, singleton_klass)
|
19
19
|
if methods.nil?
|
20
|
-
|
20
|
+
_methods_to_proxy(singleton_klass)
|
21
21
|
elsif !methods.is_a?(Array)
|
22
|
-
|
22
|
+
[methods]
|
23
23
|
else
|
24
|
-
|
24
|
+
methods
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
data/lib/putter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "putter/configuration"
|
2
2
|
require "putter/errors"
|
3
|
+
require "putter/follower_data"
|
3
4
|
require "putter/instance_follower"
|
4
5
|
require "putter/method_creator"
|
5
6
|
require "putter/method_proxy"
|
@@ -16,25 +17,37 @@ module Putter
|
|
16
17
|
|
17
18
|
class << self
|
18
19
|
attr_writer :configuration
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.follow(obj, options={})
|
22
|
-
Putter::Follower.new(obj, options)
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.watch(obj, options={})
|
26
|
-
Putter::Watcher.watch(obj, options)
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.configuration
|
30
|
-
@configuration ||= Configuration.new
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.configure
|
34
|
-
yield configuration
|
35
|
-
end
|
36
20
|
|
37
|
-
|
38
|
-
|
21
|
+
def follow(obj, options={})
|
22
|
+
with_production_check do
|
23
|
+
Putter::Follower.new(obj, options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def watch(obj, options={})
|
28
|
+
with_production_check do
|
29
|
+
Putter::Watcher.watch(obj, options)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def configuration
|
34
|
+
@configuration ||= Configuration.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def configure
|
38
|
+
yield configuration
|
39
|
+
end
|
40
|
+
|
41
|
+
def reset_configuration
|
42
|
+
@configuration = Configuration.new
|
43
|
+
end
|
44
|
+
|
45
|
+
def with_production_check
|
46
|
+
if !configuration.allow_production && defined?(Rails) && Rails.env == "production"
|
47
|
+
puts "Putter cannot be run in production unless the 'allow_production' option is configured to true".colorize(:red)
|
48
|
+
else
|
49
|
+
yield
|
50
|
+
end
|
51
|
+
end
|
39
52
|
end
|
40
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: putter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John DeWyze
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/putter/configuration.rb
|
110
110
|
- lib/putter/errors.rb
|
111
111
|
- lib/putter/follower.rb
|
112
|
+
- lib/putter/follower_data.rb
|
112
113
|
- lib/putter/instance_follower.rb
|
113
114
|
- lib/putter/method_creator.rb
|
114
115
|
- lib/putter/method_proxy.rb
|