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
@@ -1,23 +0,0 @@
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
@@ -1,59 +0,0 @@
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
@@ -1,2 +0,0 @@
1
- <%=config_name%>:
2
- <%=config_locals%>
@@ -1,2 +0,0 @@
1
- <%=config_name%>:
2
- <%=config_locals%>
@@ -1,3 +0,0 @@
1
- RUBY_ENV=development
2
-
3
- APP_NAME=Application
@@ -1,3 +0,0 @@
1
- RUBY_ENV=production
2
-
3
- APP_NAME=Application
@@ -1,3 +0,0 @@
1
- RUBY_ENV=test
2
-
3
- APP_NAME=Application
@@ -1,2 +0,0 @@
1
- development:
2
- foo: "<%= 'bar' %>"
@@ -1,136 +0,0 @@
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
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rdm::Gen::Config do
4
- include ExampleProjectHelper
5
-
6
- subject { described_class }
7
-
8
- describe "::generate" do
9
- before { initialize_example_project }
10
- after { reset_example_project }
11
-
12
- context "sample config" do
13
- before do
14
- subject.generate(
15
- config_name: 'mailing_system',
16
- current_path: example_project_path
17
- )
18
- end
19
-
20
- it "generates sample config" do
21
- FileUtils.cd(example_project_path) do
22
- ensure_exists("configs/mailing_system/default.yml")
23
- end
24
- end
25
-
26
- it "add config line to Rdm.packages" do
27
- ensure_content(rdm_source_file, 'config :mailing_system')
28
- end
29
- end
30
- end
31
- end