configatron 2.3.2 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/LICENSE +21 -0
  2. data/README +16 -12
  3. data/generators/configatron_generator.rb +20 -0
  4. data/generators/templates/configatron/cucumber.rb +4 -0
  5. data/generators/templates/configatron/defaults.rb +7 -0
  6. data/generators/templates/configatron/development.rb +4 -0
  7. data/generators/templates/configatron/production.rb +4 -0
  8. data/generators/templates/configatron/test.rb +4 -0
  9. data/generators/templates/initializers/configatron.rb +2 -0
  10. data/lib/configatron/configatron.rb +7 -3
  11. data/lib/configatron/rails.rb +44 -0
  12. data/lib/configatron/store.rb +5 -1
  13. data/lib/configatron.rb +2 -1
  14. metadata +19 -28
  15. data/doc/classes/Class.html +0 -169
  16. data/doc/classes/Configatron/LockedNamespace.html +0 -146
  17. data/doc/classes/Configatron/ProtectedParameter.html +0 -146
  18. data/doc/classes/Configatron/Store.html +0 -830
  19. data/doc/classes/Configatron.html +0 -303
  20. data/doc/classes/Kernel.html +0 -144
  21. data/doc/created.rid +0 -1
  22. data/doc/files/README.html +0 -320
  23. data/doc/files/lib/configatron/configatron_rb.html +0 -108
  24. data/doc/files/lib/configatron/core_ext/class_rb.html +0 -101
  25. data/doc/files/lib/configatron/core_ext/kernel_rb.html +0 -101
  26. data/doc/files/lib/configatron/core_ext/object_rb.html +0 -101
  27. data/doc/files/lib/configatron/core_ext/string_rb.html +0 -101
  28. data/doc/files/lib/configatron/errors_rb.html +0 -101
  29. data/doc/files/lib/configatron/store_rb.html +0 -101
  30. data/doc/files/lib/configatron_rb.html +0 -108
  31. data/doc/fr_class_index.html +0 -32
  32. data/doc/fr_file_index.html +0 -35
  33. data/doc/fr_method_index.html +0 -56
  34. data/doc/index.html +0 -24
  35. data/doc/rdoc-style.css +0 -208
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2009 Mark Bates
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.
data/README CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  Configatron makes configuring your applications and scripts incredibly easy. No longer is a there a need to use constants or global variables. Now you can use a simple and painless system to configure your life. And, because it's all Ruby, you can do any crazy thing you would like to!
4
4
 
5
+ ==Installation
6
+
7
+ Installation of Configatron is easy, as it is just a RubyGem:
8
+
9
+ $ sudo gem install configatron
10
+
11
+ If you'd like to live on the bleedin' edge you can install the development version from GitHub:
12
+
13
+ $ sudo gem install markbates-configatron --source=http://gems.github.com
14
+
15
+ Once installed you just need to require it:
16
+
17
+ require 'configatron'
18
+
5
19
  ==Examples
6
20
 
7
21
  ===Simple
@@ -124,16 +138,6 @@ Enjoy!
124
138
 
125
139
  ==Contact
126
140
 
127
- Please mail bugs, suggestions and patches to "bugs@mackframework.com":mailto:bugs@mackframework.com
128
-
129
- On the web at: "http://www.mackframework.com":http://www.mackframework.com
130
-
131
- ==License and Copyright
132
-
133
- Copyright (C) 2008 Mark Bates, "http://www.mackframework.com":http://www.mackframework.com
134
-
135
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
136
-
137
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
141
+ Please mail bugs, suggestions and patches to "development@metabates.com":mailto:development@metabates.com
138
142
 
139
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
143
+ On the web at: "http://www.metabates.com":http://www.metabates.com
@@ -0,0 +1,20 @@
1
+ require 'rails_generator'
2
+ class ConfigatronGenerator < Rails::Generator::Base # :nodoc:
3
+
4
+ def manifest
5
+ record do |m|
6
+ m.directory 'config/configatron'
7
+ m.directory 'config/configatron/development'
8
+ m.directory 'config/configatron/test'
9
+ m.directory 'config/configatron/production'
10
+ m.directory 'config/configatron/cucumber'
11
+ m.file 'initializers/configatron.rb', 'config/initializers/configatron.rb'
12
+ m.file 'configatron/development.rb', 'config/configatron/development.rb'
13
+ m.file 'configatron/production.rb', 'config/configatron/production.rb'
14
+ m.file 'configatron/test.rb', 'config/configatron/test.rb'
15
+ m.file 'configatron/cucumber.rb', 'config/configatron/cucumber.rb'
16
+ m.file 'configatron/defaults.rb', 'config/configatron/defaults.rb'
17
+ end
18
+ end
19
+
20
+ end # ConfigatronGenerator
@@ -0,0 +1,4 @@
1
+ # Override your default settings for the Cucumber environment here.
2
+
3
+ # By default load in the settings from the test environment:
4
+ require File.join(File.dirname(__FILE__), 'test')
@@ -0,0 +1,7 @@
1
+ # Put all your default configatron settings here.
2
+
3
+ # Example:
4
+ # configatron.emails.welcome.subject = 'Welcome!'
5
+ # configatron.emails.sales_reciept.subject = 'Thanks for your order'
6
+ #
7
+ # configatron.file.storage = :s3
@@ -0,0 +1,4 @@
1
+ # Override your default settings for the Development environment here.
2
+ #
3
+ # Example:
4
+ # configatron.file.storage = :local
@@ -0,0 +1,4 @@
1
+ # Override your default settings for the Production environment here.
2
+ #
3
+ # Example:
4
+ # configatron.file.storage = :s3
@@ -0,0 +1,4 @@
1
+ # Override your default settings for the Test environment here.
2
+ #
3
+ # Example:
4
+ # configatron.file.storage = :local
@@ -0,0 +1,2 @@
1
+ require 'configatron'
2
+ Configatron::Rails.init
@@ -48,8 +48,12 @@ class Configatron
48
48
  @_store.delete(@_namespace.pop)
49
49
  end
50
50
 
51
- undef :inspect # :nodoc:
52
- undef :nil? # :nodoc:
53
- undef :test # :nodoc:
51
+ begin
52
+ undef :inspect # :nodoc:
53
+ undef :nil? # :nodoc:
54
+ undef :test # :nodoc:
55
+ rescue Exception => e
56
+ end
57
+
54
58
 
55
59
  end
@@ -0,0 +1,44 @@
1
+ class Configatron
2
+ # Helpful for making using configatron with Rails even easier!
3
+ #
4
+ # To get started you can use the generator to generate
5
+ # the necessary stub files.
6
+ #
7
+ # $ ruby script/generate configatron
8
+ module Rails
9
+
10
+ # Loads configatron files in the following order:
11
+ #
12
+ # Example:
13
+ # <RAILS_ROOT>/config/configatron/defaults.rb
14
+ # <RAILS_ROOT>/config/configatron/<RAILS_ENV>.rb
15
+ # # optional:
16
+ # <RAILS_ROOT>/config/configatron/<RAILS_ENV>/defaults.rb
17
+ # <RAILS_ROOT>/config/configatron/<RAILS_ENV>/bar.rb
18
+ # <RAILS_ROOT>/config/configatron/<RAILS_ENV>/foo.rb
19
+ def self.init
20
+ config_files = []
21
+
22
+ base_dir = File.expand_path(File.join(RAILS_ROOT, 'config', 'configatron'))
23
+ config_files << File.join(base_dir, 'defaults.rb')
24
+ config_files << File.join(base_dir, "#{RAILS_ENV}.rb")
25
+
26
+ env_dir = File.join(base_dir, RAILS_ENV)
27
+ config_files << File.join(env_dir, 'defaults.rb')
28
+
29
+ Dir.glob(File.join(env_dir, '*.rb')).sort.each do |f|
30
+ config_files << f
31
+ end
32
+
33
+ config_files.collect! {|config| File.expand_path(config)}.uniq!
34
+
35
+ config_files.each do |config|
36
+ if File.exists?(config)
37
+ # puts "Configuration: #{config}"
38
+ require config
39
+ end
40
+ end
41
+ end
42
+
43
+ end # Rails
44
+ end # Configatron
@@ -277,7 +277,11 @@ class Configatron
277
277
  end
278
278
  end
279
279
 
280
- undef :test # :nodoc:
280
+ begin
281
+ undef :test # :nodoc:
282
+ rescue Exception => e
283
+ end
284
+
281
285
 
282
286
  end # Store
283
287
  end # Configatron
data/lib/configatron.rb CHANGED
@@ -6,4 +6,5 @@ require File.join(base, 'errors')
6
6
  require File.join(base, 'core_ext', 'kernel')
7
7
  require File.join(base, 'core_ext', 'object')
8
8
  require File.join(base, 'core_ext', 'string')
9
- require File.join(base, 'core_ext', 'class')
9
+ require File.join(base, 'core_ext', 'class')
10
+ require File.join(base, 'rails')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - markbates
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-20 00:00:00 -04:00
12
+ date: 2009-08-26 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,14 +22,15 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 0.1.0
24
24
  version:
25
- description: "Configatron was developed by: markbates"
26
- email: mark@mackframework.com
25
+ description: "configatron was developed by: markbates"
26
+ email: mark@markbates.com
27
27
  executables: []
28
28
 
29
29
  extensions: []
30
30
 
31
31
  extra_rdoc_files:
32
32
  - README
33
+ - LICENSE
33
34
  files:
34
35
  - lib/configatron/configatron.rb
35
36
  - lib/configatron/core_ext/class.rb
@@ -37,32 +38,22 @@ files:
37
38
  - lib/configatron/core_ext/object.rb
38
39
  - lib/configatron/core_ext/string.rb
39
40
  - lib/configatron/errors.rb
41
+ - lib/configatron/rails.rb
40
42
  - lib/configatron/store.rb
41
43
  - lib/configatron.rb
42
44
  - README
43
- - doc/classes/Class.html
44
- - doc/classes/Configatron/LockedNamespace.html
45
- - doc/classes/Configatron/ProtectedParameter.html
46
- - doc/classes/Configatron/Store.html
47
- - doc/classes/Configatron.html
48
- - doc/classes/Kernel.html
49
- - doc/created.rid
50
- - doc/files/lib/configatron/configatron_rb.html
51
- - doc/files/lib/configatron/core_ext/class_rb.html
52
- - doc/files/lib/configatron/core_ext/kernel_rb.html
53
- - doc/files/lib/configatron/core_ext/object_rb.html
54
- - doc/files/lib/configatron/core_ext/string_rb.html
55
- - doc/files/lib/configatron/errors_rb.html
56
- - doc/files/lib/configatron/store_rb.html
57
- - doc/files/lib/configatron_rb.html
58
- - doc/files/README.html
59
- - doc/fr_class_index.html
60
- - doc/fr_file_index.html
61
- - doc/fr_method_index.html
62
- - doc/index.html
63
- - doc/rdoc-style.css
45
+ - LICENSE
46
+ - generators/configatron_generator.rb
47
+ - generators/templates/configatron/cucumber.rb
48
+ - generators/templates/configatron/defaults.rb
49
+ - generators/templates/configatron/development.rb
50
+ - generators/templates/configatron/production.rb
51
+ - generators/templates/configatron/test.rb
52
+ - generators/templates/initializers/configatron.rb
64
53
  has_rdoc: true
65
- homepage: http://www.mackframework.com
54
+ homepage: http://www.metabates.com
55
+ licenses: []
56
+
66
57
  post_install_message:
67
58
  rdoc_options: []
68
59
 
@@ -83,9 +74,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
74
  requirements: []
84
75
 
85
76
  rubyforge_project: magrathea
86
- rubygems_version: 1.3.1
77
+ rubygems_version: 1.3.4
87
78
  signing_key:
88
- specification_version: 2
79
+ specification_version: 3
89
80
  summary: A powerful Ruby configuration system.
90
81
  test_files: []
91
82
 
@@ -1,169 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Class: Class</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">Class</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../files/lib/configatron/core_ext/class_rb.html">
59
- lib/configatron/core_ext/class.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- <tr class="top-aligned-row">
66
- <td><strong>Parent:</strong></td>
67
- <td>
68
- Object
69
- </td>
70
- </tr>
71
- </table>
72
- </div>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
-
77
-
78
-
79
- <div id="contextContent">
80
-
81
-
82
-
83
- </div>
84
-
85
- <div id="method-list">
86
- <h3 class="section-bar">Methods</h3>
87
-
88
- <div class="name-list">
89
- <a href="#M000001">to_configatron</a>&nbsp;&nbsp;
90
- </div>
91
- </div>
92
-
93
- </div>
94
-
95
-
96
- <!-- if includes -->
97
-
98
- <div id="section">
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
- <!-- if method_list -->
108
- <div id="methods">
109
- <h3 class="section-bar">Public Instance methods</h3>
110
-
111
- <div id="method-M000001" class="method-detail">
112
- <a name="M000001"></a>
113
-
114
- <div class="method-heading">
115
- <a href="#M000001" class="method-signature">
116
- <span class="method-name">to_configatron</span><span class="method-args">(*args)</span>
117
- </a>
118
- </div>
119
-
120
- <div class="method-description">
121
- <p>
122
- Returns access to configuration parameters named after the class.
123
- </p>
124
- <p>
125
- Examples:
126
- </p>
127
- <pre>
128
- configatron.foo.bar = :bar
129
- configatron.a.b.c.d = 'D'
130
-
131
- class Foo
132
- end
133
-
134
- module A
135
- module B
136
- class C
137
- end
138
- end
139
- end
140
-
141
- Foo.to_configatron.bar # =&gt; :bar
142
- A::B::C.to_configatron.d # =&gt; 'D'
143
- </pre>
144
- <p><a class="source-toggle" href="#"
145
- onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
146
- <div class="method-source-code" id="M000001-source">
147
- <pre>
148
- <span class="ruby-comment cmt"># File lib/configatron/core_ext/class.rb, line 21</span>
149
- 21: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_configatron</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
150
- 22: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_configatron</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
151
- 23: <span class="ruby-keyword kw">end</span>
152
- </pre>
153
- </div>
154
- </div>
155
- </div>
156
-
157
-
158
- </div>
159
-
160
-
161
- </div>
162
-
163
-
164
- <div id="validator-badges">
165
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
166
- </div>
167
-
168
- </body>
169
- </html>
@@ -1,146 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Class: Configatron::LockedNamespace</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">Configatron::LockedNamespace</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../../files/lib/configatron/errors_rb.html">
59
- lib/configatron/errors.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- <tr class="top-aligned-row">
66
- <td><strong>Parent:</strong></td>
67
- <td>
68
- StandardError
69
- </td>
70
- </tr>
71
- </table>
72
- </div>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
-
77
-
78
-
79
- <div id="contextContent">
80
-
81
-
82
-
83
- </div>
84
-
85
- <div id="method-list">
86
- <h3 class="section-bar">Methods</h3>
87
-
88
- <div class="name-list">
89
- <a href="#M000028">new</a>&nbsp;&nbsp;
90
- </div>
91
- </div>
92
-
93
- </div>
94
-
95
-
96
- <!-- if includes -->
97
-
98
- <div id="section">
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
- <!-- if method_list -->
108
- <div id="methods">
109
- <h3 class="section-bar">Public Class methods</h3>
110
-
111
- <div id="method-M000028" class="method-detail">
112
- <a name="M000028"></a>
113
-
114
- <div class="method-heading">
115
- <a href="#M000028" class="method-signature">
116
- <span class="method-name">new</span><span class="method-args">(name)</span>
117
- </a>
118
- </div>
119
-
120
- <div class="method-description">
121
- <p><a class="source-toggle" href="#"
122
- onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
123
- <div class="method-source-code" id="M000028-source">
124
- <pre>
125
- <span class="ruby-comment cmt"># File lib/configatron/errors.rb, line 9</span>
126
- 9: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>)
127
- 10: <span class="ruby-keyword kw">super</span>(<span class="ruby-node">&quot;Cannot add new parameters to locked namespace: #{name.inspect}&quot;</span>)
128
- 11: <span class="ruby-keyword kw">end</span>
129
- </pre>
130
- </div>
131
- </div>
132
- </div>
133
-
134
-
135
- </div>
136
-
137
-
138
- </div>
139
-
140
-
141
- <div id="validator-badges">
142
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
143
- </div>
144
-
145
- </body>
146
- </html>