rconfig 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/ChangeLog +50 -0
  5. data/Credits +13 -0
  6. data/Gemfile +9 -0
  7. data/Gemfile.lock +30 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.rdoc +0 -0
  10. data/Rakefile +11 -0
  11. data/demo/application.conf +3 -0
  12. data/demo/demo.conf +13 -0
  13. data/demo/demo.rb +14 -0
  14. data/demo/demo.xml +13 -0
  15. data/demo/demo.yml +12 -0
  16. data/doc/classes/ClassVariables.html +111 -0
  17. data/doc/classes/ConfigError.html +120 -0
  18. data/doc/classes/ConfigHash.html +354 -0
  19. data/doc/classes/Constants.html +226 -0
  20. data/doc/classes/Hash.html +269 -0
  21. data/doc/classes/InvalidConfigPathError.html +119 -0
  22. data/doc/classes/Object.html +220 -0
  23. data/doc/classes/PropertiesFileParser.html +282 -0
  24. data/doc/classes/RConfig.html +1745 -0
  25. data/doc/created.rid +1 -0
  26. data/doc/files/README_rdoc.html +271 -0
  27. data/doc/files/lib/rconfig/class_variables_rb.html +107 -0
  28. data/doc/files/lib/rconfig/config_hash_rb.html +114 -0
  29. data/doc/files/lib/rconfig/constants_rb.html +101 -0
  30. data/doc/files/lib/rconfig/core_ext/hash_rb.html +114 -0
  31. data/doc/files/lib/rconfig/core_ext/object_rb.html +101 -0
  32. data/doc/files/lib/rconfig/core_ext_rb.html +114 -0
  33. data/doc/files/lib/rconfig/exceptions_rb.html +110 -0
  34. data/doc/files/lib/rconfig/properties_file_parser_rb.html +146 -0
  35. data/doc/files/lib/rconfig/rconfig_rb.html +186 -0
  36. data/doc/files/lib/rconfig_rb.html +117 -0
  37. data/doc/fr_class_index.html +35 -0
  38. data/doc/fr_file_index.html +37 -0
  39. data/doc/fr_method_index.html +75 -0
  40. data/doc/index.html +24 -0
  41. data/doc/rdoc-style.css +208 -0
  42. data/lib/generators/rconfig/install_generator.rb +13 -0
  43. data/lib/generators/rconfig/templates/rconfig.rb +82 -0
  44. data/lib/rconfig.rb +98 -32
  45. data/lib/rconfig/callbacks.rb +46 -0
  46. data/lib/rconfig/cascade.rb +56 -0
  47. data/lib/rconfig/config.rb +78 -0
  48. data/lib/rconfig/constants.rb +58 -0
  49. data/lib/rconfig/core_ext/array.rb +3 -0
  50. data/lib/rconfig/core_ext/hash.rb +56 -57
  51. data/lib/rconfig/core_ext/nil.rb +5 -0
  52. data/lib/rconfig/core_ext/string.rb +3 -0
  53. data/lib/rconfig/core_methods.rb +276 -0
  54. data/lib/rconfig/exceptions.rb +21 -8
  55. data/lib/rconfig/load_paths.rb +55 -0
  56. data/lib/rconfig/logger.rb +86 -0
  57. data/lib/rconfig/properties_file.rb +138 -0
  58. data/lib/rconfig/reload.rb +75 -0
  59. data/lib/rconfig/settings.rb +93 -0
  60. data/lib/rconfig/utils.rb +175 -0
  61. data/lib/tasks/gem.rake +14 -0
  62. data/lib/tasks/rdoc.rake +11 -0
  63. data/lib/tasks/spec.rake +25 -0
  64. data/rconfig.gemspec +33 -0
  65. data/spec/core_ext/object_spec.rb +44 -0
  66. data/spec/rconfig_spec.rb +7 -0
  67. data/spec/spec.opts +4 -0
  68. data/spec/spec_helper.rb +16 -0
  69. metadata +128 -32
  70. data/lib/rconfig/config_hash.rb +0 -105
  71. data/lib/rconfig/core_ext.rb +0 -6
  72. data/lib/rconfig/properties_file_parser.rb +0 -80
  73. data/lib/rconfig/rconfig.rb +0 -871
  74. data/test/rconfig_test.rb +0 -381
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.iws
2
+ *.ipr
3
+ *.iml
4
+ *.tmproj
5
+ *.log
6
+ *.swp
7
+ *.*~
8
+ *~
9
+ .bundle
10
+ .directory
11
+ .document
12
+ .idea
13
+ .project
14
+ .DS_Store
15
+ .rakeTasks
16
+ log
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format progress --backtrace
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2@rconfig
data/ChangeLog ADDED
@@ -0,0 +1,50 @@
1
+ 0.4.0
2
+ =====
3
+ * Broke RConfig core into separate modules to decrease core class size.
4
+ * Added Rails generator to override RConfig settings in Rails projects
5
+ * Added support for git-like config files, giving key/value properties files potentially three levels.
6
+ * Added support for values referencing other properties in key-value config files
7
+ * Refactored settings module to allow for clean defaults, and overriding.
8
+ * Added RConfig logger.
9
+ * Renamed overlay to cascade
10
+ * Fixed a syntax error in when clause of config_hash.rb for ruby 1.9.1 - From dvyjones/rconfig (github).
11
+ * Fixed raise on allow_reload method.
12
+ * Fixed unit test, rconfig_test.rb.
13
+ * Fixed minor typos, comments, and bugs.
14
+ * Refactored Hash#weave signature; changed dont_clobber=true, to clobber=false (reads more intuitively).
15
+ * Removed redundant validate method from PropertiesFileParser.
16
+ * Renamed PropertiesFileParser to PropertiesFile
17
+
18
+ 0.3.3
19
+ =====
20
+ * Fixed overlay class variable not loaded warning.
21
+
22
+ 0.3.2
23
+ =====
24
+ * Fixed bug in 0.3.1 causing stackrace
25
+
26
+ 0.3.1 (bug - DO NOT USE)
27
+ =====
28
+ * Added rake scripts
29
+ * Finished gemspec
30
+ * Created rdocs
31
+ * Built gem file
32
+
33
+ 0.3
34
+ =====
35
+ * Re-factored rconfig core.
36
+ * Added new helper method to init rconfig.
37
+ * Re-factored core_ext/hash.
38
+ * Added custom exceptions.
39
+ * Added global instance $config, for convenience.
40
+ * Updated comments.
41
+
42
+ 0.2
43
+ =====
44
+ * Added support for setting config path(s) programmtically.
45
+ * Added support for using multiple file types at once.
46
+ * Cleaned up STDERR statements.
47
+
48
+ 0.1
49
+ =====
50
+ * First public release
data/Credits ADDED
@@ -0,0 +1,13 @@
1
+ Thanks to everyone I included here. RConfig would not exist without their contributions.
2
+
3
+ Mike Sandler, Kurt Stephens, CashNetUSA (CNU):
4
+ - The core of logic of RConfig is based on a stand-alone class called CnuConfig, that resided in the CNU codebase.
5
+ - It was originally created by Mike Sandler as a config solution for CNU's internal web apps.
6
+ - It only supported yaml files, but it boasted overlay support to unobstrusively load environment specific configs,
7
+ and a dottable notation not seen in any other ruby config libraries.
8
+ - It was later enhanced by Kurt Stephens to support indifferent access, reload support, and callbacks, making it
9
+ a enterprise worthy config solution.
10
+ - I have made some signifcant enhancements to RConfig since that original debut, to make it a truly complete
11
+ configuration solution, all of which are in this gem.
12
+ - The original CnuConfig, that RConfig was forked from was open-sourced by CNU as ActiveConfig. It can be found on
13
+ GitHub for anyone interested.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'activesupport', '~> 3.0', :require => 'active_support'
4
+
5
+ group :development do
6
+ gem 'rspec', '~> 2.3.0'
7
+ gem 'bundler', '~> 1.0.0'
8
+ gem 'jeweler', '~> 1.6.4'
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,30 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (3.1.1)
5
+ multi_json (~> 1.0)
6
+ diff-lcs (1.1.3)
7
+ git (1.2.5)
8
+ jeweler (1.6.4)
9
+ bundler (~> 1.0)
10
+ git (>= 1.2.5)
11
+ rake
12
+ multi_json (1.1.0)
13
+ rake (0.9.2.2)
14
+ rspec (2.3.0)
15
+ rspec-core (~> 2.3.0)
16
+ rspec-expectations (~> 2.3.0)
17
+ rspec-mocks (~> 2.3.0)
18
+ rspec-core (2.3.1)
19
+ rspec-expectations (2.3.0)
20
+ diff-lcs (~> 1.1.2)
21
+ rspec-mocks (2.3.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (~> 3.0)
28
+ bundler (~> 1.0.0)
29
+ jeweler (~> 1.6.4)
30
+ rspec (~> 2.3.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Rahmal Conda
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.
data/README.rdoc CHANGED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+ require 'rake/rdoctask'
7
+ require 'lib/rconfig'
8
+
9
+
10
+ Dir['tasks/**/*.rake'].sort.each { |lib| load lib }
11
+
@@ -0,0 +1,3 @@
1
+ test=true
2
+
3
+ memory_limit=512
data/demo/demo.conf ADDED
@@ -0,0 +1,13 @@
1
+ admin_email = root@localhost
2
+ listen_ip = 127.0.0.1
3
+ listen_port = 87345
4
+ file_type: conf
5
+ only_conf: true
6
+
7
+ [group1]
8
+ user_name = johnny
9
+ group_name = daemons
10
+
11
+ [group2]
12
+ user_name = rita
13
+ group_name = daemons
data/demo/demo.rb ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.join(File.dirname(__FILE__),"..","lib")
4
+
5
+ require 'rconfig'
6
+
7
+ dir = File.dirname(__FILE__)
8
+
9
+ puts "Current Dir: " + dir
10
+ puts "RConfig.add_config_path File.dirname(__FILE__) => #{RConfig.add_config_path(dir)}"
11
+ puts "RConfig.demo[:admin_email] => #{RConfig.demo[:admin_email]}" #=> 'root@localhost'
12
+ puts "RConfig.demo.listen_ip => #{RConfig.demo.listen_ip}" #=> '127.0.0.1'
13
+ puts "RConfig.demo[:group1][:group_name] => #{RConfig.demo[:group1][:group_name]}" #=> 'daemons'
14
+ puts "RConfig.demo.group2.user_name => #{RConfig.demo.group2.user_name}" #=> 'rita'
data/demo/demo.xml ADDED
@@ -0,0 +1,13 @@
1
+ <demo>
2
+ <admin_email>root@localhost</admin_email>
3
+ <listen_ip>127.0.0.1</listen_ip>
4
+ <listen_port>87345</listen_port>
5
+ <group1>
6
+ <user_name>johnny</user_name>
7
+ <group_name>daemons</group_name>
8
+ </group1>
9
+ <group2>
10
+ <user_name>rita</user_name>
11
+ <group_name>daemons</group_name>
12
+ </group2>
13
+ </demo>
data/demo/demo.yml ADDED
@@ -0,0 +1,12 @@
1
+ admin_email: root@localhost
2
+ listen_ip: 127.0.0.1
3
+ listen_port: 87345
4
+ file_type: yml
5
+
6
+ group1:
7
+ user_name: johnny
8
+ group_name: daemons
9
+
10
+ group2:
11
+ user_name: rita
12
+ group_name: daemons
@@ -0,0 +1,111 @@
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>Module: ClassVariables</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>Module</strong></td>
53
+ <td class="class-name-in-header">ClassVariables</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rconfig/class_variables_rb.html">
59
+ lib/rconfig/class_variables.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+ <div id="description">
76
+ <p>
77
+ These are all the variables used to store RConfigs state.
78
+ </p>
79
+
80
+ </div>
81
+
82
+
83
+ </div>
84
+
85
+
86
+ </div>
87
+
88
+
89
+ <!-- if includes -->
90
+
91
+ <div id="section">
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <!-- if method_list -->
101
+
102
+
103
+ </div>
104
+
105
+
106
+ <div id="validator-badges">
107
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
108
+ </div>
109
+
110
+ </body>
111
+ </html>
@@ -0,0 +1,120 @@
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: ConfigError</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">ConfigError</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/rconfig/exceptions_rb.html">
59
+ lib/rconfig/exceptions.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
+ <div id="description">
82
+ <p>
83
+ Copyright (c) 2009 Rahmal Conda &lt;rahmal@gmail.com&gt;
84
+ </p>
85
+ <p>
86
+ <a href="RConfig.html">RConfig</a> Exceptions
87
+ </p>
88
+
89
+ </div>
90
+
91
+
92
+ </div>
93
+
94
+
95
+ </div>
96
+
97
+
98
+ <!-- if includes -->
99
+
100
+ <div id="section">
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ <!-- if method_list -->
110
+
111
+
112
+ </div>
113
+
114
+
115
+ <div id="validator-badges">
116
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
117
+ </div>
118
+
119
+ </body>
120
+ </html>