rdm 0.2.0 → 0.3.0
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/.gitignore +0 -1
- data/Gemfile.lock +80 -0
- data/bin/rdm +78 -10
- data/example/.rdm/helpers/render_helper.rb +12 -0
- data/example/.rdm/templates/package/.gitignore +1 -0
- data/example/.rdm/templates/package/.rspec +2 -0
- data/example/.rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +3 -0
- data/example/.rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
- data/{lib/rdm/templates/package/package.rb.erb → example/.rdm/templates/package/Package.rb} +0 -0
- data/{lib/rdm/templates/package/bin/console_irb → example/.rdm/templates/package/bin/console} +0 -0
- data/example/.rdm/templates/package/spec/spec_helper.rb +10 -0
- data/example/.rdm/templates/repository/dao/<%=name%>_dao.rb +4 -0
- data/example/.rdm/templates/repository/mapper/<%=name%>_mapper.rb +2 -0
- data/example/.rdm/templates/repository/repository/<%=name%>_repository.rb +2 -0
- data/example/.rdm/templates/repository/views/users.html.erb +2 -0
- data/example/Gemfile.lock +50 -0
- data/example/Rdm.packages +1 -0
- data/example/tests/diff_run +0 -0
- data/example/tests/run +0 -0
- data/lib/rdm.rb +40 -8
- data/lib/rdm/cli/compile_package.rb +56 -0
- data/lib/rdm/cli/dependencies_controller.rb +30 -0
- data/lib/rdm/cli/diff_package.rb +21 -0
- data/lib/rdm/cli/gen_package.rb +24 -32
- data/lib/rdm/cli/init.rb +20 -27
- data/lib/rdm/cli/template_generator.rb +38 -0
- data/lib/rdm/errors.rb +37 -0
- data/lib/rdm/gen/init.rb +29 -44
- data/lib/rdm/gen/package.rb +24 -78
- data/lib/rdm/git/diff_command.rb +13 -0
- data/lib/rdm/git/diff_manager.rb +30 -0
- data/lib/rdm/git/repository_locator.rb +23 -0
- data/lib/rdm/handlers/dependencies_handler.rb +110 -0
- data/lib/rdm/handlers/diff_package_handler.rb +48 -0
- data/lib/rdm/handlers/template_handler.rb +118 -0
- data/lib/rdm/helpers/path_helper.rb +15 -0
- data/lib/rdm/package.rb +6 -0
- data/lib/rdm/package_importer.rb +1 -1
- data/lib/rdm/packages/compiler_service.rb +78 -0
- data/lib/rdm/packages/locator.rb +28 -0
- data/lib/rdm/settings.rb +14 -1
- data/lib/rdm/spec_runner.rb +5 -0
- data/lib/rdm/spec_runner/command_generator.rb +28 -0
- data/lib/rdm/spec_runner/command_params.rb +3 -0
- data/lib/rdm/spec_runner/package_fetcher.rb +13 -0
- data/lib/rdm/spec_runner/runner.rb +122 -0
- data/lib/rdm/spec_runner/view.rb +20 -0
- data/lib/rdm/templates/init/.rdm/helpers/render_helper.rb +12 -0
- data/lib/rdm/templates/init/{Gemfile.erb → Gemfile} +0 -0
- data/lib/rdm/templates/init/{Rdm.packages.erb → Rdm.packages} +0 -0
- data/lib/rdm/templates/init/{Readme.md.erb → Readme.md} +0 -0
- data/lib/rdm/templates/init/tests/diff_run +29 -0
- data/lib/rdm/templates/init/tests/run +7 -210
- data/lib/rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +3 -0
- data/lib/rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
- data/lib/rdm/templates/package/Package.rb +8 -0
- data/lib/rdm/templates/package/bin/console +16 -0
- data/lib/rdm/templates/template_detector.rb +32 -0
- data/lib/rdm/templates/template_renderer.rb +49 -0
- data/lib/rdm/utils/file_utils.rb +20 -0
- data/lib/rdm/utils/render_util.rb +24 -0
- data/lib/rdm/utils/string_utils.rb +16 -0
- data/lib/rdm/version.rb +1 -1
- data/rdm.gemspec +1 -1
- data/spec/helpers/example_project_helper.rb +217 -0
- data/spec/helpers/git_commands_helper.rb +13 -0
- data/spec/rdm/cli/compile_package_spec.rb +114 -0
- data/spec/rdm/cli/dependencies_controller_spec.rb +50 -0
- data/spec/rdm/cli/diff_package_spec.rb +5 -0
- data/spec/rdm/cli/gen_package_spec.rb +60 -86
- data/spec/rdm/cli/init_spec.rb +53 -70
- data/spec/rdm/gen/init_spec.rb +21 -38
- data/spec/rdm/gen/package_spec.rb +70 -51
- data/spec/rdm/git/diff_manager_spec.rb +81 -0
- data/spec/rdm/git/repository_locator_spec.rb +31 -0
- data/spec/rdm/handlers/dependencies_handler_spec.rb +84 -0
- data/spec/rdm/handlers/diff_package_handler_spec.rb +78 -0
- data/spec/rdm/handlers/template_handler_spec.rb +94 -0
- data/spec/rdm/helpers/path_helper_spec.rb +52 -0
- data/spec/rdm/package/compiler_service_spec.rb +124 -0
- data/spec/rdm/package/locator_spec.rb +31 -0
- data/spec/rdm/rdm_spec.rb +2 -2
- data/spec/rdm/spec_runner/runner_spec.rb +12 -0
- data/spec/rdm/templates/template_detector_spec.rb +39 -0
- data/spec/rdm/templates/template_renderer_spec.rb +42 -0
- data/spec/spec_helper.rb +31 -25
- metadata +84 -17
- data/lib/rdm/gen/concerns/template_handling.rb +0 -81
- data/lib/rdm/support/colorize.rb +0 -106
- data/lib/rdm/support/render.rb +0 -17
- data/lib/rdm/support/template.rb +0 -30
- data/lib/rdm/templates/package/main_module_file.rb.erb +0 -3
- data/spec/rdm/support/colorize_spec.rb +0 -24
- data/spec/rdm/support/template_spec.rb +0 -20
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Rdm::Packages::Locator
|
|
2
|
+
class << self
|
|
3
|
+
def locate(path)
|
|
4
|
+
raise Rdm::Errors::PackageFileDoesNotFound, path if source_present?(path)
|
|
5
|
+
raise Rdm::Errors::SourceFileDoesNotExist, path if root_reached?(path)
|
|
6
|
+
|
|
7
|
+
return path if package_present?(path)
|
|
8
|
+
|
|
9
|
+
locate(File.dirname(path))
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def root_reached?(path)
|
|
13
|
+
File.expand_path(path) == '/'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def source_present?(path)
|
|
17
|
+
expected_source_file = File.join(path, Rdm::SOURCE_FILENAME)
|
|
18
|
+
|
|
19
|
+
File.exist?(expected_source_file)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def package_present?(path)
|
|
23
|
+
expected_package_file = File.join(path, Rdm::PACKAGE_FILENAME)
|
|
24
|
+
|
|
25
|
+
File.exist?(expected_package_file)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/rdm/settings.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
class Rdm::Settings
|
|
2
2
|
SETTING_KEYS = [
|
|
3
3
|
:role, :package_subdir_name, :configs_dir, :config_path, :role_config_path,
|
|
4
|
-
:silence_missing_package_file, :silence_missing_package
|
|
4
|
+
:silence_missing_package_file, :silence_missing_package, :compile_path,
|
|
5
|
+
:compile_ignore_files, :compile_add_files
|
|
5
6
|
].freeze
|
|
6
7
|
|
|
7
8
|
SETTING_VARIABLES = [:role, :configs_dir, :config_path, :role_config_path].freeze
|
|
@@ -12,6 +13,18 @@ class Rdm::Settings
|
|
|
12
13
|
silence_missing_package_file(false)
|
|
13
14
|
package_subdir_name('package')
|
|
14
15
|
configs_dir('configs')
|
|
16
|
+
compile_ignore_files([
|
|
17
|
+
'.gitignore',
|
|
18
|
+
'.byebug_history',
|
|
19
|
+
'.irbrc',
|
|
20
|
+
'.rspec',
|
|
21
|
+
'*_spec.rb',
|
|
22
|
+
'*.log'
|
|
23
|
+
])
|
|
24
|
+
compile_add_files([
|
|
25
|
+
'Gemfile',
|
|
26
|
+
'Gemfile.lock'
|
|
27
|
+
])
|
|
15
28
|
end
|
|
16
29
|
|
|
17
30
|
SETTING_KEYS.each do |key|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Rdm::SpecRunner::CommandGenerator
|
|
2
|
+
attr_accessor :package_name, :package_path, :spec_matcher
|
|
3
|
+
def initialize(package_name:, package_path:, spec_matcher:)
|
|
4
|
+
@package_name = package_name
|
|
5
|
+
@package_path = package_path
|
|
6
|
+
@spec_matcher = spec_matcher
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def spec_count
|
|
10
|
+
Dir[File.join(package_path, 'spec/**/*_spec.rb')].size
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def command
|
|
14
|
+
"print_message(
|
|
15
|
+
'**** Package: #{package_name} *****') \\
|
|
16
|
+
&& system('cd #{package_path} \\
|
|
17
|
+
&& bundle exec rspec --color --tty #{spec_matcher}', out: $stdout, err: :out)"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def generate
|
|
21
|
+
Rdm::SpecRunner::CommandParams.new.tap do |cp|
|
|
22
|
+
cp.package_name = package_name
|
|
23
|
+
cp.package_path = package_path
|
|
24
|
+
cp.command = command
|
|
25
|
+
cp.spec_count = spec_count
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class Rdm::SpecRunner::PackageFetcher
|
|
2
|
+
def initialize(path)
|
|
3
|
+
@app_path = path
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def packages
|
|
7
|
+
Rdm::SourceParser.read_and_init_source(rdm_packages_path).packages
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def rdm_packages_path
|
|
11
|
+
Rdm::SourceLocator.locate(@app_path)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
class Rdm::SpecRunner::Runner
|
|
2
|
+
attr_accessor :skipped_packages
|
|
3
|
+
attr_accessor :prepared_command_params
|
|
4
|
+
attr_accessor :command
|
|
5
|
+
def initialize(package: nil, spec_matcher: nil, path: nil)
|
|
6
|
+
@package = package,
|
|
7
|
+
@spec_matcher = spec_matcher.to_s
|
|
8
|
+
@skipped_packages = []
|
|
9
|
+
@path = path
|
|
10
|
+
@run_all = @package.nil?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
prepare!
|
|
15
|
+
check_input_params!
|
|
16
|
+
display_missing_specs
|
|
17
|
+
execute_command
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def packages
|
|
21
|
+
@packages ||= Rdm::SpecRunner::PackageFetcher.new(@path).packages
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def view
|
|
25
|
+
@view ||= Rdm::SpecRunner::View.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def print_message(msg)
|
|
29
|
+
puts msg
|
|
30
|
+
true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def exit_with_message(msg)
|
|
34
|
+
print_message(msg)
|
|
35
|
+
exit 1
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def check_input_params!
|
|
39
|
+
if @package_name
|
|
40
|
+
unless is_package_included?(@package_name)
|
|
41
|
+
exit_with_message(
|
|
42
|
+
view.package_not_found_message(@package_name, prepared_command_params)
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if skipped_packages.include?(@package_name)
|
|
47
|
+
exit_with_message(
|
|
48
|
+
view.no_specs_for_package(@package_name)
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def is_package_included?(package_name)
|
|
55
|
+
!prepared_command_params.select do |x|
|
|
56
|
+
x.package_name == package_name
|
|
57
|
+
end.empty?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def prepare!
|
|
61
|
+
prepared_command_params = []
|
|
62
|
+
skipped_packages = []
|
|
63
|
+
command = nil
|
|
64
|
+
prepare_command_params
|
|
65
|
+
prepare_skipped_packages
|
|
66
|
+
prepare_command
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def prepare_command_params
|
|
70
|
+
@prepared_command_params ||= begin
|
|
71
|
+
packages.map do |_name, package|
|
|
72
|
+
Rdm::SpecRunner::CommandGenerator.new(
|
|
73
|
+
package_name: package.name, package_path: package.path, spec_matcher: @spec_matcher
|
|
74
|
+
).generate
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def prepare_skipped_packages
|
|
80
|
+
prepared_command_params
|
|
81
|
+
.select { |cp| cp.spec_count == 0 }
|
|
82
|
+
.map { |cp| skipped_packages << cp.package_name }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def prepare_command
|
|
86
|
+
@command ||= begin
|
|
87
|
+
if @package_name
|
|
88
|
+
prepare_single_package_command(@package_name)
|
|
89
|
+
else
|
|
90
|
+
prepare_command_for_packages(prepared_command_params)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def prepare_single_package_command(package_name)
|
|
96
|
+
selected = prepared_command_params.select do |cmd_params|
|
|
97
|
+
cmd_params.package_name == package_name
|
|
98
|
+
end
|
|
99
|
+
prepare_command_for_packages(selected)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def prepare_command_for_packages(packages_command_params)
|
|
103
|
+
packages_command_params.select do |cmd_params|
|
|
104
|
+
cmd_params.spec_count > 0
|
|
105
|
+
end.sort_by do |cmd_params|
|
|
106
|
+
- cmd_params.spec_count
|
|
107
|
+
end.map(&:command).join(' && ')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def display_missing_specs
|
|
111
|
+
unless skipped_packages.empty?
|
|
112
|
+
print_message view.missing_specs_message(skipped_packages)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def execute_command
|
|
117
|
+
eval(command)
|
|
118
|
+
if !$?.success?
|
|
119
|
+
exit(1)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Rdm::SpecRunner::View
|
|
2
|
+
def packages_menu(prepared_command_params)
|
|
3
|
+
prepared_command_params
|
|
4
|
+
.sort_by(&:package_path)
|
|
5
|
+
.map { |x| " - #{x.package_name} (#{x.spec_count} spec files)" }
|
|
6
|
+
.join("\n")
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def package_not_found_message(package_name, prepared_command_params)
|
|
10
|
+
"Package #{package_name} not found! \nPossible packages:\n\n#{packages_menu(prepared_command_params)}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def missing_specs_message(skipped_packages)
|
|
14
|
+
"NO SPECS FOUND FOR PACKAGES: \n#{skipped_packages.map { |x| " - #{x}" }.join("\n")}\n\n**** SPECS *****: "
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def no_specs_for_package(package_name)
|
|
18
|
+
"Package #{package_name} has no specs to execute!"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Rdm
|
|
2
|
+
module RenderHelper
|
|
3
|
+
def camelize(string, uppercase_first_letter = true)
|
|
4
|
+
if uppercase_first_letter
|
|
5
|
+
string = string.sub(/^[a-z\d]*/) { $&.capitalize }
|
|
6
|
+
else
|
|
7
|
+
string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/) { $&.downcase }
|
|
8
|
+
end
|
|
9
|
+
string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
ENV['RUBY_ENV'] = 'test'
|
|
4
|
+
require 'rdm'
|
|
5
|
+
|
|
6
|
+
REVISION = ARGV.clone.first
|
|
7
|
+
PATH = File.expand_path(__FILE__)
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
changed_packages = Rdm::Handlers::DiffPackageHandler.handle(
|
|
11
|
+
path: PATH,
|
|
12
|
+
revision: REVISION
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
puts "No changed packages found!" if changed_packages.count == 0
|
|
16
|
+
|
|
17
|
+
changed_packages.each do |package|
|
|
18
|
+
Rdm::SpecRunner.run(
|
|
19
|
+
package: package,
|
|
20
|
+
path: PATH
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
rescue Rdm::Errors::GitRepositoryNotInitialized
|
|
25
|
+
puts "Git repository is not initialized. Use `git init .`"
|
|
26
|
+
exit(1)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
@@ -15,218 +15,11 @@
|
|
|
15
15
|
ENV['RUBY_ENV'] = 'test'
|
|
16
16
|
require 'rdm'
|
|
17
17
|
|
|
18
|
-
module SpecRunner
|
|
19
|
-
class InputParams
|
|
20
|
-
attr_accessor :package_name, :spec_matcher, :run_all
|
|
21
|
-
def initialize(argv)
|
|
22
|
-
@package_name = argv[0].to_s unless argv[0].nil?
|
|
23
|
-
@spec_matcher = argv[1].to_s unless argv[1].nil?
|
|
24
|
-
@run_all = !@package_name
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class CommandParams
|
|
29
|
-
attr_accessor :package_name, :package_path, :spec_matcher, :spec_count, :command
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class CommandGenerator
|
|
33
|
-
attr_accessor :package_name, :package_path, :spec_matcher
|
|
34
|
-
def initialize(package_name:, package_path:, spec_matcher:)
|
|
35
|
-
@package_name = package_name
|
|
36
|
-
@package_path = package_path
|
|
37
|
-
@spec_matcher = spec_matcher
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def spec_count
|
|
41
|
-
Dir[File.join(package_path, 'spec/**/*_spec.rb')].size
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def command
|
|
45
|
-
"print_message(
|
|
46
|
-
'**** Package: #{package_name} *****') \\
|
|
47
|
-
&& system('cd #{package_path} \\
|
|
48
|
-
&& bundle exec rspec --color --tty #{spec_matcher}', out: $stdout, err: :out)"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def generate
|
|
52
|
-
CommandParams.new.tap do |cp|
|
|
53
|
-
cp.package_name = package_name
|
|
54
|
-
cp.package_path = package_path
|
|
55
|
-
cp.command = command
|
|
56
|
-
cp.spec_count = spec_count
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
class PackageFetcher
|
|
62
|
-
def packages
|
|
63
|
-
Rdm::SourceParser.read_and_init_source(rdm_packages_path).packages
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def rdm_packages_path
|
|
67
|
-
File.join(app_path, 'Rdm.packages')
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def app_path
|
|
71
|
-
File.join(File.dirname(__FILE__), '..')
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
class View
|
|
76
|
-
def packages_menu(prepared_command_params)
|
|
77
|
-
prepared_command_params
|
|
78
|
-
.sort_by(&:package_path)
|
|
79
|
-
.map { |x| " - #{x.package_name} (#{x.spec_count} spec files)" }
|
|
80
|
-
.join("\n")
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def package_not_found_message(package_name, prepared_command_params)
|
|
84
|
-
"Package #{package_name} not found! \nPossible packages:\n\n#{packages_menu(prepared_command_params)}"
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def missing_specs_message(skipped_packages)
|
|
88
|
-
"NO SPECS FOUND FOR PACKAGES: \n#{skipped_packages.map { |x| " - #{x}" }.join("\n")}\n\n**** SPECS *****: "
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def no_specs_for_package(package_name)
|
|
92
|
-
"Package #{package_name} has no specs to execute!"
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
class Runner
|
|
97
|
-
attr_accessor :input_params
|
|
98
|
-
attr_accessor :skipped_packages
|
|
99
|
-
attr_accessor :prepared_command_params
|
|
100
|
-
attr_accessor :command
|
|
101
|
-
def initialize(input_params)
|
|
102
|
-
@input_params = input_params
|
|
103
|
-
@skipped_packages = []
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def run
|
|
107
|
-
prepare!
|
|
108
|
-
check_input_params!
|
|
109
|
-
display_missing_specs
|
|
110
|
-
execute_command
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def packages
|
|
114
|
-
@packages ||= PackageFetcher.new.packages
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def view
|
|
118
|
-
@view ||= View.new
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def print_message(msg)
|
|
122
|
-
puts msg
|
|
123
|
-
true
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def exit_with_message(msg)
|
|
127
|
-
print_message(msg)
|
|
128
|
-
exit 1
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def check_input_params!
|
|
132
|
-
if input_params.package_name
|
|
133
|
-
unless is_package_included?(input_params.package_name)
|
|
134
|
-
exit_with_message(
|
|
135
|
-
view.package_not_found_message(input_params.package_name, prepared_command_params)
|
|
136
|
-
)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
if skipped_packages.include?(input_params.package_name)
|
|
140
|
-
exit_with_message(
|
|
141
|
-
view.no_specs_for_package(input_params.package_name)
|
|
142
|
-
)
|
|
143
|
-
end
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
def is_package_included?(package_name)
|
|
148
|
-
!prepared_command_params.select do |x|
|
|
149
|
-
x.package_name == package_name
|
|
150
|
-
end.empty?
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def prepare!
|
|
154
|
-
prepared_command_params = []
|
|
155
|
-
skipped_packages = []
|
|
156
|
-
command = nil
|
|
157
|
-
prepare_command_params
|
|
158
|
-
prepare_skipped_packages
|
|
159
|
-
prepare_command
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def prepare_command_params
|
|
163
|
-
@prepared_command_params ||= begin
|
|
164
|
-
packages.map do |_name, package|
|
|
165
|
-
CommandGenerator.new(
|
|
166
|
-
package_name: package.name, package_path: package.path, spec_matcher: spec_matcher
|
|
167
|
-
).generate
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def prepare_skipped_packages
|
|
173
|
-
prepared_command_params
|
|
174
|
-
.select { |cp| cp.spec_count == 0 }
|
|
175
|
-
.map { |cp| skipped_packages << cp.package_name }
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def prepare_command
|
|
179
|
-
@command ||= begin
|
|
180
|
-
if input_params.package_name
|
|
181
|
-
prepare_single_package_command(input_params.package_name)
|
|
182
|
-
else
|
|
183
|
-
prepare_command_for_packages(prepared_command_params)
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def prepare_single_package_command(package_name)
|
|
189
|
-
selected = prepared_command_params.select do |cmd_params|
|
|
190
|
-
cmd_params.package_name == package_name
|
|
191
|
-
end
|
|
192
|
-
prepare_command_for_packages(selected)
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def prepare_command_for_packages(packages_command_params)
|
|
196
|
-
packages_command_params.select do |cmd_params|
|
|
197
|
-
cmd_params.spec_count > 0
|
|
198
|
-
end.sort_by do |cmd_params|
|
|
199
|
-
- cmd_params.spec_count
|
|
200
|
-
end.map(&:command).join(' && ')
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
def display_missing_specs
|
|
204
|
-
unless skipped_packages.empty?
|
|
205
|
-
print_message view.missing_specs_message(skipped_packages)
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
def execute_command
|
|
210
|
-
eval(command)
|
|
211
|
-
exit(1) unless $CHILD_STATUS.success?
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def spec_matcher
|
|
215
|
-
input_params.spec_matcher || ''
|
|
216
|
-
end
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
def self.run
|
|
220
|
-
input_params = InputParams.new(ARGV.clone)
|
|
221
|
-
Runner.new(input_params).run
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
|
|
225
18
|
if ENV['TEST_RUN']
|
|
226
19
|
require 'minitest/autorun'
|
|
227
|
-
describe SpecRunner::Runner do
|
|
20
|
+
describe Rdm::SpecRunner::Runner do
|
|
228
21
|
before do
|
|
229
|
-
@runner = SpecRunner::Runner.new({})
|
|
22
|
+
@runner = Rdm::SpecRunner::Runner.new({})
|
|
230
23
|
end
|
|
231
24
|
|
|
232
25
|
describe 'works ' do
|
|
@@ -236,5 +29,9 @@ if ENV['TEST_RUN']
|
|
|
236
29
|
end
|
|
237
30
|
end
|
|
238
31
|
else
|
|
239
|
-
SpecRunner.run
|
|
32
|
+
Rdm::SpecRunner.run(
|
|
33
|
+
package: ARGV.clone.first,
|
|
34
|
+
spec_matcher: ARGV.clone.last,
|
|
35
|
+
path: File.expand_path(__FILE__)
|
|
36
|
+
)
|
|
240
37
|
end
|