puts_debuggerer 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +68 -10
  3. data/lib/puts_debuggerer.rb +79 -8
  4. metadata +29 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c88bd5fef7057cd180ae60e177dc981f4c55e8db
4
- data.tar.gz: 4d9f9d965df2e88f79a82c899e01f772fa60b316
3
+ metadata.gz: 74eb84d4e3c40ce1f68dd0142da2e4579a7cf2a7
4
+ data.tar.gz: 658504f16ce3f3522a4dba972701fb05907a5088
5
5
  SHA512:
6
- metadata.gz: 87a8e6e07e3e294ed74fafb2b47fb64e3f12de5438b0969d9daa20c8c20a49677bfbf807521ca117142ecc727ad21c5327ec6ce2c1e1ad0d35f127588ba1ff95
7
- data.tar.gz: a775f0476aeb9544707396a6d06b5d06452314af1607a766f404e7ecf827c8020ee6266d92c81d07f2bf577acb329ec7b68842d877c5d3a8a83117b04f1d2c49
6
+ metadata.gz: 25fc5da47a71afcae5d14ce8270761ddc7a637147722c778f0a18598f5b9c8a215b595c85415516e3877c6a51ba16468727d45138c024a508023a08111282a12
7
+ data.tar.gz: 9617fe34c02aee117c6a3741fab8edfc6700549da37d7e582d73c02be1b769072c4c36b57c761f06c097f7ea5033d4aca108a3d0d173f8f97c8ce77ab7a2748f
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # puts_debuggerer v0.3.0
1
+ # puts_debuggerer v0.4.0
2
2
  [![Gem Version](https://badge.fury.io/rb/puts_debuggerer.svg)](http://badge.fury.io/rb/puts_debuggerer)
3
3
  [![Build Status](https://travis-ci.org/AndyObtiva/puts_debuggerer.svg?branch=master)](https://travis-ci.org/AndyObtiva/puts_debuggerer)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/AndyObtiva/puts_debuggerer/badge.svg?branch=master)](https://coveralls.io/github/AndyObtiva/puts_debuggerer?branch=master)
@@ -16,7 +16,7 @@ https://tenderlovemaking.com/2016/02/05/i-am-a-puts-debuggerer.html
16
16
  Add the following to bundler's `Gemfile`.
17
17
 
18
18
  ```ruby
19
- gem 'puts_debuggerer', '~> 0.3.0'
19
+ gem 'puts_debuggerer', '~> 0.4.0'
20
20
  ```
21
21
 
22
22
  ### Manual
@@ -24,7 +24,7 @@ gem 'puts_debuggerer', '~> 0.3.0'
24
24
  Or manually install and require library.
25
25
 
26
26
  ```bash
27
- gem install puts_debuggerer -v0.3.0
27
+ gem install puts_debuggerer -v0.4.0
28
28
  ```
29
29
 
30
30
  ```ruby
@@ -33,15 +33,21 @@ require 'puts_debuggerer'
33
33
 
34
34
  ### Usage
35
35
 
36
- Simply invoke global `pd` method anywhere you'd like to see line number and source code with output.
37
- If the argument is a pure string, the print out is simplified by not showing duplicate source.
36
+ Simply invoke global `pd` method anywhere and it prints file, line number,
37
+ source code in addition to output (works even in IRB).
38
+ If the argument is a literal value with no interpolation, the print out is
39
+ simplified by not showing source code matching output.
38
40
 
39
41
  Quickly locate printed lines using Find feature (e.g. CTRL+F) by looking for:
40
42
  * [PD]
41
43
  * file:line_number
42
44
  * ruby expression.
43
45
 
44
- This gives you the added benefit of easily removing your pd statements later on from the code.
46
+ This gives you the added benefit of easily removing your `pd` statements later
47
+ on.
48
+
49
+ This can easily be augmented with a print engine like `awesome_print` and
50
+ customized to format output differently as per options below.
45
51
 
46
52
  Happy puts_debuggerering!
47
53
 
@@ -65,7 +71,7 @@ Example Printout:
65
71
 
66
72
  ### Options
67
73
 
68
- #### `PutsDebuggerer.app_path`
74
+ #### `PutsDebuggerer.app_path` (default = `nil`)
69
75
 
70
76
  Sets absolute application path. Makes `pd` file output relative to it.
71
77
  If [Rails](rubyonrails.org) was detected, it is automatically defaulted to `Rails.root.to_s`
@@ -87,7 +93,7 @@ Example Printout:
87
93
  [PD] pd_test.rb:5 "What line number am I?"
88
94
  ```
89
95
 
90
- #### `PutsDebuggerer.header`
96
+ #### `PutsDebuggerer.header` (default = `nil`)
91
97
 
92
98
  Header to include at the top of every print out.
93
99
  * Default value is `nil`
@@ -111,7 +117,7 @@ Prints out:
111
117
  => "1"
112
118
  ```
113
119
 
114
- #### `PutsDebuggerer.footer`
120
+ #### `PutsDebuggerer.footer` (default = `nil`)
115
121
 
116
122
  Footer to include at the bottom of every print out.
117
123
  * Default value is `nil`
@@ -126,7 +132,7 @@ PutsDebuggerer.footer = true
126
132
  pd (x=1)
127
133
  ```
128
134
 
129
- Prints out
135
+ Prints out:
130
136
 
131
137
  ```bash
132
138
  [PD] /Users/User/example.rb:2
@@ -135,6 +141,57 @@ Prints out
135
141
  ********************************************************************************
136
142
  ```
137
143
 
144
+ #### `PutsDebuggerer.print_engine` (default = `:p`)
145
+
146
+ Print engine to use in object printout (e.g. `p`, `ap`, `pp`).
147
+ It is represented by the print engine's global method name as a symbol
148
+ (e.g. `:ap` for awesome_print).
149
+ Defaults to Ruby's built-in `p` method identified by the symbol `:p`.
150
+
151
+ Example:
152
+
153
+ ```ruby
154
+ # File Name: /Users/User/example.rb
155
+ require 'awesome_print'
156
+ PutsDebuggerer.print_engine = :ap
157
+ array = [1, [2, 3]]
158
+ pd array
159
+ ```
160
+
161
+ Prints out:
162
+
163
+ ```bash
164
+ [PD] /Users/User/example.rb:5
165
+ > (array).inspect
166
+ => [
167
+ [0] 1,
168
+ [1] [
169
+ [0] 2,
170
+ [1] 3
171
+ ]
172
+ ]
173
+ ```
174
+
175
+ #### `PutsDebuggerer.announcer` (default = `"[PD]"`)
176
+
177
+ Announcer (e.g. `[PD]`) to announce every print out with (default: `"[PD]"`)
178
+
179
+ Example:
180
+
181
+ ```ruby
182
+ PutsDebuggerer.announcer = "*** PD ***\n "
183
+ pd (x=1)
184
+ ```
185
+
186
+ Prints out:
187
+
188
+ ```bash
189
+ *** PD ***
190
+ /Users/User/example.rb:2
191
+ > (x=1).inspect
192
+ => "1"
193
+ ```
194
+
138
195
  ### Bonus
139
196
 
140
197
  puts_debuggerer comes with the following bonus utility methods:
@@ -181,6 +238,7 @@ Prints out `puts __caller_source_line__`
181
238
 
182
239
  ## Release Notes
183
240
 
241
+ * v0.4.0: custom print engine (e.g. ap), custom announcer, IRB support
184
242
  * v0.3.0: header/footer support, multi-line printout, improved format
185
243
  * v0.2.0: App path exclusion support, Rails root support, improved format
186
244
  * v0.1.0: File/line/expression print out
@@ -1,6 +1,9 @@
1
1
  module PutsDebuggerer
2
2
  HEADER_DEFAULT = '*'*80
3
3
  FOOTER_DEFAULT = '*'*80
4
+ PRINT_ENGINE_DEFAULT = :p
5
+ PRINT_ENGINE_MESSAGE_INVALID = 'print_engine must be a valid global method symbol (e.g. :p or :puts)'
6
+ ANNOUNCER_DEFAULT = '[PD]'
4
7
  class << self
5
8
  # Application root path to exclude when printing out file path
6
9
  #
@@ -76,6 +79,8 @@ module PutsDebuggerer
76
79
  def footer=(value)
77
80
  if value.equal?(true)
78
81
  @footer = FOOTER_DEFAULT
82
+ elsif value == ''
83
+ @footer = nil
79
84
  else
80
85
  @footer = value
81
86
  end
@@ -84,9 +89,65 @@ module PutsDebuggerer
84
89
  def footer?
85
90
  !!@footer
86
91
  end
92
+
93
+ # Print engine to use in object printout (e.g. `p`, `ap`, `pp`).
94
+ # It is represented by the print engine's global method name as a symbol
95
+ # (e.g. `:ap` for awesome_print).
96
+ # Defaults to Ruby's built-in `p` method identified by the symbol `:p`.
97
+ #
98
+ # Example:
99
+ #
100
+ # # File Name: /Users/User/example.rb
101
+ # require 'awesome_print'
102
+ # PutsDebuggerer.print_engine = :ap
103
+ # array = [1, [2, 3]]
104
+ # pd array
105
+ #
106
+ # Prints out
107
+ #
108
+ # [PD] /Users/User/example.rb:5
109
+ # > (array).inspect
110
+ # => [
111
+ # [0] 1,
112
+ # [1] [
113
+ # [0] 2,
114
+ # [1] 3
115
+ # ]
116
+ # ]
117
+ attr_reader :print_engine
118
+
119
+ def print_engine=(engine)
120
+ if engine.nil?
121
+ @print_engine = PRINT_ENGINE_DEFAULT
122
+ else
123
+ @print_engine = method(engine).name rescue raise(PRINT_ENGINE_MESSAGE_INVALID)
124
+ end
125
+ end
126
+
127
+ # Announcer (e.g. [PD]) to announce every print out with (default: "[PD]")
128
+ #
129
+ # Example:
130
+ #
131
+ # PutsDebuggerer.announcer = "*** PD ***\n "
132
+ # pd (x=1)
133
+ #
134
+ # Prints out
135
+ #
136
+ # *** PD ***
137
+ # /Users/User/example.rb:2
138
+ # > (x=1).inspect
139
+ # => "1"
140
+ attr_reader :announcer
141
+
142
+ def announcer=(text)
143
+ @announcer = text.nil? ? ANNOUNCER_DEFAULT : text
144
+ end
87
145
  end
88
146
  end
89
147
 
148
+ PutsDebuggerer.print_engine = PutsDebuggerer::PRINT_ENGINE_DEFAULT
149
+ PutsDebuggerer.announcer = PutsDebuggerer::ANNOUNCER_DEFAULT
150
+
90
151
  # Prints object with bonus info such as file name, line number and source
91
152
  # expression. Optionally prints out header and footer.
92
153
  # Lookup PutsDebuggerer attributes for more details about configuration options.
@@ -116,13 +177,19 @@ end
116
177
  # > ("Show me the source of the bug: #{bug}").inspect
117
178
  # => "Show me the source of the bug: beattle"
118
179
  # [PD] /Users/User/finance_calculator_app/pd_test.rb:4 "What line number am I?"
119
- def pd(object)
180
+ def pd(object, options=nil)
120
181
  header = PutsDebuggerer.header? ? "#{PutsDebuggerer.header}\n" : ''
121
- pd_expression = __caller_pd_expression__(object)
122
- line_number = __caller_line_number__(1)
182
+ announcer = PutsDebuggerer.announcer
123
183
  file = __caller_file__(1).sub(PutsDebuggerer.app_path.to_s, '')
124
- footer = PutsDebuggerer.footer? ? "\n#{PutsDebuggerer.footer}" : ''
125
- puts "#{header}[PD] #{file}:#{line_number}#{pd_expression} #{object.inspect}#{footer}"
184
+ line_number = __caller_line_number__(1)
185
+ pd_expression = __caller_pd_expression__(object)
186
+ print "#{header}#{announcer} #{file}:#{line_number}#{pd_expression} "
187
+ if options.nil? || options == {}
188
+ send(PutsDebuggerer.print_engine, object)
189
+ else
190
+ send(PutsDebuggerer.print_engine, object, options) rescue send(PutsDebuggerer.print_engine, object)
191
+ end
192
+ puts PutsDebuggerer.footer if PutsDebuggerer.footer?
126
193
  end
127
194
 
128
195
 
@@ -169,9 +236,13 @@ def __caller_source_line__(caller_depth=0)
169
236
  source_line_number = __caller_line_number__(caller_depth+1)
170
237
  source_file = __caller_file__(caller_depth+1)
171
238
  source_line = nil
172
- File.open(source_file, 'r') do |f|
173
- lines = f.readlines
174
- source_line = lines[source_line_number-1]
239
+ if source_file == '(irb)'
240
+ source_line = conf.io.line(source_line_number)
241
+ else
242
+ File.open(source_file, 'r') do |f|
243
+ lines = f.readlines
244
+ source_line = lines[source_line_number-1]
245
+ end
175
246
  end
176
247
  source_line
177
248
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puts_debuggerer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.5.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-mocks
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.5.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.5.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: awesome_print
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.7.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.7.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rdoc
29
57
  requirement: !ruby/object:Gem::Requirement