shenandoah 0.0.0

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 (49) hide show
  1. data/.braids +8 -0
  2. data/.document +5 -0
  3. data/.gitignore +6 -0
  4. data/ChangeLog.markdown +6 -0
  5. data/LICENSE +20 -0
  6. data/LICENSE-Blue-Ridge +20 -0
  7. data/LICENSE-Screw.Unit +22 -0
  8. data/LICENSE-Smoke +22 -0
  9. data/README.markdown +260 -0
  10. data/Rakefile +70 -0
  11. data/VERSION.yml +4 -0
  12. data/lib/shenandoah/buildr.rb +9 -0
  13. data/lib/shenandoah/buildr/locator.rb +17 -0
  14. data/lib/shenandoah/buildr/shenandoah_tasks.rb +18 -0
  15. data/lib/shenandoah/buildr/test_framework.rb +28 -0
  16. data/lib/shenandoah/css/screw.css +90 -0
  17. data/lib/shenandoah/javascript/browser/runner.js +34 -0
  18. data/lib/shenandoah/javascript/common/jquery-1.3.2.js +4376 -0
  19. data/lib/shenandoah/javascript/common/jquery.fn.js +29 -0
  20. data/lib/shenandoah/javascript/common/jquery.print.js +109 -0
  21. data/lib/shenandoah/javascript/common/screw.behaviors.js +129 -0
  22. data/lib/shenandoah/javascript/common/screw.builder.js +104 -0
  23. data/lib/shenandoah/javascript/common/screw.events.js +45 -0
  24. data/lib/shenandoah/javascript/common/screw.matchers.js +254 -0
  25. data/lib/shenandoah/javascript/common/screw.mocking.js +22 -0
  26. data/lib/shenandoah/javascript/common/smoke.core.js +6 -0
  27. data/lib/shenandoah/javascript/common/smoke.mock.js +130 -0
  28. data/lib/shenandoah/javascript/common/smoke.stub.js +29 -0
  29. data/lib/shenandoah/javascript/console/consoleReportForRake.js +32 -0
  30. data/lib/shenandoah/javascript/console/env.rhino.js +8841 -0
  31. data/lib/shenandoah/javascript/console/js.jar +0 -0
  32. data/lib/shenandoah/javascript/console/runner.js +43 -0
  33. data/lib/shenandoah/javascript/console/shell.js.erb +23 -0
  34. data/lib/shenandoah/locator.rb +17 -0
  35. data/lib/shenandoah/runner.rb +69 -0
  36. data/lib/shenandoah/server.rb +88 -0
  37. data/lib/shenandoah/server/views/index.haml +12 -0
  38. data/lib/shenandoah/tasks.rb +58 -0
  39. data/shenandoah.gemspec +133 -0
  40. data/spec/shenandoah/buildr/locator_spec.rb +33 -0
  41. data/spec/shenandoah/buildr/shenandoah_tasks_spec.rb +27 -0
  42. data/spec/shenandoah/buildr/spec_helper.rb +2 -0
  43. data/spec/shenandoah/buildr/test_framework_spec.rb +77 -0
  44. data/spec/shenandoah/locator_spec.rb +74 -0
  45. data/spec/shenandoah/runner_spec.rb +110 -0
  46. data/spec/shenandoah/server_spec.rb +216 -0
  47. data/spec/shenandoah/tasks_spec.rb +76 -0
  48. data/spec/spec_helper.rb +36 -0
  49. metadata +232 -0
data/.braids ADDED
@@ -0,0 +1,8 @@
1
+ ---
2
+ vendor/buildr:
3
+ squashed: true
4
+ url: git://github.com/apache/buildr.git
5
+ type: git
6
+ revision: f726a65f42f8ecd4afe36569f448506183fc1d0a
7
+ branch: trunk
8
+ remote: braid/vendor/buildr
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,6 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ spec/tmp
@@ -0,0 +1,6 @@
1
+ shenandoah 0.0.0
2
+ ================
3
+
4
+ * Initial version -- extracted from PSC's buildr-ridge extension, which was itself derived from the Blue Ridge JavaScript Testing Plugin
5
+ * Supports buildr
6
+ * Supports generic execution with rake
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Rhett Sutphin
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
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.
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2009 Relevance, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
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.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008 Nick Kallen
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008 Andy Kent
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,260 @@
1
+ Shenandoah JavaScript Testing metapackage
2
+ =========================================
3
+
4
+ Shenandoah adds support for command-line and in-browser JavaScript unit tests in your buildr, rails, or other rake-using project. It bundles several great tools together in a convention-over-configuration, Rails-like way. These tools include:
5
+
6
+ * `Rhino` - a Java-based JavaScript interpreter
7
+ * `Screw.Unit` - a behaviour-driven development syntax for JavaScript similar to RSpec
8
+ * `Smoke` - a JavaScript mocking & stubbing library similar to Mocha
9
+ * `env.js` - a DOM implementation written entirely in JavaScript
10
+
11
+ Shenandoah is a generalization of the [Blue Ridge][blue-ridge] plugin for rails. (See below for differences.)
12
+
13
+ [blue-ridge]: http://github.com/relevance/blue-ridge
14
+
15
+ General Use
16
+ -----------
17
+
18
+ Shenandoah provides a command-line runner and a server to enable in-browser testing with simple path management.
19
+
20
+ The command-line runner is a lot like any other test framework's: It runs some or all of the specs and tells you which ones fail.
21
+
22
+ The server (after you start it), is available at [http://localhost:4410/](http://localhost:4410/). The root path will give you a list of specs, linked to the pages where you can run them.
23
+
24
+ Shenandoah also provides an interactive shell a la `irb`. You can use it to experiment with javascript in a similar context to the command line runner.
25
+
26
+ The following sections describe how to invoke Shenandoah with various build systems.
27
+
28
+ Installing and Running
29
+ ----------------------
30
+
31
+ To install:
32
+
33
+ $ gem install shenandoah
34
+
35
+ ### Use with buildr
36
+
37
+ # In your buildfile
38
+ require 'shenandoah/buildr'
39
+ # ...
40
+ define :web_js do
41
+ test.using :shenandoah, :main_path => project('web')._("src/main/webapp/js")
42
+ end
43
+
44
+ In buildr, Shenandoah expects to find your specs in the `src/spec/javascript` directory. The main path defaults to `src/main/javascript`, but may be changed as in the example.
45
+
46
+ To run the specs from the command line:
47
+
48
+ $ buildr web_js:test
49
+
50
+ To run an individual spec file called "application_spec.js":
51
+
52
+ $ cd web_js
53
+ web_js$ buildr test:application
54
+
55
+ To start the server:
56
+
57
+ $ buildr web_js:shen:serve
58
+
59
+ To start the shell:
60
+
61
+ $ buildr web_js:shen:shell
62
+
63
+ ### Use with Rails
64
+
65
+ TODO
66
+
67
+ ### Use with rake (in general)
68
+
69
+ # In your Rakefile
70
+ require 'rubygems'
71
+ require 'shenandoah/tasks'
72
+ Shenandoah::Tasks.new(:main_path => 'public/javascript', :spec_path => 'test/javascript')
73
+
74
+ With plain rake, Shenandoah defaults to `lib` for the main path and `spec` for the spec path.
75
+
76
+ To run all the specs from the command_line:
77
+
78
+ $ rake shen:spec
79
+
80
+ To run an individual spec file called "application_spec.js":
81
+
82
+ $ rake shen:spec SHEN_SPEC=application
83
+
84
+ To start the server:
85
+
86
+ $ rake shen:serve
87
+
88
+ To start the shell:
89
+
90
+ $ rake shen:shell
91
+
92
+ Specs and Fixtures
93
+ ------------------
94
+
95
+ Each Shenandoah spec is two files: a javascript spec (e.g. `name_spec.js`) and and HTML fixture (e.g. `name.html`). The spec contains the the actual Screw.Unit test definitions. The fixture contains the DOM that the spec (or the code under test) relies on to work.
96
+
97
+ Example Using jQuery
98
+ --------------------
99
+
100
+ Shenandoah is opinionated and assumes you're using jQuery by default. The plugin itself actually uses jQuery under the covers to run Screw.Unit.
101
+
102
+ require_spec("spec_helper.js");
103
+ require_main("application.js");
104
+
105
+ Screw.Unit(function() {
106
+ describe("Your application javascript", function() {
107
+ it("does something", function() {
108
+ expect("hello").to(equal, "hello");
109
+ });
110
+
111
+ it("accesses the DOM from fixtures/application.html", function() {
112
+ expect($('.select_me').length).to(equal, 2);
113
+ });
114
+ });
115
+ });
116
+
117
+ (By the way, we don’t actually encourage you to write specs and tests for standard libraries like JQuery and Prototype. It just makes for an easy demo.)
118
+
119
+ Example Using Prototype
120
+ -----------------------
121
+
122
+ It's very easy to add support for Prototype. Here's an example spec:
123
+
124
+ jQuery.noConflict();
125
+
126
+ require_spec("spec_helper.js");
127
+ require_main("prototype.js");
128
+ require_main("application.js");
129
+
130
+ Screw.Unit(function() {
131
+ describe("Your application javascript", function() {
132
+ it("does something", function() {
133
+ expect("hello").to(equal, "hello");
134
+ });
135
+
136
+ it("accesses the DOM from fixtures/application.html", function() {
137
+ expect($$('.select_me').length).to(equal, 2);
138
+ });
139
+ });
140
+ });
141
+
142
+ More Examples
143
+ -------------
144
+
145
+ TODO.
146
+
147
+ <!--
148
+ To see Shenandoah in action inside a working Rails app, check out the [Shenandoah sample application](http://github.com/relevance/shenandoah-rails-sample-app). Among other things, this sample app includes examples of:
149
+
150
+ * using nested `describe` functions
151
+ * setting up per-spec HTML "fixtures"
152
+ * stubbing functions
153
+ * mocking functions
154
+ * running the javascript specs as part of your default Rake task
155
+ -->
156
+
157
+ JavaScript API
158
+ --------------
159
+
160
+ Shenandoah provides a handful of functions that help you write specs that can run inside a web browser as well from the Rhino command-line test runner.
161
+
162
+ ### require_main(filename)
163
+
164
+ Loads a dependency from the main path.
165
+
166
+ When running from the command line, `require_main` becomes a Rhino call to `load`, resolving the file against the configured `main_path`. In a web browser, `require_main` loads and evaluates the script using a synchronous background request to ensure that all the scripts are loaded in order.
167
+
168
+ ### require_spec(filename)
169
+
170
+ Loads a dependency from the spec path.
171
+
172
+ Just like `require_main`, but for spec files.
173
+
174
+ The Shell
175
+ ---------
176
+
177
+ Shenandoah provides an `irb`-like JavaScript shell for debugging your JavaScript code. jQuery and env.js are pre-loaded for you to make debugging DOM code easy.
178
+
179
+ =================================================
180
+ Rhino JavaScript Shell
181
+ To exit type 'exit', 'quit', or 'quit()'.
182
+ =================================================
183
+ - loaded env.js
184
+ - sample DOM loaded
185
+ - jQuery-1.2.6 loaded
186
+ =================================================
187
+ Rhino 1.7 release 2 PRERELEASE 2008 07 28
188
+ js> print("Hello World!")
189
+ Hello World!
190
+ js>
191
+
192
+ Note that if you have `rlwrap` installed and on the command line path (and you really, really should!), then command-line history and readline arrow-up and down will be properly supported automatically. (You can get `rlwrap` from your friendly neighborhood package manager.)
193
+
194
+ Mocking Example with Smoke
195
+ --------------------------
196
+
197
+ Smoke is a JavaScript mocking and stubbing toolkit that is somewhat similar to FlexMock or Mocha. It is automatically wired-in to undo its mocking after each Screw.Unit `it` block. Here's an example.
198
+
199
+ it("calculates the total cost of a contract by adding the prices of each component", function() {
200
+ var componentX = {}, componentY = {};
201
+ mock(SalesContract).should_receive("calculateComponentPrice").with_arguments(componentX).exactly(1, "times").and_return(42);
202
+ mock(SalesContract).should_receive("calculateComponentPrice").with_arguments(componentY).exactly(1, "times").and_return(24);
203
+ expect(SalesContract.calculateTotalCost([componentX, componentY])).to(equal, 66);
204
+ });
205
+
206
+ Note that the flexible nature of the JavaScript the language means that you might not need to use Smoke, especially for stubbing.
207
+
208
+ Tips & Tricks
209
+ -------------
210
+ * Avoid using `print` in your tests while debugging. It works fine from the command line but causes lots of headaches in browser. (Just imagine a print dialog opening ten or fifteen times and then Firefox crashing. This is a mistake I've made too many times! Trust me!)
211
+
212
+ Bugs & Patches
213
+ --------------
214
+
215
+ If you see any bugs or possible improvements, please use the project's [GitHub issue tracker](http://github.com/rsutphin/shenandoah/issues) to report them.
216
+
217
+ If you like, you could even fork the [GitHub repo](http://www.github.com/rsutphin/shenandoah) and start hacking.
218
+
219
+ Differences from Blue Ridge
220
+ ---------------------------
221
+
222
+ Shenandoah is based on the [Blue Ridge JavaScript Testing Rails Plugin][blue-ridge]. The main difference is that it works for any project that uses rake or buildr, not just rails projects. If you are using a rails project, you might consider using Shenandoah instead of Blue Ridge anyway:
223
+
224
+ * Blue Ridge requires all specs to be in the same directory (subdirectories are not allowed). Shenandoah does not have this limitation.
225
+ * Shenandoah's design places the spec js and the fixture html in the same directory. Blue Ridge puts them in separate directories, leading to parallel hierarchies.
226
+ * Shenandoah provides an in-browser index for the specs. Blue Ridge requires opening each HTML fixture separately.
227
+
228
+ The cost for all this is that Shenandoah fixtures can't be opened directly in the browser &mdash; they can only be opened via the server.
229
+
230
+ Links
231
+ -----
232
+
233
+ * [Blue Ridge JavaScript Testing Rails Plugin](http://github.com/relevance/blue-ridge)
234
+ * [Blue Ridge Sample App](http://github.com/relevance/blue-ridge-sample-app)
235
+ * [Justin Gehtland's "Fully Headless JSSpec" Blog Post](http://blog.thinkrelevance.com/2008/7/31/fully-headless-jsspec)
236
+ * [Screw.Unit](http://github.com/nkallen/screw-unit)
237
+ * [Screw.Unit Mailing List](http://groups.google.com/group/screw-unit)
238
+ * [Smoke](http://github.com/andykent/smoke)
239
+ * [env.js](http://github.com/thatcher/env-js)
240
+ * [env.js Mailing List](http://groups.google.com/group/envjs)
241
+ * [Mozilla Rhino](http://www.mozilla.org/rhino/)
242
+ * [W3C DOM Specifications](http://www.w3.org/DOM/DOMTR)
243
+
244
+ Contributors
245
+ ------------
246
+ * Justin Gehtland
247
+ * Geof Dagley
248
+ * Larry Karnowski
249
+ * Chris Thatcher (for numerous env.js bug fixes!)
250
+ * Raimonds Simanovskis
251
+ * Jason Rudolph
252
+
253
+ Copyrights
254
+ ------------
255
+ * Copyright &copy; 2009 Rhett Sutphin, under the MIT license
256
+ * Based on blue-ridge, Copyright 2008-2009 [Relevance, Inc.](http://www.thinkrelevance.com/), under the MIT license
257
+ * env.js - Copyright 2007-2009 John Resig, under the MIT License
258
+ * Screw.Unit - Copyright 2008 Nick Kallen, license attached
259
+ * Rhino - Copyright 2009 Mozilla Foundation, GPL 2.0
260
+ * Smoke - Copyright 2008 Andy Kent, license attached
@@ -0,0 +1,70 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "shenandoah"
8
+ gem.summary = %Q{A javascript test framework for buildr, rails, and other ruby-built projects}
9
+ gem.email = "rhett@detailedbalance.net"
10
+ gem.homepage = "http://github.com/rsutphin/shenandoah"
11
+ gem.authors = ["Rhett Sutphin"]
12
+ gem.rubyforge_project = "detailedbalance"
13
+
14
+ # Exclude test-only vendored buildr
15
+ gem.files.exclude("vendor/**/*")
16
+
17
+ gem.add_runtime_dependency('sinatra', '>= 0.9.2')
18
+ gem.add_runtime_dependency('haml', '>= 2.0.9')
19
+ gem.add_runtime_dependency('rake')
20
+
21
+ # Have to use rspec 1.2.4 for buildr compat
22
+ gem.add_development_dependency('rspec', '= 1.2.4')
23
+ gem.add_development_dependency('rack-test', '>= 0.3.0')
24
+ gem.add_development_dependency('rspec_hpricot_matchers', '>= 1.0.0')
25
+ gem.add_development_dependency('braid', '>= 0.5.0')
26
+
27
+ # These are the dependencies for the vendored buildr (used for testing)
28
+ gem.add_development_dependency('rake', '= 0.8.4')
29
+ gem.add_development_dependency('net-ssh', '= 2.0.11')
30
+ gem.add_development_dependency('net-sftp', '= 2.0.2')
31
+ gem.add_development_dependency('highline', '= 1.5.0')
32
+ gem.add_development_dependency('hoe', '= 1.12.2')
33
+ end
34
+
35
+ Jeweler::RubyforgeTasks.new
36
+ rescue LoadError
37
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
38
+ end
39
+
40
+ require 'spec/rake/spectask'
41
+ Spec::Rake::SpecTask.new(:spec) do |spec|
42
+ spec.libs << 'lib' << 'spec'
43
+ spec.spec_files = FileList['spec/**/*_spec.rb']
44
+ end
45
+
46
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
47
+ spec.libs << 'lib' << 'spec'
48
+ spec.pattern = 'spec/**/*_spec.rb'
49
+ spec.rcov = true
50
+ # rcov can't tell that /Library/Ruby is a system path
51
+ spec.rcov_opts = ['--exclude', "spec/*,/Library/Ruby/*"]
52
+ end
53
+
54
+ task :default => :spec
55
+
56
+ require 'rake/rdoctask'
57
+ Rake::RDocTask.new do |rdoc|
58
+ if File.exist?('VERSION.yml')
59
+ config = YAML.load(File.read('VERSION.yml'))
60
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
61
+ else
62
+ version = ""
63
+ end
64
+
65
+ rdoc.rdoc_dir = 'rdoc'
66
+ rdoc.title = "shenandoah #{version}"
67
+ rdoc.rdoc_files.include('README*')
68
+ rdoc.rdoc_files.include('lib/**/*.rb')
69
+ end
70
+