corl 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/Gemfile +5 -10
  2. data/Gemfile.lock +13 -11
  3. data/README.rdoc +1 -1
  4. data/Rakefile +3 -3
  5. data/VERSION +1 -1
  6. data/bin/corl +2 -54
  7. data/bootstrap/bootstrap.sh +91 -0
  8. data/bootstrap/lib/shell/LICENSE.txt +674 -0
  9. data/bootstrap/lib/shell/command.sh +214 -0
  10. data/bootstrap/lib/shell/filesystem.sh +139 -0
  11. data/bootstrap/lib/shell/load.sh +73 -0
  12. data/bootstrap/lib/shell/os.sh +67 -0
  13. data/bootstrap/lib/shell/script.sh +160 -0
  14. data/bootstrap/lib/shell/starter.sh +64 -0
  15. data/bootstrap/lib/shell/validators.sh +50 -0
  16. data/bootstrap/os/ubuntu/00_base.sh +5 -0
  17. data/bootstrap/os/ubuntu/01_git.sh +5 -0
  18. data/bootstrap/os/ubuntu/05_ruby.sh +7 -0
  19. data/bootstrap/os/ubuntu/06_puppet.sh +38 -0
  20. data/bootstrap/os/ubuntu/10_corl.sh +9 -0
  21. data/corl.gemspec +61 -124
  22. data/lib/{corl → CORL}/action/bootstrap.rb +13 -7
  23. data/lib/CORL/action/exec.rb +39 -0
  24. data/lib/CORL/action/image.rb +31 -0
  25. data/lib/{corl → CORL}/action/images.rb +1 -1
  26. data/lib/CORL/action/lookup.rb +34 -0
  27. data/lib/{corl → CORL}/action/machines.rb +1 -1
  28. data/lib/CORL/action/provision.rb +31 -0
  29. data/lib/{corl → CORL}/action/seed.rb +3 -3
  30. data/lib/{corl → CORL}/action/spawn.rb +2 -2
  31. data/lib/CORL/action/start.rb +31 -0
  32. data/lib/CORL/action/stop.rb +31 -0
  33. data/lib/{corl → CORL}/configuration/file.rb +1 -1
  34. data/lib/{corl → CORL}/event/puppet.rb +1 -1
  35. data/lib/{corl → CORL}/extension/puppetloader.rb +1 -1
  36. data/lib/{corl → CORL}/machine/fog.rb +3 -3
  37. data/lib/{corl → CORL}/machine/physical.rb +2 -2
  38. data/lib/{corl → CORL}/network/default.rb +1 -1
  39. data/lib/{corl → CORL}/node/aws.rb +0 -4
  40. data/lib/{corl → CORL}/node/google.rb +0 -4
  41. data/lib/{corl → CORL}/node/local.rb +1 -1
  42. data/lib/{corl → CORL}/node/rackspace.rb +0 -4
  43. data/lib/{corl → CORL}/provisioner/puppetnode.rb +1 -14
  44. data/lib/{corl → CORL}/provisioner/puppetnode/resource.rb +0 -0
  45. data/lib/{corl → CORL}/provisioner/puppetnode/resource_group.rb +0 -0
  46. data/lib/{corl → CORL}/template/environment.rb +1 -1
  47. data/lib/core/facade.rb +49 -0
  48. data/lib/{corl_core → core}/mixin/action/keypair.rb +10 -10
  49. data/lib/{corl_core → core}/mixin/lookup.rb +0 -0
  50. data/lib/{corl_core → core}/mod/hiera_backend.rb +0 -0
  51. data/lib/{corl_core/mixin/action/node.rb → core/plugin/action.rb} +66 -33
  52. data/lib/{corl_core → core}/plugin/configuration.rb +2 -2
  53. data/lib/{corl/node → core/plugin}/fog.rb +5 -1
  54. data/lib/{corl_core → core}/plugin/machine.rb +2 -2
  55. data/lib/{corl_core → core}/plugin/network.rb +4 -4
  56. data/lib/{corl_core → core}/plugin/node.rb +11 -9
  57. data/lib/{corl_core → core}/plugin/provisioner.rb +2 -2
  58. data/lib/{corl_core → core}/util/ssh.rb +1 -1
  59. data/lib/corl.rb +53 -112
  60. data/lib/puppet/parser/functions/ensure.rb +0 -4
  61. data/locales/en.yml +55 -148
  62. metadata +84 -222
  63. data/lib/corl/action/add.rb +0 -69
  64. data/lib/corl/action/clone.rb +0 -40
  65. data/lib/corl/action/create.rb +0 -55
  66. data/lib/corl/action/exec.rb +0 -41
  67. data/lib/corl/action/extract.rb +0 -49
  68. data/lib/corl/action/image.rb +0 -30
  69. data/lib/corl/action/lookup.rb +0 -35
  70. data/lib/corl/action/provision.rb +0 -37
  71. data/lib/corl/action/remove.rb +0 -51
  72. data/lib/corl/action/save.rb +0 -53
  73. data/lib/corl/action/start.rb +0 -37
  74. data/lib/corl/action/stop.rb +0 -30
  75. data/lib/corl/action/update.rb +0 -37
  76. data/lib/corl/command/shell.rb +0 -164
  77. data/lib/corl/event/regex.rb +0 -52
  78. data/lib/corl/project/git.rb +0 -465
  79. data/lib/corl/project/github.rb +0 -108
  80. data/lib/corl/template/json.rb +0 -16
  81. data/lib/corl/template/wrapper.rb +0 -16
  82. data/lib/corl/template/yaml.rb +0 -16
  83. data/lib/corl/translator/json.rb +0 -27
  84. data/lib/corl/translator/yaml.rb +0 -27
  85. data/lib/corl_core/codes.rb +0 -107
  86. data/lib/corl_core/config.rb +0 -337
  87. data/lib/corl_core/config/collection.rb +0 -57
  88. data/lib/corl_core/config/options.rb +0 -70
  89. data/lib/corl_core/core.rb +0 -59
  90. data/lib/corl_core/corl.rb +0 -254
  91. data/lib/corl_core/errors.rb +0 -84
  92. data/lib/corl_core/facade.rb +0 -126
  93. data/lib/corl_core/gems.rb +0 -72
  94. data/lib/corl_core/manager.rb +0 -425
  95. data/lib/corl_core/mixin/action/commit.rb +0 -58
  96. data/lib/corl_core/mixin/action/project.rb +0 -53
  97. data/lib/corl_core/mixin/action/push.rb +0 -52
  98. data/lib/corl_core/mixin/config/collection.rb +0 -53
  99. data/lib/corl_core/mixin/config/ops.rb +0 -53
  100. data/lib/corl_core/mixin/config/options.rb +0 -39
  101. data/lib/corl_core/mixin/macro/object_interface.rb +0 -361
  102. data/lib/corl_core/mixin/macro/plugin_interface.rb +0 -380
  103. data/lib/corl_core/mixin/settings.rb +0 -46
  104. data/lib/corl_core/mixin/sub_config.rb +0 -148
  105. data/lib/corl_core/mod/hash.rb +0 -29
  106. data/lib/corl_core/plugin/action.rb +0 -381
  107. data/lib/corl_core/plugin/base.rb +0 -374
  108. data/lib/corl_core/plugin/command.rb +0 -98
  109. data/lib/corl_core/plugin/event.rb +0 -53
  110. data/lib/corl_core/plugin/extension.rb +0 -12
  111. data/lib/corl_core/plugin/project.rb +0 -927
  112. data/lib/corl_core/plugin/template.rb +0 -80
  113. data/lib/corl_core/plugin/translator.rb +0 -38
  114. data/lib/corl_core/util/cli.rb +0 -352
  115. data/lib/corl_core/util/data.rb +0 -404
  116. data/lib/corl_core/util/disk.rb +0 -114
  117. data/lib/corl_core/util/git.rb +0 -47
  118. data/lib/corl_core/util/interface.rb +0 -319
  119. data/lib/corl_core/util/liquid.rb +0 -17
  120. data/lib/corl_core/util/package.rb +0 -93
  121. data/lib/corl_core/util/shell.rb +0 -239
  122. data/spec/corl_core/interface_spec.rb +0 -489
@@ -1,58 +0,0 @@
1
-
2
- module CORL
3
- module Mixin
4
- module Action
5
- module Commit
6
-
7
- #-----------------------------------------------------------------------------
8
- # Options
9
-
10
- def commit_options(parser, optional = true)
11
- if optional
12
- parser.option_bool(:commit, false,
13
- '--commit',
14
- 'corl.core.mixins.commit.options.commit'
15
- )
16
- else
17
- parser.options[:commit] = true
18
- end
19
-
20
- parser.option_bool(:allow_empty, false,
21
- '--empty',
22
- 'corl.core.mixins.commit.options.empty'
23
- )
24
- parser.option_bool(:propogate, false,
25
- '--propogate',
26
- 'corl.core.mixins.commit.options.propogate'
27
- )
28
- parser.option_str(:message, '',
29
- '--message COMMIT_MESSAGE',
30
- 'corl.core.mixins.commit.options.message'
31
- )
32
- parser.option_str(:author, nil,
33
- '--author COMMIT_AUTHOR',
34
- 'corl.core.mixins.commit.options.author'
35
- )
36
- end
37
-
38
- #-----------------------------------------------------------------------------
39
- # Operations
40
-
41
- def commit(project, files = '.')
42
- success = true
43
-
44
- if project && settings[:commit]
45
- success = project.commit(files, extended_config(:commit, {
46
- :allow_empty => settings[:allow_empty],
47
- :message => settings[:message],
48
- :author => settings[:author],
49
- :propogate => settings[:propogate]
50
- }))
51
- end
52
- success
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
@@ -1,53 +0,0 @@
1
-
2
- module CORL
3
- module Mixin
4
- module Action
5
- module Project
6
-
7
- #-----------------------------------------------------------------------------
8
- # Options
9
-
10
- def project_options(parser, ref_override = false, rev_override = false)
11
- parser.option_str(:project_provider, 'git',
12
- '--proj-provider PROVIDER',
13
- 'corl.core.mixins.project.options.provider'
14
- )
15
- if ref_override
16
- parser.option_str(:reference, nil,
17
- '--reference PROJECT_REF',
18
- 'corl.core.mixins.project.options.reference'
19
- )
20
- end
21
- if rev_override
22
- parser.option_str(:revision, nil,
23
- '--revision PROJECT_REV',
24
- 'corl.core.mixins.project.options.revision'
25
- )
26
- end
27
- end
28
-
29
- #-----------------------------------------------------------------------------
30
- # Operations
31
-
32
- def project_load(root_dir, update = false)
33
-
34
- # 1. Set a default project provider (reference can override)
35
- # 2. Get project from root directory
36
- # 3. Initialize project if not yet initialized
37
- # 4. Set remote if needed
38
- # 5. Checkout revision if needed
39
- # 6. Pull down updates if requested
40
-
41
- return CORL.project(extended_config(:project, {
42
- :provider => settings[:project_provider],
43
- :directory => root_dir,
44
- :url => settings[:reference],
45
- :revision => settings[:revision],
46
- :pull => update
47
- }))
48
- end
49
- end
50
- end
51
- end
52
- end
53
-
@@ -1,52 +0,0 @@
1
-
2
- module CORL
3
- module Mixin
4
- module Action
5
- module Push
6
-
7
- #-----------------------------------------------------------------------------
8
- # Options
9
-
10
- def push_options(parser, optional = true)
11
- if optional
12
- parser.option_bool(:push, false,
13
- '--push',
14
- 'corl.core.mixins.push.options.push'
15
- )
16
- else
17
- parser.options[:push] = true
18
- end
19
-
20
- parser.option_bool(:propogate, false,
21
- '--propogate',
22
- 'corl.core.mixins.push.options.propogate'
23
- )
24
- parser.option_str(:remote, :edit,
25
- '--remote PROJECT_REMOTE',
26
- 'corl.core.mixins.push.options.remote'
27
- )
28
- parser.option_str(:revision, :master,
29
- '--revision PROJECT_REVISION',
30
- 'corl.core.mixins.push.options.revision'
31
- )
32
- end
33
-
34
- #-----------------------------------------------------------------------------
35
- # Operations
36
-
37
- def push(project, remote = :edit)
38
- success = true
39
-
40
- if project && settings[:push]
41
- success = project.push(settings[:remote], extended_config(:push, {
42
- :revision => settings[:revision],
43
- :propogate => settings[:propogate]
44
- }))
45
- end
46
- success
47
- end
48
- end
49
- end
50
- end
51
- end
52
-
@@ -1,53 +0,0 @@
1
-
2
- # Should be included via extend
3
- #
4
- # extend Mixin::ConfigCollection
5
- #
6
-
7
- module CORL
8
- module Mixin
9
- module ConfigCollection
10
-
11
- #-----------------------------------------------------------------------------
12
- # Configuration collection interface
13
-
14
- def all_properties
15
- return Config::Collection.all
16
- end
17
-
18
- #---
19
-
20
- def get_property(name)
21
- return Config::Collection.get(name)
22
- end
23
-
24
- #---
25
-
26
- def set_property(name, value)
27
- Config::Collection.set(name, value)
28
- return self
29
- end
30
-
31
- #---
32
-
33
- def delete_property(name)
34
- Config::Collection.delete(name)
35
- return self
36
- end
37
-
38
- #---
39
-
40
- def clear_properties
41
- Config::Collection.clear
42
- return self
43
- end
44
-
45
- #---
46
-
47
- def save_properties
48
- Config::Collection.save
49
- return self
50
- end
51
- end
52
- end
53
- end
@@ -1,53 +0,0 @@
1
-
2
- # Should be included via extend
3
- #
4
- # extend Mixin::ConfigOps
5
- #
6
-
7
- module CORL
8
- module Mixin
9
- module ConfigOps
10
-
11
- #-----------------------------------------------------------------------------
12
- # Parsing
13
-
14
- def parse(statement, options = {})
15
- config = Config.ensure(options)
16
-
17
- # statement = common->php::apache::memory_limit = 32M
18
- # statement = identity -> test -> users::user[admin][shell]
19
- # statement = nodes->development->dev.loc->facts[server_location]
20
- # statement = corl->nodes[vagrant][dev.loc][vm][private_network]=172.5.5.10
21
- # statement = corl->settings[debug][puppet][options] = ["--debug"]
22
-
23
- reference, new_value = statement.split(/\=/)
24
- new_value = new_value.join('=').strip if new_value && new_value.is_a?(Array)
25
-
26
- config_elements = reference.gsub(/\s+/, '').split(/\-\>/)
27
- property = config_elements.pop
28
- config_file = config_elements.pop
29
-
30
- if config_directory = config.get(:directory, nil)
31
- config_path = File.join(project.directory, config_directory, *config_elements)
32
- else
33
- config_path = File.join(project.directory, *config_elements)
34
- end
35
-
36
- return nil unless property && config_file
37
-
38
- config_file = "#{config_file}." + config.get(:ext, 'json')
39
- property = property.gsub(/\]$/, '').split(/\]?\[/)
40
- data = open(config_path, config_file, config)
41
-
42
- return {
43
- :path => config_path,
44
- :file => config_file,
45
- :property => property,
46
- :conf => data,
47
- :current_value => (data ? data.get(property) : nil),
48
- :new_value => eval(new_value)
49
- }
50
- end
51
- end
52
- end
53
- end
@@ -1,39 +0,0 @@
1
-
2
- # Should be included via extend
3
- #
4
- # extend Mixin::ConfigOptions
5
- #
6
-
7
- module CORL
8
- module Mixin
9
- module ConfigOptions
10
-
11
- #-----------------------------------------------------------------------------
12
- # Configuration options interface
13
-
14
- def contexts(contexts = [], hierarchy = [])
15
- return Config::Options.contexts(contexts, hierarchy)
16
- end
17
-
18
- #---
19
-
20
- def get_options(contexts, force = true)
21
- return Config::Options.get(contexts, force)
22
- end
23
-
24
- #---
25
-
26
- def set_options(contexts, options, force = true)
27
- Config::Options.set(contexts, options, force)
28
- return self
29
- end
30
-
31
- #---
32
-
33
- def clear_options(contexts)
34
- Config::Options.clear(contexts)
35
- return self
36
- end
37
- end
38
- end
39
- end
@@ -1,361 +0,0 @@
1
-
2
- # Should be included via extend
3
- #
4
- # extend Mixin::Macro::ObjectInterface
5
- #
6
-
7
- module CORL
8
- module Mixin
9
- module Macro
10
- module ObjectInterface
11
-
12
- # requires Mixin::SubConfig
13
- # requires Mixin::Settings
14
-
15
- #-----------------------------------------------------------------------------
16
- # Object collections
17
-
18
- @@object_types = {}
19
-
20
- #---
21
-
22
- def object_collection(_type, _method_options = {})
23
- _method_config = Config.ensure(_method_options)
24
-
25
- _plural = _method_config.init(:plural, "#{_type}s").get(:plural)
26
-
27
- unless _ensure_proc = _method_config.get(:ensure_proc, false)
28
- _ensure_proc = Proc.new {|name, options = {}| options }
29
- end
30
- _delete_proc = _method_config.get(:delete_proc)
31
- _search_proc = _method_config.get(:search_proc)
32
-
33
- @@object_types[_type] = _method_config
34
-
35
- logger.debug("Creating new object collection #{_type} with: #{_method_config.inspect}")
36
-
37
- #---------------------------------------------------------------------------
38
-
39
- object_utilities
40
-
41
- #---------------------------------------------------------------------------
42
-
43
- logger.debug("Defining object interface method: #{_type}_config")
44
-
45
- define_method "#{_type}_config" do |name = nil|
46
- Config.new( name ? get([ _plural, name ], {}) : get(_plural, {}) )
47
- end
48
-
49
- #---
50
-
51
- logger.debug("Defining object interface method: #{_type}_setting")
52
-
53
- define_method "#{_type}_setting" do |name, property, default = nil, format = false|
54
- get([ _plural, name, property ], default, format)
55
- end
56
-
57
- #---
58
-
59
- logger.debug("Defining object interface method: #{_plural}")
60
-
61
- define_method "#{_plural}" do |reset = false|
62
- send("init_#{_plural}") if reset || _get(_plural, {}).empty?
63
- _get(_plural, {})
64
- end
65
-
66
- #---
67
-
68
- logger.debug("Defining object interface method: init_#{_plural}")
69
-
70
- define_method "init_#{_plural}" do
71
- data = hash(_search_proc.call) if _search_proc
72
- data = get_hash(_plural) unless data
73
-
74
- logger.debug("Initializing object data: #{data.inspect}")
75
-
76
- symbol_map(data).each do |name, options|
77
- if name != :settings
78
- options[:object_container] = myself
79
-
80
- logger.debug("Initializing object: #{name}")
81
-
82
- obj = _ensure_proc.call(name, options)
83
- _set([ _plural, name ], obj)
84
- end
85
- end
86
- end
87
-
88
- #---
89
-
90
- logger.debug("Defining object interface method: set_#{_plural}")
91
-
92
- define_method "set_#{_plural}" do |data = {}|
93
- data = Config.ensure(data).export
94
-
95
- send("clear_#{_plural}")
96
- set(_plural, data)
97
-
98
- logger.debug("Setting #{_plural}")
99
-
100
- data.each do |name, options|
101
- options[:object_container] = myself
102
-
103
- logger.debug("Setting #{_type} #{name}: #{options.inspect}")
104
-
105
- obj = _ensure_proc.call(name, options)
106
- _set([ _plural, name ], obj)
107
- end
108
- end
109
-
110
- #---
111
-
112
- logger.debug("Defining object interface method: #{_type}")
113
-
114
- define_method "#{_type}" do |name, reset = false|
115
- if reset || _get([ _plural, name ], nil).nil?
116
- options = get([ _plural, name ], nil)
117
-
118
- unless options.nil?
119
- options[:object_container] = myself
120
-
121
- logger.debug("Initializing object: #{name}")
122
-
123
- obj = _ensure_proc.call(name, options)
124
- _set([ _plural, name ], obj)
125
- end
126
- end
127
- _get([ _plural, name ])
128
- end
129
-
130
- #---
131
-
132
- logger.debug("Defining object interface method: set_#{_type}")
133
-
134
- define_method "set_#{_type}" do |name, options = {}|
135
- options = Config.ensure(options).export
136
-
137
- set([ _plural, name ], options)
138
-
139
- options[:object_container] = myself
140
-
141
- logger.debug("Setting #{_type} #{_name}: #{options.inspect}")
142
-
143
- obj = _ensure_proc.call(name, options)
144
- _set([ _plural, name ], obj)
145
- end
146
-
147
- #---
148
-
149
- logger.debug("Defining object interface method: set_#{_type}_setting")
150
-
151
- define_method "set_#{_type}_setting" do |name, property, value = nil|
152
- logger.debug("Setting #{name} property #{property} to #{value.inspect}")
153
- set([ _plural, name, property ], value)
154
- end
155
-
156
- #---
157
-
158
- logger.debug("Defining object interface method: delete_#{_type}")
159
-
160
- define_method "delete_#{_type}" do |name|
161
- obj = send(_type, name)
162
-
163
- logger.debug("Deleting #{_type} #{name}")
164
-
165
- delete([ _plural, name ])
166
- _delete([ _plural, name ])
167
-
168
- _delete_proc.call(obj) if _delete_proc && ! obj.nil?
169
- end
170
-
171
- #---
172
-
173
- logger.debug("Defining object interface method: delete_#{_type}_setting")
174
-
175
- define_method "delete_#{_type}_setting" do |name, property|
176
- logger.debug("Deleting #{name} property: #{property}")
177
-
178
- delete([ _plural, name, property ])
179
- end
180
-
181
- #---
182
-
183
- logger.debug("Defining object interface method: clear_#{_plural}")
184
-
185
- define_method "clear_#{_plural}" do
186
- get(_plural).keys.each do |name|
187
- logger.debug("Clearing #{_type} #{name}")
188
-
189
- send("delete_#{_type}", name)
190
- end
191
- end
192
-
193
- #---------------------------------------------------------------------------
194
-
195
- logger.debug("Defining object interface method: search_#{_type}")
196
-
197
- define_method "search_#{_type}" do |name, keys, default = '', format = false|
198
- obj_config = send("#{_type}_config", name)
199
- search_object(obj_config, keys, default, format)
200
- end
201
- end
202
-
203
- #-----------------------------------------------------------------------------
204
- # Utilities
205
-
206
- def object_utilities
207
-
208
- unless respond_to? :each_object_type
209
- logger.debug("Defining object utility method: each_object_type")
210
-
211
- define_method :each_object_type do |object_types = nil, filter_proc = nil, &code|
212
- object_types = @@object_types.keys unless object_types
213
- object_types = [ object_types ] unless object_types.is_a?(Array)
214
-
215
- object_types.each do |type|
216
- logger.debug("Processing object type: #{type}")
217
-
218
- unless filter_proc && ! filter_proc.call(type, @@object_types[type])
219
- plural = @@object_types[type][:plural]
220
-
221
- logger.debug("Passing: #{@@object_types[type].inspect}")
222
- code.call(type, plural, @@object_types[type])
223
- end
224
- end
225
- end
226
- end
227
-
228
- #---
229
-
230
- unless respond_to? :each_object
231
- logger.debug("Defining object utility method: each_object")
232
-
233
- define_method :each_object do |object_types = nil, &code|
234
- each_object_type(object_types) do |type, plural, options|
235
- logger.debug("Processing object type #{type}/#{plural} with: #{options.inspect}")
236
-
237
- send(plural).each do |name, obj|
238
- logger.debug("Processing object: #{name}")
239
- code.call(type, name, obj)
240
- end
241
- end
242
- end
243
- end
244
-
245
- #---
246
-
247
- unless respond_to? :init_objects
248
- logger.debug("Defining object utility method: init_objects")
249
-
250
- define_method :init_objects do |object_types = nil, filter_proc = nil|
251
- logger.debug("Initializing object collection")
252
-
253
- each_object_type(object_types, filter_proc) do |type, plural, options|
254
- send("init_#{plural}")
255
- end
256
- end
257
- end
258
-
259
- #---
260
-
261
- unless respond_to? :clear_objects
262
- logger.debug("Defining object utility method: clear_objects")
263
-
264
- define_method :clear_objects do |object_types = nil, filter_proc = nil|
265
- logger.debug("Clearing object collection")
266
-
267
- each_object_type(object_types, filter_proc) do |type, plural, options|
268
- send("clear_#{plural}")
269
- end
270
- end
271
- end
272
-
273
- #---------------------------------------------------------------------------
274
-
275
- unless respond_to? :search_object
276
- logger.debug("Defining object utility method: search_object")
277
-
278
- define_method :search_object do |obj_config, keys, default = '', format = false|
279
- obj_config = Marshal.load(Marshal.dump(obj_config))
280
- value = obj_config.get(keys)
281
-
282
- logger.debug("Searching object properties: #{obj_config.inspect}")
283
-
284
- if ! value || value.is_a?(Hash)
285
- settings = {}
286
-
287
- keys = [ keys ] unless keys.is_a?(Array)
288
- temp = keys.dup
289
-
290
- logger.debug("Searching object keys: #{keys.inspect}")
291
-
292
- logger.debug("Searching specialized settings")
293
- until temp.empty? do
294
- if obj_settings = obj_config.delete([ temp, :settings ])
295
- array(obj_settings).each do |group_name|
296
- if group_settings = Marshal.load(Marshal.dump(settings(group_name)))
297
- settings = Util::Data.merge([ group_settings.dup, settings ], true)
298
- end
299
- end
300
- end
301
- temp.pop
302
- end
303
-
304
- logger.debug("Specialized settings found: #{settings.inspect}")
305
- logger.debug("Searching general settings")
306
-
307
- if obj_settings = obj_config.delete(:settings)
308
- array(obj_settings).each do |group_name|
309
- if group_settings = Marshal.load(Marshal.dump(settings(group_name)))
310
- settings = Util::Data.merge([ group_settings, settings ], true)
311
- end
312
- end
313
- end
314
-
315
- logger.debug("Final settings found: #{settings.inspect}")
316
-
317
- unless settings.empty?
318
- final_config = Config.new(Util::Data.merge([ settings, obj_config.export ], true))
319
- value = final_config.get(keys)
320
-
321
- logger.debug("Final configuration: #{final_config.export.inspect}")
322
- end
323
-
324
- value = default if Util::Data.undef?(value)
325
- end
326
-
327
- logger.debug("Final value found (format: #{format.inspect}): #{value.inspect}")
328
- filter(value, format)
329
- end
330
- end
331
-
332
- #---------------------------------------------------------------------------
333
- # Configuration loading saving
334
-
335
- unless respond_to? :load
336
- logger.debug("Defining object utility method: load")
337
-
338
- define_method :load do |options = {}|
339
- logger.debug("Loading configuration if possible")
340
- if config.respond_to?(:load)
341
- clear_objects
342
- config.load(options)
343
- end
344
- end
345
- end
346
-
347
- #---
348
-
349
- unless respond_to? :save
350
- logger.debug("Defining object utility method: save")
351
-
352
- define_method :save do |options = {}|
353
- logger.debug("Saving configuration if possible")
354
- config.save(options) if config.respond_to?(:save)
355
- end
356
- end
357
- end
358
- end
359
- end
360
- end
361
- end