rdm 0.4.17 → 0.4.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -8
- data/bin/rdm +10 -10
- data/example/.rdm/templates/configs/<%=config_path%> +2 -0
- data/example/.rdm/templates/configs/<%=role_config_path%> +2 -0
- data/example/Rdm.packages +17 -1
- data/example/configs/app/default.yml +2 -0
- data/example/configs/app/production.yml +2 -0
- data/example/configs/database/default.yml +3 -0
- data/example/env_files/development.env +3 -0
- data/example/env_files/production.env +5 -0
- data/example/env_files/test.env +3 -0
- data/example/infrastructure/repository/Package.rb +1 -0
- data/lib/rdm.rb +7 -14
- data/lib/rdm/cli/config.rb +31 -0
- data/lib/rdm/config.rb +11 -0
- data/lib/rdm/config_locals.rb +11 -0
- data/lib/rdm/config_manager.rb +68 -0
- data/lib/rdm/config_scope.rb +23 -0
- data/lib/rdm/errors.rb +0 -3
- data/lib/rdm/gen/config.rb +59 -0
- data/lib/rdm/gen/init.rb +4 -0
- data/lib/rdm/package.rb +9 -18
- data/lib/rdm/package_importer.rb +17 -3
- data/lib/rdm/package_parser.rb +0 -1
- data/lib/rdm/packages/compiler_service.rb +7 -1
- data/lib/rdm/settings.rb +21 -10
- data/lib/rdm/source.rb +18 -1
- data/lib/rdm/source_parser.rb +45 -2
- data/lib/rdm/spec_runner/runner.rb +2 -2
- data/lib/rdm/templates/configs/<%=config_path%> +2 -0
- data/lib/rdm/templates/configs/<%=role_config_path%> +2 -0
- data/lib/rdm/templates/init/Rdm.packages +12 -0
- data/lib/rdm/templates/init/env_files/development.env +3 -0
- data/lib/rdm/templates/init/env_files/production.env +3 -0
- data/lib/rdm/templates/init/env_files/test.env +3 -0
- data/lib/rdm/version.rb +1 -1
- data/rdm.gemspec +0 -3
- data/spec/fixtures/SampleSource.rb +4 -2
- data/spec/fixtures/config.yml +2 -0
- data/spec/rdm/cli/gen_package_spec.rb +2 -0
- data/spec/rdm/config_manager_spec.rb +136 -0
- data/spec/rdm/gen/config_spec.rb +31 -0
- data/spec/rdm/gen/init_spec.rb +12 -0
- data/spec/rdm/gen/package_spec.rb +0 -1
- data/spec/rdm/package_importer_spec.rb +2 -34
- data/spec/rdm/rdm_spec.rb +1 -1
- data/spec/rdm/source_parser_spec.rb +59 -0
- data/spec/spec_helper.rb +0 -1
- metadata +27 -63
- data/example/config/app.yml +0 -6
- data/example/infrastructure/repository/fixture.txt +0 -1
- data/lib/rdm/utils/ostruct_utils.rb +0 -12
- data/lib/rdm/yml_config/config_caster.rb +0 -32
- data/lib/rdm/yml_config/config_manager.rb +0 -39
- data/lib/rdm/yml_config/config_validator.rb +0 -51
- data/lib/rdm/yml_config/env_config.rb +0 -46
- data/lib/rdm/yml_config/env_config_dsl.rb +0 -92
- data/lib/rdm/yml_config/validate_config.rb +0 -13
- data/spec/fixtures/app.yml +0 -17
- data/spec/rdm/yml_config/config_caster_spec.rb +0 -64
- data/spec/rdm/yml_config/config_manager_spec.rb +0 -7
- data/spec/rdm/yml_config/config_validator_spec.rb +0 -190
- data/spec/rdm/yml_config/env_config_dsl_spec.rb +0 -123
data/lib/rdm/gen/init.rb
CHANGED
@@ -45,6 +45,10 @@ module Rdm
|
|
45
45
|
@template_detector.gem_template_folder('package'),
|
46
46
|
File.dirname(@template_detector.project_template_folder('package'))
|
47
47
|
)
|
48
|
+
FileUtils.cp_r(
|
49
|
+
@template_detector.gem_template_folder('configs'),
|
50
|
+
File.dirname(@template_detector.project_template_folder('configs'))
|
51
|
+
)
|
48
52
|
|
49
53
|
generated_files
|
50
54
|
end
|
data/lib/rdm/package.rb
CHANGED
@@ -2,11 +2,6 @@ class Rdm::Package
|
|
2
2
|
DEFAULT_GROUP = '_default_'.freeze
|
3
3
|
|
4
4
|
attr_accessor :metadata, :local_dependencies, :external_dependencies, :file_dependencies, :config_dependencies, :path
|
5
|
-
attr_reader :environments
|
6
|
-
|
7
|
-
def inspect
|
8
|
-
"Rdm::Package(name: #{name}, path: #{path})"
|
9
|
-
end
|
10
5
|
|
11
6
|
def local_dependencies(group = nil)
|
12
7
|
fetch_dependencies(@local_dependencies || {}, group)
|
@@ -20,6 +15,10 @@ class Rdm::Package
|
|
20
15
|
fetch_dependencies(@file_dependencies || {}, group)
|
21
16
|
end
|
22
17
|
|
18
|
+
def config_dependencies(group = nil)
|
19
|
+
fetch_dependencies(@config_dependencies || {}, group)
|
20
|
+
end
|
21
|
+
|
23
22
|
def local_dependencies_with_groups
|
24
23
|
return {} if @local_dependencies.nil?
|
25
24
|
@local_dependencies.each_with_object(
|
@@ -50,7 +49,11 @@ class Rdm::Package
|
|
50
49
|
@file_dependencies[current_group] << file
|
51
50
|
end
|
52
51
|
|
53
|
-
|
52
|
+
# Import config dependency
|
53
|
+
def import_config(dependency)
|
54
|
+
@config_dependencies ||= {}
|
55
|
+
@config_dependencies[current_group] ||= []
|
56
|
+
@config_dependencies[current_group] << dependency
|
54
57
|
end
|
55
58
|
|
56
59
|
def package
|
@@ -81,18 +84,6 @@ class Rdm::Package
|
|
81
84
|
other_package.name == name
|
82
85
|
end
|
83
86
|
|
84
|
-
def set_environments(&block)
|
85
|
-
environments.children = Rdm::EnvConfigDSL.new.instance_exec(&block) if block_given?
|
86
|
-
end
|
87
|
-
|
88
|
-
def environments
|
89
|
-
@environments ||= Rdm::EnvConfig.new(
|
90
|
-
name: name,
|
91
|
-
type: Rdm::EnvConfig::Types::HASH,
|
92
|
-
optional: false
|
93
|
-
)
|
94
|
-
end
|
95
|
-
|
96
87
|
private
|
97
88
|
|
98
89
|
def current_group
|
data/lib/rdm/package_importer.rb
CHANGED
@@ -31,7 +31,6 @@ class Rdm::PackageImporter
|
|
31
31
|
# @return [Rdm::Package] Current package
|
32
32
|
def import_file(package_path, group: nil)
|
33
33
|
package = Rdm::PackageParser.parse_file(package_path)
|
34
|
-
|
35
34
|
source = read_and_init_source(package.source)
|
36
35
|
|
37
36
|
# Init Rdm.root based on Rdm.packages directory
|
@@ -47,6 +46,10 @@ class Rdm::PackageImporter
|
|
47
46
|
@imported_packages ||= []
|
48
47
|
end
|
49
48
|
|
49
|
+
def imported_configs
|
50
|
+
@imported_configs ||= []
|
51
|
+
end
|
52
|
+
|
50
53
|
# Import package and initialize module
|
51
54
|
def import_package(package_name, source:, group: nil)
|
52
55
|
return imported_packages if imported_packages.include?(package_name.to_s)
|
@@ -62,6 +65,11 @@ class Rdm::PackageImporter
|
|
62
65
|
import_package(dependency, source: source, group: group)
|
63
66
|
end
|
64
67
|
|
68
|
+
# also import config dependencies
|
69
|
+
package.config_dependencies(group).each do |dependency|
|
70
|
+
import_config(dependency, source: source)
|
71
|
+
end
|
72
|
+
|
65
73
|
# only after importing dependencies - require package itself
|
66
74
|
begin
|
67
75
|
require package_name
|
@@ -97,13 +105,19 @@ class Rdm::PackageImporter
|
|
97
105
|
require File.join(package.path, file_path)
|
98
106
|
end
|
99
107
|
|
100
|
-
Rdm::ConfigManager.load_config(envs: package.environments, path_to_config: Rdm.settings.config_path)
|
101
|
-
|
102
108
|
unless ActiveSupport::Dependencies.autoload_paths.include?(package_dir_name)
|
103
109
|
ActiveSupport::Dependencies.autoload_paths << package_dir_name
|
104
110
|
end
|
105
111
|
end
|
106
112
|
|
113
|
+
def import_config(config_name, source:)
|
114
|
+
return if imported_configs.include?(config_name)
|
115
|
+
config = source.configs[config_name.to_s]
|
116
|
+
raise "Can't find config with name: #{config_name}" if config.nil?
|
117
|
+
Rdm.config.load_config(config, source: source)
|
118
|
+
imported_configs << config_name
|
119
|
+
end
|
120
|
+
|
107
121
|
def read_and_init_source(source_path)
|
108
122
|
source_parser.read_and_init_source(source_path)
|
109
123
|
end
|
data/lib/rdm/package_parser.rb
CHANGED
@@ -56,7 +56,13 @@ module Rdm
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
FileUtils.cp_r(File.join(@project_path, 'configs'), File.join(@compile_path, 'configs'))
|
60
|
+
if Dir.exists?(File.join(@project_path, Rdm.settings.env_files_dir))
|
61
|
+
FileUtils.cp_r(
|
62
|
+
File.join(@project_path, Rdm.settings.env_files_dir),
|
63
|
+
File.join(@compile_path, Rdm.settings.env_files_dir)
|
64
|
+
)
|
65
|
+
end
|
60
66
|
|
61
67
|
Rdm.settings.compile_ignore_files.each do |file|
|
62
68
|
Dir["#{@compile_path}/**/#{file}"].each do |file_to_remove|
|
data/lib/rdm/settings.rb
CHANGED
@@ -2,22 +2,33 @@ class Rdm::Settings
|
|
2
2
|
attr_reader :settings
|
3
3
|
|
4
4
|
SETTING_KEYS = [
|
5
|
-
:role, :package_subdir_name, :config_path,
|
5
|
+
:role, :package_subdir_name, :configs_dir, :config_path, :role_config_path,
|
6
6
|
:silence_missing_package_file, :silence_missing_package, :compile_path,
|
7
|
-
:compile_ignore_files, :compile_add_files
|
7
|
+
:compile_ignore_files, :compile_add_files, :env_files_dir, :env_file_name
|
8
8
|
].freeze
|
9
9
|
|
10
|
-
SETTING_VARIABLES = [:role].freeze
|
10
|
+
SETTING_VARIABLES = [:role, :configs_dir, :config_path, :role_config_path].freeze
|
11
11
|
|
12
12
|
# Default settings
|
13
13
|
def initialize
|
14
|
-
silence_missing_package
|
15
|
-
silence_missing_package_file
|
16
|
-
package_subdir_name
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
silence_missing_package(false)
|
15
|
+
silence_missing_package_file(false)
|
16
|
+
package_subdir_name('package')
|
17
|
+
configs_dir('configs')
|
18
|
+
env_files_dir('env_files')
|
19
|
+
compile_ignore_files([
|
20
|
+
'.gitignore',
|
21
|
+
'.byebug_history',
|
22
|
+
'.irbrc',
|
23
|
+
'.rspec',
|
24
|
+
'*_spec.rb',
|
25
|
+
'*.log'
|
26
|
+
])
|
27
|
+
compile_add_files([
|
28
|
+
'Gemfile',
|
29
|
+
'Gemfile.lock'
|
30
|
+
])
|
31
|
+
compile_path('/tmp/rdm/:package_name')
|
21
32
|
end
|
22
33
|
|
23
34
|
SETTING_KEYS.each do |key|
|
data/lib/rdm/source.rb
CHANGED
@@ -3,6 +3,7 @@ class Rdm::Source
|
|
3
3
|
|
4
4
|
def initialize(root_path:)
|
5
5
|
@root_path = root_path
|
6
|
+
@config_names = []
|
6
7
|
@package_paths = []
|
7
8
|
end
|
8
9
|
|
@@ -12,6 +13,15 @@ class Rdm::Source
|
|
12
13
|
@setup_block = block
|
13
14
|
end
|
14
15
|
|
16
|
+
# Add config to list of known configs
|
17
|
+
# @param config_name [String] Config name
|
18
|
+
def config(config_name)
|
19
|
+
config_name = config_name.to_s
|
20
|
+
raise Rdm::Errors::ConfigExists, config_name if @config_names.include?(config_name)
|
21
|
+
|
22
|
+
@config_names << config_name
|
23
|
+
end
|
24
|
+
|
15
25
|
# Add package to list of known packages
|
16
26
|
# @param package_path [String] Package path
|
17
27
|
def package(package_path)
|
@@ -22,8 +32,9 @@ class Rdm::Source
|
|
22
32
|
# @param value [Hash<String: Rdm::Package>] Hash of packages by it's name
|
23
33
|
# @param value [Hash<String: Rdm::Config>] Hash of configs by it's name
|
24
34
|
# @return [Hash<String: Rdm::Package>] Hash of packages by it's name
|
25
|
-
def init_with(packages:)
|
35
|
+
def init_with(packages:, configs:)
|
26
36
|
@packages = packages
|
37
|
+
@configs = configs
|
27
38
|
end
|
28
39
|
|
29
40
|
# Read initialized packages
|
@@ -31,4 +42,10 @@ class Rdm::Source
|
|
31
42
|
def packages
|
32
43
|
@packages || {}
|
33
44
|
end
|
45
|
+
|
46
|
+
# Read initialized configs
|
47
|
+
# @return [Hash<String: Rdm::Config>] Hash of configs by it's name
|
48
|
+
def configs
|
49
|
+
@configs || {}
|
50
|
+
end
|
34
51
|
end
|
data/lib/rdm/source_parser.rb
CHANGED
@@ -15,7 +15,7 @@ class Rdm::SourceParser
|
|
15
15
|
@stdout = stdout || STDOUT
|
16
16
|
end
|
17
17
|
|
18
|
-
# Read source file, parse and init it's packages
|
18
|
+
# Read source file, parse and init it's packages and configs
|
19
19
|
# @param source_path [String] Source file path
|
20
20
|
# @return [Rdm::Source] Source
|
21
21
|
def read_and_init_source
|
@@ -28,7 +28,9 @@ class Rdm::SourceParser
|
|
28
28
|
validate_rdm_settings!
|
29
29
|
|
30
30
|
init_and_set_packages(source)
|
31
|
-
source
|
31
|
+
init_and_set_configs(source)
|
32
|
+
init_and_set_env_variables(source)
|
33
|
+
source.init_with(packages: packages, configs: configs)
|
32
34
|
source
|
33
35
|
end
|
34
36
|
|
@@ -55,6 +57,37 @@ class Rdm::SourceParser
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
60
|
+
def init_and_set_configs(source)
|
61
|
+
source.config_names.each do |config_name|
|
62
|
+
default_path = settings.read_setting(:config_path, vars: { config_name: config_name })
|
63
|
+
role_path = settings.read_setting(:role_config_path, vars: { config_name: config_name })
|
64
|
+
config = Rdm::Config.new
|
65
|
+
config.default_path = default_path
|
66
|
+
config.role_path = role_path
|
67
|
+
config.name = config_name
|
68
|
+
configs[config_name] = config
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def init_and_set_env_variables(source)
|
73
|
+
return unless settings.read_setting(:env_file_name)
|
74
|
+
|
75
|
+
unless File.exists?(env_file_path)
|
76
|
+
@stdout.puts "WARNING! Environment file '#{settings.read_setting(:env_file_name)}' was not found. Please, add #{env_file_path} file..."
|
77
|
+
return
|
78
|
+
end
|
79
|
+
|
80
|
+
File.foreach(env_file_path) do |line|
|
81
|
+
key, value = line.split('=').map(&:strip)
|
82
|
+
|
83
|
+
if ENV.has_key?(key) && ENV[key] != value
|
84
|
+
@stdout.puts "WARNING! Environment file '#{settings.read_setting(:env_file_name)}' overwrites ENV['#{key}'] variable from '#{ENV.fetch(key, nil)}' to '#{value}' ..."
|
85
|
+
end
|
86
|
+
|
87
|
+
ENV[key] = value
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
58
91
|
# Make sure that all required settings are in place
|
59
92
|
def validate_rdm_settings!
|
60
93
|
if settings.read_setting(:role).nil?
|
@@ -69,6 +102,12 @@ class Rdm::SourceParser
|
|
69
102
|
File.dirname(source_path)
|
70
103
|
end
|
71
104
|
|
105
|
+
def env_file_path
|
106
|
+
file_path = File.join(root_path, settings.read_setting(:env_files_dir), "#{settings.read_setting(:env_file_name)}")
|
107
|
+
|
108
|
+
file_path.gsub(/\.env$/, '').concat('.env')
|
109
|
+
end
|
110
|
+
|
72
111
|
# [String] Source file content
|
73
112
|
def source_content
|
74
113
|
@source_content ||= File.read(source_path)
|
@@ -78,6 +117,10 @@ class Rdm::SourceParser
|
|
78
117
|
@packages ||= {}
|
79
118
|
end
|
80
119
|
|
120
|
+
def configs
|
121
|
+
@configs ||= {}
|
122
|
+
end
|
123
|
+
|
81
124
|
def settings
|
82
125
|
Rdm.settings
|
83
126
|
end
|
@@ -170,7 +170,7 @@ class Rdm::SpecRunner::Runner
|
|
170
170
|
start_from = running_packages.index {|cmd_params| cmd_params.package_name == @from}
|
171
171
|
|
172
172
|
if start_from.nil?
|
173
|
-
puts "
|
173
|
+
puts "Package :#{@from} does not exists"
|
174
174
|
exit(1)
|
175
175
|
end
|
176
176
|
|
@@ -191,7 +191,7 @@ class Rdm::SpecRunner::Runner
|
|
191
191
|
|
192
192
|
running_packages
|
193
193
|
.map(&:command)
|
194
|
-
.join('
|
194
|
+
.join('; ')
|
195
195
|
end
|
196
196
|
|
197
197
|
def display_missing_specs
|
@@ -3,10 +3,22 @@ setup do
|
|
3
3
|
ENV['RUBY_ENV'] || raise('please set RUBY_ENV environment variable')
|
4
4
|
end
|
5
5
|
|
6
|
+
env_file_name do
|
7
|
+
ENV['ENV_FILE']
|
8
|
+
end
|
9
|
+
|
10
|
+
configs_dir 'configs'
|
11
|
+
config_path ':configs_dir/:config_name/default.yml'
|
12
|
+
role_config_path ':configs_dir/:config_name/:role.yml'
|
13
|
+
|
14
|
+
env_files_dir 'env_files'
|
6
15
|
package_subdir_name 'package'
|
7
16
|
silence_missing_package true
|
8
17
|
end
|
9
18
|
|
19
|
+
config :database
|
20
|
+
config :logging
|
21
|
+
|
10
22
|
|
11
23
|
# package 'core/application/commands'
|
12
24
|
# package 'core/utils'
|
data/lib/rdm/version.rb
CHANGED
data/rdm.gemspec
CHANGED
@@ -23,7 +23,4 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "codecov"
|
24
24
|
spec.add_dependency "activesupport"
|
25
25
|
spec.add_dependency "commander", "~> 4.4"
|
26
|
-
spec.add_dependency "morf"
|
27
|
-
spec.add_dependency "hcast"
|
28
|
-
spec.add_dependency "attr_validator"
|
29
26
|
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rdm::ConfigManager do
|
4
|
+
subject { Rdm::ConfigManager.new }
|
5
|
+
|
6
|
+
let(:example_path) {
|
7
|
+
Pathname.new(
|
8
|
+
File.join(File.expand_path('../../../', __FILE__), 'example')
|
9
|
+
)
|
10
|
+
}
|
11
|
+
let(:config_manager) { Rdm::ConfigManager.new }
|
12
|
+
let(:source_file) { example_path.join('Rdm.packages').to_s }
|
13
|
+
let(:source) { Rdm::SourceParser.read_and_init_source(source_file)}
|
14
|
+
|
15
|
+
describe "#load_config" do
|
16
|
+
context "config.default_path" do
|
17
|
+
let(:config){ Rdm::Config.build(name: "name", default_path: "configs/app/default.yml", role_path: nil) }
|
18
|
+
it "works" do
|
19
|
+
config_manager.load_config(config, source: source)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "config.role_path" do
|
24
|
+
let(:config){ Rdm::Config.build(name: "name", default_path: nil, role_path: "configs/app/production.yml") }
|
25
|
+
it "works" do
|
26
|
+
config_manager.load_config(config, source: source)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#update_using_file" do
|
32
|
+
context "file missing and raise_if_missing=true" do
|
33
|
+
let(:config){ Rdm::Config.build(name: "name", default_path: "configs/app/not-there.yml", role_path: nil) }
|
34
|
+
it "raises" do
|
35
|
+
expect{
|
36
|
+
config_manager.load_config(config, source: source)
|
37
|
+
}.to raise_error(RuntimeError, Regexp.new("Config file is not found at path"))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#update_using_file" do
|
43
|
+
let(:fixtures_path) {
|
44
|
+
File.join(File.expand_path("../../", __FILE__), 'fixtures')
|
45
|
+
}
|
46
|
+
|
47
|
+
before :each do
|
48
|
+
subject.update_using_file(File.join(fixtures_path, "config.yml"))
|
49
|
+
end
|
50
|
+
|
51
|
+
it "parses yml with erb correctly" do
|
52
|
+
expect(subject.development.foo).to eq("bar")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#update_using_hash" do
|
57
|
+
before :each do
|
58
|
+
subject.update_using_hash(
|
59
|
+
database: {
|
60
|
+
username: "foo",
|
61
|
+
password: "bar"
|
62
|
+
},
|
63
|
+
lib_name: "rdm",
|
64
|
+
version: 1,
|
65
|
+
published: true,
|
66
|
+
draft: false,
|
67
|
+
features: ["dependency_manager", "config_manager"]
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns given value for string" do
|
72
|
+
expect(subject.lib_name).to eq("rdm")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns given value for int" do
|
76
|
+
expect(subject.version).to eq(1)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns given value for true bool" do
|
80
|
+
expect(subject.published).to eq(true)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "returns given value for false bool" do
|
84
|
+
expect(subject.draft).to eq(false)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "returns given value for array" do
|
88
|
+
expect(subject.features).to eq(["dependency_manager", "config_manager"])
|
89
|
+
end
|
90
|
+
|
91
|
+
it "creates another child scope for nested hash" do
|
92
|
+
expect(subject.database).to be_instance_of(Rdm::ConfigScope)
|
93
|
+
expect(subject.database.username).to eq("foo")
|
94
|
+
expect(subject.database.password).to eq("bar")
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when already has config" do
|
98
|
+
before :each do
|
99
|
+
subject.update_using_hash(
|
100
|
+
database: {
|
101
|
+
username: "new_username",
|
102
|
+
password: "new_password"
|
103
|
+
}
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "keeps old configs" do
|
108
|
+
expect(subject.lib_name).to eq('rdm')
|
109
|
+
end
|
110
|
+
|
111
|
+
it "rewrites new configs" do
|
112
|
+
expect(subject.database.username).to eq('new_username')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "to_h" do
|
118
|
+
before :each do
|
119
|
+
subject.update_using_hash(
|
120
|
+
site_name: "Sample app",
|
121
|
+
database: {
|
122
|
+
username: "username",
|
123
|
+
password: "password"
|
124
|
+
}
|
125
|
+
)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "returns attributes in root scope" do
|
129
|
+
expect(subject.to_h["site_name"]).to eq("Sample app")
|
130
|
+
end
|
131
|
+
|
132
|
+
it "returns attributes in child scope" do
|
133
|
+
expect(subject.to_h["database"]["username"]).to eq("username")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|