honeybadger 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/lib/honeybadger/cli/heroku.rb +1 -1
  4. data/lib/honeybadger/init/rails.rb +2 -2
  5. data/lib/honeybadger/notice.rb +3 -3
  6. data/lib/honeybadger/plugins/delayed_job/plugin.rb +11 -3
  7. data/lib/honeybadger/rack/request_hash.rb +12 -1
  8. data/lib/honeybadger/rack/user_feedback.rb +1 -5
  9. data/lib/honeybadger/rack/user_informer.rb +1 -1
  10. data/lib/honeybadger/util/request_payload.rb +8 -2
  11. data/lib/honeybadger/util/sanitizer.rb +18 -1
  12. data/lib/honeybadger/version.rb +1 -1
  13. metadata +2 -35
  14. data/vendor/inifile/lib/inifile.rb +0 -628
  15. data/vendor/thor/lib/thor.rb +0 -484
  16. data/vendor/thor/lib/thor/actions.rb +0 -319
  17. data/vendor/thor/lib/thor/actions/create_file.rb +0 -103
  18. data/vendor/thor/lib/thor/actions/create_link.rb +0 -59
  19. data/vendor/thor/lib/thor/actions/directory.rb +0 -118
  20. data/vendor/thor/lib/thor/actions/empty_directory.rb +0 -135
  21. data/vendor/thor/lib/thor/actions/file_manipulation.rb +0 -316
  22. data/vendor/thor/lib/thor/actions/inject_into_file.rb +0 -107
  23. data/vendor/thor/lib/thor/base.rb +0 -656
  24. data/vendor/thor/lib/thor/command.rb +0 -133
  25. data/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -77
  26. data/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -10
  27. data/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -98
  28. data/vendor/thor/lib/thor/error.rb +0 -32
  29. data/vendor/thor/lib/thor/group.rb +0 -281
  30. data/vendor/thor/lib/thor/invocation.rb +0 -178
  31. data/vendor/thor/lib/thor/line_editor.rb +0 -17
  32. data/vendor/thor/lib/thor/line_editor/basic.rb +0 -35
  33. data/vendor/thor/lib/thor/line_editor/readline.rb +0 -88
  34. data/vendor/thor/lib/thor/parser.rb +0 -4
  35. data/vendor/thor/lib/thor/parser/argument.rb +0 -73
  36. data/vendor/thor/lib/thor/parser/arguments.rb +0 -175
  37. data/vendor/thor/lib/thor/parser/option.rb +0 -125
  38. data/vendor/thor/lib/thor/parser/options.rb +0 -218
  39. data/vendor/thor/lib/thor/rake_compat.rb +0 -71
  40. data/vendor/thor/lib/thor/runner.rb +0 -322
  41. data/vendor/thor/lib/thor/shell.rb +0 -81
  42. data/vendor/thor/lib/thor/shell/basic.rb +0 -421
  43. data/vendor/thor/lib/thor/shell/color.rb +0 -149
  44. data/vendor/thor/lib/thor/shell/html.rb +0 -126
  45. data/vendor/thor/lib/thor/util.rb +0 -267
  46. data/vendor/thor/lib/thor/version.rb +0 -3
@@ -1,81 +0,0 @@
1
- require "rbconfig"
2
-
3
- class Thor
4
- module Base
5
- class << self
6
- attr_writer :shell
7
-
8
- # Returns the shell used in all Thor classes. If you are in a Unix platform
9
- # it will use a colored log, otherwise it will use a basic one without color.
10
- #
11
- def shell
12
- @shell ||= if ENV["THOR_SHELL"] && ENV["THOR_SHELL"].size > 0
13
- Thor::Shell.const_get(ENV["THOR_SHELL"])
14
- elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"]
15
- Thor::Shell::Basic
16
- else
17
- Thor::Shell::Color
18
- end
19
- end
20
- end
21
- end
22
-
23
- module Shell
24
- SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
25
- attr_writer :shell
26
-
27
- autoload :Basic, "thor/shell/basic"
28
- autoload :Color, "thor/shell/color"
29
- autoload :HTML, "thor/shell/html"
30
-
31
- # Add shell to initialize config values.
32
- #
33
- # ==== Configuration
34
- # shell<Object>:: An instance of the shell to be used.
35
- #
36
- # ==== Examples
37
- #
38
- # class MyScript < Thor
39
- # argument :first, :type => :numeric
40
- # end
41
- #
42
- # MyScript.new [1.0], { :foo => :bar }, :shell => Thor::Shell::Basic.new
43
- #
44
- def initialize(args = [], options = {}, config = {})
45
- super
46
- self.shell = config[:shell]
47
- shell.base ||= self if shell.respond_to?(:base)
48
- end
49
-
50
- # Holds the shell for the given Thor instance. If no shell is given,
51
- # it gets a default shell from Thor::Base.shell.
52
- def shell
53
- @shell ||= Thor::Base.shell.new
54
- end
55
-
56
- # Common methods that are delegated to the shell.
57
- SHELL_DELEGATED_METHODS.each do |method|
58
- module_eval <<-METHOD, __FILE__, __LINE__
59
- def #{method}(*args,&block)
60
- shell.#{method}(*args,&block)
61
- end
62
- METHOD
63
- end
64
-
65
- # Yields the given block with padding.
66
- def with_padding
67
- shell.padding += 1
68
- yield
69
- ensure
70
- shell.padding -= 1
71
- end
72
-
73
- protected
74
-
75
- # Allow shell to be shared between invocations.
76
- #
77
- def _shared_configuration #:nodoc:
78
- super.merge!(:shell => shell)
79
- end
80
- end
81
- end
@@ -1,421 +0,0 @@
1
- require "tempfile"
2
- require "io/console" if RUBY_VERSION > "1.9.2"
3
-
4
- class Thor
5
- module Shell
6
- class Basic # rubocop:disable ClassLength
7
- attr_accessor :base
8
- attr_reader :padding
9
-
10
- # Initialize base, mute and padding to nil.
11
- #
12
- def initialize #:nodoc:
13
- @base, @mute, @padding, @always_force = nil, false, 0, false
14
- end
15
-
16
- # Mute everything that's inside given block
17
- #
18
- def mute
19
- @mute = true
20
- yield
21
- ensure
22
- @mute = false
23
- end
24
-
25
- # Check if base is muted
26
- #
27
- def mute? # rubocop:disable TrivialAccessors
28
- @mute
29
- end
30
-
31
- # Sets the output padding, not allowing less than zero values.
32
- #
33
- def padding=(value)
34
- @padding = [0, value].max
35
- end
36
-
37
- # Asks something to the user and receives a response.
38
- #
39
- # If asked to limit the correct responses, you can pass in an
40
- # array of acceptable answers. If one of those is not supplied,
41
- # they will be shown a message stating that one of those answers
42
- # must be given and re-asked the question.
43
- #
44
- # If asking for sensitive information, the :echo option can be set
45
- # to false to mask user input from $stdin.
46
- #
47
- # If the required input is a path, then set the path option to
48
- # true. This will enable tab completion for file paths relative
49
- # to the current working directory on systems that support
50
- # Readline.
51
- #
52
- # ==== Example
53
- # ask("What is your name?")
54
- #
55
- # ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
56
- #
57
- # ask("What is your password?", :echo => false)
58
- #
59
- # ask("Where should the file be saved?", :path => true)
60
- #
61
- def ask(statement, *args)
62
- options = args.last.is_a?(Hash) ? args.pop : {}
63
- color = args.first
64
-
65
- if options[:limited_to]
66
- ask_filtered(statement, color, options)
67
- else
68
- ask_simply(statement, color, options)
69
- end
70
- end
71
-
72
- # Say (print) something to the user. If the sentence ends with a whitespace
73
- # or tab character, a new line is not appended (print + flush). Otherwise
74
- # are passed straight to puts (behavior got from Highline).
75
- #
76
- # ==== Example
77
- # say("I know you knew that.")
78
- #
79
- def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
80
- buffer = prepare_message(message, *color)
81
- buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
82
-
83
- stdout.print(buffer)
84
- stdout.flush
85
- end
86
-
87
- # Say a status with the given color and appends the message. Since this
88
- # method is used frequently by actions, it allows nil or false to be given
89
- # in log_status, avoiding the message from being shown. If a Symbol is
90
- # given in log_status, it's used as the color.
91
- #
92
- def say_status(status, message, log_status = true)
93
- return if quiet? || log_status == false
94
- spaces = " " * (padding + 1)
95
- color = log_status.is_a?(Symbol) ? log_status : :green
96
-
97
- status = status.to_s.rjust(12)
98
- status = set_color status, color, true if color
99
-
100
- buffer = "#{status}#{spaces}#{message}"
101
- buffer << "\n" unless buffer.end_with?("\n")
102
-
103
- stdout.print(buffer)
104
- stdout.flush
105
- end
106
-
107
- # Make a question the to user and returns true if the user replies "y" or
108
- # "yes".
109
- #
110
- def yes?(statement, color = nil)
111
- !!(ask(statement, color, :add_to_history => false) =~ is?(:yes))
112
- end
113
-
114
- # Make a question the to user and returns true if the user replies "n" or
115
- # "no".
116
- #
117
- def no?(statement, color = nil)
118
- !!(ask(statement, color, :add_to_history => false) =~ is?(:no))
119
- end
120
-
121
- # Prints values in columns
122
- #
123
- # ==== Parameters
124
- # Array[String, String, ...]
125
- #
126
- def print_in_columns(array)
127
- return if array.empty?
128
- colwidth = (array.map { |el| el.to_s.size }.max || 0) + 2
129
- array.each_with_index do |value, index|
130
- # Don't output trailing spaces when printing the last column
131
- if ((((index + 1) % (terminal_width / colwidth))).zero? && !index.zero?) || index + 1 == array.length
132
- stdout.puts value
133
- else
134
- stdout.printf("%-#{colwidth}s", value)
135
- end
136
- end
137
- end
138
-
139
- # Prints a table.
140
- #
141
- # ==== Parameters
142
- # Array[Array[String, String, ...]]
143
- #
144
- # ==== Options
145
- # indent<Integer>:: Indent the first column by indent value.
146
- # colwidth<Integer>:: Force the first column to colwidth spaces wide.
147
- #
148
- def print_table(array, options = {}) # rubocop:disable MethodLength
149
- return if array.empty?
150
-
151
- formats, indent, colwidth = [], options[:indent].to_i, options[:colwidth]
152
- options[:truncate] = terminal_width if options[:truncate] == true
153
-
154
- formats << "%-#{colwidth + 2}s" if colwidth
155
- start = colwidth ? 1 : 0
156
-
157
- colcount = array.max { |a, b| a.size <=> b.size }.size
158
-
159
- maximas = []
160
-
161
- start.upto(colcount - 1) do |index|
162
- maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max
163
- maximas << maxima
164
- if index == colcount - 1
165
- # Don't output 2 trailing spaces when printing the last column
166
- formats << "%-s"
167
- else
168
- formats << "%-#{maxima + 2}s"
169
- end
170
- end
171
-
172
- formats[0] = formats[0].insert(0, " " * indent)
173
- formats << "%s"
174
-
175
- array.each do |row|
176
- sentence = ""
177
-
178
- row.each_with_index do |column, index|
179
- maxima = maximas[index]
180
-
181
- if column.is_a?(Numeric)
182
- if index == row.size - 1
183
- # Don't output 2 trailing spaces when printing the last column
184
- f = "%#{maxima}s"
185
- else
186
- f = "%#{maxima}s "
187
- end
188
- else
189
- f = formats[index]
190
- end
191
- sentence << f % column.to_s
192
- end
193
-
194
- sentence = truncate(sentence, options[:truncate]) if options[:truncate]
195
- stdout.puts sentence
196
- end
197
- end
198
-
199
- # Prints a long string, word-wrapping the text to the current width of the
200
- # terminal display. Ideal for printing heredocs.
201
- #
202
- # ==== Parameters
203
- # String
204
- #
205
- # ==== Options
206
- # indent<Integer>:: Indent each line of the printed paragraph by indent value.
207
- #
208
- def print_wrapped(message, options = {})
209
- indent = options[:indent] || 0
210
- width = terminal_width - indent
211
- paras = message.split("\n\n")
212
-
213
- paras.map! do |unwrapped|
214
- unwrapped.strip.gsub(/\n/, " ").squeeze(" ").gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") }
215
- end
216
-
217
- paras.each do |para|
218
- para.split("\n").each do |line|
219
- stdout.puts line.insert(0, " " * indent)
220
- end
221
- stdout.puts unless para == paras.last
222
- end
223
- end
224
-
225
- # Deals with file collision and returns true if the file should be
226
- # overwritten and false otherwise. If a block is given, it uses the block
227
- # response as the content for the diff.
228
- #
229
- # ==== Parameters
230
- # destination<String>:: the destination file to solve conflicts
231
- # block<Proc>:: an optional block that returns the value to be used in diff
232
- #
233
- def file_collision(destination) # rubocop:disable MethodLength
234
- return true if @always_force
235
- options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
236
-
237
- loop do
238
- answer = ask(
239
- %[Overwrite #{destination}? (enter "h" for help) #{options}],
240
- :add_to_history => false
241
- )
242
-
243
- case answer
244
- when is?(:yes), is?(:force), ""
245
- return true
246
- when is?(:no), is?(:skip)
247
- return false
248
- when is?(:always)
249
- return @always_force = true
250
- when is?(:quit)
251
- say "Aborting..."
252
- fail SystemExit
253
- when is?(:diff)
254
- show_diff(destination, yield) if block_given?
255
- say "Retrying..."
256
- else
257
- say file_collision_help
258
- end
259
- end
260
- end
261
-
262
- # This code was copied from Rake, available under MIT-LICENSE
263
- # Copyright (c) 2003, 2004 Jim Weirich
264
- def terminal_width
265
- if ENV["THOR_COLUMNS"]
266
- result = ENV["THOR_COLUMNS"].to_i
267
- else
268
- result = unix? ? dynamic_width : 80
269
- end
270
- result < 10 ? 80 : result
271
- rescue
272
- 80
273
- end
274
-
275
- # Called if something goes wrong during the execution. This is used by Thor
276
- # internally and should not be used inside your scripts. If something went
277
- # wrong, you can always raise an exception. If you raise a Thor::Error, it
278
- # will be rescued and wrapped in the method below.
279
- #
280
- def error(statement)
281
- stderr.puts statement
282
- end
283
-
284
- # Apply color to the given string with optional bold. Disabled in the
285
- # Thor::Shell::Basic class.
286
- #
287
- def set_color(string, *args) #:nodoc:
288
- string
289
- end
290
-
291
- protected
292
-
293
- def prepare_message(message, *color)
294
- spaces = " " * padding
295
- spaces + set_color(message.to_s, *color)
296
- end
297
-
298
- def can_display_colors?
299
- false
300
- end
301
-
302
- def lookup_color(color)
303
- return color unless color.is_a?(Symbol)
304
- self.class.const_get(color.to_s.upcase)
305
- end
306
-
307
- def stdout
308
- $stdout
309
- end
310
-
311
- def stderr
312
- $stderr
313
- end
314
-
315
- def is?(value) #:nodoc:
316
- value = value.to_s
317
-
318
- if value.size == 1
319
- /\A#{value}\z/i
320
- else
321
- /\A(#{value}|#{value[0, 1]})\z/i
322
- end
323
- end
324
-
325
- def file_collision_help #:nodoc:
326
- <<-HELP
327
- Y - yes, overwrite
328
- n - no, do not overwrite
329
- a - all, overwrite this and all others
330
- q - quit, abort
331
- d - diff, show the differences between the old and the new
332
- h - help, show this help
333
- HELP
334
- end
335
-
336
- def show_diff(destination, content) #:nodoc:
337
- diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"
338
-
339
- Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
340
- temp.write content
341
- temp.rewind
342
- system %(#{diff_cmd} "#{destination}" "#{temp.path}")
343
- end
344
- end
345
-
346
- def quiet? #:nodoc:
347
- mute? || (base && base.options[:quiet])
348
- end
349
-
350
- # Calculate the dynamic width of the terminal
351
- def dynamic_width
352
- @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
353
- end
354
-
355
- def dynamic_width_stty
356
- %x(stty size 2>/dev/null).split[1].to_i
357
- end
358
-
359
- def dynamic_width_tput
360
- %x(tput cols 2>/dev/null).to_i
361
- end
362
-
363
- def unix?
364
- RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
365
- end
366
-
367
- def truncate(string, width)
368
- as_unicode do
369
- chars = string.chars.to_a
370
- if chars.length <= width
371
- chars.join
372
- else
373
- ( chars[0, width - 3].join) + "..."
374
- end
375
- end
376
- end
377
-
378
- if "".respond_to?(:encode)
379
- def as_unicode
380
- yield
381
- end
382
- else
383
- def as_unicode
384
- old, $KCODE = $KCODE, "U"
385
- yield
386
- ensure
387
- $KCODE = old
388
- end
389
- end
390
-
391
- def ask_simply(statement, color, options)
392
- default = options[:default]
393
- message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
394
- message = prepare_message(message, color)
395
- result = Thor::LineEditor.readline(message, options)
396
-
397
- return unless result
398
-
399
- result.strip!
400
-
401
- if default && result == ""
402
- default
403
- else
404
- result
405
- end
406
- end
407
-
408
- def ask_filtered(statement, color, options)
409
- answer_set = options[:limited_to]
410
- correct_answer = nil
411
- until correct_answer
412
- answers = answer_set.join(", ")
413
- answer = ask_simply("#{statement} [#{answers}]", color, options)
414
- correct_answer = answer_set.include?(answer) ? answer : nil
415
- say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
416
- end
417
- correct_answer
418
- end
419
- end
420
- end
421
- end