rdm 0.4.14.2 → 0.4.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile.lock +26 -19
  3. data/bin/rdm +10 -10
  4. data/example/Rdm.packages +1 -17
  5. data/example/config/app.yml +6 -0
  6. data/example/infrastructure/repository/Package.rb +0 -1
  7. data/example/infrastructure/repository/fixture.txt +1 -0
  8. data/lib/rdm.rb +14 -7
  9. data/lib/rdm/errors.rb +3 -0
  10. data/lib/rdm/gen/init.rb +0 -4
  11. data/lib/rdm/package.rb +18 -9
  12. data/lib/rdm/package_importer.rb +4 -18
  13. data/lib/rdm/package_parser.rb +1 -0
  14. data/lib/rdm/packages/compiler_service.rb +1 -7
  15. data/lib/rdm/settings.rb +10 -21
  16. data/lib/rdm/source.rb +1 -18
  17. data/lib/rdm/source_parser.rb +2 -45
  18. data/lib/rdm/templates/init/Rdm.packages +0 -12
  19. data/lib/rdm/utils/ostruct_utils.rb +12 -0
  20. data/lib/rdm/version.rb +1 -1
  21. data/lib/rdm/yml_config/config_caster.rb +32 -0
  22. data/lib/rdm/yml_config/config_manager.rb +39 -0
  23. data/lib/rdm/yml_config/config_validator.rb +51 -0
  24. data/lib/rdm/yml_config/env_config.rb +46 -0
  25. data/lib/rdm/yml_config/env_config_dsl.rb +92 -0
  26. data/lib/rdm/yml_config/validate_config.rb +13 -0
  27. data/rdm.gemspec +3 -0
  28. data/spec/fixtures/SampleSource.rb +2 -4
  29. data/spec/fixtures/app.yml +17 -0
  30. data/spec/rdm/cli/gen_package_spec.rb +0 -2
  31. data/spec/rdm/gen/init_spec.rb +0 -12
  32. data/spec/rdm/gen/package_spec.rb +1 -0
  33. data/spec/rdm/package_importer_spec.rb +34 -2
  34. data/spec/rdm/rdm_spec.rb +1 -1
  35. data/spec/rdm/source_parser_spec.rb +0 -59
  36. data/spec/rdm/yml_config/config_caster_spec.rb +64 -0
  37. data/spec/rdm/yml_config/config_manager_spec.rb +7 -0
  38. data/spec/rdm/yml_config/config_validator_spec.rb +190 -0
  39. data/spec/rdm/yml_config/env_config_dsl_spec.rb +123 -0
  40. data/spec/spec_helper.rb +1 -0
  41. metadata +69 -34
  42. data/example/.rdm/templates/configs/<%=config_path%> +0 -2
  43. data/example/.rdm/templates/configs/<%=role_config_path%> +0 -2
  44. data/example/configs/app/default.yml +0 -2
  45. data/example/configs/app/production.yml +0 -2
  46. data/example/configs/database/default.yml +0 -3
  47. data/example/env_files/development.env +0 -3
  48. data/example/env_files/production.env +0 -5
  49. data/example/env_files/test.env +0 -3
  50. data/lib/rdm/cli/config.rb +0 -31
  51. data/lib/rdm/config.rb +0 -11
  52. data/lib/rdm/config_locals.rb +0 -11
  53. data/lib/rdm/config_manager.rb +0 -68
  54. data/lib/rdm/config_scope.rb +0 -23
  55. data/lib/rdm/gen/config.rb +0 -59
  56. data/lib/rdm/templates/configs/<%=config_path%> +0 -2
  57. data/lib/rdm/templates/configs/<%=role_config_path%> +0 -2
  58. data/lib/rdm/templates/init/env_files/development.env +0 -3
  59. data/lib/rdm/templates/init/env_files/production.env +0 -3
  60. data/lib/rdm/templates/init/env_files/test.env +0 -3
  61. data/spec/fixtures/config.yml +0 -2
  62. data/spec/rdm/config_manager_spec.rb +0 -136
  63. data/spec/rdm/gen/config_spec.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a13427e067b489518c6a2ed9555043e73f0a8894
4
- data.tar.gz: 987c4ee06c9b461f8345ee3d6bedaea3548a27d0
2
+ SHA256:
3
+ metadata.gz: f92289ab666f058d12097df562312b6adcb7311433781270958fe4c550a02659
4
+ data.tar.gz: 9ebc9af89030643d8368659966bcec6dbc3aee536b065ea204e5d6868bf1ed22
5
5
  SHA512:
6
- metadata.gz: b7137d6ac2db182e73c7fce9c93295b93f9b49ed1e6e63d68cd36945900bc5051990ed6e5b5f99073128cc39c8e37a126c3c7bda8cd857427a85e5a5c291f018
7
- data.tar.gz: e41d71721c8b497ab395b743e28e1d98101ae68ac85b9ccf5fdce193b6a466a5180f9bccd3cf8c72d0678557d9abbbc9b71f3fc462dd21863cb5f4ccb097c81d
6
+ metadata.gz: 3bdb3f4ab4ae1eec9732364df1ec3061c4d7f480f34b33af1e5508a8bae4945e602d584243ce6cfb3015ac05063e49da8b6a4dd0ae098f6be96103aba65b31d6
7
+ data.tar.gz: 21db2cc6cbb6e57347aa6b06a4a5bb8a8988a4b6b8d4a1c045b84b66513f6d80b2b9e9ccfc9218fe8e6866df702c054f474214379129d7d9974aa0a90f292520
@@ -1,34 +1,42 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rdm (0.4.14)
4
+ rdm (0.4.17)
5
5
  activesupport
6
+ attr_validator
6
7
  commander (~> 4.4)
8
+ hcast
9
+ morf
7
10
 
8
11
  GEM
9
12
  remote: https://rubygems.org/
10
13
  specs:
11
- activesupport (5.1.2)
14
+ activesupport (5.2.4.4)
12
15
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
- i18n (~> 0.7)
16
+ i18n (>= 0.7, < 2)
14
17
  minitest (~> 5.1)
15
18
  tzinfo (~> 1.1)
16
19
  ast (2.3.0)
20
+ attr_validator (0.2.3)
21
+ i18n
17
22
  byebug (9.0.6)
18
- codecov (0.1.10)
23
+ codecov (0.2.5)
24
+ colorize
19
25
  json
20
26
  simplecov
21
- url
22
- commander (4.4.3)
23
- highline (~> 1.7.2)
24
- concurrent-ruby (1.0.5)
27
+ colorize (0.8.1)
28
+ commander (4.5.2)
29
+ highline (~> 2.0.0)
30
+ concurrent-ruby (1.1.7)
25
31
  diff-lcs (1.3)
26
- docile (1.1.5)
27
- highline (1.7.8)
28
- i18n (0.9.1)
32
+ docile (1.3.2)
33
+ hcast (0.3.0)
34
+ highline (2.0.3)
35
+ i18n (1.8.5)
29
36
  concurrent-ruby (~> 1.0)
30
- json (2.0.3)
31
- minitest (5.10.2)
37
+ json (2.3.1)
38
+ minitest (5.14.2)
39
+ morf (0.0.3)
32
40
  parser (2.3.3.1)
33
41
  ast (~> 2.2)
34
42
  powerpack (0.1.1)
@@ -54,16 +62,15 @@ GEM
54
62
  ruby-progressbar (~> 1.7)
55
63
  unicode-display_width (~> 1.0, >= 1.0.1)
56
64
  ruby-progressbar (1.8.1)
57
- simplecov (0.14.1)
58
- docile (~> 1.1.0)
65
+ simplecov (0.17.1)
66
+ docile (~> 1.1)
59
67
  json (>= 1.8, < 3)
60
68
  simplecov-html (~> 0.10.0)
61
- simplecov-html (0.10.0)
69
+ simplecov-html (0.10.2)
62
70
  thread_safe (0.3.6)
63
- tzinfo (1.2.4)
71
+ tzinfo (1.2.7)
64
72
  thread_safe (~> 0.1)
65
73
  unicode-display_width (1.1.2)
66
- url (0.3.2)
67
74
 
68
75
  PLATFORMS
69
76
  ruby
@@ -78,4 +85,4 @@ DEPENDENCIES
78
85
  rubocop (~> 0.46)
79
86
 
80
87
  BUNDLED WITH
81
- 1.16.0
88
+ 1.17.3
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: File.expand_path(`pwd`.chomp),
63
+ current_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: File.expand_path(`pwd`.chomp),
85
+ 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: File.expand_path(`pwd`.chomp),
103
+ project_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: File.expand_path(`pwd`.chomp),
128
+ current_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: File.expand_path(`pwd`.chomp)
146
+ project_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: File.expand_path(`pwd`.chomp),
165
+ current_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(File.expand_path(`pwd`.chomp))
196
+ Rdm.root(`pwd`.chomp)
197
197
  Rdm::SpecRunner.run(
198
198
  package: package_name,
199
199
  spec_matcher: spec_matcher,
200
- path: File.expand_path(`pwd`.chomp),
200
+ 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(File.expand_path(`pwd`.chomp))
224
+ Rdm.root(`pwd`.chomp)
225
225
 
226
226
  Rdm::CLI::DiffSpecRunner.run(
227
227
  revision: revision,
228
- path: File.expand_path(`pwd`.chomp)
228
+ path: `pwd`.chomp
229
229
  )
230
230
  end
231
231
  end
@@ -3,25 +3,9 @@ setup do
3
3
  ENV['RUBY_ENV'] || "production"
4
4
  end
5
5
 
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"
6
+ config_path 'config/app.yml'
20
7
  end
21
8
 
22
- config :database
23
- config :app
24
-
25
9
  package "server"
26
10
  package "application/web"
27
11
  package "domain/core"
@@ -0,0 +1,6 @@
1
+ database:
2
+ username: "root"
3
+ password: "root"
4
+ core:
5
+ app_name: "RdmExampleProject"
6
+
@@ -5,5 +5,4 @@ end
5
5
 
6
6
  dependency do
7
7
  # require "sequel"
8
- import_config :app
9
8
  end
@@ -0,0 +1 @@
1
+ Repository spec working here!
data/lib/rdm.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'morf'
2
+
1
3
  module Rdm
2
4
  SOURCE_FILENAME = 'Rdm.packages'.freeze
3
5
  PACKAGE_FILENAME = 'Package.rb'.freeze
@@ -6,6 +8,7 @@ module Rdm
6
8
  require 'rdm/utils/render_util'
7
9
  require 'rdm/utils/string_utils'
8
10
  require 'rdm/utils/file_utils'
11
+ require 'rdm/utils/ostruct_utils'
9
12
  require 'rdm/version'
10
13
 
11
14
  # CLI part
@@ -15,13 +18,9 @@ module Rdm
15
18
  require 'rdm/cli/diff_package'
16
19
  require 'rdm/cli/template_generator'
17
20
  require 'rdm/cli/dependencies_controller'
18
- require 'rdm/cli/config'
19
21
  require 'rdm/cli/diff_spec_runner.rb'
20
22
 
21
23
  # Runtime part
22
- require 'rdm/config'
23
- require 'rdm/config_scope'
24
- require 'rdm/config_manager'
25
24
  require 'rdm/errors'
26
25
  require 'rdm/package'
27
26
  require 'rdm/package_parser'
@@ -33,7 +32,6 @@ module Rdm
33
32
  require 'rdm/git/diff_manager'
34
33
  require 'rdm/git/diff_command'
35
34
  require 'rdm/git/repository_locator'
36
- require 'rdm/config_locals'
37
35
  require 'rdm/source_modifier'
38
36
 
39
37
  # Package part
@@ -43,7 +41,6 @@ module Rdm
43
41
  # Handlers part
44
42
  require 'rdm/gen/package'
45
43
  require 'rdm/gen/init'
46
- require 'rdm/gen/config'
47
44
  require 'rdm/handlers/diff_package_handler'
48
45
  require 'rdm/handlers/template_handler'
49
46
  require 'rdm/handlers/dependencies_handler'
@@ -62,6 +59,13 @@ module Rdm
62
59
  require 'rdm/spec_runner/view'
63
60
  require 'rdm/spec_runner/spec_filename_matcher'
64
61
 
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
+
65
69
  extend Rdm::Helpers::PathHelper
66
70
 
67
71
  class << self
@@ -70,6 +74,9 @@ module Rdm
70
74
  @stdout = stdout
71
75
 
72
76
  Rdm::PackageImporter.import_file(package_path, group: group)
77
+ rescue Rdm::Errors::InvalidConfig => e
78
+ puts e.message
79
+ exit(0)
73
80
  end
74
81
 
75
82
  # Rdm's internal settings
@@ -79,7 +86,7 @@ module Rdm
79
86
 
80
87
  # Rdm's managed configuration
81
88
  def config
82
- @config ||= Rdm::ConfigManager.new
89
+ @config ||= Rdm::ConfigManager
83
90
  end
84
91
 
85
92
  # Setup Rdm's internal settings
@@ -56,5 +56,8 @@ module Rdm
56
56
 
57
57
  class ConfigExists < StandardError
58
58
  end
59
+
60
+ class InvalidConfig < StandardError
61
+ end
59
62
  end
60
63
  end
@@ -45,10 +45,6 @@ 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
- )
52
48
 
53
49
  generated_files
54
50
  end
@@ -2,6 +2,11 @@ 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
5
10
 
6
11
  def local_dependencies(group = nil)
7
12
  fetch_dependencies(@local_dependencies || {}, group)
@@ -15,10 +20,6 @@ class Rdm::Package
15
20
  fetch_dependencies(@file_dependencies || {}, group)
16
21
  end
17
22
 
18
- def config_dependencies(group = nil)
19
- fetch_dependencies(@config_dependencies || {}, group)
20
- end
21
-
22
23
  def local_dependencies_with_groups
23
24
  return {} if @local_dependencies.nil?
24
25
  @local_dependencies.each_with_object(
@@ -49,11 +50,7 @@ class Rdm::Package
49
50
  @file_dependencies[current_group] << file
50
51
  end
51
52
 
52
- # Import config dependency
53
- def import_config(dependency)
54
- @config_dependencies ||= {}
55
- @config_dependencies[current_group] ||= []
56
- @config_dependencies[current_group] << dependency
53
+ def import_config(*args)
57
54
  end
58
55
 
59
56
  def package
@@ -84,6 +81,18 @@ class Rdm::Package
84
81
  other_package.name == name
85
82
  end
86
83
 
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
+
87
96
  private
88
97
 
89
98
  def current_group
@@ -31,6 +31,7 @@ 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
+
34
35
  source = read_and_init_source(package.source)
35
36
 
36
37
  # Init Rdm.root based on Rdm.packages directory
@@ -46,10 +47,6 @@ class Rdm::PackageImporter
46
47
  @imported_packages ||= []
47
48
  end
48
49
 
49
- def imported_configs
50
- @imported_configs ||= []
51
- end
52
-
53
50
  # Import package and initialize module
54
51
  def import_package(package_name, source:, group: nil)
55
52
  return imported_packages if imported_packages.include?(package_name.to_s)
@@ -62,14 +59,9 @@ class Rdm::PackageImporter
62
59
 
63
60
  # also import local dependencies
64
61
  package.local_dependencies(group).each do |dependency|
65
- import_package(dependency, source: source)
62
+ import_package(dependency, source: source, group: group)
66
63
  end
67
64
 
68
- # also import config dependencies
69
- package.config_dependencies(group).each do |dependency|
70
- import_config(dependency, source: source)
71
- end
72
-
73
65
  # only after importing dependencies - require package itself
74
66
  begin
75
67
  require package_name
@@ -105,19 +97,13 @@ class Rdm::PackageImporter
105
97
  require File.join(package.path, file_path)
106
98
  end
107
99
 
100
+ Rdm::ConfigManager.load_config(envs: package.environments, path_to_config: Rdm.settings.config_path)
101
+
108
102
  unless ActiveSupport::Dependencies.autoload_paths.include?(package_dir_name)
109
103
  ActiveSupport::Dependencies.autoload_paths << package_dir_name
110
104
  end
111
105
  end
112
106
 
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
-
121
107
  def read_and_init_source(source_path)
122
108
  source_parser.read_and_init_source(source_path)
123
109
  end
@@ -16,6 +16,7 @@ class Rdm::PackageParser
16
16
 
17
17
  def parse(package_content)
18
18
  spec = Rdm::Package.new
19
+
19
20
  spec.instance_eval(package_content)
20
21
  spec
21
22
  end
@@ -56,13 +56,7 @@ module Rdm
56
56
  end
57
57
  end
58
58
 
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
59
+ # TODO: paste generated env files to compile directory
66
60
 
67
61
  Rdm.settings.compile_ignore_files.each do |file|
68
62
  Dir["#{@compile_path}/**/#{file}"].each do |file_to_remove|