rubybreaker 0.0.5 → 0.0.6

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.
Files changed (90) hide show
  1. data/ABOUT.md +20 -0
  2. data/NEWS +5 -0
  3. data/README.md +16 -352
  4. data/Rakefile +30 -16
  5. data/TOPICS.md +55 -0
  6. data/TUTORIAL.md +291 -0
  7. data/VERSION +1 -1
  8. data/bin/rubybreaker +32 -14
  9. data/lib/rubybreaker/runtime/monitor.rb +1 -1
  10. data/lib/rubybreaker/runtime.rb +41 -21
  11. data/lib/rubybreaker/task.rb +15 -9
  12. data/lib/rubybreaker/test/rspec.rb +3 -3
  13. data/lib/rubybreaker/test/testcase.rb +3 -3
  14. data/lib/rubybreaker.rb +31 -16
  15. data/test/integrated/{tc_both_broken_breakable.rb → tc_both_documented_and_undocumented.rb} +3 -4
  16. data/test/integrated/tc_class_methods.rb +1 -1
  17. data/test/integrated/tc_inherit_broken.rb +1 -1
  18. data/test/integrated/tc_method_missing.rb +1 -1
  19. data/test/integrated/tc_namespace.rb +1 -1
  20. data/test/integrated/tc_simple1.rb +1 -1
  21. data/test/testtask/tc_testtask.rb +2 -2
  22. data/test/ts_integrated.rb +1 -1
  23. data/test/ts_rspec.rb +1 -1
  24. data/webpage/about.html +50 -0
  25. data/webpage/footer.html +6 -1
  26. data/webpage/header.html +9 -3
  27. data/webpage/images/logo.png +0 -0
  28. data/webpage/images/title.png +0 -0
  29. data/webpage/index.html +31 -367
  30. data/webpage/rdoc/Object.html +3 -103
  31. data/webpage/rdoc/Rake/RubyBreakerTestTask.html +80 -18
  32. data/webpage/rdoc/Rake.html +3 -7
  33. data/webpage/rdoc/RubyBreaker/Breakable.html +4 -8
  34. data/webpage/rdoc/RubyBreaker/Broken.html +4 -8
  35. data/webpage/rdoc/RubyBreaker/Context.html +3 -7
  36. data/webpage/rdoc/RubyBreaker/Errors/InternalError.html +3 -7
  37. data/webpage/rdoc/RubyBreaker/Errors/InvalidSubtypeCheck.html +3 -7
  38. data/webpage/rdoc/RubyBreaker/Errors/InvalidTypeConstruction.html +3 -7
  39. data/webpage/rdoc/RubyBreaker/Errors/SubtypeFailure.html +3 -7
  40. data/webpage/rdoc/RubyBreaker/Errors/TypeError.html +3 -7
  41. data/webpage/rdoc/RubyBreaker/Errors/UserError.html +3 -7
  42. data/webpage/rdoc/RubyBreaker/Errors.html +3 -7
  43. data/webpage/rdoc/RubyBreaker/ObjectPosition.html +3 -7
  44. data/webpage/rdoc/RubyBreaker/Position.html +3 -7
  45. data/webpage/rdoc/RubyBreaker/RDocSupport.html +3 -7
  46. data/webpage/rdoc/RubyBreaker/RubyTypeUtils.html +3 -7
  47. data/webpage/rdoc/RubyBreaker/Runtime/Inspector.html +3 -7
  48. data/webpage/rdoc/RubyBreaker/Runtime/MethodInfo.html +3 -7
  49. data/webpage/rdoc/RubyBreaker/Runtime/Monitor.html +3 -7
  50. data/webpage/rdoc/RubyBreaker/Runtime/MonitorInstaller.html +10 -14
  51. data/webpage/rdoc/RubyBreaker/Runtime/MonitorSwitch.html +3 -7
  52. data/webpage/rdoc/RubyBreaker/Runtime/MonitorUtils.html +3 -7
  53. data/webpage/rdoc/RubyBreaker/Runtime/ObjectWrapper.html +3 -7
  54. data/webpage/rdoc/RubyBreaker/Runtime/Pluggable.html +3 -7
  55. data/webpage/rdoc/RubyBreaker/Runtime/TypeSigParser.html +3 -7
  56. data/webpage/rdoc/RubyBreaker/Runtime/TypeSigUnparser.html +3 -7
  57. data/webpage/rdoc/RubyBreaker/Runtime/TypeSystem.html +3 -7
  58. data/webpage/rdoc/RubyBreaker/Runtime.html +42 -39
  59. data/webpage/rdoc/RubyBreaker/TypeComparer.html +3 -7
  60. data/webpage/rdoc/RubyBreaker/TypeDefs/AnyType.html +3 -7
  61. data/webpage/rdoc/RubyBreaker/TypeDefs/BlockType.html +3 -7
  62. data/webpage/rdoc/RubyBreaker/TypeDefs/DuckType.html +3 -7
  63. data/webpage/rdoc/RubyBreaker/TypeDefs/FusionType.html +3 -7
  64. data/webpage/rdoc/RubyBreaker/TypeDefs/MethodListType.html +3 -7
  65. data/webpage/rdoc/RubyBreaker/TypeDefs/MethodType.html +3 -7
  66. data/webpage/rdoc/RubyBreaker/TypeDefs/NilType.html +3 -7
  67. data/webpage/rdoc/RubyBreaker/TypeDefs/NominalType.html +3 -7
  68. data/webpage/rdoc/RubyBreaker/TypeDefs/OptionalType.html +3 -7
  69. data/webpage/rdoc/RubyBreaker/TypeDefs/OrType.html +3 -7
  70. data/webpage/rdoc/RubyBreaker/TypeDefs/SelfType.html +3 -7
  71. data/webpage/rdoc/RubyBreaker/TypeDefs/Type.html +3 -7
  72. data/webpage/rdoc/RubyBreaker/TypeDefs/VarLengthType.html +3 -7
  73. data/webpage/rdoc/RubyBreaker/TypeDefs.html +3 -7
  74. data/webpage/rdoc/RubyBreaker/TypeUnparser.html +3 -7
  75. data/webpage/rdoc/RubyBreaker/Typing.html +3 -7
  76. data/webpage/rdoc/RubyBreaker/Util.html +3 -7
  77. data/webpage/rdoc/RubyBreaker.html +48 -15
  78. data/webpage/rdoc/Test/Unit.html +3 -7
  79. data/webpage/rdoc/Test.html +3 -7
  80. data/webpage/rdoc/created.rid +18 -17
  81. data/webpage/rdoc/index.html +3 -7
  82. data/webpage/rdoc/js/search_index.js +1 -1
  83. data/webpage/rdoc/table_of_contents.html +28 -36
  84. data/webpage/rubybreaker.css +8 -6
  85. data/webpage/topics.html +85 -0
  86. data/webpage/tutorial.html +331 -0
  87. metadata +14 -8
  88. data/lib/rubybreaker/doc.rb +0 -3
  89. data/webpage/rdoc/Kernel.html +0 -286
  90. data/webpage/rdoc/Test/Unit/TestCase.html +0 -309
@@ -0,0 +1,331 @@
1
+ <html>
2
+ <head>
3
+ <title>RubyBreaker</title>
4
+ <LINK REL=StyleSheet HREF="rubybreaker.css" TYPE="text/css">
5
+ <script type="text/javascript" src="generated_toc.js"> </script>
6
+ </head>
7
+ <body onLoad="createTOC()">
8
+ <center>
9
+ <div id="content">
10
+ <div id="logo">
11
+ <img src="images/title.png" border="0">
12
+ </div>
13
+ <center>
14
+ <a href="index.html">Introduction</a> |
15
+ <a href="tutorial.html">Tutorial</a> |
16
+ <a href="topics.html">Advanced Topics</a> |
17
+ <a href="about.html">About</a>
18
+ </center>
19
+ <hr />
20
+ <!--<div id="generated-toc"></div>-->
21
+ <h1>Tutorial</h1>
22
+
23
+ <p>This tutorial will describe the basic usage of the tool, the RubyBreaker
24
+ Type Annotation Language, and the RubyBreaker Type System.</p>
25
+
26
+ <h2>Usage</h2>
27
+
28
+ <p>RubyBreaker takes advantage of test cases that already come with the source
29
+ program. It is recommended that RubyBreaker is run as a Rake task, which
30
+ does require a minimum change in the Rakefile (but no code change in the
31
+ source program) but is better for a long-term maintenance. Regardless of the
32
+ mode you choose to run, no source code change is required.</p>
33
+
34
+ <p>Let us briefly see how RubyBreaker can be run directly as a command-line
35
+ program to understand the overall concept of the tool. We will explain how
36
+ to use RubyBreaker in a Rakefile later.</p>
37
+
38
+ <pre><code>$ rubybreaker -v -s -l lib.rb -b A,B prog.rb
39
+ </code></pre>
40
+
41
+ <p>The above command runs RubyBreaker in verbose mode (<code>-v</code>) and will display
42
+ the output on the screen (<code>-s</code>). Before RubyBreaker runs <code>prog.rb</code>, it will
43
+ import (<code>-l</code>) <code>lib.rb</code> and instrument (<code>-b</code>) classes <code>A</code> and <code>B</code>.
44
+ Here is <code>lib.rb</code>:</p>
45
+
46
+ <pre><code>class A
47
+ def foo(x)
48
+ x.to_s
49
+ end
50
+ end
51
+ class B
52
+ def bar(y,z)
53
+ y.foo(z)
54
+ end
55
+ end
56
+ </code></pre>
57
+
58
+ <p>And, <code>prog.rb</code> simply imports the library file and executes it:</p>
59
+
60
+ <pre><code>require "lib"
61
+ A.new.foo(1)
62
+ </code></pre>
63
+
64
+ <p>This example will show how <code>A#foo</code> method is given a type by RubyBreaker.
65
+ After running the command shown above, the following output will be
66
+ generated and displayed on the screen:</p>
67
+
68
+ <pre><code>class A
69
+ typesig("foo(fixnum[to_s]) -&gt; string")
70
+ end
71
+ </code></pre>
72
+
73
+ <p>Here, the <code>typesig</code> method call registers <code>foo</code> as a method type that takes
74
+ an object that has <code>Fixnum#to_s</code> method and returns a <code>String</code>. This
75
+ method is made available simply by importing <code>rubybreaker</code>. Now, assume
76
+ that an additional code, <code>B.new.bar(A.new,1)</code>, is added at the end of
77
+ <code>prog.rb</code>. The subsequent run will generate the following result:</p>
78
+
79
+ <pre><code>class A
80
+ typesig("foo(fixnum[to_s]) -&gt; string")
81
+ end
82
+ class B
83
+ typesig("bar(a[foo], fixnum[to_s]) -&gt; string")
84
+ end
85
+ </code></pre>
86
+
87
+ <p>Keep in mind that RubyBreaker is designed to gather type information based
88
+ on the <em>actual</em> execution of the source program. This means the program
89
+ should be equipped with test cases that have a reasonable program path
90
+ coverage. Additionally, RubyBreaker assumes that test runs are correct and
91
+ the program behaves correctly (for those test runs) as intended by the
92
+ programmer. This assumption is not a strong requirement, but is necessary to
93
+ obtain precise and accurate type information.</p>
94
+
95
+ <h3>Using Ruby Unit Testing Framework</h3>
96
+
97
+ <p>Instead of manually inserting the entry point indicator in the source
98
+ program, you can take advantage of Ruby's built-in testing framework. This
99
+ is preferred to modifying the source program directly, especially for the
100
+ long term program maintainability. But no worries! This method is as simple
101
+ as the previous one.</p>
102
+
103
+ <pre><code>require "test/unit"
104
+ require "rubybreaker" # This should come after test/unit.
105
+ class TestClassA &lt; Test::Unit::TestCase
106
+ def setup()
107
+ RubyBreaker.break(Class1, Class2, ...)
108
+ ...
109
+ end
110
+ # ...tests!...
111
+ end
112
+ </code></pre>
113
+
114
+ <p>That's it! The only requirements are to indicate to RubyBreaker which modules
115
+ and classes to "break" and to place <code>require rubybreaker</code> <em>after</em>
116
+ <code>require test/unit</code>.</p>
117
+
118
+ <h3>Using RSpec</h3>
119
+
120
+ <p>The requirement is same for RSpec but use <code>before</code> instead of <code>setup</code> to
121
+ specify which modules and classes to "break".</p>
122
+
123
+ <pre><code>require "rspec"
124
+ require "rubybreaker"
125
+
126
+ describe "TestClassA Test"
127
+ before { RubyBreaker.break(Class1, Class2, ...) }
128
+ ...
129
+ # ...tests!...
130
+ end
131
+ </code></pre>
132
+
133
+ <h3>Using Rakefile</h3>
134
+
135
+ <p>By running RubyBreaker along with the Rakefile, you can avoid modifying the
136
+ source program at all. (You no longer need to import <code>rubybreaker</code> in the
137
+ test cases neither.) Therefore, this is the recommended way to use
138
+ RubyBreaker. The following code snippet describes how it can be done:</p>
139
+
140
+ <pre><code>require "rubybreaker/task"
141
+ ...
142
+ desc "Run RubyBreaker"
143
+ Rake::RubyBreakerTestTask.new(:"rubybreaker") do |t|
144
+ t.libs &lt;&lt; "lib"
145
+ t.test_files = ["test/foo/tc_foo1.rb"]
146
+ # ...Other test task options..
147
+ t.rubybreaker_opts &lt;&lt; "-v" # run in verbose mode
148
+ t.break = ["Class1", "Class2", ...] # specify what to monitor
149
+ end
150
+ </code></pre>
151
+
152
+ <p>Note that <code>RubyBrakerTestTask</code> can simply replace your <code>TestTask</code> block in
153
+ Rakefile. In fact, the former is a subclass of the latter and includes all
154
+ features supported by the latter. The only additional options are
155
+ <code>rubybreaker_opts</code> which is RubyBreaker's command-line options and
156
+ <code>break</code> which specifies which modules and classes to monitor. Since
157
+ <code>Class1</code> and <code>Class2</code> are not <em>recognized</em> by this Rakefile, you must use
158
+ string literals to specify modules and classes (and with full namespace).</p>
159
+
160
+ <p>If this is the route you are taking, there needs no editing of the source
161
+ program whatsoever. This task will take care of instrumenting the specified
162
+ modules and classes at proper moments.</p>
163
+
164
+ <h2>Type Annotation</h2>
165
+
166
+ <p>The annotation language used in RubyBreaker resembles the method
167
+ documentation used by Ruby Core Library Doc. Each type signature
168
+ defines a method type using the name, argument types, block type, and return
169
+ type. But, let us consider a simple case where there is one argument type
170
+ and a return type.</p>
171
+
172
+ <pre><code>class A
173
+ ...
174
+ typesig("foo(fixnum) -&gt; string")
175
+ end
176
+ </code></pre>
177
+
178
+ <p>In RubyBreaker, a type signature is recognized by the meta-class level
179
+ method <code>typesig</code> which takes a string as an argument. This string is the
180
+ actual type signature written in the Ruby Type Annotation Language. This
181
+ language is designed to reflect the common documentation practice used by
182
+ Ruby Core Library Doc. It starts with the name of the method. In the
183
+ above example, <code>foo</code> is currently being given a type. The rest of the
184
+ signature takes a typical method type symbol, <code>(x) -&gt; y</code> where <code>x</code> is the
185
+ argument type and <code>y</code> is the return type. In the example shown above, the
186
+ method takes a <code>Fixnum</code> object and returns a <code>String</code> object. Note that
187
+ these types are in lowercase, indicating they are objects and not modules or
188
+ classes themselves.</p>
189
+
190
+ <p>There are several types that represent an object: nominal, duck, fusion,
191
+ nil, 'any', 'or', optional, variable-length, and block. Each type signature
192
+ itself represents a method type or a method list type (explained below).</p>
193
+
194
+ <h3>Nominal Type</h3>
195
+
196
+ <p>This is the simplest and most intuitive way to represent an object. For
197
+ instance, <code>fixnum</code> is an object of type <code>Fixnum</code>. Use lower-case letters and
198
+ underscores instead of <em>camelized</em> name. <code>MyClass</code>, for example would be
199
+ <code>my_class</code> in RubyBreaker type signatures. There is no particular
200
+ reason for this convention other than it is the common practice used in
201
+ RubyDoc. Use <code>/</code> to indicate the namespace delimiter <code>::</code>. For example,
202
+ <code>NamspaceA::ClassB</code> would be represented by <code>namespace_a/class_b</code> in
203
+ a RubyBreaker type signature.</p>
204
+
205
+ <h3>Self Type</h3>
206
+
207
+ <p>This type is similar to the nominal type but is referring to the current
208
+ object--that is, the receiver of the method being typed. RubyBreaker will
209
+ auto-document the return type as a self type if the return value is the same
210
+ as the receiver of that call. It is also recommended to use this type over
211
+ a nominal type (if the return value is <code>self</code>) since it depicts more
212
+ precise return type.</p>
213
+
214
+ <h3>Duck Type</h3>
215
+
216
+ <p>This type is inspired by the Ruby Language's duck typing, <em>"if it
217
+ walks like a duck and quacks like a duck, it must be a duck."</em> Using this
218
+ type, an object can be represented simply by a list of method names. For
219
+ example <code>[walks, quacks]</code> is an object that has <code>walks</code> and <code>quacks</code>
220
+ methods. Note that these method names do <em>not</em> reveal any type
221
+ information for themselves.</p>
222
+
223
+ <h3>Fusion Type</h3>
224
+
225
+ <p>Duck type is very flexible but can be too lenient when trying to restrict
226
+ the type of an object. RubyBreaker provides a type called <em>the fusion type</em>
227
+ which lists method names but with respect to a nominal type. For
228
+ example, <code>fixnum[to_f, to_s]</code> represents an object that has methods <code>to_f</code>
229
+ and <code>to_s</code> whose types are same as those of <code>Fixnum</code>. This is more
230
+ restrictive (precise) than <code>[to_f, to_s]</code> because the two methods must have
231
+ the same types as <code>to_f</code> and <code>to_s</code> methods, respectively, in <code>Fixnum</code>.</p>
232
+
233
+ <h3>Nil Type</h3>
234
+
235
+ <p>A nil type represents a value of nil and is denoted by <code>nil</code>.</p>
236
+
237
+ <h3>Any Type</h3>
238
+
239
+ <p>RubyBreaker also provides a way to represent an object that is compatible with
240
+ any type. This type is denoted by <code>?</code>. Use caution with this type because
241
+ it should be only used for an object that requires an arbitrary yet most
242
+ specific type--that is, <code>?</code> is a subtype of any other type, but any
243
+ other type is not a subtype of <code>?</code>. This becomes a bit complicated for
244
+ method or block argument types because of their contra-variance
245
+ characteristic. Please refer to the section <em>Subtyping</em>.</p>
246
+
247
+ <h3>Or Type</h3>
248
+
249
+ <p>Any above types can be "or"ed together, using <code>||</code>, to represent an object
250
+ that can be either one or the other. It <em>does</em> not represent an object that
251
+ has to be both (which is not supported by RubyBreaker).</p>
252
+
253
+ <h3>Optional Argument Type and Variable-Length Argument Type</h3>
254
+
255
+ <p>Another useful features of Ruby are the optional argument type and the
256
+ variable-length argument type. The former represents an argument that has a
257
+ default value (and therefore does not have to be provided). The latter
258
+ represents zero or more arguments of the same type. These are denoted by
259
+ suffices, <code>?</code> and <code>*</code>, respectively.</p>
260
+
261
+ <h3>Block Type</h3>
262
+
263
+ <p>One of the Ruby's prominent features is the block argument. It allows
264
+ the caller to pass in a piece of code to be executed inside the callee. This
265
+ code block can be executed by the Ruby construct, <code>yield</code>, or by directly
266
+ calling the <code>call</code> method of the block object. In RubyBreaker, this type can
267
+ be respresented by curly brackets. For instance, <code>{|fixnum,string| -&gt;
268
+ string}</code> represents a block that takes two arguments--one <code>Fixnum</code> and one
269
+ <code>String</code>--and returns a <code>String</code>.</p>
270
+
271
+ <p>RubyBreaker does supports nested blocks as Ruby 1.9 finally allows them.
272
+ However, <em>keep in mind</em> that RubyBreaker <em>cannot</em> automatically document the
273
+ block types due to <code>yield</code> being a language construct rather than a method,
274
+ which means it cannot be captured by meta-programming!</p>
275
+
276
+ <h3>Method Type and Method List Types</h3>
277
+
278
+ <p>Method type is similar to the block type, but it represents an actual method
279
+ and not a block object. It is the "root" type that the type annotation
280
+ language supports, along with method list types. Method <em>list</em> type is a
281
+ collection of method types to represent more than one type information for
282
+ the given method. Why would this type be needed? Consider the following Ruby
283
+ code:</p>
284
+
285
+ <pre><code>def foo(x)
286
+ case x
287
+ when Fixnum
288
+ 1
289
+ when String
290
+ "1"
291
+ end
292
+ end
293
+ </code></pre>
294
+
295
+ <p>There is no way to document the type of <code>foo</code> without using a method list
296
+ type. Let's try to give a method type to <code>foo</code> without a method list. The
297
+ closest we can come up with would be <code>foo(fixnum or string) -&gt; fixnum and
298
+ string</code>. But RubyBreaker does not have the "and" type in the type annotation
299
+ language because it gives me an headache! (By the way, it needs to be an
300
+ "and" type because the caller must handle both <code>Fixnum</code> and <code>String</code> return
301
+ values.)</p>
302
+
303
+ <p>It is a dilemma because Ruby programmers actually enjoy using this kind of
304
+ dynamic type checks in their code. To alleviate this headache, RubyBreaker
305
+ supports the method list type to represent different scenarios depending on
306
+ the argument types. Thus, the <code>foo</code> method shown above can be given the
307
+ following method list type:</p>
308
+
309
+ <pre><code>typesig("foo(fixnum) -&gt; fixnum")
310
+ typesig("foo(string) -&gt; string")
311
+ </code></pre>
312
+
313
+ <p>These two type signatures simply tell RubyBreaker that <code>foo</code> has two method
314
+ types--one for a <code>Fixnum</code> argument and another for a <code>String</code> argument.
315
+ Depending on the argument type, the return type is determined. In this
316
+ example, a <code>Fixnum</code> is returned when the argument is also a <code>Fixnum</code> and a
317
+ <code>String</code> is returned when the argument is also a <code>String</code>. When
318
+ automatically documenting such a type, RubyBreaker looks for the (subtyping)
319
+ compatibility between the return types and "promote" the method type to a
320
+ method list type by spliting the type signature into two (or more in
321
+ subsequent "promotions").</p>
322
+ <hr />
323
+ <center style="font-size:smaller; padding:0px;">
324
+ Copyright (C) 2012 Jong-hoon (David) An. All Rights Reserved.<br />
325
+ Contact David An at rockalizer at gmail<br />
326
+ <a href="http://rockalizer.com">rockalizer.com</a>
327
+ </center>
328
+ </div>
329
+ </center>
330
+ </body>
331
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubybreaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-11 00:00:00.000000000 Z
12
+ date: 2012-06-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: treetop
@@ -43,7 +43,6 @@ files:
43
43
  - lib/rubybreaker/debug/error.rb
44
44
  - lib/rubybreaker/debug.rb
45
45
  - lib/rubybreaker/doc/rdoc.rb
46
- - lib/rubybreaker/doc.rb
47
46
  - lib/rubybreaker/runtime/inspector.rb
48
47
  - lib/rubybreaker/runtime/monitor.rb
49
48
  - lib/rubybreaker/runtime/object_wrapper.rb
@@ -70,6 +69,7 @@ files:
70
69
  - lib/rubybreaker.rb
71
70
  - bin/gen_stub_rubylib
72
71
  - bin/rubybreaker
72
+ - ABOUT.md
73
73
  - AUTHORS
74
74
  - LICENSE
75
75
  - NEWS
@@ -77,8 +77,10 @@ files:
77
77
  - Rakefile
78
78
  - README.md
79
79
  - TODO
80
+ - TOPICS.md
81
+ - TUTORIAL.md
80
82
  - VERSION
81
- - test/integrated/tc_both_broken_breakable.rb
83
+ - test/integrated/tc_both_documented_and_undocumented.rb
82
84
  - test/integrated/tc_class_methods.rb
83
85
  - test/integrated/tc_inherit_broken.rb
84
86
  - test/integrated/tc_method_missing.rb
@@ -100,10 +102,12 @@ files:
100
102
  - test/type/tc_unparser.rb
101
103
  - test/typing/tc_rubytype.rb
102
104
  - test/typing/tc_typing.rb
105
+ - webpage/about.html
103
106
  - webpage/footer.html
104
107
  - webpage/generated_toc.js
105
108
  - webpage/header.html
106
109
  - webpage/images/logo.png
110
+ - webpage/images/title.png
107
111
  - webpage/index.html
108
112
  - webpage/rdoc/created.rid
109
113
  - webpage/rdoc/images/add.png
@@ -137,7 +141,6 @@ files:
137
141
  - webpage/rdoc/js/search.js
138
142
  - webpage/rdoc/js/search_index.js
139
143
  - webpage/rdoc/js/searcher.js
140
- - webpage/rdoc/Kernel.html
141
144
  - webpage/rdoc/Object.html
142
145
  - webpage/rdoc/Rake/RubyBreakerTestTask.html
143
146
  - webpage/rdoc/Rake.html
@@ -188,17 +191,20 @@ files:
188
191
  - webpage/rdoc/RubyBreaker/Util.html
189
192
  - webpage/rdoc/RubyBreaker.html
190
193
  - webpage/rdoc/table_of_contents.html
191
- - webpage/rdoc/Test/Unit/TestCase.html
192
194
  - webpage/rdoc/Test/Unit.html
193
195
  - webpage/rdoc/Test.html
194
196
  - webpage/rubybreaker.css
197
+ - webpage/topics.html
198
+ - webpage/tutorial.html
195
199
  homepage: http://github.com/rockalizer/rubybreaker
196
200
  licenses:
197
201
  - BSD
198
202
  post_install_message:
199
203
  rdoc_options:
200
- - -x
201
- - lib/rubybreaker/rubylib/core.rb
204
+ - README.md
205
+ - TUTORIAL.md
206
+ - TOPICS.md
207
+ - ABOUT.md
202
208
  require_paths:
203
209
  - lib
204
210
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,3 +0,0 @@
1
-
2
- require_relative "doc/rdoc"
3
-