warning 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 70b1655bff238b444c9373002b6d1010812a9a71
4
+ data.tar.gz: 2276292182d974e7fdb71802295ed1dc45771f82
5
+ SHA512:
6
+ metadata.gz: 6a512057f73e7f275e806a9e9442919e128c0edcf312e730b4787f9b9630c8f088bdfce0af7a7b7f9d6e3811aa94ae95211a4b13d205353e1853c20f2f5a0a4d
7
+ data.tar.gz: 16e8d3da29e75c5c6f1dd70fede11564006ad30201923d8750aa0d383e77820fa4355c6fd6f6b44600bd276d9afd38706581c123c34898bbbf2534bb64cab5b3
@@ -0,0 +1,3 @@
1
+ === 0.9.0 (2016-08-09)
2
+
3
+ * Initial Public Release
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2016 Jeremy Evans
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,68 @@
1
+ = ruby-warning
2
+
3
+ ruby-warning adds custom processing for warnings, including the
4
+ ability to ignore specific warning messages, ignore warnings
5
+ in specific files/directories, and add custom handling for all
6
+ warnings in specific files/directories.
7
+
8
+ ruby-warning requires ruby 2.4+, as previous versions of ruby do
9
+ not support custom processing of warnings.
10
+
11
+ = Installation
12
+
13
+ gem install warning
14
+
15
+ = Source Code
16
+
17
+ Source code is available on GitHub at https://github.com/jeremyevans/ruby-warning
18
+
19
+ = Usage
20
+
21
+ By default, requiring the library does not make changes to how ruby processes
22
+ warnings, it just adds methods that allow you to customize the processing.
23
+
24
+ <tt>Warning.ignore</tt> takes a regexp and optionally a path prefix, and ignores
25
+ any warning that matches the regular expression if it starts with the path
26
+ prefix.
27
+
28
+ <tt>Warning.process</tt> takes an optional path prefix and a block, and if the
29
+ warning string starts with the path prefix, it calls the block with the warning
30
+ string instead of performing the default behavior. You can call
31
+ <tt>Warning.process</tt> multiple times and it will operate intelligently,
32
+ choosing the longest path prefix that the string starts with.
33
+
34
+ <tt>Warning.clear</tt> just clears the current ignored warnings and warning
35
+ processors.
36
+
37
+ By using path prefixes, it's fairly easy for a gem to set that specific warnings
38
+ should be ignored inside the gem's directory.
39
+
40
+ Note that path prefixes will not correctly handle warnings raised by
41
+ <tt>Kernel#warn</tt>, unless the warning message given to <tt>Kernel#warn</tt>
42
+ starts with the filename where the warning is used.
43
+
44
+ = Examples
45
+
46
+ # Ignore all uninitialized instance variable warnings
47
+ Warning.ignore(/instance variable @\w+ not initialized/)
48
+
49
+ # Ignore all uninitialized instance variable warnings in current file
50
+ Warning.ignore(/instance variable @\w+ not initialized/, __FILE__)
51
+
52
+ # Write warning to LOGGER at level warning
53
+ Warning.process do |warning|
54
+ LOGGER.warning(warning)
55
+ end
56
+
57
+ # Write warnings in the current file to LOGGER at level error
58
+ Warning.process(__FILE__) do |warning|
59
+ LOGGER.error(warning)
60
+ end
61
+
62
+ = License
63
+
64
+ MIT
65
+
66
+ = Author
67
+
68
+ Jeremy Evans <code@jeremyevans.net>
@@ -0,0 +1,39 @@
1
+ require "rake"
2
+ require "rake/clean"
3
+ require 'rake/testtask'
4
+ require "rdoc/task"
5
+
6
+ CLEAN.include ["warning-*.gem", "rdoc"]
7
+
8
+ desc "Build warning gem"
9
+ task :package=>[:clean] do |p|
10
+ sh %{#{FileUtils::RUBY} -S gem build warning.gemspec}
11
+ end
12
+
13
+ ### Specs
14
+
15
+ desc "Run test"
16
+ Rake::TestTask.new do |t|
17
+ t.libs.push "lib"
18
+ t.test_files = FileList['test/test_*.rb']
19
+ t.verbose = true
20
+ end
21
+
22
+ task :default=>:test
23
+
24
+ ### RDoc
25
+
26
+ RDOC_OPTS = ['--main', 'README.rdoc', "--quiet", "--line-numbers", "--inline-source", '--title', 'ruby-warning: Add custom processing for warnings']
27
+
28
+ begin
29
+ gem 'hanna-nouveau'
30
+ RDOC_OPTS.concat(['-f', 'hanna'])
31
+ rescue Gem::LoadError
32
+ end
33
+
34
+
35
+ RDoc::Task.new do |rdoc|
36
+ rdoc.rdoc_dir = "rdoc"
37
+ rdoc.options += RDOC_OPTS
38
+ rdoc.rdoc_files.add %w"README.rdoc CHANGELOG MIT-LICENSE lib/**/*.rb"
39
+ end
@@ -0,0 +1,75 @@
1
+ require 'monitor'
2
+
3
+ module Warning
4
+ module Processor
5
+ # Clear all current ignored warnings and warning processors.
6
+ def clear
7
+ synchronize do
8
+ @ignore.clear
9
+ @process.clear
10
+ end
11
+ end
12
+
13
+ # Ignore any warning messages matching the given regexp, if they
14
+ # start with the given path. Examples:
15
+ #
16
+ # # Ignore all uninitialized instance variable warnings
17
+ # Warning.ignore(/instance variable @\w+ not initialized/)
18
+ #
19
+ # # Ignore all uninitialized instance variable warnings in current file
20
+ # Warning.ignore(/instance variable @\w+ not initialized/, __FILE__)
21
+ def ignore(regexp, path='')
22
+ synchronize do
23
+ @ignore << [path, regexp]
24
+ end
25
+ nil
26
+ end
27
+
28
+ # Handle all warnings starting with the given path, instead of
29
+ # the default behavior of printing them to $stderr. Examples:
30
+ #
31
+ # # Write warning to LOGGER at level warning
32
+ # Warning.process do |warning|
33
+ # LOGGER.warning(warning)
34
+ # end
35
+ #
36
+ # # Write warnings in the current file to LOGGER at level error level
37
+ # Warning.process(__FILE__) do |warning|
38
+ # LOGGER.error(warning)
39
+ # end
40
+ def process(path='', &block)
41
+ synchronize do
42
+ @process << [path, block]
43
+ @process.sort_by!(&:first)
44
+ @process.reverse!
45
+ end
46
+ nil
47
+ end
48
+
49
+ # Handle ignored warnings and warning processors. If the warning is
50
+ # not ignored and there is no warning processor setup for the warning
51
+ # string, then use the default behavior of writing to $stderr.
52
+ def warn(str)
53
+ synchronize{@ignore.dup}.each do |path, regexp|
54
+ if str.start_with?(path) && str =~ regexp
55
+ return
56
+ end
57
+ end
58
+
59
+ synchronize{@process.dup}.each do |path, block|
60
+ if str.start_with?(path)
61
+ block.call(str)
62
+ return
63
+ end
64
+ end
65
+
66
+ super
67
+ end
68
+ end
69
+
70
+ @ignore = []
71
+ @process = []
72
+
73
+ extend MonitorMixin
74
+ extend Processor
75
+ end
@@ -0,0 +1,156 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+
4
+ class WarningTest < Minitest::Test
5
+ module EnvUtil
6
+ def verbose_warning
7
+ class << (stderr = "")
8
+ alias write <<
9
+ end
10
+ stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
11
+ yield stderr
12
+ return $stderr
13
+ ensure
14
+ stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
15
+ end
16
+ module_function :verbose_warning
17
+
18
+ def with_default_internal(enc)
19
+ verbose, $VERBOSE = $VERBOSE, nil
20
+ origenc, Encoding.default_internal = Encoding.default_internal, enc
21
+ $VERBOSE = verbose
22
+ yield
23
+ ensure
24
+ verbose, $VERBOSE = $VERBOSE, nil
25
+ Encoding.default_internal = origenc
26
+ $VERBOSE = verbose
27
+ end
28
+ module_function :with_default_internal
29
+ end
30
+
31
+ def assert_warning(pat, msg = nil)
32
+ stderr = EnvUtil.verbose_warning {
33
+ EnvUtil.with_default_internal(pat.encoding) {
34
+ yield
35
+ }
36
+ }
37
+ msg = message(msg) {diff pat, stderr}
38
+ assert(pat === stderr, msg)
39
+ end
40
+
41
+ def test_warning_ignore
42
+ obj = Object.new
43
+
44
+ assert_warning /instance variable @ivar not initialized/ do
45
+ assert_nil(obj.instance_variable_get(:@ivar))
46
+ end
47
+
48
+ require 'warning'
49
+
50
+ assert_warning /instance variable @ivar not initialized/ do
51
+ assert_nil(obj.instance_variable_get(:@ivar))
52
+ end
53
+
54
+ Warning.ignore(/instance variable @ivar not initialized/)
55
+
56
+ assert_warning '' do
57
+ assert_nil(obj.instance_variable_get(:@ivar))
58
+ end
59
+
60
+ assert_warning /instance variable @ivar2 not initialized/ do
61
+ assert_nil(obj.instance_variable_get(:@ivar2))
62
+ end
63
+
64
+ Warning.ignore(/instance variable @ivar2 not initialized/, __FILE__)
65
+
66
+ assert_warning '' do
67
+ assert_nil(obj.instance_variable_get(:@ivar2))
68
+ end
69
+
70
+ assert_warning /instance variable @ivar3 not initialized/ do
71
+ assert_nil(obj.instance_variable_get(:@ivar3))
72
+ end
73
+
74
+ Warning.ignore(/instance variable @ivar3 not initialized/, __FILE__+'a')
75
+
76
+ assert_warning /instance variable @ivar3 not initialized/ do
77
+ assert_nil(obj.instance_variable_get(:@ivar3))
78
+ end
79
+
80
+ Warning.clear
81
+
82
+ assert_warning /instance variable @ivar not initialized/ do
83
+ assert_nil(obj.instance_variable_get(:@ivar))
84
+ end
85
+ ensure
86
+ Warning.clear
87
+ end
88
+
89
+ def test_warning_process
90
+ obj = Object.new
91
+ warn = nil
92
+
93
+ require 'warning'
94
+
95
+ Warning.process(__FILE__+'a') do |warning|
96
+ warn = [0, warning]
97
+ end
98
+
99
+ assert_warning /instance variable @ivar not initialized/ do
100
+ assert_nil(obj.instance_variable_get(:@ivar))
101
+ end
102
+ assert_nil(warn)
103
+
104
+ Warning.process(__FILE__) do |warning|
105
+ warn = [1, warning]
106
+ end
107
+
108
+ assert_warning '' do
109
+ assert_nil(obj.instance_variable_get(:@ivar2))
110
+ end
111
+ assert_equal(1, warn.first)
112
+ assert_match(/instance variable @ivar2 not initialized/, warn.last)
113
+ warn = nil
114
+
115
+ Warning.process(File.dirname(__FILE__)) do |warning|
116
+ warn = [2, warning]
117
+ end
118
+
119
+ assert_warning '' do
120
+ assert_nil(obj.instance_variable_get(:@ivar3))
121
+ end
122
+ assert_equal(1, warn.first)
123
+ assert_match(/instance variable @ivar3 not initialized/, warn.last)
124
+ warn = nil
125
+
126
+ Warning.process(__FILE__+':') do |warning|
127
+ warn = [3, warning]
128
+ end
129
+
130
+ assert_warning '' do
131
+ assert_nil(obj.instance_variable_get(:@ivar4))
132
+ end
133
+ assert_equal(3, warn.first)
134
+ assert_match(/instance variable @ivar4 not initialized/, warn.last)
135
+ warn = nil
136
+
137
+ Warning.clear
138
+
139
+ assert_warning /instance variable @ivar5 not initialized/ do
140
+ assert_nil(obj.instance_variable_get(:@ivar5))
141
+ end
142
+ assert_nil(warn)
143
+
144
+ Warning.process do |warning|
145
+ warn = [4, warning]
146
+ end
147
+
148
+ assert_warning '' do
149
+ assert_nil(obj.instance_variable_get(:@ivar6))
150
+ end
151
+ assert_equal(4, warn.first)
152
+ assert_match(/instance variable @ivar6 not initialized/, warn.last)
153
+ ensure
154
+ Warning.clear
155
+ end
156
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: warning
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Evans
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ ruby-warning adds custom processing for warnings, including the
15
+ ability to ignore specific warning messages, ignore warnings
16
+ in specific files/directories, and add custom handling for all
17
+ warnings in specific files/directories.
18
+ email: code@jeremyevans.net
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files:
22
+ - README.rdoc
23
+ - CHANGELOG
24
+ - MIT-LICENSE
25
+ files:
26
+ - CHANGELOG
27
+ - MIT-LICENSE
28
+ - README.rdoc
29
+ - Rakefile
30
+ - lib/warning.rb
31
+ - test/test_warning.rb
32
+ homepage: https://github.com/jeremyevans/ruby-warning
33
+ licenses:
34
+ - MIT
35
+ metadata: {}
36
+ post_install_message:
37
+ rdoc_options:
38
+ - "--quiet"
39
+ - "--line-numbers"
40
+ - "--inline-source"
41
+ - "--title"
42
+ - 'ruby-warning: Add custom processing for warnings'
43
+ - "--main"
44
+ - README.rdoc
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '2.4'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.5.1
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Add custom processing for warnings
63
+ test_files: []