hexx-suit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +71 -0
  3. data/.yardopts +3 -0
  4. data/Guardfile +29 -0
  5. data/LICENSE +21 -0
  6. data/README.md +164 -0
  7. data/Rakefile +18 -0
  8. data/bin/hexx-suit +14 -0
  9. data/config/initializers/focus.rb +5 -0
  10. data/config/initializers/garbage_collection.rb +11 -0
  11. data/config/initializers/i18n.rb +3 -0
  12. data/config/initializers/metric_fu.rb +0 -0
  13. data/config/initializers/random_order.rb +4 -0
  14. data/config/initializers/rspec.rb +11 -0
  15. data/lib/hexx-suit.rb +16 -0
  16. data/lib/hexx/suit.rb +101 -0
  17. data/lib/hexx/suit/install.rb +85 -0
  18. data/lib/hexx/suit/install/Guardfile +6 -0
  19. data/lib/hexx/suit/install/Rakefile +17 -0
  20. data/lib/hexx/suit/install/_metrics +5 -0
  21. data/lib/hexx/suit/install/_rspec +2 -0
  22. data/lib/hexx/suit/install/_rubocop.yml +74 -0
  23. data/lib/hexx/suit/install/_yardopts +2 -0
  24. data/lib/hexx/suit/install/metrics/STYLEGUIDE +230 -0
  25. data/lib/hexx/suit/install/metrics/cane.yml +5 -0
  26. data/lib/hexx/suit/install/metrics/churn.yml +6 -0
  27. data/lib/hexx/suit/install/metrics/flay.yml +2 -0
  28. data/lib/hexx/suit/install/metrics/metric_fu.yml +15 -0
  29. data/lib/hexx/suit/install/metrics/pippi.yml +3 -0
  30. data/lib/hexx/suit/install/metrics/reek.yml +1 -0
  31. data/lib/hexx/suit/install/metrics/roodi.yml +24 -0
  32. data/lib/hexx/suit/install/metrics/rubocop.yml +79 -0
  33. data/lib/hexx/suit/install/metrics/saikuro.yml +3 -0
  34. data/lib/hexx/suit/install/metrics/simplecov.yml +8 -0
  35. data/lib/hexx/suit/install/metrics/yardstick.yml +37 -0
  36. data/lib/hexx/suit/metrics/base.rb +96 -0
  37. data/lib/hexx/suit/metrics/metric_fu.rb +165 -0
  38. data/lib/hexx/suit/metrics/metric_fu/base.rb +59 -0
  39. data/lib/hexx/suit/metrics/metric_fu/cane.rb +24 -0
  40. data/lib/hexx/suit/metrics/metric_fu/churn.rb +24 -0
  41. data/lib/hexx/suit/metrics/metric_fu/flay.rb +24 -0
  42. data/lib/hexx/suit/metrics/metric_fu/reek.rb +32 -0
  43. data/lib/hexx/suit/metrics/metric_fu/roodi.rb +32 -0
  44. data/lib/hexx/suit/metrics/metric_fu/saikuro.rb +24 -0
  45. data/lib/hexx/suit/metrics/pippi.rb +89 -0
  46. data/lib/hexx/suit/metrics/rubocop.rb +39 -0
  47. data/lib/hexx/suit/metrics/simplecov.rb +119 -0
  48. data/lib/hexx/suit/metrics/yardstick.rb +91 -0
  49. data/lib/hexx/suit/utils/system.rb +66 -0
  50. data/lib/hexx/suit/version.rb +7 -0
  51. data/lib/tasks/check.rake +32 -0
  52. data/lib/tasks/check/coverage.rake +27 -0
  53. data/lib/tasks/check/fu.rake +27 -0
  54. data/lib/tasks/check/inch.rake +11 -0
  55. data/lib/tasks/check/pippi.rake +31 -0
  56. data/lib/tasks/check/rubocop.rake +39 -0
  57. data/lib/tasks/check/yardstick.rake +27 -0
  58. data/lib/tasks/debug.rake +6 -0
  59. data/lib/tasks/test.rake +6 -0
  60. data/spec/spec_helper.rb +10 -0
  61. data/spec/support/config/sandbox.rb +16 -0
  62. data/spec/support/config/tasks.rb +32 -0
  63. data/spec/support/sandbox/helpers.rb +62 -0
  64. data/spec/support/sandbox/matchers.rb +21 -0
  65. data/spec/tests/bin/install_spec.rb +29 -0
  66. data/spec/tests/lib/install_spec.rb +34 -0
  67. data/spec/tests/lib/metrics/metric_fu/cane_spec.rb +32 -0
  68. data/spec/tests/lib/metrics/metric_fu/churn_spec.rb +31 -0
  69. data/spec/tests/lib/metrics/metric_fu/flay_spec.rb +27 -0
  70. data/spec/tests/lib/metrics/metric_fu/reek_spec.rb +22 -0
  71. data/spec/tests/lib/metrics/metric_fu/roodi_spec.rb +22 -0
  72. data/spec/tests/lib/metrics/metric_fu/saikuro_spec.rb +30 -0
  73. data/spec/tests/lib/metrics/metric_fu_spec.rb +181 -0
  74. data/spec/tests/lib/metrics/pippi_spec.rb +102 -0
  75. data/spec/tests/lib/metrics/rubocop_spec.rb +58 -0
  76. data/spec/tests/lib/metrics/simplecov_spec.rb +102 -0
  77. data/spec/tests/lib/metrics/yardstick_spec.rb +110 -0
  78. data/spec/tests/lib/utils/system_spec.rb +85 -0
  79. data/spec/tests/suit_spec.rb +96 -0
  80. data/spec/tests/tasks/check/coverage/display_spec.rb +49 -0
  81. data/spec/tests/tasks/check/coverage/run_spec.rb +25 -0
  82. data/spec/tests/tasks/check/coverage_spec.rb +26 -0
  83. data/spec/tests/tasks/check/display_spec.rb +50 -0
  84. data/spec/tests/tasks/check/fu/display_spec.rb +42 -0
  85. data/spec/tests/tasks/check/fu/run_spec.rb +42 -0
  86. data/spec/tests/tasks/check/fu_spec.rb +18 -0
  87. data/spec/tests/tasks/check/inch_spec.rb +19 -0
  88. data/spec/tests/tasks/check/pippi/display_spec.rb +47 -0
  89. data/spec/tests/tasks/check/pippi/run_spec.rb +25 -0
  90. data/spec/tests/tasks/check/pippi_spec.rb +26 -0
  91. data/spec/tests/tasks/check/rubocop/display_spec.rb +61 -0
  92. data/spec/tests/tasks/check/rubocop/run_spec.rb +78 -0
  93. data/spec/tests/tasks/check/rubocop_spec.rb +26 -0
  94. data/spec/tests/tasks/check/run_spec.rb +44 -0
  95. data/spec/tests/tasks/check/yardstick/display_spec.rb +51 -0
  96. data/spec/tests/tasks/check/yardstick/run_spec.rb +20 -0
  97. data/spec/tests/tasks/check/yardstick_spec.rb +26 -0
  98. data/spec/tests/tasks/check_spec.rb +56 -0
  99. data/spec/tests/tasks/debug_spec.rb +21 -0
  100. data/spec/tests/tasks/test_spec.rb +21 -0
  101. metadata +414 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6db3970977e3cec6c389e31e36e13df1a1744c25
4
+ data.tar.gz: 6330afe7eb0c5fd3c67d61d23b58c4acdefddf82
5
+ SHA512:
6
+ metadata.gz: 8936e786a6839d456fd3da48ae37e11190481c83f8e399ac22b456bb0f5cf7d6ce9c61f591ff92978428afd0ef651011ad423eb4bd7b6f90c866c23f7669d018
7
+ data.tar.gz: 74512e4cafa561cdb5ca4bd0ceb2e953100b504b4b7a4e6afb497c015f9c66d67f0084699a6cdd3b2c1496a6ef5679aa1ed4666b91011abd1903ddc2a1342c55
@@ -0,0 +1,71 @@
1
+ AllCops:
2
+ Exclude:
3
+ - '**/db/schema.rb'
4
+
5
+ Lint/HandleExceptions:
6
+ Exclude:
7
+ - 'spec/**/*'
8
+
9
+ Lint/RescueException:
10
+ Exclude:
11
+ - 'spec/**/*'
12
+
13
+ Metrics/ClassLength:
14
+ Exclude:
15
+ - 'lib/**/generator*'
16
+
17
+ Style/AccessorMethodName:
18
+ Exclude:
19
+ - 'spec/**/*'
20
+
21
+ Style/AsciiComments:
22
+ Enabled: false
23
+
24
+ Style/ClassAndModuleChildren:
25
+ Exclude:
26
+ - 'spec/**/*'
27
+
28
+ Style/Documentation:
29
+ Exclude:
30
+ - 'lib/**/version.rb'
31
+ - 'spec/**/*'
32
+
33
+ Style/EmptyLinesAroundBlockBody:
34
+ Enabled: false
35
+
36
+ Style/EmptyLinesAroundClassBody:
37
+ Enabled: false
38
+
39
+ Style/EmptyLinesAroundMethodBody:
40
+ Enabled: false
41
+
42
+ Style/EmptyLinesAroundModuleBody:
43
+ Enabled: false
44
+
45
+ Style/EmptyLineBetweenDefs:
46
+ Enabled: false
47
+
48
+ Style/FileName:
49
+ Enabled: false
50
+
51
+ Style/RaiseArgs:
52
+ EnforcedStyle: compact
53
+
54
+ Style/SingleLineMethods:
55
+ Exclude:
56
+ - 'spec/**/*'
57
+
58
+ Style/SpecialGlobalVars:
59
+ Exclude:
60
+ - 'Gemfile'
61
+ - '*.gemspec'
62
+
63
+ Style/StringLiterals:
64
+ EnforcedStyle: double_quotes
65
+
66
+ Style/SingleSpaceBeforeFirstArg:
67
+ Enabled: false
68
+
69
+ Style/TrivialAccessors:
70
+ Exclude:
71
+ - 'spec/**/*'
@@ -0,0 +1,3 @@
1
+ --asset LICENSE
2
+ --exclude lib/hexx/version.rb
3
+ --hide-api hide
@@ -0,0 +1,29 @@
1
+ guard :rspec, cmd: "bundle exec rspec" do
2
+
3
+ watch("bin/hexx-suit") { "spec/tests/bin/install_spec.rb" }
4
+
5
+ watch(%r{^lib/tasks/(.+)\.rb$}) do |m|
6
+ [
7
+ "spec/tests/tasks/#{ m[1] }_spec.rb",
8
+ "spec/tests/tasks/#{ m[1] }/**/*_spec.rb"
9
+ ]
10
+ end
11
+
12
+ watch(%r{^lib/hexx/suit/(.+)\.rb$}) do |m|
13
+ "spec/tests/lib/#{ m[1] }_spec.rb"
14
+ end
15
+
16
+ watch(%r{^lib/hexx/suit/(.+)/base\.rb$}) do |m|
17
+ "spec/tests/lib/#{ m[1] }/*_spec.rb"
18
+ end
19
+
20
+ watch("lib/hexx/suit.rb") { "spec" }
21
+
22
+ watch("lib/hexx-suit.rb") { "spec" }
23
+
24
+ watch(/^spec.+_spec\.rb$/)
25
+
26
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
27
+
28
+ watch("spec/spec_helper*.rb") { "spec" }
29
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2014 Andrew Kozin, https://github.com/nepalez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,164 @@
1
+ # Hexx::Suit
2
+
3
+ [![Gem Version](https://img.shields.io/gem/v/hexx-suit.svg?style=flat)][gem]
4
+ [![Build Status](https://img.shields.io/travis/nepalez/hexx-suit/master.svg?style=flat)][travis]
5
+ [![Dependency Status](https://img.shields.io/gemnasium/nepalez/hexx-suit.svg?style=flat)][gemnasium]
6
+ [![Coverage](https://img.shields.io/coveralls/nepalez/hexx-suit.svg?style=flat)][coveralls]
7
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](file:LICENSE)
8
+
9
+ [gem]: https://rubygems.org/gems/hexx-suit
10
+ [travis]: https://travis-ci.org/nepalez/hexx-suit
11
+ [gemnasium]: https://gemnasium.com/nepalez/hexx-suit
12
+ [codeclimate]: https://codeclimate.com/github/nepalez/hexx-suit
13
+ [coveralls]: https://coveralls.io/r/nepalez/hexx-suit
14
+
15
+ The module collects the test/development suit to be shared among projects, along with base settings for included packages.
16
+
17
+ It also defines a set of Rake tasks.
18
+
19
+ ## Installation
20
+
21
+ Add this line to your application's Gemfile:
22
+
23
+ ```ruby
24
+ group :test, :development do
25
+ gem "hexx-suit"
26
+ end
27
+ ```
28
+
29
+ Then execute:
30
+
31
+ ```
32
+ $ bundle
33
+ ```
34
+
35
+ And run the task from the application root:
36
+
37
+ ```
38
+ $ hexx-suit install
39
+ ```
40
+
41
+ Require the gem in the `spec_helper.rb` **before** loading application:
42
+
43
+ ```ruby
44
+ # spec/spec_helper.rb
45
+ require "hexx-suit"
46
+
47
+ # Loads coveralls and pippi runtime metrics
48
+ # in the application's scope.
49
+ Hexx::Suit.load_metrics_for(self)
50
+
51
+ # ...
52
+ require "my_app"
53
+ ```
54
+
55
+ You can configure all metrics separately in a corresponding yml files, that are created at `config/metrics` directory. The directory also contains default STYLEGUIDE. Feel free to adapt it to your needs.
56
+
57
+ ## Usage
58
+
59
+ The gem adds three tasks for a development process authomation:
60
+
61
+ ### Test
62
+
63
+ The task runs rspec (runs no coverage controls) **in a bundle environment**.
64
+
65
+ ```
66
+ $ rake test
67
+ ```
68
+
69
+ This is a simple shortcut for longer syntaxes:
70
+
71
+ ```
72
+ $ bundle exec rspec spec
73
+ ```
74
+
75
+ ### Debug
76
+
77
+ The tasks runs specs wrapped to pry `rescue` command.
78
+
79
+ ```
80
+ $ rake debug
81
+ ```
82
+
83
+ This is the same as:
84
+
85
+ ```
86
+ $ bundle exec rescue rspec spec
87
+ ```
88
+
89
+ ### Check
90
+
91
+ The task runs rspec under the test coverage control, and then calls all the code metrics, except for mutation testing.
92
+
93
+ ```
94
+ $ rake check
95
+ ```
96
+
97
+ You can use single metrics as well:
98
+
99
+ ```
100
+ $ rake check:yardstick
101
+ ```
102
+
103
+ See all tasks at:
104
+
105
+ ```
106
+ $ rake -T check
107
+ ```
108
+
109
+ All the tasks will use settings from `config/metrics` folder.
110
+
111
+ ## Package content
112
+
113
+ The gem loads dependencies from the projects below.
114
+
115
+ ### Tools for Testing
116
+
117
+ * [rspec v3.0+](http://rspec.info/) - a Ruby test framework.
118
+ * [guard-rspec](https://github.com/guard/guard-rspec) - an authomatic tests launcher.
119
+ * [coveralls](https://coveralls.io/) - a tool for the test coverage control.
120
+ * [mutant](https://github.com/mbj/mutant) - a Ruby mutation testing.
121
+
122
+ ### Tools for Debugging
123
+
124
+ * [pry](https://github.com/pry/pry/wiki) - a Ruby development console and debugging tool.
125
+ * [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug)
126
+ * [pry-rescue](https://github.com/ConradIrwin/pry-rescue)
127
+ * [pry-stack-explorer](https://github.com/pry/pry-stack_explorer)
128
+
129
+ ### Tools for Tasks Authomation
130
+
131
+ * [rake](https://github.com/ruby/rake) - a Ruby command line interface (CLI).
132
+
133
+ ### Code Metrics
134
+
135
+ * [rubocop](https://github.com/bbatsov/rubocop) - a Ruby static code analyzer
136
+ * [metric_fu](https://github.com/metricfu/metric_fu/) - a collection of Ruby code analyzers.
137
+ * [pippi](https://github.com/tcopeland/pippi) - a utility for finding suboptimal Ruby class API usage.
138
+
139
+ ### Tools for Documenting
140
+
141
+ * [yard](https://yardoc.org/) - a Ruby documentation tool.
142
+ * [inch](https://trivelop.de/inch/) - a documentation measurement tool.
143
+ * [yardstick](https://github.com/dkubb/yardstick) - a tool that verifies documentation coverage of Ruby code
144
+
145
+ ## Compatibility
146
+
147
+ Tested under MRI rubies >= 2.1
148
+
149
+ RSpec 3.0+ used for testing
150
+
151
+ ## Contributing
152
+
153
+ * Fork the project.
154
+ * Make your feature addition or bug fix.
155
+ * Add tests for it. This is important so I don't break it in a
156
+ future version unintentionally.
157
+ * Commit, do not mess with Rakefile or version
158
+ (if you want to have your own version, that is fine but bump version
159
+ in a commit by itself I can ignore when I pull)
160
+ * Send me a pull request. Bonus points for topic branches.
161
+
162
+ ## License
163
+
164
+ See [MIT LICENSE](file: LICENSE).
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ begin
3
+ require "bundler/setup"
4
+ rescue LoadError
5
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
6
+ exit
7
+ end
8
+
9
+ # Loads bundler tasks
10
+ Bundler::GemHelper.install_tasks
11
+
12
+ # Loads the Hexx::Suit without tasks
13
+ require "hexx-suit"
14
+
15
+ # Sets the :spec task to default
16
+ task :default do
17
+ system "bundle exec rspec spec"
18
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require "hexx-suit"
3
+
4
+ # Command line runner.
5
+ class CLI < Thor
6
+ register(
7
+ Hexx::Suit::Install,
8
+ "install",
9
+ "install [NAME]",
10
+ "Creates a Rakefile in the application root."
11
+ )
12
+ end
13
+
14
+ CLI.start
@@ -0,0 +1,5 @@
1
+ # Runs tests tagged by :focus only
2
+ RSpec.configure do |config|
3
+ config.filter_run focus: true
4
+ config.run_all_when_everything_filtered = true
5
+ end
@@ -0,0 +1,11 @@
1
+ # Delays garbage collection until the end of testing.
2
+ RSpec.configure do |config|
3
+
4
+ config.before(:each) do
5
+ GC.disable
6
+ end
7
+
8
+ config.after(:each) do
9
+ GC.enable
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ require "i18n"
2
+
3
+ I18n.enforce_available_locales = false
File without changes
@@ -0,0 +1,4 @@
1
+ # Runs tests in a random order
2
+ RSpec.configure do |config|
3
+ config.order = "random"
4
+ end
@@ -0,0 +1,11 @@
1
+ # Configures RSpec default settings
2
+ RSpec.configure do |config|
3
+
4
+ config.mock_with :rspec do |mocks|
5
+ mocks.yield_receiver_to_any_instance_implementation_blocks = false
6
+ end
7
+
8
+ config.expect_with :rspec do |c|
9
+ c.syntax = :expect
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ # Loads the parts of the suit to be available.
2
+ %w(i18n pry rake rspec thor yaml).each { |gem| require gem }
3
+
4
+ # Loads the code (the order is significant)
5
+ Dir.chdir File.expand_path("../..", __FILE__) do
6
+ Dir[
7
+ "./config/initializers/*.rb",
8
+ "./lib/hexx/suit/utils/*.rb",
9
+ "./lib/hexx/suit/metrics/base.rb",
10
+ "./lib/hexx/suit/metrics/metric_fu/base.rb",
11
+ "./lib/hexx/suit/metrics/metric_fu/*.rb",
12
+ "./lib/hexx/suit/metrics/*.rb",
13
+ "./lib/hexx/suit/*.rb",
14
+ "./lib/hexx/suit.rb"
15
+ ].each { |file| require file }
16
+ end
@@ -0,0 +1,101 @@
1
+ # Shared namespace for the Hexx-based gems
2
+ module Hexx
3
+
4
+ # Namespace for the module.
5
+ #
6
+ # @api public
7
+ module Suit
8
+ class << self
9
+
10
+ # Loads all the necessary rake tasks
11
+ #
12
+ # @example
13
+ # Hexx::Suit.install_tasks
14
+ #
15
+ # @return [self]
16
+ def install_tasks
17
+ load_gem_tasks
18
+ load_rspec_tasks
19
+ load_custom_tasks
20
+
21
+ self
22
+ end
23
+
24
+ # Loads runtime metrics in a given scope
25
+ #
26
+ # Checks if a corresponding environment is set
27
+ #
28
+ # @example
29
+ # # spec/spec_helper.rb
30
+ # Hexx::Suit.load_metrics_for(self)
31
+ #
32
+ # @param [Object] scope
33
+ #
34
+ # @return [self]
35
+ def load_metrics_for(scope)
36
+ load_pippi_for(scope)
37
+ load_coverage_for(scope)
38
+
39
+ self
40
+ end
41
+
42
+ private
43
+
44
+ # Loads runtime coverage metric in a given scope
45
+ #
46
+ # @param [Object] scope
47
+ #
48
+ # @return self
49
+ def load_coverage_for(scope)
50
+ return unless ENV["USE_SIMPLECOV"]
51
+ scope.instance_eval { Hexx::Suit::Metrics::SimpleCov.run }
52
+ end
53
+
54
+ # Loads runtime pippi metric in a given scope
55
+ #
56
+ # @param [Object] scope
57
+ #
58
+ # @return [self]
59
+ def load_pippi_for(scope)
60
+ return unless ENV["USE_PIPPI"]
61
+ scope.instance_eval { Hexx::Suit::Metrics::Pippi.run }
62
+ end
63
+
64
+ # Loads bundler rake tasks
65
+ #
66
+ # @return [self]
67
+ #
68
+ # @api private
69
+ def load_gem_tasks
70
+ require "bundler/gem_tasks"
71
+ ::Bundler::GemHelper.install_tasks
72
+
73
+ self
74
+ end
75
+
76
+ # Loads rspec +spec+ rake task
77
+ #
78
+ # @return [self]
79
+ #
80
+ # @api private
81
+ def load_rspec_tasks
82
+ require "rspec/core/rake_task"
83
+ ::RSpec::Core::RakeTask.new(:spec)
84
+
85
+ self
86
+ end
87
+
88
+ # Loads rake tasks, defined in the gem
89
+ #
90
+ # @return [self]
91
+ #
92
+ # @api private
93
+ def load_custom_tasks
94
+ tasks = ::File.expand_path "../../tasks/**/*.rake", __FILE__
95
+ ::Dir[tasks].each { |task| load task }
96
+
97
+ self
98
+ end
99
+ end # singleton_class Suit
100
+ end # module Suit
101
+ end # module Hexx