structured_warnings 0.1.0 → 0.1.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.
- data/History.txt +7 -0
- data/License.txt +2 -2
- data/Manifest.txt +0 -2
- data/README.txt +17 -2
- data/lib/structured_warnings/dynamic.rb +3 -2
- data/lib/structured_warnings/kernel.rb +40 -11
- data/lib/structured_warnings/test/assertions.rb +29 -3
- data/lib/structured_warnings/test/warner.rb +12 -0
- data/lib/structured_warnings/version.rb +1 -1
- data/lib/structured_warnings/warner.rb +6 -5
- data/lib/structured_warnings/warning.rb +98 -16
- data/lib/structured_warnings.rb +81 -12
- data/test/test_structured_warnings.rb +6 -0
- data/website/index.html +17 -6
- data/website/index.txt +13 -1
- data/website/template.rhtml +1 -4
- data.tar.gz.sig +0 -0
- metadata +2 -4
- metadata.gz.sig +0 -0
- data/lib/structured_warnings/warnings.rb +0 -3
- data/log/debug.log +0 -0
data/History.txt
CHANGED
data/License.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2008
|
1
|
+
Copyright (c) 2008 Gregor Schmidt
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
CHANGED
@@ -14,8 +14,6 @@ lib/structured_warnings/test/warner.rb
|
|
14
14
|
lib/structured_warnings/version.rb
|
15
15
|
lib/structured_warnings/warner.rb
|
16
16
|
lib/structured_warnings/warning.rb
|
17
|
-
lib/structured_warnings/warnings.rb
|
18
|
-
log/debug.log
|
19
17
|
script/destroy
|
20
18
|
script/generate
|
21
19
|
script/txt2html
|
data/README.txt
CHANGED
@@ -1,4 +1,19 @@
|
|
1
1
|
= Structured warnings
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
Have closer look at StructuredWarnings::Kernel, Warning and
|
4
|
+
Warning::ClassMethods.
|
5
|
+
|
6
|
+
Part of this library is a set of different warnings:
|
7
|
+
|
8
|
+
* Warning
|
9
|
+
* StandardWarning
|
10
|
+
* DeprecationWarning
|
11
|
+
* DeprecatedMethodWarning
|
12
|
+
* DeprecatedSignatureWarning
|
13
|
+
|
14
|
+
You are encourage to use your own subclasses of Warning to give as much feedback
|
15
|
+
to your users as possible.
|
16
|
+
|
17
|
+
Also see the projects website on http://rug-b.rubyforge.org/structured_warnings
|
18
|
+
and the inspiring article at
|
19
|
+
http://www.oreillynet.com/ruby/blog/2008/02/structured_warnings_now.html.
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# This library was created by Christian Neukirchen in the context of
|
2
2
|
# EuRuKo 2005 and is licensed under the same terms as Ruby.
|
3
3
|
#
|
4
|
-
# It provides dynamically scoped variables. It is used within
|
5
|
-
# store the current, thread-wide
|
4
|
+
# It provides dynamically scoped variables. It is used within
|
5
|
+
# +structured_warnings+ to store the current, thread-wide disabled warning
|
6
|
+
# classes.
|
6
7
|
#
|
7
8
|
# For more information see the corresponding slides at
|
8
9
|
# http://chneukirchen.org/talks/euruko-2005/chneukirchen-euruko2005-contextr.pdf
|
@@ -1,5 +1,43 @@
|
|
1
1
|
module StructuredWarnings
|
2
|
+
# This module encapsulates the extensions to Object, that are introduced
|
3
|
+
# by this library.
|
2
4
|
module Kernel
|
5
|
+
|
6
|
+
# :call-seq:
|
7
|
+
# warn(message = nil)
|
8
|
+
# warn(warning_class, message)
|
9
|
+
# warn(warning_instance)
|
10
|
+
#
|
11
|
+
# This method provides a +raise+-like interface. It extends the default
|
12
|
+
# warn in ::Kernel to allow the use of structured warnings.
|
13
|
+
#
|
14
|
+
# Internally it uses the StructuredWarnings::warner to format a message
|
15
|
+
# based on the given warning class, the message and a stack frame.
|
16
|
+
# The return value is passed to super, which is likely the implementation
|
17
|
+
# in ::Kernel. That way, it is less likely, that structured_warnings
|
18
|
+
# interferes with other extensions.
|
19
|
+
#
|
20
|
+
# It the warner return nil or an empty string the underlying warn will not
|
21
|
+
# be called. That way, warnings may be transferred to other devices without
|
22
|
+
# the need to redefine ::Kernel#warn.
|
23
|
+
#
|
24
|
+
# Just like the original version, this method does not take command line
|
25
|
+
# switches or verbosity levels into account. In order to deactivate all
|
26
|
+
# warnings use <code>Warning.disable</code>.
|
27
|
+
#
|
28
|
+
# warn "This is an old-style warning" # This will emit a StandardWarning
|
29
|
+
#
|
30
|
+
# class Foo
|
31
|
+
# def bar
|
32
|
+
# warn DeprecationWarning, "Never use bar again, use beer"
|
33
|
+
# end
|
34
|
+
# def beer
|
35
|
+
# "Ahhh"
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# warn Warning.new("The least specific warning you can get")
|
40
|
+
#
|
3
41
|
def warn(*args)
|
4
42
|
first = args.shift
|
5
43
|
if first.is_a? Class and first < Warning
|
@@ -11,7 +49,7 @@ module StructuredWarnings
|
|
11
49
|
message = first.message
|
12
50
|
|
13
51
|
else
|
14
|
-
warning =
|
52
|
+
warning = StandardWarning
|
15
53
|
message = first.to_s
|
16
54
|
end
|
17
55
|
|
@@ -21,18 +59,9 @@ module StructuredWarnings
|
|
21
59
|
end
|
22
60
|
|
23
61
|
if warning.active?
|
24
|
-
output =
|
62
|
+
output = StructuredWarnings.warner.format(warning, message, caller(1))
|
25
63
|
super(output) unless output.nil? or output.to_s.empty?
|
26
64
|
end
|
27
65
|
end
|
28
|
-
|
29
|
-
def self.warner
|
30
|
-
Dynamic[:warner]
|
31
|
-
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
def structured_warn(warning, message)
|
35
|
-
nil
|
36
|
-
end
|
37
66
|
end
|
38
67
|
end
|
@@ -1,17 +1,44 @@
|
|
1
1
|
module StructuredWarnings
|
2
|
+
# This module ecapsulates all extensions to support <code>test/unit</code>.
|
2
3
|
module Test
|
3
4
|
module Assertions
|
5
|
+
# Asserts that no warning was emmitted. It may be restricted to a certain
|
6
|
+
# subtree of warnings.
|
7
|
+
#
|
8
|
+
# def foo
|
9
|
+
# warn DeprecatedMethodWarning, "used foo, use bar instead"
|
10
|
+
# bar
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# assert_no_warn(StandardWarning) { foo } # passes
|
14
|
+
#
|
15
|
+
# assert_no_warn(DeprecationWarning) { foo } # fails
|
16
|
+
# assert_no_warn() { foo } # fails
|
4
17
|
def assert_no_warn(warning = Warning)
|
5
18
|
w = StructuredWarnings::Test::Warner.new
|
6
|
-
|
19
|
+
StructuredWarnings::with_warner(w) do
|
7
20
|
yield
|
8
21
|
end
|
9
22
|
assert !w.warned?(warning), "#{warning} has been emitted."
|
10
23
|
end
|
11
24
|
|
25
|
+
# Asserts that a warning was emmitted. It may be restricted to a certain
|
26
|
+
# subtree of warnings.
|
27
|
+
#
|
28
|
+
# def foo
|
29
|
+
# warn DeprecatedMethodWarning, "used foo, use bar instead"
|
30
|
+
# bar
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# assert_warn(DeprecatedMethodWarning) { foo } # passes
|
34
|
+
# assert_warn(DeprecationWarning) { foo } # passes
|
35
|
+
# assert_warn() { foo } # passes
|
36
|
+
#
|
37
|
+
# assert_warn(StandardWarning) { foo } # fails
|
38
|
+
#
|
12
39
|
def assert_warn(warning = Warning)
|
13
40
|
w = StructuredWarnings::Test::Warner.new
|
14
|
-
|
41
|
+
StructuredWarnings::with_warner(w) do
|
15
42
|
yield
|
16
43
|
end
|
17
44
|
assert w.warned?(warning), "#{warning} has not been emitted."
|
@@ -19,4 +46,3 @@ module StructuredWarnings
|
|
19
46
|
end
|
20
47
|
end
|
21
48
|
end
|
22
|
-
|
@@ -1,18 +1,30 @@
|
|
1
1
|
module StructuredWarnings
|
2
2
|
module Test
|
3
|
+
# This warner is used in Assertions#assert_warn and
|
4
|
+
# Assertions#assert_no_warn blocks. It captures all warnings in format and
|
5
|
+
# provides access to them using the warned? method.
|
3
6
|
class Warner < StructuredWarnings::Warner
|
7
|
+
# Overrides the public interface of StructuredWarnings::Warner. This
|
8
|
+
# method always returns nil to avoid warnings on stdout during assert_warn
|
9
|
+
# and assert_no_warn blocks.
|
4
10
|
def format(warning, message, call_stack)
|
5
11
|
given_warnings << warning
|
6
12
|
nil
|
7
13
|
end
|
8
14
|
|
15
|
+
# Returns true if any warning or a subclass of warning was emitted.
|
9
16
|
def warned?(warning)
|
10
17
|
given_warnings.any? {|w| (w <= warning)}
|
11
18
|
end
|
12
19
|
|
20
|
+
# :stopdoc:
|
21
|
+
protected
|
22
|
+
# Returns an array of all warning classes, that were given to this
|
23
|
+
# warner's format method, including duplications.
|
13
24
|
def given_warnings
|
14
25
|
@given_warnings ||= []
|
15
26
|
end
|
27
|
+
# :startdoc:
|
16
28
|
end
|
17
29
|
end
|
18
30
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module StructuredWarnings
|
2
|
+
# The Warner class implements a very simple interface. It simply formats
|
3
|
+
# a warning, so it is more than just the message itself. This default
|
4
|
+
# warner uses a format comparable to warnings emitted by rb_warn including
|
5
|
+
# the place where the "thing that caused the warning" resides.
|
2
6
|
class Warner
|
7
|
+
# Warner.new.format(DeprecationWarning, "more info..", caller)
|
8
|
+
# # => "demo.rb:5 : more info.. (DeprecationWarning)"
|
3
9
|
def format(warning, message, stack)
|
4
10
|
"#{stack.shift} : #{message} (#{warning})"
|
5
11
|
end
|
6
|
-
|
7
|
-
# formats an exception like stack frame
|
8
|
-
# def collect_frame(stack)
|
9
|
-
# stack.collect { |frame| " from #{frame}" }.join("\n")
|
10
|
-
# end
|
11
12
|
end
|
12
13
|
end
|
@@ -1,47 +1,129 @@
|
|
1
|
+
# Descendents of class Warning are used to raise structured warnings. They
|
2
|
+
# programmers to explicitly supress certain kinds of warnings and provide
|
3
|
+
# additional information in contrast to the plain warn method. They
|
4
|
+
# implement an Exception-like interface and carry information about the
|
5
|
+
# warning -- its type (the warning's class name), an optional descriptive
|
6
|
+
# string, and optional traceback information. Programs may subclass Warning
|
7
|
+
# to add additional information.
|
8
|
+
#
|
9
|
+
# Large portions of this class's documentation are taken from the Exception
|
10
|
+
# RDoc.
|
1
11
|
class Warning
|
2
|
-
|
12
|
+
# Construct a new Warning object, optionally passing in a message.
|
13
|
+
def initialize(message = nil)
|
14
|
+
@message = message
|
15
|
+
@backtrace = caller(1)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# call-seq:
|
20
|
+
# warning.backtrace => array
|
21
|
+
#
|
22
|
+
# Returns any backtrace associated with the warning. The backtrace
|
23
|
+
# is an array of strings, each containing either ``filename:lineNo: in
|
24
|
+
# `method''' or ``filename:lineNo.''
|
25
|
+
def backtrace
|
26
|
+
@backtrace
|
27
|
+
end
|
28
|
+
|
29
|
+
# Sets the backtrace information associated with warning. The argument must
|
30
|
+
# be an array of String objects in the format described in
|
31
|
+
# Exception#backtrace.
|
32
|
+
def set_backtrace(backtrace)
|
33
|
+
@backtrace = backtrace
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns warning's message (or the name of the warning if no message is set).
|
37
|
+
def to_s
|
38
|
+
@message || self.class.name
|
39
|
+
end
|
40
|
+
alias_method :to_str, :to_s
|
41
|
+
alias_method :message, :to_s
|
3
42
|
|
4
|
-
|
5
|
-
|
43
|
+
# Return this warning's class name and message
|
44
|
+
def inspect
|
45
|
+
"#<#{self.class}: #{self}>"
|
6
46
|
end
|
7
47
|
|
48
|
+
# This module extends Warning and each subclass. It may be used to activate
|
49
|
+
# or deactivate a set of warnings.
|
8
50
|
module ClassMethods
|
51
|
+
# returns a Boolean, stating whether a warning of this type would be
|
52
|
+
# emmitted or not.
|
9
53
|
def active?
|
10
|
-
disabled_warnings.all? {|w| !(w >= self)}
|
54
|
+
StructuredWarnings::disabled_warnings.all? {|w| !(w >= self)}
|
11
55
|
end
|
12
56
|
|
57
|
+
# call-seq:
|
58
|
+
# disable()
|
59
|
+
# disable() {...}
|
60
|
+
#
|
61
|
+
# If called without a block, Warnings of this type will be disabled in the
|
62
|
+
# current thread and all new child threads.
|
63
|
+
#
|
64
|
+
# warn("this will be printed") # creates a StandardWarning which is
|
65
|
+
# # enabled by default
|
66
|
+
#
|
67
|
+
# Warning.disable
|
68
|
+
#
|
69
|
+
# warn("this will not be printed") # creates a StandardWarning which is
|
70
|
+
# # currently disabled
|
71
|
+
#
|
72
|
+
# If called with a block, warnings of this type will be disabled in the
|
73
|
+
# dynamic scope of the given block.
|
74
|
+
#
|
75
|
+
# Warning.disable do
|
76
|
+
# warn("this will not be printed") # creates a StandardWarning which is
|
77
|
+
# # currently disabled
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
# warn("this will be printed") # creates a StandardWarning which is
|
81
|
+
# # currently enabled
|
13
82
|
def disable
|
14
83
|
if block_given?
|
15
|
-
|
84
|
+
StructuredWarnings::with_disabled_warnings(
|
85
|
+
StructuredWarnings.disabled_warnings | [self]) do
|
16
86
|
yield
|
17
87
|
end
|
18
88
|
else
|
19
|
-
|
89
|
+
StructuredWarnings::disabled_warnings |= [self]
|
20
90
|
end
|
21
91
|
end
|
22
92
|
|
93
|
+
# call-seq:
|
94
|
+
# enable()
|
95
|
+
# enable() {...}
|
96
|
+
#
|
97
|
+
# This method has the same semantics as disable, only with the opposite
|
98
|
+
# outcome. In general the last assignment wins, so that disabled warnings
|
99
|
+
# may be enabled again and so on.
|
23
100
|
def enable
|
24
101
|
if block_given?
|
25
|
-
|
102
|
+
StructuredWarnings::with_disabled_warnings(
|
103
|
+
StructuredWarnings.disabled_warnings - [self]) do
|
26
104
|
yield
|
27
105
|
end
|
28
106
|
else
|
29
|
-
|
107
|
+
StructuredWarnings::disabled_warnings -= [self]
|
30
108
|
end
|
31
109
|
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
def disabled_warnings
|
35
|
-
Dynamic[:disabled_warnings]
|
36
|
-
end
|
37
|
-
def disabled_warnings=(new)
|
38
|
-
Dynamic[:disabled_warnings] = new
|
39
|
-
end
|
40
110
|
end
|
41
111
|
|
42
112
|
extend ClassMethods
|
43
113
|
end
|
44
114
|
|
115
|
+
# This warning is used when calling #Kernel.warn without arguments.
|
116
|
+
class StandardWarning < Warning; end
|
117
|
+
|
118
|
+
# This is a general warning used to mark certain actions as deprecated. We
|
119
|
+
# recommend to add a useful warning message, which alternative to use instead.
|
45
120
|
class DeprecationWarning < Warning; end
|
121
|
+
|
122
|
+
# This warning marks single methods as deprecated. We
|
123
|
+
# recommend to add a useful warning message, which alternative to use instead.
|
46
124
|
class DeprecatedMethodWarning < DeprecationWarning; end
|
125
|
+
|
126
|
+
# This warning marks the given parameters for a certain methods as
|
127
|
+
# deprecated. We recommend to add a useful warning message, which
|
128
|
+
# alternative to use instead.
|
47
129
|
class DeprecatedSignatureWarning < DeprecationWarning; end
|
data/lib/structured_warnings.rb
CHANGED
@@ -1,23 +1,92 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
2
3
|
require "structured_warnings/dynamic"
|
3
4
|
require "structured_warnings/kernel"
|
4
5
|
require "structured_warnings/warner"
|
5
6
|
require "structured_warnings/warning"
|
6
7
|
|
8
|
+
|
7
9
|
module StructuredWarnings
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# On initialization self.init is called. When a test module is defined, it
|
11
|
+
# is a assumed, that <code>test/unit</code> is used and the warn assertions
|
12
|
+
# are added to Test::Unit::TestCase. If you <code>require "test/unit"</code>
|
13
|
+
# after +structured_warnings+ you have to call #StructuredWarnings::init_test
|
14
|
+
# manually.
|
15
|
+
module ClassMethods
|
16
|
+
# Executes a block using the given warner. This may be used to suppress
|
17
|
+
# warnings to stdout, but fetch them and redirect them to somewhere else.
|
18
|
+
#
|
19
|
+
# This behaviour is used in the StructuredWarnings::Assertions
|
20
|
+
def with_warner(warner)
|
21
|
+
Dynamic.let(:warner => warner) do
|
22
|
+
yield
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Gives access to the currently used warner. Default is an instance of
|
27
|
+
# StructuredWarnings::Warner
|
28
|
+
def warner
|
29
|
+
Dynamic[:warner]
|
30
|
+
end
|
31
|
+
|
32
|
+
#:stopdoc:
|
33
|
+
# Sets a new warner
|
34
|
+
def warner=(new_warner)
|
35
|
+
Dynamic[:warner] = new_warner
|
36
|
+
end
|
37
|
+
|
38
|
+
# returns an Array of all currently disabled warnings.
|
39
|
+
#
|
40
|
+
# *Note*: Everyday users are supposed to use the methods in
|
41
|
+
# Warning::ClassMethods
|
42
|
+
def disabled_warnings
|
43
|
+
Dynamic[:disabled_warnings]
|
13
44
|
end
|
14
|
-
init_test if defined? ::Test
|
15
|
-
end
|
16
45
|
|
17
|
-
|
18
|
-
|
19
|
-
|
46
|
+
# sets an array of all currently disabled warnings. It is expected that this
|
47
|
+
# array consists only of the Warning class and its subclasses.
|
48
|
+
#
|
49
|
+
# *Note*: Everyday users are supposed to use the methods in
|
50
|
+
# Warning::ClassMethods
|
51
|
+
def disabled_warnings=(new_disabled_warnings)
|
52
|
+
Dynamic[:disabled_warnings] = new_disabled_warnings
|
53
|
+
end
|
54
|
+
|
55
|
+
# Executes a block with the given set of disabled instances.
|
56
|
+
#
|
57
|
+
# *Note*: Everyday users are supposed to use the methods in
|
58
|
+
# Warning::ClassMethods
|
59
|
+
def with_disabled_warnings(disabled_warnings)
|
60
|
+
Dynamic.let(:disabled_warnings => disabled_warnings) do
|
61
|
+
yield
|
62
|
+
end
|
63
|
+
end
|
64
|
+
#:startdoc:
|
65
|
+
|
66
|
+
protected
|
67
|
+
# Initializes the StructuredWarnings library. Includes the Kernel extensions
|
68
|
+
# into Object, sets the initial set of disabled_warnings (none) and
|
69
|
+
# initializes the warner to an instance of StructuredWarnings::Warner
|
70
|
+
def init
|
71
|
+
unless Object < StructuredWarnings::Kernel
|
72
|
+
Object.class_eval { include StructuredWarnings::Kernel }
|
73
|
+
StructuredWarnings::disabled_warnings = []
|
74
|
+
StructuredWarnings::warner = StructuredWarnings::Warner.new
|
75
|
+
end
|
76
|
+
init_test if defined? ::Test
|
77
|
+
end
|
78
|
+
|
79
|
+
# Initializes the StructuredWarnings test extensions - namely adds
|
80
|
+
# StructuredWarnings::Test::Assertions to Test::Unit::TestCase
|
81
|
+
def init_test
|
82
|
+
require "structured_warnings/test.rb"
|
83
|
+
::Test::Unit::TestCase.class_eval do
|
84
|
+
include StructuredWarnings::Test::Assertions
|
85
|
+
end
|
86
|
+
rescue NameError
|
87
|
+
end
|
20
88
|
end
|
21
|
-
|
89
|
+
extend ClassMethods
|
22
90
|
|
23
|
-
|
91
|
+
init
|
92
|
+
end
|
data/website/index.html
CHANGED
@@ -8,9 +8,6 @@
|
|
8
8
|
rug-b
|
9
9
|
</title>
|
10
10
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
-
<style>
|
12
|
-
|
13
|
-
</style>
|
14
11
|
<script type="text/javascript">
|
15
12
|
window.onload = function() {
|
16
13
|
settings = {
|
@@ -33,7 +30,7 @@
|
|
33
30
|
<h1>rug-b</h1>
|
34
31
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/rug-b"; return false'>
|
35
32
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/rug-b" class="numbers">0.1.
|
33
|
+
<a href="http://rubyforge.org/projects/rug-b" class="numbers">0.1.1</a>
|
37
34
|
</div>
|
38
35
|
<h1>→ ‘structured_warnings’</h1>
|
39
36
|
|
@@ -122,7 +119,21 @@ the inspiring article at
|
|
122
119
|
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8z-email">8z: Email the project owner</a>, use the Email below.</p>
|
123
120
|
|
124
121
|
|
125
|
-
<p>The trunk repository is <code>
|
122
|
+
<p>The trunk repository is <code>http://rug-b.rubyforge.org/svn/structured_warnings/trunk</code> for anonymous access.</p>
|
123
|
+
|
124
|
+
|
125
|
+
<h2>Resources</h2>
|
126
|
+
|
127
|
+
|
128
|
+
<ul>
|
129
|
+
<li><a href="http://www.nach-vorne.de/2008/2/21/ann-structured_warnings-0-1-0-released">Initial announcement</a></li>
|
130
|
+
<li><a href="http://www.oreillynet.com/ruby/blog/2008/02/structured_warnings_now.html">Inspiring article</a></li>
|
131
|
+
<li><a href="http://rug-b.rubyforge.org/structured_warnings/">Project’s website</a></li>
|
132
|
+
<li><a href="http://rug-b.rubyforge.org/structured_warnings/rdoc"><span class="caps">API</span> doc</a></li>
|
133
|
+
<li><a href="http://www.rug-b.com">rug-b</a></li>
|
134
|
+
<li>Other rug-b gems <a href="http://rug-b.rubyforge.org/svn/">in <span class="caps">SVN</span></a> and
|
135
|
+
<a href="http://rubyforge.org/projects/rug-b">to download</a></li>
|
136
|
+
</ul>
|
126
137
|
|
127
138
|
|
128
139
|
<h2>License</h2>
|
@@ -136,7 +147,7 @@ the inspiring article at
|
|
136
147
|
|
137
148
|
<p>Comments are welcome. Send an email to <a href="mailto:ruby@schmidtwisser.de">Gregor Schmidt</a></p>
|
138
149
|
<p class="coda">
|
139
|
-
<a href="mailto:ruby@schmidtwisser.de">Gregor Schmidt</a>,
|
150
|
+
<a href="mailto:ruby@schmidtwisser.de">Gregor Schmidt</a>, 22nd February 2008<br />
|
140
151
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
141
152
|
</p>
|
142
153
|
</div>
|
data/website/index.txt
CHANGED
@@ -74,7 +74,19 @@ h2. How to submit patches
|
|
74
74
|
|
75
75
|
Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8z: Email the project owner":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8z-email, use the Email below.
|
76
76
|
|
77
|
-
The trunk repository is <code>
|
77
|
+
The trunk repository is <code>http://rug-b.rubyforge.org/svn/structured_warnings/trunk</code> for anonymous access.
|
78
|
+
|
79
|
+
h2. Resources
|
80
|
+
|
81
|
+
* "Initial announcement":http://www.nach-vorne.de/2008/2/21/ann-structured_warnings-0-1-0-released
|
82
|
+
* "Inspiring article":http://www.oreillynet.com/ruby/blog/2008/02/structured_warnings_now.html
|
83
|
+
* "Project's website":http://rug-b.rubyforge.org/structured_warnings/
|
84
|
+
* "API doc":http://rug-b.rubyforge.org/structured_warnings/rdoc
|
85
|
+
* "rug-b":http://www.rug-b.com
|
86
|
+
* Other rug-b gems "in SVN":http://rug-b.rubyforge.org/svn/ and
|
87
|
+
"to download":http://rubyforge.org/projects/rug-b
|
88
|
+
|
89
|
+
|
78
90
|
|
79
91
|
h2. License
|
80
92
|
|
data/website/template.rhtml
CHANGED
@@ -8,9 +8,6 @@
|
|
8
8
|
<%= title %>
|
9
9
|
</title>
|
10
10
|
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
-
<style>
|
12
|
-
|
13
|
-
</style>
|
14
11
|
<script type="text/javascript">
|
15
12
|
window.onload = function() {
|
16
13
|
settings = {
|
@@ -37,7 +34,7 @@
|
|
37
34
|
</div>
|
38
35
|
<%= body %>
|
39
36
|
<p class="coda">
|
40
|
-
<a href="mailto:ruby@schmidtwisser.de">Gregor Schmidt</a>, <%= modified.pretty %><br
|
37
|
+
<a href="mailto:ruby@schmidtwisser.de">Gregor Schmidt</a>, <%= modified.pretty %><br />
|
41
38
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
42
39
|
</p>
|
43
40
|
</div>
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: structured_warnings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregor Schmidt
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
y3O9DT3o4BiyPe77
|
31
31
|
-----END CERTIFICATE-----
|
32
32
|
|
33
|
-
date: 2008-02-
|
33
|
+
date: 2008-02-22 00:00:00 +01:00
|
34
34
|
default_executable:
|
35
35
|
dependencies: []
|
36
36
|
|
@@ -64,8 +64,6 @@ files:
|
|
64
64
|
- lib/structured_warnings/version.rb
|
65
65
|
- lib/structured_warnings/warner.rb
|
66
66
|
- lib/structured_warnings/warning.rb
|
67
|
-
- lib/structured_warnings/warnings.rb
|
68
|
-
- log/debug.log
|
69
67
|
- script/destroy
|
70
68
|
- script/generate
|
71
69
|
- script/txt2html
|
metadata.gz.sig
CHANGED
Binary file
|
data/log/debug.log
DELETED
File without changes
|