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,118 +0,0 @@
1
- require "thor/actions/empty_directory"
2
-
3
- class Thor
4
- module Actions
5
- # Copies recursively the files from source directory to root directory.
6
- # If any of the files finishes with .tt, it's considered to be a template
7
- # and is placed in the destination without the extension .tt. If any
8
- # empty directory is found, it's copied and all .empty_directory files are
9
- # ignored. If any file name is wrapped within % signs, the text within
10
- # the % signs will be executed as a method and replaced with the returned
11
- # value. Let's suppose a doc directory with the following files:
12
- #
13
- # doc/
14
- # components/.empty_directory
15
- # README
16
- # rdoc.rb.tt
17
- # %app_name%.rb
18
- #
19
- # When invoked as:
20
- #
21
- # directory "doc"
22
- #
23
- # It will create a doc directory in the destination with the following
24
- # files (assuming that the `app_name` method returns the value "blog"):
25
- #
26
- # doc/
27
- # components/
28
- # README
29
- # rdoc.rb
30
- # blog.rb
31
- #
32
- # <b>Encoded path note:</b> Since Thor internals use Object#respond_to? to check if it can
33
- # expand %something%, this `something` should be a public method in the class calling
34
- # #directory. If a method is private, Thor stack raises PrivateMethodEncodedError.
35
- #
36
- # ==== Parameters
37
- # source<String>:: the relative path to the source root.
38
- # destination<String>:: the relative path to the destination root.
39
- # config<Hash>:: give :verbose => false to not log the status.
40
- # If :recursive => false, does not look for paths recursively.
41
- # If :mode => :preserve, preserve the file mode from the source.
42
- # If :exclude_pattern => /regexp/, prevents copying files that match that regexp.
43
- #
44
- # ==== Examples
45
- #
46
- # directory "doc"
47
- # directory "doc", "docs", :recursive => false
48
- #
49
- def directory(source, *args, &block)
50
- config = args.last.is_a?(Hash) ? args.pop : {}
51
- destination = args.first || source
52
- action Directory.new(self, source, destination || source, config, &block)
53
- end
54
-
55
- class Directory < EmptyDirectory #:nodoc:
56
- attr_reader :source
57
-
58
- def initialize(base, source, destination = nil, config = {}, &block)
59
- @source = File.expand_path(base.find_in_source_paths(source.to_s))
60
- @block = block
61
- super(base, destination, {:recursive => true}.merge(config))
62
- end
63
-
64
- def invoke!
65
- base.empty_directory given_destination, config
66
- execute!
67
- end
68
-
69
- def revoke!
70
- execute!
71
- end
72
-
73
- protected
74
-
75
- def execute! # rubocop:disable MethodLength
76
- lookup = Util.escape_globs(source)
77
- lookup = config[:recursive] ? File.join(lookup, "**") : lookup
78
- lookup = file_level_lookup(lookup)
79
-
80
- files(lookup).sort.each do |file_source|
81
- next if File.directory?(file_source)
82
- next if config[:exclude_pattern] && file_source.match(config[:exclude_pattern])
83
- file_destination = File.join(given_destination, file_source.gsub(source, "."))
84
- file_destination.gsub!("/./", "/")
85
-
86
- case file_source
87
- when /\.empty_directory$/
88
- dirname = File.dirname(file_destination).gsub(/\/\.$/, "")
89
- next if dirname == given_destination
90
- base.empty_directory(dirname, config)
91
- when /#{TEMPLATE_EXTNAME}$/
92
- base.template(file_source, file_destination[0..-4], config, &@block)
93
- else
94
- base.copy_file(file_source, file_destination, config, &@block)
95
- end
96
- end
97
- end
98
-
99
- if RUBY_VERSION < "2.0"
100
- def file_level_lookup(previous_lookup)
101
- File.join(previous_lookup, "{*,.[a-z]*}")
102
- end
103
-
104
- def files(lookup)
105
- Dir[lookup]
106
- end
107
- else
108
- def file_level_lookup(previous_lookup)
109
- File.join(previous_lookup, "*")
110
- end
111
-
112
- def files(lookup)
113
- Dir.glob(lookup, File::FNM_DOTMATCH)
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,135 +0,0 @@
1
- class Thor
2
- module Actions
3
- # Creates an empty directory.
4
- #
5
- # ==== Parameters
6
- # destination<String>:: the relative path to the destination root.
7
- # config<Hash>:: give :verbose => false to not log the status.
8
- #
9
- # ==== Examples
10
- #
11
- # empty_directory "doc"
12
- #
13
- def empty_directory(destination, config = {})
14
- action EmptyDirectory.new(self, destination, config)
15
- end
16
-
17
- # Class which holds create directory logic. This is the base class for
18
- # other actions like create_file and directory.
19
- #
20
- # This implementation is based in Templater actions, created by Jonas Nicklas
21
- # and Michael S. Klishin under MIT LICENSE.
22
- #
23
- class EmptyDirectory #:nodoc:
24
- attr_reader :base, :destination, :given_destination, :relative_destination, :config
25
-
26
- # Initializes given the source and destination.
27
- #
28
- # ==== Parameters
29
- # base<Thor::Base>:: A Thor::Base instance
30
- # source<String>:: Relative path to the source of this file
31
- # destination<String>:: Relative path to the destination of this file
32
- # config<Hash>:: give :verbose => false to not log the status.
33
- #
34
- def initialize(base, destination, config = {})
35
- @base, @config = base, {:verbose => true}.merge(config)
36
- self.destination = destination
37
- end
38
-
39
- # Checks if the destination file already exists.
40
- #
41
- # ==== Returns
42
- # Boolean:: true if the file exists, false otherwise.
43
- #
44
- def exists?
45
- ::File.exist?(destination)
46
- end
47
-
48
- def invoke!
49
- invoke_with_conflict_check do
50
- ::FileUtils.mkdir_p(destination)
51
- end
52
- end
53
-
54
- def revoke!
55
- say_status :remove, :red
56
- ::FileUtils.rm_rf(destination) if !pretend? && exists?
57
- given_destination
58
- end
59
-
60
- protected
61
-
62
- # Shortcut for pretend.
63
- #
64
- def pretend?
65
- base.options[:pretend]
66
- end
67
-
68
- # Sets the absolute destination value from a relative destination value.
69
- # It also stores the given and relative destination. Let's suppose our
70
- # script is being executed on "dest", it sets the destination root to
71
- # "dest". The destination, given_destination and relative_destination
72
- # are related in the following way:
73
- #
74
- # inside "bar" do
75
- # empty_directory "baz"
76
- # end
77
- #
78
- # destination #=> dest/bar/baz
79
- # relative_destination #=> bar/baz
80
- # given_destination #=> baz
81
- #
82
- def destination=(destination)
83
- if destination
84
- @given_destination = convert_encoded_instructions(destination.to_s)
85
- @destination = ::File.expand_path(@given_destination, base.destination_root)
86
- @relative_destination = base.relative_to_original_destination_root(@destination)
87
- end
88
- end
89
-
90
- # Filenames in the encoded form are converted. If you have a file:
91
- #
92
- # %file_name%.rb
93
- #
94
- # It calls #file_name from the base and replaces %-string with the
95
- # return value (should be String) of #file_name:
96
- #
97
- # user.rb
98
- #
99
- # The method referenced can be either public or private.
100
- #
101
- def convert_encoded_instructions(filename)
102
- filename.gsub(/%(.*?)%/) do |initial_string|
103
- method = $1.strip
104
- base.respond_to?(method, true) ? base.send(method) : initial_string
105
- end
106
- end
107
-
108
- # Receives a hash of options and just execute the block if some
109
- # conditions are met.
110
- #
111
- def invoke_with_conflict_check(&block)
112
- if exists?
113
- on_conflict_behavior(&block)
114
- else
115
- say_status :create, :green
116
- block.call unless pretend?
117
- end
118
-
119
- destination
120
- end
121
-
122
- # What to do when the destination file already exists.
123
- #
124
- def on_conflict_behavior(&block)
125
- say_status :exist, :blue
126
- end
127
-
128
- # Shortcut to say_status shell method.
129
- #
130
- def say_status(status, color)
131
- base.shell.say_status status, relative_destination, color if config[:verbose]
132
- end
133
- end
134
- end
135
- end
@@ -1,316 +0,0 @@
1
- require "erb"
2
- require "open-uri"
3
-
4
- class Thor
5
- module Actions
6
- # Copies the file from the relative source to the relative destination. If
7
- # the destination is not given it's assumed to be equal to the source.
8
- #
9
- # ==== Parameters
10
- # source<String>:: the relative path to the source root.
11
- # destination<String>:: the relative path to the destination root.
12
- # config<Hash>:: give :verbose => false to not log the status, and
13
- # :mode => :preserve, to preserve the file mode from the source.
14
-
15
- #
16
- # ==== Examples
17
- #
18
- # copy_file "README", "doc/README"
19
- #
20
- # copy_file "doc/README"
21
- #
22
- def copy_file(source, *args, &block)
23
- config = args.last.is_a?(Hash) ? args.pop : {}
24
- destination = args.first || source
25
- source = File.expand_path(find_in_source_paths(source.to_s))
26
-
27
- create_file destination, nil, config do
28
- content = File.binread(source)
29
- content = block.call(content) if block
30
- content
31
- end
32
- if config[:mode] == :preserve
33
- mode = File.stat(source).mode
34
- chmod(destination, mode, config)
35
- end
36
- end
37
-
38
- # Links the file from the relative source to the relative destination. If
39
- # the destination is not given it's assumed to be equal to the source.
40
- #
41
- # ==== Parameters
42
- # source<String>:: the relative path to the source root.
43
- # destination<String>:: the relative path to the destination root.
44
- # config<Hash>:: give :verbose => false to not log the status.
45
- #
46
- # ==== Examples
47
- #
48
- # link_file "README", "doc/README"
49
- #
50
- # link_file "doc/README"
51
- #
52
- def link_file(source, *args, &block)
53
- config = args.last.is_a?(Hash) ? args.pop : {}
54
- destination = args.first || source
55
- source = File.expand_path(find_in_source_paths(source.to_s))
56
-
57
- create_link destination, source, config
58
- end
59
-
60
- # Gets the content at the given address and places it at the given relative
61
- # destination. If a block is given instead of destination, the content of
62
- # the url is yielded and used as location.
63
- #
64
- # ==== Parameters
65
- # source<String>:: the address of the given content.
66
- # destination<String>:: the relative path to the destination root.
67
- # config<Hash>:: give :verbose => false to not log the status.
68
- #
69
- # ==== Examples
70
- #
71
- # get "http://gist.github.com/103208", "doc/README"
72
- #
73
- # get "http://gist.github.com/103208" do |content|
74
- # content.split("\n").first
75
- # end
76
- #
77
- def get(source, *args, &block)
78
- config = args.last.is_a?(Hash) ? args.pop : {}
79
- destination = args.first
80
-
81
- source = File.expand_path(find_in_source_paths(source.to_s)) unless source =~ %r{^https?\://}
82
- render = open(source) { |input| input.binmode.read }
83
-
84
- destination ||= if block_given?
85
- block.arity == 1 ? block.call(render) : block.call
86
- else
87
- File.basename(source)
88
- end
89
-
90
- create_file destination, render, config
91
- end
92
-
93
- # Gets an ERB template at the relative source, executes it and makes a copy
94
- # at the relative destination. If the destination is not given it's assumed
95
- # to be equal to the source removing .tt from the filename.
96
- #
97
- # ==== Parameters
98
- # source<String>:: the relative path to the source root.
99
- # destination<String>:: the relative path to the destination root.
100
- # config<Hash>:: give :verbose => false to not log the status.
101
- #
102
- # ==== Examples
103
- #
104
- # template "README", "doc/README"
105
- #
106
- # template "doc/README"
107
- #
108
- def template(source, *args, &block)
109
- config = args.last.is_a?(Hash) ? args.pop : {}
110
- destination = args.first || source.sub(/#{TEMPLATE_EXTNAME}$/, "")
111
-
112
- source = File.expand_path(find_in_source_paths(source.to_s))
113
- context = instance_eval("binding")
114
-
115
- create_file destination, nil, config do
116
- content = ERB.new(::File.binread(source), nil, "-", "@output_buffer").result(context)
117
- content = block.call(content) if block
118
- content
119
- end
120
- end
121
-
122
- # Changes the mode of the given file or directory.
123
- #
124
- # ==== Parameters
125
- # mode<Integer>:: the file mode
126
- # path<String>:: the name of the file to change mode
127
- # config<Hash>:: give :verbose => false to not log the status.
128
- #
129
- # ==== Example
130
- #
131
- # chmod "script/server", 0755
132
- #
133
- def chmod(path, mode, config = {})
134
- return unless behavior == :invoke
135
- path = File.expand_path(path, destination_root)
136
- say_status :chmod, relative_to_original_destination_root(path), config.fetch(:verbose, true)
137
- FileUtils.chmod_R(mode, path) unless options[:pretend]
138
- end
139
-
140
- # Prepend text to a file. Since it depends on insert_into_file, it's reversible.
141
- #
142
- # ==== Parameters
143
- # path<String>:: path of the file to be changed
144
- # data<String>:: the data to prepend to the file, can be also given as a block.
145
- # config<Hash>:: give :verbose => false to not log the status.
146
- #
147
- # ==== Example
148
- #
149
- # prepend_to_file 'config/environments/test.rb', 'config.gem "rspec"'
150
- #
151
- # prepend_to_file 'config/environments/test.rb' do
152
- # 'config.gem "rspec"'
153
- # end
154
- #
155
- def prepend_to_file(path, *args, &block)
156
- config = args.last.is_a?(Hash) ? args.pop : {}
157
- config.merge!(:after => /\A/)
158
- insert_into_file(path, *(args << config), &block)
159
- end
160
- alias_method :prepend_file, :prepend_to_file
161
-
162
- # Append text to a file. Since it depends on insert_into_file, it's reversible.
163
- #
164
- # ==== Parameters
165
- # path<String>:: path of the file to be changed
166
- # data<String>:: the data to append to the file, can be also given as a block.
167
- # config<Hash>:: give :verbose => false to not log the status.
168
- #
169
- # ==== Example
170
- #
171
- # append_to_file 'config/environments/test.rb', 'config.gem "rspec"'
172
- #
173
- # append_to_file 'config/environments/test.rb' do
174
- # 'config.gem "rspec"'
175
- # end
176
- #
177
- def append_to_file(path, *args, &block)
178
- config = args.last.is_a?(Hash) ? args.pop : {}
179
- config.merge!(:before => /\z/)
180
- insert_into_file(path, *(args << config), &block)
181
- end
182
- alias_method :append_file, :append_to_file
183
-
184
- # Injects text right after the class definition. Since it depends on
185
- # insert_into_file, it's reversible.
186
- #
187
- # ==== Parameters
188
- # path<String>:: path of the file to be changed
189
- # klass<String|Class>:: the class to be manipulated
190
- # data<String>:: the data to append to the class, can be also given as a block.
191
- # config<Hash>:: give :verbose => false to not log the status.
192
- #
193
- # ==== Examples
194
- #
195
- # inject_into_class "app/controllers/application_controller.rb", ApplicationController, " filter_parameter :password\n"
196
- #
197
- # inject_into_class "app/controllers/application_controller.rb", ApplicationController do
198
- # " filter_parameter :password\n"
199
- # end
200
- #
201
- def inject_into_class(path, klass, *args, &block)
202
- config = args.last.is_a?(Hash) ? args.pop : {}
203
- config.merge!(:after => /class #{klass}\n|class #{klass} .*\n/)
204
- insert_into_file(path, *(args << config), &block)
205
- end
206
-
207
- # Run a regular expression replacement on a file.
208
- #
209
- # ==== Parameters
210
- # path<String>:: path of the file to be changed
211
- # flag<Regexp|String>:: the regexp or string to be replaced
212
- # replacement<String>:: the replacement, can be also given as a block
213
- # config<Hash>:: give :verbose => false to not log the status.
214
- #
215
- # ==== Example
216
- #
217
- # gsub_file 'app/controllers/application_controller.rb', /#\s*(filter_parameter_logging :password)/, '\1'
218
- #
219
- # gsub_file 'README', /rake/, :green do |match|
220
- # match << " no more. Use thor!"
221
- # end
222
- #
223
- def gsub_file(path, flag, *args, &block)
224
- return unless behavior == :invoke
225
- config = args.last.is_a?(Hash) ? args.pop : {}
226
-
227
- path = File.expand_path(path, destination_root)
228
- say_status :gsub, relative_to_original_destination_root(path), config.fetch(:verbose, true)
229
-
230
- unless options[:pretend]
231
- content = File.binread(path)
232
- content.gsub!(flag, *args, &block)
233
- File.open(path, "wb") { |file| file.write(content) }
234
- end
235
- end
236
-
237
- # Uncomment all lines matching a given regex. It will leave the space
238
- # which existed before the comment hash in tact but will remove any spacing
239
- # between the comment hash and the beginning of the line.
240
- #
241
- # ==== Parameters
242
- # path<String>:: path of the file to be changed
243
- # flag<Regexp|String>:: the regexp or string used to decide which lines to uncomment
244
- # config<Hash>:: give :verbose => false to not log the status.
245
- #
246
- # ==== Example
247
- #
248
- # uncomment_lines 'config/initializers/session_store.rb', /active_record/
249
- #
250
- def uncomment_lines(path, flag, *args)
251
- flag = flag.respond_to?(:source) ? flag.source : flag
252
-
253
- gsub_file(path, /^(\s*)#[[:blank:]]*(.*#{flag})/, '\1\2', *args)
254
- end
255
-
256
- # Comment all lines matching a given regex. It will leave the space
257
- # which existed before the beginning of the line in tact and will insert
258
- # a single space after the comment hash.
259
- #
260
- # ==== Parameters
261
- # path<String>:: path of the file to be changed
262
- # flag<Regexp|String>:: the regexp or string used to decide which lines to comment
263
- # config<Hash>:: give :verbose => false to not log the status.
264
- #
265
- # ==== Example
266
- #
267
- # comment_lines 'config/initializers/session_store.rb', /cookie_store/
268
- #
269
- def comment_lines(path, flag, *args)
270
- flag = flag.respond_to?(:source) ? flag.source : flag
271
-
272
- gsub_file(path, /^(\s*)([^#|\n]*#{flag})/, '\1# \2', *args)
273
- end
274
-
275
- # Removes a file at the given location.
276
- #
277
- # ==== Parameters
278
- # path<String>:: path of the file to be changed
279
- # config<Hash>:: give :verbose => false to not log the status.
280
- #
281
- # ==== Example
282
- #
283
- # remove_file 'README'
284
- # remove_file 'app/controllers/application_controller.rb'
285
- #
286
- def remove_file(path, config = {})
287
- return unless behavior == :invoke
288
- path = File.expand_path(path, destination_root)
289
-
290
- say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
291
- ::FileUtils.rm_rf(path) if !options[:pretend] && File.exist?(path)
292
- end
293
- alias_method :remove_dir, :remove_file
294
-
295
- attr_accessor :output_buffer
296
- private :output_buffer, :output_buffer=
297
-
298
- private
299
-
300
- def concat(string)
301
- @output_buffer.concat(string)
302
- end
303
-
304
- def capture(*args, &block)
305
- with_output_buffer { block.call(*args) }
306
- end
307
-
308
- def with_output_buffer(buf = "") #:nodoc:
309
- self.output_buffer, old_buffer = buf, output_buffer
310
- yield
311
- output_buffer
312
- ensure
313
- self.output_buffer = old_buffer
314
- end
315
- end
316
- end