rdm 0.4.17 → 0.4.18
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.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ef547c24828be0e76ebfead89103580691c5eb09fb7ccae8fbf6e679ceb90c0
|
4
|
+
data.tar.gz: d5bce320cb6593f1ecbe6346acc6b109824f4320ef04300ab842f08cbb316aa8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0784e0a54cdd0e0e1a5129460684cea9d5ed3606c997d390902a0393019082ddf163995b6efe44fe929c987d9b3c529377529ccf3e6c049fe10c5e072f499a5
|
7
|
+
data.tar.gz: 070261bcff5bb4be884fc6ad9c7ade948598c091dc141c3181e79d9146d09a5204d935929e15c16f4de6a60674506fac673cc433e5fd7d3c43f8e59db7b1b147
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rdm (0.4.
|
4
|
+
rdm (0.4.18)
|
5
5
|
activesupport
|
6
|
-
attr_validator
|
7
6
|
commander (~> 4.4)
|
8
|
-
hcast
|
9
|
-
morf
|
10
7
|
|
11
8
|
GEM
|
12
9
|
remote: https://rubygems.org/
|
@@ -17,8 +14,6 @@ GEM
|
|
17
14
|
minitest (~> 5.1)
|
18
15
|
tzinfo (~> 1.1)
|
19
16
|
ast (2.3.0)
|
20
|
-
attr_validator (0.2.3)
|
21
|
-
i18n
|
22
17
|
byebug (9.0.6)
|
23
18
|
codecov (0.2.5)
|
24
19
|
colorize
|
@@ -30,13 +25,11 @@ GEM
|
|
30
25
|
concurrent-ruby (1.1.7)
|
31
26
|
diff-lcs (1.3)
|
32
27
|
docile (1.3.2)
|
33
|
-
hcast (0.3.0)
|
34
28
|
highline (2.0.3)
|
35
29
|
i18n (1.8.5)
|
36
30
|
concurrent-ruby (~> 1.0)
|
37
31
|
json (2.3.1)
|
38
32
|
minitest (5.14.2)
|
39
|
-
morf (0.0.3)
|
40
33
|
parser (2.3.3.1)
|
41
34
|
ast (~> 2.2)
|
42
35
|
powerpack (0.1.1)
|
data/bin/rdm
CHANGED
@@ -60,7 +60,7 @@ class RdmCliRunner
|
|
60
60
|
c.action do |args, options|
|
61
61
|
package_name = (args.first || "")
|
62
62
|
defaults = {
|
63
|
-
current_path: `pwd`.chomp,
|
63
|
+
current_path: File.expand_path(`pwd`.chomp),
|
64
64
|
package_name: package_name,
|
65
65
|
path: package_name.downcase.gsub(/\s+/, '_')
|
66
66
|
}
|
@@ -82,7 +82,7 @@ class RdmCliRunner
|
|
82
82
|
c.action do |args, options|
|
83
83
|
revision = (args.first || "HEAD")
|
84
84
|
options = {
|
85
|
-
path: `pwd`.chomp,
|
85
|
+
path: File.expand_path(`pwd`.chomp),
|
86
86
|
revision: revision,
|
87
87
|
}
|
88
88
|
Rdm::CLI::DiffPackage.run(options)
|
@@ -100,7 +100,7 @@ class RdmCliRunner
|
|
100
100
|
c.action do |args, options|
|
101
101
|
package_name = (args.first || "")
|
102
102
|
opts = {
|
103
|
-
project_path: `pwd`.chomp,
|
103
|
+
project_path: File.expand_path(`pwd`.chomp),
|
104
104
|
package_name: package_name,
|
105
105
|
compile_path: options.path
|
106
106
|
}
|
@@ -125,7 +125,7 @@ class RdmCliRunner
|
|
125
125
|
|
126
126
|
Rdm::CLI::TemplateGenerator.run(
|
127
127
|
template_name: template_name,
|
128
|
-
current_path: `pwd`.chomp,
|
128
|
+
current_path: File.expand_path(`pwd`.chomp),
|
129
129
|
local_path: options_hash.delete(:path),
|
130
130
|
locals: options_hash
|
131
131
|
)
|
@@ -143,7 +143,7 @@ class RdmCliRunner
|
|
143
143
|
|
144
144
|
Rdm::CLI::DependenciesController.run(
|
145
145
|
package_name: package_name,
|
146
|
-
project_path: `pwd`.chomp
|
146
|
+
project_path: File.expand_path(`pwd`.chomp)
|
147
147
|
)
|
148
148
|
end
|
149
149
|
end
|
@@ -162,7 +162,7 @@ class RdmCliRunner
|
|
162
162
|
|
163
163
|
Rdm::CLI::Config.run(
|
164
164
|
config_name: config_name,
|
165
|
-
current_path: `pwd`.chomp,
|
165
|
+
current_path: File.expand_path(`pwd`.chomp),
|
166
166
|
config_data: options_hash
|
167
167
|
)
|
168
168
|
end
|
@@ -193,11 +193,11 @@ class RdmCliRunner
|
|
193
193
|
options_hash = options.__hash__
|
194
194
|
options_hash.delete(:trace)
|
195
195
|
|
196
|
-
Rdm.root(`pwd`.chomp)
|
196
|
+
Rdm.root(File.expand_path(`pwd`.chomp))
|
197
197
|
Rdm::SpecRunner.run(
|
198
198
|
package: package_name,
|
199
199
|
spec_matcher: spec_matcher,
|
200
|
-
path: `pwd`.chomp,
|
200
|
+
path: File.expand_path(`pwd`.chomp),
|
201
201
|
skip_ignored_packages: true,
|
202
202
|
show_missing_packages: true,
|
203
203
|
from: options_hash[:from]
|
@@ -221,11 +221,11 @@ class RdmCliRunner
|
|
221
221
|
revision = args[0]
|
222
222
|
|
223
223
|
ENV['RUBY_ENV'] = 'test'
|
224
|
-
Rdm.root(`pwd`.chomp)
|
224
|
+
Rdm.root(File.expand_path(`pwd`.chomp))
|
225
225
|
|
226
226
|
Rdm::CLI::DiffSpecRunner.run(
|
227
227
|
revision: revision,
|
228
|
-
path: `pwd`.chomp
|
228
|
+
path: File.expand_path(`pwd`.chomp)
|
229
229
|
)
|
230
230
|
end
|
231
231
|
end
|
data/example/Rdm.packages
CHANGED
@@ -3,9 +3,25 @@ setup do
|
|
3
3
|
ENV['RUBY_ENV'] || "production"
|
4
4
|
end
|
5
5
|
|
6
|
-
|
6
|
+
env_file_name do
|
7
|
+
ENV['ENV_FILE'] || "production"
|
8
|
+
end
|
9
|
+
|
10
|
+
env_files_dir "env_files"
|
11
|
+
|
12
|
+
configs_dir "configs"
|
13
|
+
config_path ":configs_dir/:config_name/default.yml"
|
14
|
+
role_config_path ":configs_dir/:config_name/:role.yml"
|
15
|
+
|
16
|
+
package_subdir_name "package"
|
17
|
+
|
18
|
+
|
19
|
+
compile_path "/tmp/rdm/:package_name"
|
7
20
|
end
|
8
21
|
|
22
|
+
config :database
|
23
|
+
config :app
|
24
|
+
|
9
25
|
package "server"
|
10
26
|
package "application/web"
|
11
27
|
package "domain/core"
|
data/lib/rdm.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'morf'
|
2
|
-
|
3
1
|
module Rdm
|
4
2
|
SOURCE_FILENAME = 'Rdm.packages'.freeze
|
5
3
|
PACKAGE_FILENAME = 'Package.rb'.freeze
|
@@ -8,7 +6,6 @@ module Rdm
|
|
8
6
|
require 'rdm/utils/render_util'
|
9
7
|
require 'rdm/utils/string_utils'
|
10
8
|
require 'rdm/utils/file_utils'
|
11
|
-
require 'rdm/utils/ostruct_utils'
|
12
9
|
require 'rdm/version'
|
13
10
|
|
14
11
|
# CLI part
|
@@ -18,9 +15,13 @@ module Rdm
|
|
18
15
|
require 'rdm/cli/diff_package'
|
19
16
|
require 'rdm/cli/template_generator'
|
20
17
|
require 'rdm/cli/dependencies_controller'
|
18
|
+
require 'rdm/cli/config'
|
21
19
|
require 'rdm/cli/diff_spec_runner.rb'
|
22
20
|
|
23
21
|
# Runtime part
|
22
|
+
require 'rdm/config'
|
23
|
+
require 'rdm/config_scope'
|
24
|
+
require 'rdm/config_manager'
|
24
25
|
require 'rdm/errors'
|
25
26
|
require 'rdm/package'
|
26
27
|
require 'rdm/package_parser'
|
@@ -32,6 +33,7 @@ module Rdm
|
|
32
33
|
require 'rdm/git/diff_manager'
|
33
34
|
require 'rdm/git/diff_command'
|
34
35
|
require 'rdm/git/repository_locator'
|
36
|
+
require 'rdm/config_locals'
|
35
37
|
require 'rdm/source_modifier'
|
36
38
|
|
37
39
|
# Package part
|
@@ -41,6 +43,7 @@ module Rdm
|
|
41
43
|
# Handlers part
|
42
44
|
require 'rdm/gen/package'
|
43
45
|
require 'rdm/gen/init'
|
46
|
+
require 'rdm/gen/config'
|
44
47
|
require 'rdm/handlers/diff_package_handler'
|
45
48
|
require 'rdm/handlers/template_handler'
|
46
49
|
require 'rdm/handlers/dependencies_handler'
|
@@ -59,13 +62,6 @@ module Rdm
|
|
59
62
|
require 'rdm/spec_runner/view'
|
60
63
|
require 'rdm/spec_runner/spec_filename_matcher'
|
61
64
|
|
62
|
-
require 'rdm/yml_config/env_config_dsl'
|
63
|
-
require 'rdm/yml_config/validate_config'
|
64
|
-
require 'rdm/yml_config/env_config'
|
65
|
-
require 'rdm/yml_config/config_caster'
|
66
|
-
require 'rdm/yml_config/config_manager'
|
67
|
-
require 'rdm/yml_config/config_validator'
|
68
|
-
|
69
65
|
extend Rdm::Helpers::PathHelper
|
70
66
|
|
71
67
|
class << self
|
@@ -74,9 +70,6 @@ module Rdm
|
|
74
70
|
@stdout = stdout
|
75
71
|
|
76
72
|
Rdm::PackageImporter.import_file(package_path, group: group)
|
77
|
-
rescue Rdm::Errors::InvalidConfig => e
|
78
|
-
puts e.message
|
79
|
-
exit(0)
|
80
73
|
end
|
81
74
|
|
82
75
|
# Rdm's internal settings
|
@@ -86,7 +79,7 @@ module Rdm
|
|
86
79
|
|
87
80
|
# Rdm's managed configuration
|
88
81
|
def config
|
89
|
-
@config ||= Rdm::ConfigManager
|
82
|
+
@config ||= Rdm::ConfigManager.new
|
90
83
|
end
|
91
84
|
|
92
85
|
# Setup Rdm's internal settings
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Rdm::CLI::Config
|
2
|
+
def self.run(current_path:, config_name:, config_data: {}, stdout: $stdout)
|
3
|
+
Rdm::CLI::Config.new(current_path, config_name, config_data, stdout).run
|
4
|
+
end
|
5
|
+
|
6
|
+
def initialize(current_path, config_name, config_data, stdout)
|
7
|
+
@current_path = current_path
|
8
|
+
@config_name = config_name
|
9
|
+
@config_data = config_data
|
10
|
+
@stdout = stdout
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
generated_files = Rdm::Gen::Config.generate(
|
15
|
+
current_path: @current_path,
|
16
|
+
config_name: @config_name,
|
17
|
+
config_data: @config_data
|
18
|
+
)
|
19
|
+
|
20
|
+
puts "Following files were generated:"
|
21
|
+
puts generated_files
|
22
|
+
rescue Errno::ENOENT => e
|
23
|
+
@stdout.puts "Error occurred. Possible reasons:\n #{Rdm::SOURCE_FILENAME} not found. Please run on directory containing #{Rdm::SOURCE_FILENAME} \n#{e.inspect}"
|
24
|
+
rescue NoMethodError => e
|
25
|
+
@stdout.puts e.message
|
26
|
+
rescue Rdm::Errors::SourceFileDoesNotExist => e
|
27
|
+
@stdout.puts "Rdm.packages was not found. Run 'rdm init' to create it"
|
28
|
+
rescue Rdm::Errors::ConfigExists => e
|
29
|
+
@stdout.puts "Config :#{e.message} already exists! Use other name"
|
30
|
+
end
|
31
|
+
end
|
data/lib/rdm/config.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
class Rdm::ConfigManager
|
5
|
+
# Update configuration based on given config file
|
6
|
+
# @param config [Rdm::Config] Config entity
|
7
|
+
# @return root scope [Rdm::ConfigScope] Updated root scope
|
8
|
+
def load_config(config, source:)
|
9
|
+
if config.default_path
|
10
|
+
full_default_path = File.join(source.root_path, config.default_path)
|
11
|
+
update_using_file(full_default_path, raise_if_missing: true)
|
12
|
+
end
|
13
|
+
if config.role_path
|
14
|
+
full_role_path = File.join(source.root_path, config.role_path)
|
15
|
+
update_using_file(full_role_path, raise_if_missing: false)
|
16
|
+
end
|
17
|
+
root_scope
|
18
|
+
end
|
19
|
+
|
20
|
+
# Update configuration using given path to config file
|
21
|
+
# @param config [Hash<String: AnyValue>] Hash with configuration
|
22
|
+
# @return root scope [Rdm::ConfigScope] Updated root scope
|
23
|
+
def update_using_file(path, raise_if_missing: true)
|
24
|
+
if File.exist?(path)
|
25
|
+
compiled_file = ::ERB.new(File.read(path)).result
|
26
|
+
hash = YAML.load(compiled_file)
|
27
|
+
update_using_hash(hash)
|
28
|
+
elsif raise_if_missing
|
29
|
+
raise "Config file is not found at path #{path}"
|
30
|
+
end
|
31
|
+
root_scope
|
32
|
+
end
|
33
|
+
|
34
|
+
# Update configuration based on given hash
|
35
|
+
# @param config [Hash<String: AnyValue>] Hash with configuration
|
36
|
+
# @return root scope [Rdm::ConfigScope] Updated root scope
|
37
|
+
def update_using_hash(hash, scope: nil)
|
38
|
+
scope ||= root_scope
|
39
|
+
|
40
|
+
hash.each do |key, value|
|
41
|
+
if value.is_a?(Hash)
|
42
|
+
# Try using existing scope
|
43
|
+
child_scope = scope.read_attribute(key)
|
44
|
+
if !child_scope || !child_scope.is_a?(Rdm::ConfigScope)
|
45
|
+
child_scope = Rdm::ConfigScope.new
|
46
|
+
end
|
47
|
+
update_using_hash(value, scope: child_scope)
|
48
|
+
scope.write_attribute(key, child_scope)
|
49
|
+
else
|
50
|
+
scope.write_attribute(key, value)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(method_name, *args)
|
56
|
+
root_scope.send(method_name, *args)
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_h
|
60
|
+
root_scope.to_h
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def root_scope
|
66
|
+
@root_scope ||= Rdm::ConfigScope.new
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Rdm::ConfigScope
|
2
|
+
def initialize(attributes = {})
|
3
|
+
@attributes = attributes
|
4
|
+
end
|
5
|
+
|
6
|
+
def read_attribute(key)
|
7
|
+
@attributes[key.to_s]
|
8
|
+
end
|
9
|
+
|
10
|
+
def write_attribute(key, value)
|
11
|
+
@attributes[key.to_s] = value
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(method_name, *_args)
|
15
|
+
read_attribute(method_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
@attributes.each_with_object({}) do |(k, v), h|
|
20
|
+
h[k] = Rdm::ConfigScope === v ? v.to_h : v
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/rdm/errors.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
class Rdm::Gen::Config
|
2
|
+
TEMPLATE_NAME = 'configs'
|
3
|
+
|
4
|
+
def self.generate(config_name:, current_path:, config_data: {})
|
5
|
+
Rdm::Gen::Config.new(config_name, current_path, config_data = {}).generate
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(config_name, current_path, config_data)
|
9
|
+
@current_path = current_path
|
10
|
+
@config_name = config_name
|
11
|
+
@source = get_source
|
12
|
+
|
13
|
+
@config_locals = Rdm::ConfigLocals.new(config_data)
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate
|
17
|
+
@locals = {
|
18
|
+
config_name: @config_name,
|
19
|
+
config_locals: @config_locals,
|
20
|
+
config_path: config_path(@config_name),
|
21
|
+
role_config_path: role_config_path(@config_name)
|
22
|
+
}
|
23
|
+
|
24
|
+
generated_files = Rdm::Handlers::TemplateHandler.generate(
|
25
|
+
current_path: @current_path,
|
26
|
+
locals: @locals,
|
27
|
+
template_name: TEMPLATE_NAME,
|
28
|
+
local_path: './'
|
29
|
+
)
|
30
|
+
|
31
|
+
Rdm::SourceModifier.add_config(@config_name, get_source.root_path)
|
32
|
+
|
33
|
+
generated_files
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def get_source
|
39
|
+
@source ||= Rdm::SourceParser.read_and_init_source(Rdm::SourceLocator.locate(@current_path))
|
40
|
+
end
|
41
|
+
|
42
|
+
def config_path(config_name)
|
43
|
+
Rdm.settings.read_setting(
|
44
|
+
:config_path,
|
45
|
+
vars: {
|
46
|
+
config_name: config_name
|
47
|
+
}
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
def role_config_path(config_name)
|
52
|
+
Rdm.settings.read_setting(
|
53
|
+
:role_config_path,
|
54
|
+
vars: {
|
55
|
+
config_name: config_name
|
56
|
+
}
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|