cerberus 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/CHANGES +159 -129
  2. data/LICENSE +21 -21
  3. data/README +75 -75
  4. data/Rakefile +161 -159
  5. data/bin/cerberus +2 -2
  6. data/lib/cerberus/builder/maven2.rb +38 -38
  7. data/lib/cerberus/builder/rake.rb +7 -7
  8. data/lib/cerberus/builder/rant.rb +7 -7
  9. data/lib/cerberus/builder/rspec.rb +13 -0
  10. data/lib/cerberus/builder/ruby_base.rb +48 -47
  11. data/lib/cerberus/cli.rb +73 -70
  12. data/lib/cerberus/component_lazy_loader.rb +2 -0
  13. data/lib/cerberus/config.example.yml +28 -28
  14. data/lib/cerberus/config.rb +47 -46
  15. data/lib/cerberus/constants.rb +8 -8
  16. data/lib/cerberus/latch.rb +26 -26
  17. data/lib/cerberus/manager.rb +296 -267
  18. data/lib/cerberus/publisher/base.rb +47 -47
  19. data/lib/cerberus/publisher/gmailer.rb +17 -0
  20. data/lib/cerberus/publisher/irc.rb +27 -27
  21. data/lib/cerberus/publisher/jabber.rb +25 -25
  22. data/lib/cerberus/publisher/mail.rb +36 -36
  23. data/lib/cerberus/publisher/netsmtp_tls_fix.rb +66 -66
  24. data/lib/cerberus/publisher/rss.rb +27 -28
  25. data/lib/cerberus/scm/cvs.rb +48 -48
  26. data/lib/cerberus/scm/darcs.rb +70 -70
  27. data/lib/cerberus/scm/svn.rb +83 -83
  28. data/lib/cerberus/utils.rb +156 -156
  29. data/test/config_test.rb +45 -45
  30. data/test/functional_test.rb +288 -287
  31. data/test/integration_test.rb +104 -104
  32. data/test/irc_publisher_test.rb +18 -18
  33. data/test/jabber_publisher_test.rb +21 -21
  34. data/test/mail_publisher_test.rb +25 -25
  35. data/test/maven2_builer_test.rb +81 -81
  36. data/test/mock/irc.rb +20 -20
  37. data/test/mock/manager.rb +10 -10
  38. data/test/mock/xmpp4r.rb +19 -19
  39. data/test/rss_publisher_test.rb +21 -21
  40. data/test/test_helper.rb +105 -105
  41. metadata +58 -40
  42. data/lib/cerberus/helper/xchar.rb +0 -61
data/CHANGES CHANGED
@@ -1,129 +1,159 @@
1
- = Cerberus Changelog
2
-
3
- == Version 0.3.5
4
- Bug fixing
5
-
6
- * Use smpt_settings config option instead of server_settings for ActionMailer
7
- * Fixed problem with incorrect state for output messages [cerberus bug #8682]
8
-
9
- == Version 0.3.4
10
- Added Cerberus hooks that allow running custom tasks on build finish
11
-
12
- * Fixed bug with Cerberus::Util spotted by Mohamemd Alvi
13
-
14
- * Added possibility to add hooks on Cerberus executions. Configuration file format for it is
15
-
16
- hook:
17
- HOOK_NAME:
18
- on_event: successful, setup #by default - run hook for any state
19
- action: 'export CERBERUS_HOME=/home/anatol && sudo chown www-data -R /home/anatol/cerberus && rcov' #Add here any hook you want
20
-
21
- == Version 0.3.3
22
- Major changes
23
-
24
- * Fix Const load problem with Rails 1.2RC1
25
- * Correctly implement Jabber publisher using XMPP4R library
26
- * Upgrade Webgen to 0.4.1
27
- * Added 'getting better/worse' to build messages' subject
28
- * Added possibility to configure events on what you would like to receive messages.
29
- By default used 'default' events. It means all except 'successful' state.
30
- You could set to this options list of any valid states such as [broken, failed, revival, successful, setup] or predefined sets as
31
- [all, default, none].
32
-
33
- You could configure by setting :on_event option to :publisher options branch, or to concrete publisher configuration.
34
- In case if this option added both to :publisher and :publisher,<PUBLISHER> then concrete configurations wins.
35
-
36
- Examples of configuration
37
-
38
- publisher:
39
- on_event: broken, revival
40
- mail:
41
- on_event: all
42
- jabber:
43
- #nothing here
44
-
45
- In given example we would send messages about ALL events by mail and only messages about brokeness and revivalness by Jabber.
46
-
47
- == Version 0.3.2
48
- Added Perforce SCM support
49
-
50
- * Added support of Perforce
51
-
52
- == Version 0.3.1
53
- Added BJam builder support
54
-
55
- * Use lazy loading of cerberus components (publishers, vcs, builder)
56
- * Show Cerberus home in Help
57
- * Added 'list' command that shows names of all *active* projects
58
- * Added BJam building tool http://www.boost.org/tools/build/v2/index.html
59
-
60
- == Version 0.3.0
61
- Fix release
62
-
63
- * Added support of Campfire publisher
64
- * Added changeset_url option that adds quick link to browsable chanelist view
65
- * Added possibility to specify user_name and password for Subversion commands
66
- * Added support of Darcs VCS
67
-
68
- == Version 0.2.4
69
- Features release
70
-
71
- * Fix problem with TLS hack. Now possible to send to SSL and vanilla mailservers without modifying code.
72
- * Added rant support (http://make.rubyforge.org) [Xavier Shay]
73
- * Fixed escaping of code in RSS publisher [Xavier Shay]
74
- * If we have only builder or publisher in configuration then use it. Param :type made mandatory.
75
-
76
- == Version 0.2.3
77
- Features release
78
-
79
- * Added Lock files that prevent from mutiply build of the same project by several different processes
80
- * Added multythread build for 'buildall' command. Now if one of threads froses (for example because of SVN repo is broken) then other threads would continue execution.
81
- * Added possibility to send to gmail host using GMailer library
82
- * Added --force oprion that would be helpful if you want to rebuild project even if there are no changes in VSC.
83
- Use 'cerberus build --force my_project'
84
- * Added site for Cerberus project. http://cerberus.rubyforge.org/
85
- * From now all builds logs their build data. It would be switched off by :log/:enable => false in configuration file
86
-
87
- == Version 0.2.2
88
- Minor fix release
89
-
90
- * Make rake executable recongnition process less verbose
91
- * Refactored builder mecahnism in Cerberus. Now adding new Builder possible in much more easiest way
92
- * Added Maven2 builder
93
- * Add possibility to specify Builder type on application creation by BUILDER=xxx option
94
- * Process correctly folders locked by SVN
95
-
96
- == Version 0.2.1
97
- Minor fix release
98
-
99
- * publisher -> active flag now not mandatory. Use 'mail' publisher as active if not set any
100
-
101
- == Version 0.2.0
102
- Config file was changed since 0.1.1 and you need regenerate config files.
103
- Or change it by hands: see doc/OPTIONS file to list of all avalable options.
104
-
105
- Changing required by advanced publishing mechanism. Now it is possible to add several published to one project.
106
-
107
- Also added 3 new publishers.
108
- Jabber Publisher - all notification sended via Jabber server
109
- IRC publisher - messages sent to IRC channel
110
- RSS Publisher - result of build Cerberus writes to file in RSS format.
111
- This feature would be useful for big open project when many users would like to see results of test-run.
112
- If you publish results as RSS - then any user could subscribe to channel.
113
-
114
-
115
- * Added automatic subversion cleanup to avoid repository locking after Cedrberus process termination
116
- * Added Jabber publisher
117
- * Added IRC publisher
118
- * Added RSS publisher
119
-
120
- == Version 0.1.1
121
- Minor improvements
122
-
123
- * Added 'buildall' command that build all projects added to Cerberus repository.
124
- * Fixed tests on *nix
125
-
126
- == Version 0.1.0
127
- Initial version of Cerberus tool
128
-
129
- * Implemented basic functionality required by Continuous Integration.
1
+ = Cerberus Changelog
2
+
3
+ == Version 0.3.6
4
+ RSpec, Gmailer support
5
+
6
+ * Added out of box support of RSpec tests.
7
+ Usage: add to your project configuration following config
8
+
9
+ builder:
10
+ rspec:
11
+ task: test
12
+
13
+ * Config files now preprocessed by ERB, so it is possible to use dynamic configuration like below
14
+ publisher:
15
+ mail:
16
+ username: <%= ENV['MY_MAIL_ACCOUNT'] %>
17
+ password: <%= IO.read('~/.secret_password') %>
18
+
19
+ * Added support of sending mails using gmailer (http://rubyforge.org/projects/gmailutils) instead of plain mailer sender.
20
+ It would be helpful if you are in corporate environment with proxy and only 80 port is open for communication.
21
+ Usage is standart
22
+
23
+ publisher:
24
+ gmailer:
25
+ recipients: hello@world.com
26
+
27
+ Configuration options for gmailer are:
28
+ :username, :password, :proxy_host, :proxy_port, :proxy_user, :proxy_pass
29
+
30
+ * Remove to_xs helper. Using one from actionsuport
31
+
32
+
33
+ == Version 0.3.5
34
+ Bug fixing
35
+
36
+ * Use smpt_settings config option instead of server_settings for ActionMailer
37
+ * Fixed problem with incorrect state for output messages [cerberus bug #8682]
38
+
39
+ == Version 0.3.4
40
+ Added Cerberus hooks that allow running custom tasks on build finish
41
+
42
+ * Fixed bug with Cerberus::Util spotted by Mohamemd Alvi
43
+
44
+ * Added possibility to add hooks on Cerberus executions. Configuration file format for it is
45
+
46
+ hook:
47
+ HOOK_NAME:
48
+ on_event: successful, setup #by default - run hook for any state
49
+ action: 'export CERBERUS_HOME=/home/anatol && sudo chown www-data -R /home/anatol/cerberus && rcov' #Add here any hook you want
50
+
51
+ == Version 0.3.3
52
+ Major changes
53
+
54
+ * Fix Const load problem with Rails 1.2RC1
55
+ * Correctly implement Jabber publisher using XMPP4R library
56
+ * Upgrade Webgen to 0.4.1
57
+ * Added 'getting better/worse' to build messages' subject
58
+ * Added possibility to configure events on what you would like to receive messages.
59
+ By default used 'default' events. It means all except 'successful' state.
60
+ You could set to this options list of any valid states such as [broken, failed, revival, successful, setup] or predefined sets as
61
+ [all, default, none].
62
+
63
+ You could configure by setting :on_event option to :publisher options branch, or to concrete publisher configuration.
64
+ In case if this option added both to :publisher and :publisher,<PUBLISHER> then concrete configurations wins.
65
+
66
+ Examples of configuration
67
+
68
+ publisher:
69
+ on_event: broken, revival
70
+ mail:
71
+ on_event: all
72
+ jabber:
73
+ #nothing here
74
+
75
+ In given example we would send messages about ALL events by mail and only messages about brokeness and revivalness by Jabber.
76
+
77
+ == Version 0.3.2
78
+ Added Perforce SCM support
79
+
80
+ * Added support of Perforce
81
+
82
+ == Version 0.3.1
83
+ Added BJam builder support
84
+
85
+ * Use lazy loading of cerberus components (publishers, vcs, builder)
86
+ * Show Cerberus home in Help
87
+ * Added 'list' command that shows names of all *active* projects
88
+ * Added BJam building tool http://www.boost.org/tools/build/v2/index.html
89
+
90
+ == Version 0.3.0
91
+ Fix release
92
+
93
+ * Added support of Campfire publisher
94
+ * Added changeset_url option that adds quick link to browsable chanelist view
95
+ * Added possibility to specify user_name and password for Subversion commands
96
+ * Added support of Darcs VCS
97
+
98
+ == Version 0.2.4
99
+ Features release
100
+
101
+ * Fix problem with TLS hack. Now possible to send to SSL and vanilla mailservers without modifying code.
102
+ * Added rant support (http://make.rubyforge.org) [Xavier Shay]
103
+ * Fixed escaping of code in RSS publisher [Xavier Shay]
104
+ * If we have only builder or publisher in configuration then use it. Param :type made mandatory.
105
+
106
+ == Version 0.2.3
107
+ Features release
108
+
109
+ * Added Lock files that prevent from mutiply build of the same project by several different processes
110
+ * Added multythread build for 'buildall' command. Now if one of threads froses (for example because of SVN repo is broken) then other threads would continue execution.
111
+ * Added possibility to send to gmail host using GMailer library
112
+ * Added --force oprion that would be helpful if you want to rebuild project even if there are no changes in VSC.
113
+ Use 'cerberus build --force my_project'
114
+ * Added site for Cerberus project. http://cerberus.rubyforge.org/
115
+ * From now all builds logs their build data. It would be switched off by :log/:enable => false in configuration file
116
+
117
+ == Version 0.2.2
118
+ Minor fix release
119
+
120
+ * Make rake executable recongnition process less verbose
121
+ * Refactored builder mecahnism in Cerberus. Now adding new Builder possible in much more easiest way
122
+ * Added Maven2 builder
123
+ * Add possibility to specify Builder type on application creation by BUILDER=xxx option
124
+ * Process correctly folders locked by SVN
125
+
126
+ == Version 0.2.1
127
+ Minor fix release
128
+
129
+ * publisher -> active flag now not mandatory. Use 'mail' publisher as active if not set any
130
+
131
+ == Version 0.2.0
132
+ Config file was changed since 0.1.1 and you need regenerate config files.
133
+ Or change it by hands: see doc/OPTIONS file to list of all avalable options.
134
+
135
+ Changing required by advanced publishing mechanism. Now it is possible to add several published to one project.
136
+
137
+ Also added 3 new publishers.
138
+ Jabber Publisher - all notification sended via Jabber server
139
+ IRC publisher - messages sent to IRC channel
140
+ RSS Publisher - result of build Cerberus writes to file in RSS format.
141
+ This feature would be useful for big open project when many users would like to see results of test-run.
142
+ If you publish results as RSS - then any user could subscribe to channel.
143
+
144
+
145
+ * Added automatic subversion cleanup to avoid repository locking after Cedrberus process termination
146
+ * Added Jabber publisher
147
+ * Added IRC publisher
148
+ * Added RSS publisher
149
+
150
+ == Version 0.1.1
151
+ Minor improvements
152
+
153
+ * Added 'buildall' command that build all projects added to Cerberus repository.
154
+ * Fixed tests on *nix
155
+
156
+ == Version 0.1.0
157
+ Initial version of Cerberus tool
158
+
159
+ * Implemented basic functionality required by Continuous Integration.
data/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- Copyright (c) 2006 Anatol Pomozov
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.
21
-
1
+ Copyright (c) 2006 Anatol Pomozov
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.
21
+
data/README CHANGED
@@ -1,75 +1,75 @@
1
- Cerberus is a Continuous Builder software. Cerberus could be periodically run from scheduler and check if application tests are broken. If it happens then Cerberus will send notification to developers. Cerberus perfectly works both on Windows and *nix platforms.
2
-
3
- For more CI theory read this document from Martin Fowler
4
- http://www.martinfowler.com/articles/continuousIntegration.html.
5
-
6
- Requirements:
7
- ruby - 1.8.2 or higher
8
- rake - 0.7 or higher
9
- svn client - 1.2 or higher
10
-
11
- What 'Cerberus' name means?
12
- Quote from Wikipedia (http://en.wikipedia.org/wiki/Cerberus)
13
-
14
- Cerberus or Kerberos (Kerberos, demon of the pit), was the hound of Hades-a monstrous three-headed dog (sometimes said to have 50 or 100 heads) with a snake for a tail and innumerable snake heads on his back.
15
- He guarded the gate to Hades (the Greek underworld) and ensured that the dead could not leave and the living could not enter. His brother was Orthrus. He is the offspring of Echidna and Typhon.
16
-
17
-
18
- So Cerberus will guard your tests and not allow your project to go to the world of dead.
19
-
20
- There are several CI solutions already present, why do you need to use Cerberus?
21
- Main advantages of Cerberus over other solutions are:
22
- 1) Cerberus could be installed on any machine not only where SVN repository located.
23
- 2) Cerberus works not only for Rails projects, but for any other Ruby projects as well as for other platforms (Maven2 for Java)
24
- 3) Cerberus multiplatform solution: it runs excellent both on *nix and Windows.
25
- 4) Cerberus distributed via RubyGems, so it is very easy to install and very easy to update to the latest stable version
26
- 5) Cerberus very easy to start using. Just type 'cerberus add PROJECT_URL|PROJECT_DIR'
27
- 6) Cerberus is lightweight solution: most of the time ruby process even not runs - Rake runs only in case if changes in project sources are found.
28
-
29
-
30
- To use Cerberus it is very easy. First install it. Easiest way to do it through RubyGems package manager.
31
-
32
- 'gem install cerberus'
33
-
34
- or get Cerberus distribution package right from download page http://rubyforge.org/frs/?group_id=1794&release_id=6442
35
-
36
- then you need to add project that will be watched by Cerberus. Do it by
37
-
38
- cerberus add (DIR|SVN_URL) APPLICATION_NAME=some_app RECIPIENTS=dev1@project.com,dev2@project.com
39
-
40
- as second parameter you could pass URL to subversion repository or directory with working SVN folder.
41
-
42
- Go to ~/.cerberus and edit config.yml file (only once after installing Cerberus). Enter your configuration options here like email server, password, user_name and other options. See ActiveMailer description - Cerberus uses it as notification layer. My config file looks like this
43
-
44
- publisher:
45
- mail:
46
- address: mail.somesever.com
47
- user_name: anatol
48
- password: anatol
49
- domain: somesever.com
50
- authentication: login
51
-
52
- Also check ~/.cerberus/config/<APPLICATION_NAME>.yml and make sure that you have right options.
53
-
54
- And then run Cerberus
55
-
56
- cerberus build APPLICATION_NAME #Run project
57
-
58
- or
59
-
60
- cerberus buildall #Run all available projects
61
-
62
-
63
- It will check out latest sources and run tests for your application. If tests are broken - recipients will receive notifications.
64
-
65
- But of course better run Cerberus automatically from Cron. Run Cerberus for project each 10 minutes would be ok.
66
-
67
- == License
68
-
69
- This plugin is licensed under the MIT license. Complete license text
70
- is included in the LICENSE file.
71
-
72
- == Author
73
-
74
- This software was created by Anatol Pomozov <anatol.pomozov@gmail.com> and is
75
- located at http://cerberus.rubyforge.org.
1
+ Cerberus is a Continuous Builder software. Cerberus could be periodically run from scheduler and check if application tests are broken. If it happens then Cerberus will send notification to developers. Cerberus perfectly works both on Windows and *nix platforms.
2
+
3
+ For more CI theory read this document from Martin Fowler
4
+ http://www.martinfowler.com/articles/continuousIntegration.html.
5
+
6
+ Requirements:
7
+ ruby - 1.8.2 or higher
8
+ rake - 0.7 or higher
9
+ svn client - 1.2 or higher
10
+
11
+ What 'Cerberus' name means?
12
+ Quote from Wikipedia (http://en.wikipedia.org/wiki/Cerberus)
13
+
14
+ Cerberus or Kerberos (Kerberos, demon of the pit), was the hound of Hades-a monstrous three-headed dog (sometimes said to have 50 or 100 heads) with a snake for a tail and innumerable snake heads on his back.
15
+ He guarded the gate to Hades (the Greek underworld) and ensured that the dead could not leave and the living could not enter. His brother was Orthrus. He is the offspring of Echidna and Typhon.
16
+
17
+
18
+ So Cerberus will guard your tests and not allow your project to go to the world of dead.
19
+
20
+ There are several CI solutions already present, why do you need to use Cerberus?
21
+ Main advantages of Cerberus over other solutions are:
22
+ 1) Cerberus could be installed on any machine not only where SVN repository located.
23
+ 2) Cerberus works not only for Rails projects, but for any other Ruby projects as well as for other platforms (Maven2 for Java)
24
+ 3) Cerberus multiplatform solution: it runs excellent both on *nix and Windows.
25
+ 4) Cerberus distributed via RubyGems, so it is very easy to install and very easy to update to the latest stable version
26
+ 5) Cerberus very easy to start using. Just type 'cerberus add PROJECT_URL|PROJECT_DIR'
27
+ 6) Cerberus is lightweight solution: most of the time ruby process even not runs - Rake runs only in case if changes in project sources are found.
28
+
29
+
30
+ To use Cerberus it is very easy. First install it. Easiest way to do it through RubyGems package manager.
31
+
32
+ 'gem install cerberus'
33
+
34
+ or get Cerberus distribution package right from download page http://rubyforge.org/frs/?group_id=1794&release_id=6442
35
+
36
+ then you need to add project that will be watched by Cerberus. Do it by
37
+
38
+ cerberus add (DIR|SVN_URL) APPLICATION_NAME=some_app RECIPIENTS=dev1@project.com,dev2@project.com
39
+
40
+ as second parameter you could pass URL to subversion repository or directory with working SVN folder.
41
+
42
+ Go to ~/.cerberus and edit config.yml file (only once after installing Cerberus). Enter your configuration options here like email server, password, user_name and other options. See ActiveMailer description - Cerberus uses it as notification layer. My config file looks like this
43
+
44
+ publisher:
45
+ mail:
46
+ address: mail.somesever.com
47
+ user_name: anatol
48
+ password: anatol
49
+ domain: somesever.com
50
+ authentication: login
51
+
52
+ Also check ~/.cerberus/config/<APPLICATION_NAME>.yml and make sure that you have right options.
53
+
54
+ And then run Cerberus
55
+
56
+ cerberus build APPLICATION_NAME #Run project
57
+
58
+ or
59
+
60
+ cerberus buildall #Run all available projects
61
+
62
+
63
+ It will check out latest sources and run tests for your application. If tests are broken - recipients will receive notifications.
64
+
65
+ But of course better run Cerberus automatically from Cron. Run Cerberus for project each 10 minutes would be ok.
66
+
67
+ == License
68
+
69
+ This plugin is licensed under the MIT license. Complete license text
70
+ is included in the LICENSE file.
71
+
72
+ == Author
73
+
74
+ This software was created by Anatol Pomozov <anatol.pomozov@gmail.com> and is
75
+ located at http://cerberus.rubyforge.org.