rdm 0.1.12 → 0.1.13

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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +17 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +5 -1
  6. data/LICENSE.txt +1 -1
  7. data/README.md +84 -28
  8. data/bin/rdm +72 -0
  9. data/bin/rubocop +6 -0
  10. data/docs/_config.yml +1 -0
  11. data/docs/index.md +98 -0
  12. data/docs/interface_brainstorming.md +31 -0
  13. data/example/Rdm.packages +1 -1
  14. data/example/Readme.md +1 -3
  15. data/lib/rdm.rb +29 -20
  16. data/lib/rdm/cli/gen_package.rb +48 -0
  17. data/lib/rdm/cli/init.rb +43 -0
  18. data/lib/rdm/config.rb +9 -1
  19. data/lib/rdm/config_manager.rb +5 -5
  20. data/lib/rdm/config_scope.rb +3 -3
  21. data/lib/rdm/errors.rb +2 -0
  22. data/lib/rdm/gen/concerns/template_handling.rb +81 -0
  23. data/lib/rdm/gen/init.rb +69 -0
  24. data/lib/rdm/gen/package.rb +99 -0
  25. data/lib/rdm/package.rb +17 -16
  26. data/lib/rdm/package_importer.rb +89 -79
  27. data/lib/rdm/package_parser.rb +25 -5
  28. data/lib/rdm/settings.rb +21 -20
  29. data/lib/rdm/source.rb +1 -1
  30. data/lib/rdm/source_locator.rb +31 -0
  31. data/lib/rdm/source_parser.rb +83 -68
  32. data/lib/rdm/support/colorize.rb +106 -0
  33. data/lib/rdm/support/render.rb +17 -0
  34. data/lib/rdm/support/template.rb +30 -0
  35. data/lib/rdm/templates/init/Gemfile.erb +25 -0
  36. data/lib/rdm/templates/init/Rdm.packages.erb +18 -0
  37. data/lib/rdm/templates/init/Readme.md.erb +24 -0
  38. data/lib/rdm/templates/{tests → init/tests}/run +27 -31
  39. data/lib/rdm/templates/package/.gitignore +1 -0
  40. data/lib/rdm/templates/{.rspec → package/.rspec} +0 -0
  41. data/lib/rdm/templates/{bin → package/bin}/console_irb +4 -5
  42. data/lib/rdm/templates/{main_module_file.rb.erb → package/main_module_file.rb.erb} +0 -0
  43. data/lib/rdm/templates/{package.rb.erb → package/package.rb.erb} +0 -0
  44. data/lib/rdm/templates/{spec → package/spec}/spec_helper.rb +0 -0
  45. data/lib/rdm/version.rb +1 -1
  46. data/rdm.gemspec +3 -0
  47. data/spec/fixtures/SampleSource.rb +3 -1
  48. data/spec/fixtures/sample_prj/Rdm.packages +12 -0
  49. data/spec/fixtures/sample_prj/infrastructure/web/Package.rb +16 -0
  50. data/spec/rdm/cli/gen_package_spec.rb +130 -0
  51. data/spec/rdm/cli/init_spec.rb +97 -0
  52. data/spec/rdm/config_manager_spec.rb +37 -1
  53. data/spec/rdm/gen/init_spec.rb +63 -0
  54. data/spec/rdm/gen/package_spec.rb +87 -0
  55. data/spec/rdm/package_importer_spec.rb +5 -1
  56. data/spec/rdm/package_parser_spec.rb +10 -24
  57. data/spec/rdm/rdm_spec.rb +42 -0
  58. data/spec/rdm/source_locator_spec.rb +45 -0
  59. data/spec/rdm/source_parser_spec.rb +45 -3
  60. data/spec/rdm/support/colorize_spec.rb +24 -0
  61. data/spec/rdm/support/template_spec.rb +20 -0
  62. data/spec/spec_helper.rb +45 -0
  63. metadata +92 -16
  64. data/bin/rdm-generate +0 -55
  65. data/bin/rdm-install +0 -13
  66. data/lib/rdm/auto_updater.rb +0 -41
  67. data/lib/rdm/package_generator.rb +0 -121
  68. data/lib/rdm/source_installer.rb +0 -35
  69. data/lib/rdm/templates/.gitignore +0 -1
@@ -0,0 +1,16 @@
1
+ package do
2
+ name "web"
3
+ version "1.0"
4
+ end
5
+
6
+ dependency do
7
+ import "core"
8
+ require "active_support"
9
+ require_file "lib/web.rb"
10
+ end
11
+
12
+ dependency :test do
13
+ import "test_factory"
14
+ require "rspec"
15
+ require_file "lib/spec.rb"
16
+ end
@@ -0,0 +1,130 @@
1
+ require "spec_helper"
2
+
3
+ describe Rdm::CLI::GenPackage do
4
+ include SetupHelper
5
+
6
+ before :all do
7
+ Rdm::Gen::Package.disable_logger!
8
+ end
9
+
10
+ def generate_project!
11
+ Rdm::Gen::Init.generate(
12
+ current_dir: empty_project_dir
13
+ )
14
+ end
15
+
16
+ def ensure_exists(file)
17
+ expect(File.exists?(file)).to be true
18
+ end
19
+
20
+ def ensure_content(file, content)
21
+ expect(File.read(file)).to match(content)
22
+ end
23
+
24
+ context "run" do
25
+ before :all do
26
+ fresh_project
27
+ end
28
+
29
+ after :all do
30
+ clean_tmp
31
+ end
32
+
33
+ it "generates package" do
34
+ opts = {
35
+ package_name: "database",
36
+ current_dir: project_dir,
37
+ path: "infrastructure/database" ,
38
+ skip_tests: false
39
+ }
40
+ Rdm::CLI::GenPackage.run(opts)
41
+
42
+ FileUtils.cd(project_dir) do
43
+ ensure_exists("infrastructure/database/Package.rb")
44
+ ensure_exists("infrastructure/database/package/database.rb")
45
+ ensure_exists("infrastructure/database/package/database/")
46
+ ensure_exists("infrastructure/database/bin/console")
47
+ ensure_exists("infrastructure/database/spec/spec_helper.rb")
48
+ ensure_exists("infrastructure/database/.rspec")
49
+ ensure_exists("infrastructure/database/.gitignore")
50
+ ensure_content("infrastructure/database/package/database.rb", "module Database\n\nend\n")
51
+ end
52
+ end
53
+ end
54
+
55
+ context "run with errors" do
56
+ before :all do
57
+ clean_tmp
58
+ end
59
+
60
+ after :all do
61
+ clean_tmp
62
+ end
63
+
64
+ it "fails when in wrong directory" do
65
+ opts = {
66
+ package_name: "database",
67
+ current_dir: project_dir,
68
+ path: "infrastructure/database" ,
69
+ skip_tests: false
70
+ }
71
+
72
+ expect{
73
+ Rdm::CLI::GenPackage.run(opts)
74
+ }.to output(/Rdm.packages\ not\ found/).to_stdout
75
+ end
76
+
77
+ it "fails when package already created" do
78
+ fresh_project
79
+ opts = {
80
+ package_name: "database",
81
+ current_dir: project_dir,
82
+ path: "infrastructure/database" ,
83
+ skip_tests: false
84
+ }
85
+ Rdm::CLI::GenPackage.run(opts)
86
+
87
+ expect{
88
+ Rdm::CLI::GenPackage.run(opts)
89
+ }.to output(Regexp.new("Error. Directory infrastructure/database exists. Package was not generated")).to_stdout
90
+ clean_tmp
91
+ end
92
+
93
+ it "fails when package already created" do
94
+ fresh_project
95
+ opts = {
96
+ package_name: "database",
97
+ current_dir: project_dir,
98
+ path: "infrastructure/database" ,
99
+ skip_tests: false
100
+ }
101
+ Rdm::CLI::GenPackage.run(opts)
102
+
103
+ FileUtils.rm_rf(File.join(project_dir, "infrastructure/database"))
104
+
105
+ expect{
106
+ Rdm::CLI::GenPackage.run(opts)
107
+ }.to output(Regexp.new("Error. Package already exist. Package was not generated")).to_stdout
108
+ clean_tmp
109
+ end
110
+
111
+ it "fails when empty package given" do
112
+ fresh_project
113
+ opts = {
114
+ package_name: "",
115
+ current_dir: project_dir,
116
+ path: "infrastructure/database" ,
117
+ skip_tests: false
118
+ }
119
+ begin
120
+ expect{
121
+ Rdm::CLI::GenPackage.run(opts)
122
+ }.to output(Regexp.new("Package name was not specified!")).to_stdout
123
+ rescue SystemExit
124
+ clean_tmp
125
+ end
126
+ end
127
+ end
128
+
129
+
130
+ end
@@ -0,0 +1,97 @@
1
+ require "spec_helper"
2
+
3
+ describe Rdm::CLI::Init do
4
+ include SetupHelper
5
+
6
+ before :all do
7
+ Rdm::Gen::Init.disable_logger!
8
+ end
9
+
10
+ def ensure_exists(file)
11
+ expect(File.exists?(file)).to be true
12
+ end
13
+
14
+ def ensure_content(file, content)
15
+ expect(File.read(file)).to match(content)
16
+ end
17
+
18
+ context "run" do
19
+ before :all do
20
+ fresh_empty_project
21
+ end
22
+
23
+ after :all do
24
+ clean_tmp
25
+ end
26
+
27
+ it "generates package" do
28
+ opts = {
29
+ current_dir: empty_project_dir,
30
+ console: "irb",
31
+ test: "rspec"
32
+ }
33
+ Rdm::CLI::Init.run(opts)
34
+
35
+ FileUtils.cd(empty_project_dir) do
36
+ ensure_exists("Rdm.packages")
37
+ ensure_exists("Gemfile")
38
+ ensure_exists("Readme.md")
39
+ ensure_exists("tests/run")
40
+ end
41
+ end
42
+ end
43
+
44
+ context "run with errors" do
45
+ before :all do
46
+ clean_tmp
47
+ end
48
+
49
+ after :all do
50
+ clean_tmp
51
+ end
52
+
53
+ it "fails when in wrong directory" do
54
+ opts = {
55
+ current_dir: empty_project_dir + "/not-there",
56
+ console: "irb",
57
+ test: "rspec"
58
+ }
59
+
60
+ expect{
61
+ Rdm::CLI::Init.run(opts)
62
+ }.to output(Regexp.new("Please run on empty directory")).to_stdout
63
+ end
64
+
65
+ it "fails when project already initialized" do
66
+ fresh_empty_project
67
+ opts = {
68
+ current_dir: empty_project_dir,
69
+ console: "irb",
70
+ test: "rspec"
71
+ }
72
+ Rdm::CLI::Init.run(opts)
73
+
74
+ expect{
75
+ Rdm::CLI::Init.run(opts)
76
+ }.to output(Regexp.new("Error. Project was already initialized")).to_stdout
77
+ clean_tmp
78
+ end
79
+
80
+ it "fails with wrong current_dir and exits" do
81
+ opts = {
82
+ current_dir: "",
83
+ console: "irb",
84
+ test: "rspec"
85
+ }
86
+
87
+ a = 0
88
+ begin
89
+ a = 1
90
+ Rdm::CLI::Init.run(opts)
91
+ a = 2
92
+ rescue SystemExit
93
+ expect(a).to eq(1)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -3,6 +3,42 @@ require 'spec_helper'
3
3
  describe Rdm::ConfigManager do
4
4
  subject { Rdm::ConfigManager.new }
5
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
+
6
42
  describe "#update_using_file" do
7
43
  let(:fixtures_path) {
8
44
  File.join(File.expand_path("../../", __FILE__), 'fixtures')
@@ -97,4 +133,4 @@ describe Rdm::ConfigManager do
97
133
  expect(subject.to_h["database"]["username"]).to eq("username")
98
134
  end
99
135
  end
100
- end
136
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+
3
+ describe Rdm::Gen::Init do
4
+ include SetupHelper
5
+
6
+ def generate_project!
7
+ Rdm::Gen::Init.generate(
8
+ current_dir: empty_project_dir
9
+ )
10
+ end
11
+
12
+ def ensure_exists(file)
13
+ expect(File.exists?(file)).to be true
14
+ end
15
+
16
+ def ensure_content(file, content)
17
+ expect(File.read(file)).to match(content)
18
+ end
19
+
20
+ context "sample project" do
21
+ before :all do
22
+ Rdm::Gen::Init.disable_logger!
23
+ fresh_empty_project
24
+ generate_project!
25
+ end
26
+
27
+ after :all do
28
+ clean_tmp
29
+ end
30
+
31
+ it "has generated correct files" do
32
+ FileUtils.cd(empty_project_dir) do
33
+ ensure_exists("Rdm.packages")
34
+ ensure_exists("Gemfile")
35
+ ensure_exists("Readme.md")
36
+ ensure_exists("tests/run")
37
+ end
38
+ end
39
+
40
+ it "has logged useful output" do
41
+ Rdm::Gen::Init.enable_logger!
42
+ expect {
43
+ fresh_empty_project
44
+ generate_project!
45
+ }.to output(/Generated: Rdm.packages/).to_stdout
46
+ Rdm::Gen::Init.disable_logger!
47
+ end
48
+ end
49
+
50
+ context "prevents double execution" do
51
+ after :all do
52
+ clean_tmp
53
+ end
54
+
55
+ it "raises on second project generation" do
56
+ fresh_empty_project
57
+ generate_project!
58
+ expect {
59
+ generate_project!
60
+ }.to raise_error(Rdm::Errors::ProjectAlreadyInitialized)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,87 @@
1
+ require "spec_helper"
2
+
3
+ describe Rdm::Gen::Package do
4
+ before :all do
5
+ Rdm::Gen::Package.disable_logger!
6
+ end
7
+ include SetupHelper
8
+
9
+ def generate_package!
10
+ Rdm::Gen::Package.generate(
11
+ current_dir: project_dir,
12
+ package_name: "some",
13
+ package_relative_path: "domain/some",
14
+ skip_tests: false
15
+ )
16
+ end
17
+
18
+ def ensure_exists(file)
19
+ expect(File.exists?(file)).to be true
20
+ end
21
+
22
+ def ensure_content(file, content)
23
+ expect(File.read(file)).to match(content)
24
+ end
25
+
26
+ context "sample package" do
27
+ before :all do
28
+ fresh_project
29
+ generate_package!
30
+ end
31
+
32
+ after :all do
33
+ clean_tmp
34
+ end
35
+
36
+ it "has generated correct files" do
37
+ FileUtils.cd(project_dir) do
38
+ ensure_exists("domain/some/Package.rb")
39
+ ensure_exists("domain/some/package/some.rb")
40
+ ensure_exists("domain/some/package/some/")
41
+ ensure_exists("domain/some/bin/console")
42
+ ensure_exists("domain/some/spec/spec_helper.rb")
43
+ ensure_exists("domain/some/.rspec")
44
+ ensure_exists("domain/some/.gitignore")
45
+ ensure_content("domain/some/package/some.rb", "module Some\n\nend\n")
46
+ end
47
+ end
48
+
49
+ it "has added new entry to Rdm.packages" do
50
+ FileUtils.cd(project_dir) do
51
+ ensure_content("Rdm.packages", "package 'domain/some'")
52
+ end
53
+ end
54
+
55
+ it "has logged useful output" do
56
+ Rdm::Gen::Package.enable_logger!
57
+ expect {
58
+ fresh_project
59
+ generate_package!
60
+ }.to output(Regexp.new("Generated: domain/some/Package.rb")).to_stdout
61
+ Rdm::Gen::Package.disable_logger!
62
+ end
63
+ end
64
+
65
+ context "prevents double execution" do
66
+ after :all do
67
+ clean_tmp
68
+ end
69
+
70
+ it "raises on second package generation" do
71
+ fresh_project
72
+ generate_package!
73
+ expect {
74
+ generate_package!
75
+ }.to raise_error(Rdm::Errors::PackageDirExists)
76
+ end
77
+
78
+ it "raises on second package generation, if Rdm.packages includes the package (and folder does not exist)" do
79
+ fresh_project
80
+ generate_package!
81
+ FileUtils.rm_rf(File.join(project_dir, "domain/some"))
82
+ expect {
83
+ generate_package!
84
+ }.to raise_error(Rdm::Errors::PackageExists)
85
+ end
86
+ end
87
+ end
@@ -17,6 +17,10 @@ describe Rdm::PackageImporter do
17
17
  source
18
18
  end
19
19
 
20
+ before do
21
+ Rdm::PackageImporter.reset!
22
+ end
23
+
20
24
  describe "#import_package" do
21
25
  subject { Rdm::PackageImporter }
22
26
 
@@ -61,4 +65,4 @@ describe Rdm::PackageImporter do
61
65
  end
62
66
  end
63
67
  end
64
- end
68
+ end