corl 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +5 -10
- data/Gemfile.lock +13 -11
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/corl +2 -54
- data/bootstrap/bootstrap.sh +91 -0
- data/bootstrap/lib/shell/LICENSE.txt +674 -0
- data/bootstrap/lib/shell/command.sh +214 -0
- data/bootstrap/lib/shell/filesystem.sh +139 -0
- data/bootstrap/lib/shell/load.sh +73 -0
- data/bootstrap/lib/shell/os.sh +67 -0
- data/bootstrap/lib/shell/script.sh +160 -0
- data/bootstrap/lib/shell/starter.sh +64 -0
- data/bootstrap/lib/shell/validators.sh +50 -0
- data/bootstrap/os/ubuntu/00_base.sh +5 -0
- data/bootstrap/os/ubuntu/01_git.sh +5 -0
- data/bootstrap/os/ubuntu/05_ruby.sh +7 -0
- data/bootstrap/os/ubuntu/06_puppet.sh +38 -0
- data/bootstrap/os/ubuntu/10_corl.sh +9 -0
- data/corl.gemspec +61 -124
- data/lib/{corl → CORL}/action/bootstrap.rb +13 -7
- data/lib/CORL/action/exec.rb +39 -0
- data/lib/CORL/action/image.rb +31 -0
- data/lib/{corl → CORL}/action/images.rb +1 -1
- data/lib/CORL/action/lookup.rb +34 -0
- data/lib/{corl → CORL}/action/machines.rb +1 -1
- data/lib/CORL/action/provision.rb +31 -0
- data/lib/{corl → CORL}/action/seed.rb +3 -3
- data/lib/{corl → CORL}/action/spawn.rb +2 -2
- data/lib/CORL/action/start.rb +31 -0
- data/lib/CORL/action/stop.rb +31 -0
- data/lib/{corl → CORL}/configuration/file.rb +1 -1
- data/lib/{corl → CORL}/event/puppet.rb +1 -1
- data/lib/{corl → CORL}/extension/puppetloader.rb +1 -1
- data/lib/{corl → CORL}/machine/fog.rb +3 -3
- data/lib/{corl → CORL}/machine/physical.rb +2 -2
- data/lib/{corl → CORL}/network/default.rb +1 -1
- data/lib/{corl → CORL}/node/aws.rb +0 -4
- data/lib/{corl → CORL}/node/google.rb +0 -4
- data/lib/{corl → CORL}/node/local.rb +1 -1
- data/lib/{corl → CORL}/node/rackspace.rb +0 -4
- data/lib/{corl → CORL}/provisioner/puppetnode.rb +1 -14
- data/lib/{corl → CORL}/provisioner/puppetnode/resource.rb +0 -0
- data/lib/{corl → CORL}/provisioner/puppetnode/resource_group.rb +0 -0
- data/lib/{corl → CORL}/template/environment.rb +1 -1
- data/lib/core/facade.rb +49 -0
- data/lib/{corl_core → core}/mixin/action/keypair.rb +10 -10
- data/lib/{corl_core → core}/mixin/lookup.rb +0 -0
- data/lib/{corl_core → core}/mod/hiera_backend.rb +0 -0
- data/lib/{corl_core/mixin/action/node.rb → core/plugin/action.rb} +66 -33
- data/lib/{corl_core → core}/plugin/configuration.rb +2 -2
- data/lib/{corl/node → core/plugin}/fog.rb +5 -1
- data/lib/{corl_core → core}/plugin/machine.rb +2 -2
- data/lib/{corl_core → core}/plugin/network.rb +4 -4
- data/lib/{corl_core → core}/plugin/node.rb +11 -9
- data/lib/{corl_core → core}/plugin/provisioner.rb +2 -2
- data/lib/{corl_core → core}/util/ssh.rb +1 -1
- data/lib/corl.rb +53 -112
- data/lib/puppet/parser/functions/ensure.rb +0 -4
- data/locales/en.yml +55 -148
- metadata +84 -222
- data/lib/corl/action/add.rb +0 -69
- data/lib/corl/action/clone.rb +0 -40
- data/lib/corl/action/create.rb +0 -55
- data/lib/corl/action/exec.rb +0 -41
- data/lib/corl/action/extract.rb +0 -49
- data/lib/corl/action/image.rb +0 -30
- data/lib/corl/action/lookup.rb +0 -35
- data/lib/corl/action/provision.rb +0 -37
- data/lib/corl/action/remove.rb +0 -51
- data/lib/corl/action/save.rb +0 -53
- data/lib/corl/action/start.rb +0 -37
- data/lib/corl/action/stop.rb +0 -30
- data/lib/corl/action/update.rb +0 -37
- data/lib/corl/command/shell.rb +0 -164
- data/lib/corl/event/regex.rb +0 -52
- data/lib/corl/project/git.rb +0 -465
- data/lib/corl/project/github.rb +0 -108
- data/lib/corl/template/json.rb +0 -16
- data/lib/corl/template/wrapper.rb +0 -16
- data/lib/corl/template/yaml.rb +0 -16
- data/lib/corl/translator/json.rb +0 -27
- data/lib/corl/translator/yaml.rb +0 -27
- data/lib/corl_core/codes.rb +0 -107
- data/lib/corl_core/config.rb +0 -337
- data/lib/corl_core/config/collection.rb +0 -57
- data/lib/corl_core/config/options.rb +0 -70
- data/lib/corl_core/core.rb +0 -59
- data/lib/corl_core/corl.rb +0 -254
- data/lib/corl_core/errors.rb +0 -84
- data/lib/corl_core/facade.rb +0 -126
- data/lib/corl_core/gems.rb +0 -72
- data/lib/corl_core/manager.rb +0 -425
- data/lib/corl_core/mixin/action/commit.rb +0 -58
- data/lib/corl_core/mixin/action/project.rb +0 -53
- data/lib/corl_core/mixin/action/push.rb +0 -52
- data/lib/corl_core/mixin/config/collection.rb +0 -53
- data/lib/corl_core/mixin/config/ops.rb +0 -53
- data/lib/corl_core/mixin/config/options.rb +0 -39
- data/lib/corl_core/mixin/macro/object_interface.rb +0 -361
- data/lib/corl_core/mixin/macro/plugin_interface.rb +0 -380
- data/lib/corl_core/mixin/settings.rb +0 -46
- data/lib/corl_core/mixin/sub_config.rb +0 -148
- data/lib/corl_core/mod/hash.rb +0 -29
- data/lib/corl_core/plugin/action.rb +0 -381
- data/lib/corl_core/plugin/base.rb +0 -374
- data/lib/corl_core/plugin/command.rb +0 -98
- data/lib/corl_core/plugin/event.rb +0 -53
- data/lib/corl_core/plugin/extension.rb +0 -12
- data/lib/corl_core/plugin/project.rb +0 -927
- data/lib/corl_core/plugin/template.rb +0 -80
- data/lib/corl_core/plugin/translator.rb +0 -38
- data/lib/corl_core/util/cli.rb +0 -352
- data/lib/corl_core/util/data.rb +0 -404
- data/lib/corl_core/util/disk.rb +0 -114
- data/lib/corl_core/util/git.rb +0 -47
- data/lib/corl_core/util/interface.rb +0 -319
- data/lib/corl_core/util/liquid.rb +0 -17
- data/lib/corl_core/util/package.rb +0 -93
- data/lib/corl_core/util/shell.rb +0 -239
- data/spec/corl_core/interface_spec.rb +0 -489
data/lib/corl/project/github.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
|
2
|
-
corl_require(File.dirname(__FILE__), :git)
|
3
|
-
|
4
|
-
#---
|
5
|
-
|
6
|
-
module CORL
|
7
|
-
module Project
|
8
|
-
class Github < Git
|
9
|
-
|
10
|
-
#-----------------------------------------------------------------------------
|
11
|
-
# Project plugin interface
|
12
|
-
|
13
|
-
def normalize
|
14
|
-
if reference = delete(:reference, nil)
|
15
|
-
myself.name = reference
|
16
|
-
else
|
17
|
-
if url = get(:url, nil)
|
18
|
-
myself.name = url
|
19
|
-
set(:url, myself.class.expand_url(url, get(:ssh, false)))
|
20
|
-
end
|
21
|
-
end
|
22
|
-
super
|
23
|
-
end
|
24
|
-
|
25
|
-
#---
|
26
|
-
|
27
|
-
def set_connection
|
28
|
-
require 'octokit'
|
29
|
-
|
30
|
-
@client = Octokit::Client.new :netrc => true
|
31
|
-
@client.login
|
32
|
-
end
|
33
|
-
|
34
|
-
#-----------------------------------------------------------------------------
|
35
|
-
# Property accessor / modifiers
|
36
|
-
|
37
|
-
def client
|
38
|
-
set_connection unless @client
|
39
|
-
@client
|
40
|
-
end
|
41
|
-
|
42
|
-
#-----------------------------------------------------------------------------
|
43
|
-
# Project operations
|
44
|
-
|
45
|
-
def init_auth
|
46
|
-
super do
|
47
|
-
key_id = ENV['USER'] + '@' + lookup(:ipaddress)
|
48
|
-
ssh_key = public_key_str
|
49
|
-
|
50
|
-
if private_key && ssh_key
|
51
|
-
begin
|
52
|
-
deploy_keys = client.deploy_keys(self.name)
|
53
|
-
github_id = nil
|
54
|
-
keys_match = true
|
55
|
-
|
56
|
-
deploy_keys.each do |key_resource|
|
57
|
-
if key_resource.title == key_id
|
58
|
-
github_id = key_resource.id
|
59
|
-
keys_match = false if key_resource.key != ssh_key
|
60
|
-
break
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
if github_id
|
65
|
-
unless keys_match
|
66
|
-
client.edit_deploy_key(self.name, github_id, { :key => ssh_key })
|
67
|
-
verify_key
|
68
|
-
end
|
69
|
-
else
|
70
|
-
client.add_deploy_key(self.name, key_id, ssh_key)
|
71
|
-
verify_key
|
72
|
-
end
|
73
|
-
|
74
|
-
rescue Exception => error
|
75
|
-
logger.error(error.inspect)
|
76
|
-
logger.error(error.message)
|
77
|
-
logger.error(Util::Data.to_yaml(error.backtrace))
|
78
|
-
|
79
|
-
ui.error(error.message, { :prefix => false }) if error.message
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
#-----------------------------------------------------------------------------
|
86
|
-
# Utilities
|
87
|
-
|
88
|
-
def self.expand_url(path, editable = false)
|
89
|
-
if editable
|
90
|
-
protocol = 'git@'
|
91
|
-
separator = ':'
|
92
|
-
else
|
93
|
-
protocol = 'https://'
|
94
|
-
separator = '/'
|
95
|
-
end
|
96
|
-
return "#{protocol}github.com#{separator}" + path + '.git'
|
97
|
-
end
|
98
|
-
|
99
|
-
#---
|
100
|
-
|
101
|
-
def verify_key
|
102
|
-
Util::SSH.init_session('github.com', 'git', 22, private_key)
|
103
|
-
Util::SSH.close('github.com', 'git')
|
104
|
-
end
|
105
|
-
protected :verify_key
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
data/lib/corl/template/json.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
module Template
|
4
|
-
class Json < Plugin::Template
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------------
|
7
|
-
# Renderers
|
8
|
-
|
9
|
-
def render_processed(data)
|
10
|
-
return super do
|
11
|
-
Util::Data.to_json(data)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
module Template
|
4
|
-
class Wrapper < Plugin::Template
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------------
|
7
|
-
# Renderers
|
8
|
-
|
9
|
-
def render_processed(data)
|
10
|
-
return super do
|
11
|
-
get(:template_prefix, '') + data.to_s + get(:template_suffix, '')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/corl/template/yaml.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
module Template
|
4
|
-
class Yaml < Plugin::Template
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------------
|
7
|
-
# Renderers
|
8
|
-
|
9
|
-
def render_processed(data)
|
10
|
-
return super do
|
11
|
-
Util::Data.to_yaml(data)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/corl/translator/json.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
module Translator
|
4
|
-
class Json < Plugin::Translator
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------------
|
7
|
-
# Translator operations
|
8
|
-
|
9
|
-
def parse(json_text)
|
10
|
-
return super do |properties|
|
11
|
-
if json_text && ! json_text.empty?
|
12
|
-
properties = Util::Data.parse_json(json_text)
|
13
|
-
end
|
14
|
-
properties
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
#---
|
19
|
-
|
20
|
-
def generate(properties)
|
21
|
-
return super do
|
22
|
-
Util::Data.to_json(properties, get(:pretty, true))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/corl/translator/yaml.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
module Translator
|
4
|
-
class Yaml < Plugin::Translator
|
5
|
-
|
6
|
-
#-----------------------------------------------------------------------------
|
7
|
-
# Translator operations
|
8
|
-
|
9
|
-
def parse(yaml_text)
|
10
|
-
return super do |properties|
|
11
|
-
if yaml_text && ! yaml_text.empty?
|
12
|
-
properties = Util::Data.parse_yaml(yaml_text)
|
13
|
-
end
|
14
|
-
properties
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
#---
|
19
|
-
|
20
|
-
def generate(properties)
|
21
|
-
return super do
|
22
|
-
Util::Data.to_yaml(properties)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/corl_core/codes.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
class Codes
|
4
|
-
|
5
|
-
#-----------------------------------------------------------------------------
|
6
|
-
# Code index
|
7
|
-
|
8
|
-
@@registry = {}
|
9
|
-
@@status_index = {}
|
10
|
-
@@next_code = 0
|
11
|
-
|
12
|
-
#---
|
13
|
-
|
14
|
-
def self.registry
|
15
|
-
@@registry
|
16
|
-
end
|
17
|
-
|
18
|
-
#---
|
19
|
-
|
20
|
-
def self.index(status_code = nil)
|
21
|
-
if status_code.nil? || ! status_code.integer?
|
22
|
-
@@status_index
|
23
|
-
else
|
24
|
-
status_code = status_code.to_i
|
25
|
-
|
26
|
-
if @@status_index.has_key?(status_code)
|
27
|
-
@@status_index[status_code]
|
28
|
-
else
|
29
|
-
@@status_index[registry[:unknown_status]]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
#---
|
35
|
-
|
36
|
-
def self.render_index(status_code = nil)
|
37
|
-
output = "Status index:\n"
|
38
|
-
@@status_index.each do |code, name|
|
39
|
-
name = name.gsub(/_/, ' ').capitalize
|
40
|
-
|
41
|
-
if ! status_code.nil? && status_code == code
|
42
|
-
output << sprintf(" [ %3i ] - %s\n", code, name)
|
43
|
-
else
|
44
|
-
output << sprintf(" %3i - %s\n", code, name)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
output << "\n"
|
48
|
-
output
|
49
|
-
end
|
50
|
-
|
51
|
-
#-----------------------------------------------------------------------------
|
52
|
-
# Code construction
|
53
|
-
|
54
|
-
def self.code(name)
|
55
|
-
name = name.to_sym
|
56
|
-
|
57
|
-
unless registry.has_key?(name)
|
58
|
-
status_code = @@next_code
|
59
|
-
@@next_code = @@next_code + 1
|
60
|
-
|
61
|
-
# TODO: Add more information to the index (like a help message)
|
62
|
-
@@registry[name] = status_code
|
63
|
-
@@status_index[status_code] = name.to_s
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
#---
|
68
|
-
|
69
|
-
def self.codes(*codes)
|
70
|
-
codes.each do |name|
|
71
|
-
code(name)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
#-----------------------------------------------------------------------------
|
76
|
-
# Return status codes on demand
|
77
|
-
|
78
|
-
def [](name)
|
79
|
-
name = name.to_sym
|
80
|
-
|
81
|
-
if @@registry.has_key?(name)
|
82
|
-
@@registry[name]
|
83
|
-
else
|
84
|
-
@@registry[:unknown_status]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
#---
|
89
|
-
|
90
|
-
def method_missing(method, *args, &block)
|
91
|
-
self[method]
|
92
|
-
end
|
93
|
-
|
94
|
-
#-----------------------------------------------------------------------------
|
95
|
-
# Core status codes
|
96
|
-
|
97
|
-
code(:success) # This must be added first (needs to be 0)
|
98
|
-
code(:help_wanted)
|
99
|
-
code(:unknown_status)
|
100
|
-
|
101
|
-
code(:action_unprocessed)
|
102
|
-
code(:batch_error)
|
103
|
-
|
104
|
-
code(:validation_failed)
|
105
|
-
code(:access_denied)
|
106
|
-
end
|
107
|
-
end
|
data/lib/corl_core/config.rb
DELETED
@@ -1,337 +0,0 @@
|
|
1
|
-
|
2
|
-
module CORL
|
3
|
-
class Config
|
4
|
-
|
5
|
-
#-----------------------------------------------------------------------------
|
6
|
-
# Global interface
|
7
|
-
|
8
|
-
extend Mixin::ConfigOptions
|
9
|
-
extend Mixin::ConfigCollection
|
10
|
-
extend Mixin::Lookup
|
11
|
-
|
12
|
-
#-----------------------------------------------------------------------------
|
13
|
-
# Instance generators
|
14
|
-
|
15
|
-
def self.ensure(config)
|
16
|
-
case config
|
17
|
-
when CORL::Config
|
18
|
-
return config
|
19
|
-
when Hash
|
20
|
-
return new(config)
|
21
|
-
end
|
22
|
-
return new
|
23
|
-
end
|
24
|
-
|
25
|
-
#---
|
26
|
-
|
27
|
-
def self.init(options, contexts = [], hierarchy = [], defaults = {})
|
28
|
-
contexts = contexts(contexts, hierarchy)
|
29
|
-
config = new(get_options(contexts), defaults)
|
30
|
-
config.import(options) unless Util::Data.empty?(options)
|
31
|
-
return config
|
32
|
-
end
|
33
|
-
|
34
|
-
#---
|
35
|
-
|
36
|
-
def self.init_flat(options, contexts = [], defaults = {})
|
37
|
-
return init(options, contexts, [], defaults)
|
38
|
-
end
|
39
|
-
|
40
|
-
#-----------------------------------------------------------------------------
|
41
|
-
# Constructor / Destructor
|
42
|
-
|
43
|
-
def initialize(data = {}, defaults = {}, force = true)
|
44
|
-
@force = force
|
45
|
-
@properties = {}
|
46
|
-
|
47
|
-
if defaults.is_a?(Hash) && ! defaults.empty?
|
48
|
-
defaults = symbol_map(defaults)
|
49
|
-
end
|
50
|
-
|
51
|
-
case data
|
52
|
-
when CORL::Config
|
53
|
-
@properties = Util::Data.merge([ defaults, data.export ], force)
|
54
|
-
when Hash
|
55
|
-
@properties = {}
|
56
|
-
if data.is_a?(Hash)
|
57
|
-
@properties = Util::Data.merge([ defaults, symbol_map(data) ], force)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
#-----------------------------------------------------------------------------
|
63
|
-
# Checks
|
64
|
-
|
65
|
-
def has_key?(keys)
|
66
|
-
get(keys) ? true : false
|
67
|
-
end
|
68
|
-
|
69
|
-
#-----------------------------------------------------------------------------
|
70
|
-
# Property accessors / modifiers
|
71
|
-
|
72
|
-
def keys
|
73
|
-
@properties.keys
|
74
|
-
end
|
75
|
-
|
76
|
-
#---
|
77
|
-
|
78
|
-
def fetch(data, keys, default = nil, format = false)
|
79
|
-
if keys.is_a?(String) || keys.is_a?(Symbol)
|
80
|
-
keys = [ keys ]
|
81
|
-
end
|
82
|
-
key = keys.shift.to_sym
|
83
|
-
|
84
|
-
if data.has_key?(key)
|
85
|
-
value = data[key]
|
86
|
-
|
87
|
-
if keys.empty?
|
88
|
-
return filter(value, format)
|
89
|
-
else
|
90
|
-
return fetch(data[key], keys, default, format)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
return filter(default, format)
|
94
|
-
end
|
95
|
-
protected :fetch
|
96
|
-
|
97
|
-
#---
|
98
|
-
|
99
|
-
def modify(data, keys, value = nil)
|
100
|
-
if keys.is_a?(String) || keys.is_a?(Symbol)
|
101
|
-
keys = [ keys ]
|
102
|
-
end
|
103
|
-
|
104
|
-
key = keys.shift.to_sym
|
105
|
-
has_key = data.has_key?(key)
|
106
|
-
existing = {
|
107
|
-
:key => key,
|
108
|
-
:value => ( has_key ? data[key] : nil )
|
109
|
-
}
|
110
|
-
|
111
|
-
if keys.empty?
|
112
|
-
existing[:value] = data[key] if has_key
|
113
|
-
|
114
|
-
if value.nil?
|
115
|
-
data.delete(key) if has_key
|
116
|
-
else
|
117
|
-
data[key] = value
|
118
|
-
end
|
119
|
-
else
|
120
|
-
data[key] = {} unless has_key
|
121
|
-
existing = modify(data[key], keys, value)
|
122
|
-
end
|
123
|
-
|
124
|
-
return existing
|
125
|
-
end
|
126
|
-
protected :modify
|
127
|
-
|
128
|
-
#---
|
129
|
-
|
130
|
-
def get(keys, default = nil, format = false)
|
131
|
-
return fetch(@properties, array(keys).flatten, default, format)
|
132
|
-
end
|
133
|
-
|
134
|
-
#---
|
135
|
-
|
136
|
-
def [](name, default = nil, format = false)
|
137
|
-
get(name, default, format)
|
138
|
-
end
|
139
|
-
|
140
|
-
#---
|
141
|
-
|
142
|
-
def get_array(keys, default = [])
|
143
|
-
return get(keys, default, :array)
|
144
|
-
end
|
145
|
-
|
146
|
-
#---
|
147
|
-
|
148
|
-
def get_hash(keys, default = {})
|
149
|
-
return get(keys, default, :hash)
|
150
|
-
end
|
151
|
-
|
152
|
-
#---
|
153
|
-
|
154
|
-
def init(keys, default = nil)
|
155
|
-
return set(keys, get(keys, default))
|
156
|
-
end
|
157
|
-
|
158
|
-
#---
|
159
|
-
|
160
|
-
def set(keys, value)
|
161
|
-
modify(@properties, array(keys).flatten, value)
|
162
|
-
return self
|
163
|
-
end
|
164
|
-
|
165
|
-
#---
|
166
|
-
|
167
|
-
def []=(name, value)
|
168
|
-
set(name, value)
|
169
|
-
end
|
170
|
-
|
171
|
-
#---
|
172
|
-
|
173
|
-
def delete(keys, default = nil)
|
174
|
-
existing = modify(@properties, array(keys).flatten, nil)
|
175
|
-
return existing[:value] if existing[:value]
|
176
|
-
return default
|
177
|
-
end
|
178
|
-
|
179
|
-
#---
|
180
|
-
|
181
|
-
def clear
|
182
|
-
@properties = {}
|
183
|
-
return self
|
184
|
-
end
|
185
|
-
|
186
|
-
#-----------------------------------------------------------------------------
|
187
|
-
# Import / Export
|
188
|
-
|
189
|
-
def import_base(properties, options = {})
|
190
|
-
config = Config.new(options, { :force => @force }).set(:context, :hash)
|
191
|
-
import_type = config.get(:import_type, :override)
|
192
|
-
|
193
|
-
properties = properties.export if properties.is_a?(CORL::Config)
|
194
|
-
|
195
|
-
case properties
|
196
|
-
when Hash
|
197
|
-
data = [ @properties, symbol_map(properties) ]
|
198
|
-
data = data.reverse if import_type != :override
|
199
|
-
|
200
|
-
@properties = Util::Data.merge(data, config)
|
201
|
-
|
202
|
-
when String, Symbol
|
203
|
-
properties = self.class.lookup(properties.to_s, {}, config)
|
204
|
-
|
205
|
-
data = [ @properties, symbol_map(properties) ]
|
206
|
-
data = data.reverse if import_type != :override
|
207
|
-
|
208
|
-
@properties = Util::Data.merge(data, config)
|
209
|
-
|
210
|
-
when Array
|
211
|
-
properties.each do |item|
|
212
|
-
import_base(item, config)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
return self
|
217
|
-
end
|
218
|
-
protected :import_base
|
219
|
-
|
220
|
-
#---
|
221
|
-
|
222
|
-
def import(properties, options = {})
|
223
|
-
return import_base(properties, options)
|
224
|
-
end
|
225
|
-
|
226
|
-
#---
|
227
|
-
|
228
|
-
def defaults(defaults, options = {})
|
229
|
-
config = Config.new(options).set(:import_type, :default)
|
230
|
-
return import_base(defaults, config)
|
231
|
-
end
|
232
|
-
|
233
|
-
#---
|
234
|
-
|
235
|
-
def export
|
236
|
-
return @properties
|
237
|
-
end
|
238
|
-
|
239
|
-
#-----------------------------------------------------------------------------
|
240
|
-
# Utilities
|
241
|
-
|
242
|
-
def self.symbol_map(data)
|
243
|
-
return Util::Data.symbol_map(data)
|
244
|
-
end
|
245
|
-
|
246
|
-
#---
|
247
|
-
|
248
|
-
def symbol_map(data)
|
249
|
-
return self.class.symbol_map(data)
|
250
|
-
end
|
251
|
-
|
252
|
-
#---
|
253
|
-
|
254
|
-
def self.string_map(data)
|
255
|
-
return Util::Data.string_map(data)
|
256
|
-
end
|
257
|
-
|
258
|
-
#---
|
259
|
-
|
260
|
-
def string_map(data)
|
261
|
-
return self.class.string_map(data)
|
262
|
-
end
|
263
|
-
|
264
|
-
#-----------------------------------------------------------------------------
|
265
|
-
|
266
|
-
def self.filter(data, method = false)
|
267
|
-
return Util::Data.filter(data, method)
|
268
|
-
end
|
269
|
-
|
270
|
-
#---
|
271
|
-
|
272
|
-
def filter(data, method = false)
|
273
|
-
return self.class.filter(data, method)
|
274
|
-
end
|
275
|
-
|
276
|
-
#-----------------------------------------------------------------------------
|
277
|
-
|
278
|
-
def self.array(data, default = [], split_string = false)
|
279
|
-
return Util::Data.array(data, default, split_string)
|
280
|
-
end
|
281
|
-
|
282
|
-
#---
|
283
|
-
|
284
|
-
def array(data, default = [], split_string = false)
|
285
|
-
return self.class.array(data, default, split_string)
|
286
|
-
end
|
287
|
-
|
288
|
-
#---
|
289
|
-
|
290
|
-
def self.hash(data, default = {})
|
291
|
-
data = data.export if data.is_a?(CORL::Config)
|
292
|
-
return Util::Data.hash(data, default)
|
293
|
-
end
|
294
|
-
|
295
|
-
#---
|
296
|
-
|
297
|
-
def hash(data, default = {})
|
298
|
-
return self.class.hash(data, default)
|
299
|
-
end
|
300
|
-
|
301
|
-
#---
|
302
|
-
|
303
|
-
def self.string(data, default = '')
|
304
|
-
return Util::Data.string(data, default)
|
305
|
-
end
|
306
|
-
|
307
|
-
#---
|
308
|
-
|
309
|
-
def string(data, default = '')
|
310
|
-
return self.class.string(data, default)
|
311
|
-
end
|
312
|
-
|
313
|
-
#---
|
314
|
-
|
315
|
-
def self.symbol(data, default = :undefined)
|
316
|
-
return Util::Data.symbol(data, default)
|
317
|
-
end
|
318
|
-
|
319
|
-
#---
|
320
|
-
|
321
|
-
def symbol(data, default = :undefined)
|
322
|
-
return self.class.symbol(data, default)
|
323
|
-
end
|
324
|
-
|
325
|
-
#---
|
326
|
-
|
327
|
-
def self.test(data)
|
328
|
-
return Util::Data.test(data)
|
329
|
-
end
|
330
|
-
|
331
|
-
#---
|
332
|
-
|
333
|
-
def test(data)
|
334
|
-
return self.class.test(data)
|
335
|
-
end
|
336
|
-
end
|
337
|
-
end
|