rdm 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
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