capistrano_multiconfig_parallel 2.0.8 → 2.0.9
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/README.md +6 -6
- data/capistrano_multiconfig_parallel.gemspec +3 -3
- data/lib/capistrano_multiconfig_parallel/all.rb +8 -4
- data/lib/capistrano_multiconfig_parallel/application.rb +1 -1
- data/lib/capistrano_multiconfig_parallel/celluloid/terminal_table.rb +11 -13
- data/lib/capistrano_multiconfig_parallel/classes/dependency_tracker.rb +2 -1
- data/lib/capistrano_multiconfig_parallel/classes/job.rb +3 -2
- data/lib/capistrano_multiconfig_parallel/classes/job_command.rb +3 -2
- data/lib/capistrano_multiconfig_parallel/helpers/application_helper.rb +84 -80
- data/lib/capistrano_multiconfig_parallel/helpers/base_actor_helper.rb +9 -4
- data/lib/capistrano_multiconfig_parallel/helpers/core_helper.rb +1 -3
- data/lib/capistrano_multiconfig_parallel/helpers/internal_helper.rb +1 -17
- data/lib/capistrano_multiconfig_parallel/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c4eed71b6e4d4a89cd378fe8db3a8a3e9bf30e7
|
4
|
+
data.tar.gz: 8affa031ae36f442a83d350a4188db99904661a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb874d06f84ca5c37c524484cb3973e595c8048b028e1edecd953d63f6d2b30f173ab2d3fdb8817dfc4afc8951d8e5dd6854e7afe0655c9025405589cfffacb5
|
7
|
+
data.tar.gz: 672d7a3c8d23749206bae3dee35e633a5c3ad8b790b0607ecd33c9b834e8c9513f0db17034d5a2bd7f6fc08c5a2aee1495e7c389fe2b5f2bf4722f77f41ed590
|
data/README.md
CHANGED
@@ -32,7 +32,7 @@ NEW Improvements started in version 2.0.0.alpha ( currently gem is in stable ver
|
|
32
32
|
|
33
33
|
- When the command will finish , the files created will be removed. ("Gemfile.multi_cap", "Gemfile.multi_cap.lock" and "Capfile.multi_cap") if they exist in the application root directory.
|
34
34
|
|
35
|
-
- If you are using RVM and there is a .rvmrc file in your project root directory and bash is available , the script will use bash emulator in order to properly load RVM gemsets because .rvmrc files need trusting. **If you use .rvmrc files please make sure you have the `bash` executable available in your PATH**
|
35
|
+
- If you are using RVM and there is a .rvmrc file in your project root directory and bash is available , the script will use bash emulator in order to properly load RVM gemsets because .rvmrc files need trusting. **If you use .rvmrc files please make sure you have the `bash` executable available in your PATH** . Please consider switching to .ruby-version and .ruby-gemset files instead which are faster and don't require trusting. You can read more about it here [RVM Workflow](https://rvm.io/workflow/projects)
|
36
36
|
|
37
37
|
- **Dont use BUNDLE EXEC command when running the executable for this gem unless you are using version 1 or this gem is part of the Gemfile of the application you are using. Otherwise just use the `multi_cap` executable without any prefix ( Unless this gem is part of your gemfile, in which case the BUNDLE EXEC prefix is needed )**
|
38
38
|
|
@@ -44,7 +44,7 @@ Requirements
|
|
44
44
|
|
45
45
|
1. [celluloid >= 0.16](https://github.com/celluloid/celluloid)
|
46
46
|
2. [celluloid-pmap >= 0.2.2](https://github.com/jwo/celluloid-pmap)
|
47
|
-
3. [celluloid_pubsub >= 0.8.
|
47
|
+
3. [celluloid_pubsub >= 0.8.4](https://github.com/bogdanRada/celluloid_pubsub)
|
48
48
|
4. [composable_state_machine >= 1.0.2](https://github.com/swoop-inc/composable_state_machine)
|
49
49
|
5. [terminal-table >= 1.5.2](https://github.com/tj/terminal-table)
|
50
50
|
6. [colorize >= 0.7](https://github.com/fazibear/colorize)
|
@@ -54,17 +54,17 @@ Requirements
|
|
54
54
|
10. [configliere >= 0.4](https://github.com/infochimps-platform/configliere)
|
55
55
|
11. [inquirer >= 0.2](https://github.com/arlimus/inquirer.rb)
|
56
56
|
12. [devnull >= 0.1](https://github.com/arlimus/inquirer.rb)
|
57
|
-
13. [capistrano_sentinel >= 0.0.
|
57
|
+
13. [capistrano_sentinel >= 0.0.17](http://github.com/bogdanRada/capistrano_sentinel)
|
58
58
|
14. [powerbar >= 1.0.17](https://github.com/busyloop/powerbar)
|
59
59
|
|
60
60
|
Compatibility
|
61
61
|
-------------
|
62
62
|
|
63
|
-
|
63
|
+
[MRI >= 2.2](http://www.ruby-lang.org) due to activesupport dependency. We will accept further compatibilty for **MRI > 2.0 and <= 2.2** pull-requests but no upcoming versions will be tested against it.
|
64
64
|
|
65
|
-
Ruby 1.8
|
65
|
+
Ruby 1.8, 1.9 are not officially supported.
|
66
66
|
|
67
|
-
Rubinius and Jruby support
|
67
|
+
Rubinius and Jruby support dropped.
|
68
68
|
|
69
69
|
Installation Instructions
|
70
70
|
-------------------------
|
@@ -16,11 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = s.files.grep(/^(spec)/)
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
-
s.required_ruby_version = '>= 2.
|
19
|
+
s.required_ruby_version = '>= 2.2'
|
20
20
|
|
21
21
|
s.add_runtime_dependency 'celluloid', '>= 0.16', '>= 0.16'
|
22
22
|
s.add_runtime_dependency 'celluloid-pmap', '~> 0.2', '>= 0.2.2'
|
23
|
-
s.add_runtime_dependency 'celluloid_pubsub', '~> 0.8', '>= 0.8.
|
23
|
+
s.add_runtime_dependency 'celluloid_pubsub', '~> 0.8', '>= 0.8.4'
|
24
24
|
s.add_runtime_dependency 'composable_state_machine', '~> 1.0', '>= 1.0.2'
|
25
25
|
s.add_runtime_dependency 'terminal-table', '~> 1.5', '>= 1.5.2'
|
26
26
|
s.add_runtime_dependency 'colorize', '~> 0.7', '>= 0.7'
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_runtime_dependency 'configliere', '~> 0.4', '>=0.4'
|
31
31
|
s.add_runtime_dependency 'inquirer', '~> 0.2', '>= 0.2'
|
32
32
|
s.add_runtime_dependency 'devnull','~> 0.1', '>= 0.1'
|
33
|
-
s.add_runtime_dependency 'capistrano_sentinel', '>= 0.0', '>= 0.0.
|
33
|
+
s.add_runtime_dependency 'capistrano_sentinel', '>= 0.0', '>= 0.0.17'
|
34
34
|
s.add_runtime_dependency 'powerbar', '~> 1.0', '>= 1.0.17'
|
35
35
|
|
36
36
|
s.add_development_dependency 'rake', '>= 10.4', '>= 10.4'
|
@@ -4,13 +4,14 @@ require 'bundler/setup'
|
|
4
4
|
|
5
5
|
require 'active_support/core_ext/object/blank'
|
6
6
|
require 'active_support/core_ext/hash/keys'
|
7
|
-
require 'active_support/core_ext/
|
8
|
-
require 'active_support/
|
7
|
+
require 'active_support/core_ext/hash/slice'
|
8
|
+
require 'active_support/core_ext/string/inflections'
|
9
|
+
require 'active_support/core_ext/hash/reverse_merge'
|
10
|
+
require 'active_support/core_ext/array/extract_options'
|
11
|
+
require 'active_support/core_ext/enumerable'
|
9
12
|
|
10
|
-
require_relative './helpers/base_actor_helper'
|
11
13
|
require 'celluloid/pmap'
|
12
14
|
require 'celluloid_pubsub'
|
13
|
-
|
14
15
|
require 'composable_state_machine'
|
15
16
|
require 'eventmachine'
|
16
17
|
require 'right_popen'
|
@@ -29,10 +30,13 @@ require 'pp'
|
|
29
30
|
require 'yaml'
|
30
31
|
require 'stringio'
|
31
32
|
require 'io/console'
|
33
|
+
require 'forwardable'
|
32
34
|
|
33
35
|
# fix error with not files that can not be found
|
34
36
|
Gem.find_files('composable_state_machine/**/*.rb').each { |path| require path }
|
35
37
|
|
38
|
+
require_relative './helpers/base_actor_helper'
|
39
|
+
|
36
40
|
%w(helpers classes celluloid).each do |folder_name|
|
37
41
|
Gem.find_files("capistrano_multiconfig_parallel/#{folder_name}/**/*.rb").each { |path| require path }
|
38
42
|
end
|
@@ -82,7 +82,7 @@ module CapistranoMulticonfigParallel
|
|
82
82
|
@application = custom_command? ? nil : @top_level_tasks.first.split(':').reverse[1]
|
83
83
|
@stage = custom_command? ? nil : @top_level_tasks.first.split(':').reverse[0]
|
84
84
|
@stage = @stage.present? ? @stage : @default_stage
|
85
|
-
@name, @args = parse_task_string(@top_level_tasks
|
85
|
+
@name, @args = parse_task_string(@top_level_tasks[1])
|
86
86
|
end
|
87
87
|
|
88
88
|
def collect_command_line_tasks(args) # :nodoc:
|
@@ -3,15 +3,13 @@ require_relative '../helpers/base_actor_helper'
|
|
3
3
|
module CapistranoMulticonfigParallel
|
4
4
|
# class used to display the progress of each worker on terminal screen using a table
|
5
5
|
class TerminalTable
|
6
|
-
|
6
|
+
extend Forwardable
|
7
|
+
include CapistranoMulticonfigParallel::BaseActorHelper
|
7
8
|
|
8
9
|
attr_reader :options, :errors, :manager, :position, :job_manager, :terminal_rows, :screen_erased
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
delegate :condition,
|
14
|
-
to: :job_manager
|
11
|
+
def_delegators :@manager, :workers_terminated
|
12
|
+
def_delegators :@job_manager, :condition
|
15
13
|
|
16
14
|
def self.topic
|
17
15
|
'sshkit_terminal'
|
@@ -64,12 +62,12 @@ module CapistranoMulticonfigParallel
|
|
64
62
|
def display_table_on_terminal(table, jobs)
|
65
63
|
table_size = fetch_table_size(jobs)
|
66
64
|
@position, @terminal_rows, @screen_erased = @cursor.display_on_screen(
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
65
|
+
"#{table}",
|
66
|
+
@options.merge(
|
67
|
+
position: @position,
|
68
|
+
table_size: table_size,
|
69
|
+
screen_erased: @screen_erased
|
70
|
+
)
|
73
71
|
)
|
74
72
|
print_errors
|
75
73
|
end
|
@@ -94,7 +92,7 @@ module CapistranoMulticonfigParallel
|
|
94
92
|
end
|
95
93
|
|
96
94
|
def managers_alive?
|
97
|
-
|
95
|
+
@manager.alive?
|
98
96
|
end
|
99
97
|
|
100
98
|
def signal_complete
|
@@ -25,7 +25,8 @@ module CapistranoMulticonfigParallel
|
|
25
25
|
return [[], {}] if configuration.application_dependencies.blank? || application.blank?
|
26
26
|
applications = get_applications_to_deploy(action, [application.camelcase])
|
27
27
|
applications = applications.present? ? applications : []
|
28
|
-
app_options = applications.find { |hash| hash['app'] == application }
|
28
|
+
app_options = applications.find { |hash| hash['app'] == application }
|
29
|
+
app_options = app_options.present? ? app_options.dup : app_options
|
29
30
|
applications.delete_if { |hash| hash['app'] == application }
|
30
31
|
[applications, (app_options || {})]
|
31
32
|
end
|
@@ -3,13 +3,14 @@ require_relative './job_command'
|
|
3
3
|
module CapistranoMulticonfigParallel
|
4
4
|
# class used for defining the job class
|
5
5
|
class Job
|
6
|
+
extend Forwardable
|
6
7
|
include CapistranoMulticonfigParallel::ApplicationHelper
|
7
8
|
|
8
9
|
attr_reader :options, :application, :manager, :bundler_status, :bundler_check_status
|
9
10
|
attr_writer :status, :exit_status, :bundler_status, :new_jobs_dispatched, :will_dispatch_new_job, :bundler_check_status
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def_delegators :@manager, :stderr_buffer
|
13
|
+
|
13
14
|
|
14
15
|
def initialize(application, options)
|
15
16
|
@options = options.stringify_keys
|
@@ -3,11 +3,12 @@ require_relative '../helpers/application_helper'
|
|
3
3
|
module CapistranoMulticonfigParallel
|
4
4
|
# class used to find application dependencies
|
5
5
|
class JobCommand
|
6
|
-
|
6
|
+
extend Forwardable
|
7
7
|
include CapistranoMulticonfigParallel::ApplicationHelper
|
8
8
|
|
9
9
|
attr_reader :job, :job_capistrano_version, :legacy_capistrano, :tempfile, :job_final_gemfile, :job_final_capfile
|
10
|
-
|
10
|
+
|
11
|
+
def_delegators :@job, :id, :app, :stage, :action, :task_arguments, :env_options, :path
|
11
12
|
|
12
13
|
def initialize(job)
|
13
14
|
@job = job
|
@@ -14,106 +14,110 @@ module CapistranoMulticonfigParallel
|
|
14
14
|
include CapistranoMulticonfigParallel::GemHelper
|
15
15
|
include CapistranoMulticonfigParallel::CapistranoHelper
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
[
|
18
|
+
:logger,
|
19
|
+
:configuration,
|
20
|
+
:configuration_valid?,
|
21
|
+
:original_args
|
22
|
+
].each do |method_name|
|
23
|
+
define_method(method_name) do
|
24
|
+
CapistranoMulticonfigParallel.send(method_name)
|
25
|
+
end
|
26
|
+
end
|
22
27
|
|
28
|
+
module_function
|
23
29
|
|
24
|
-
|
30
|
+
def truncate(string, truncate_at, options = {})
|
31
|
+
return string.dup unless string.length > truncate_at
|
25
32
|
|
26
|
-
|
27
|
-
|
33
|
+
options[:omission] ||= '...'
|
34
|
+
length_with_room_for_omission = truncate_at - options[:omission].length
|
35
|
+
stop = if options[:separator]
|
36
|
+
string.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
|
37
|
+
else
|
38
|
+
length_with_room_for_omission
|
39
|
+
end
|
28
40
|
|
29
|
-
|
30
|
-
length_with_room_for_omission = truncate_at - options[:omission].length
|
31
|
-
stop = if options[:separator]
|
32
|
-
string.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
|
33
|
-
else
|
34
|
-
length_with_room_for_omission
|
41
|
+
"#{string[0...stop]}#{options[:omission]}"
|
35
42
|
end
|
36
43
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
rescue JSON::ParserError
|
48
|
-
nil
|
49
|
-
end
|
44
|
+
# Method that is used to parse a string as JSON , if it fails will return nil
|
45
|
+
# @see JSON#parse
|
46
|
+
# @param [string] res The string that will be parsed as JSON
|
47
|
+
# @return [Hash, nil] Returns Hash object if the json parse succeeds or nil otherwise
|
48
|
+
def parse_json(res)
|
49
|
+
return if res.blank?
|
50
|
+
JSON.parse(res)
|
51
|
+
rescue JSON::ParserError
|
52
|
+
nil
|
53
|
+
end
|
50
54
|
|
51
|
-
|
52
|
-
|
53
|
-
|
55
|
+
def msg_for_stdin?(message)
|
56
|
+
message['action'] == 'stdin'
|
57
|
+
end
|
54
58
|
|
55
|
-
|
56
|
-
|
57
|
-
|
59
|
+
def message_is_for_stdout?(message)
|
60
|
+
message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['action'] == 'stdout'
|
61
|
+
end
|
58
62
|
|
59
|
-
|
60
|
-
|
61
|
-
|
63
|
+
def message_is_about_a_task?(message)
|
64
|
+
message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present? && message['action'] == 'invoke'
|
65
|
+
end
|
62
66
|
|
63
|
-
|
64
|
-
|
65
|
-
|
67
|
+
def message_from_bundler?(message)
|
68
|
+
message.present? && message.is_a?(Hash) && message['action'].present? && message['job_id'].present? && message['task'].present? && message['action'] == 'bundle_install'
|
69
|
+
end
|
66
70
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
def get_question_details(data)
|
72
|
+
matches = /(.*)\?*\s*\:*\s*(\([^)]*\))*/m.match(data).captures
|
73
|
+
[matches[0], matches[1]]
|
74
|
+
end
|
71
75
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
def setup_command_line_standard(*args)
|
77
|
+
options = args.extract_options!
|
78
|
+
[args.select(&:present?), options]
|
79
|
+
end
|
76
80
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
+
def wrap_string(string, options = {})
|
82
|
+
options.stringify_keys!
|
83
|
+
string.scan(/.{#{options.fetch('length', 80)}}|.+/).map(&:strip).join(options.fetch('character', $INPUT_RECORD_SEPARATOR))
|
84
|
+
end
|
81
85
|
|
82
|
-
|
83
|
-
|
84
|
-
|
86
|
+
def percent_of(index, total)
|
87
|
+
index.to_f / total.to_f * 100.0
|
88
|
+
end
|
85
89
|
|
86
|
-
|
87
|
-
|
88
|
-
|
90
|
+
def action_confirmed?(result)
|
91
|
+
result.present? && result.downcase == 'y'
|
92
|
+
end
|
89
93
|
|
90
|
-
|
91
|
-
|
92
|
-
|
94
|
+
def regex_last_match(number)
|
95
|
+
Regexp.last_match(number)
|
96
|
+
end
|
93
97
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
+
def parse_task_string(string) # :nodoc:
|
99
|
+
name, remaining_args = fetch_parsed_string(string)
|
100
|
+
name.present? ? find_remaining_args(name, remaining_args) : [string, []]
|
101
|
+
end
|
98
102
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
+
def fetch_parsed_string(string)
|
104
|
+
/^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s
|
105
|
+
[regex_last_match(1), regex_last_match(2)]
|
106
|
+
end
|
103
107
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
def fetch_remaining_arguments(args, remaining_args)
|
109
|
+
/((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args
|
110
|
+
args << regex_last_match(1).gsub(/\\(.)/, '\1')
|
111
|
+
regex_last_match(2)
|
112
|
+
end
|
109
113
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
114
|
+
def find_remaining_args(name, remaining_args)
|
115
|
+
args = []
|
116
|
+
loop do
|
117
|
+
remaining_args = fetch_remaining_arguments(args, remaining_args)
|
118
|
+
break if remaining_args.blank?
|
119
|
+
end
|
120
|
+
[name, args]
|
115
121
|
end
|
116
|
-
[name, args]
|
117
122
|
end
|
118
123
|
end
|
119
|
-
end
|
@@ -34,9 +34,14 @@ module CapistranoMulticonfigParallel
|
|
34
34
|
end
|
35
35
|
|
36
36
|
module InstanceMethods
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
|
38
|
+
[
|
39
|
+
:version_less_than_seventeen?,
|
40
|
+
].each do |method_name|
|
41
|
+
define_method(method_name) do
|
42
|
+
CapistranoMulticonfigParallel::BaseActorHelper::ClassMethods.send(method_name)
|
43
|
+
end
|
44
|
+
end
|
40
45
|
|
41
46
|
def setup_actor_supervision_details(class_name, options)
|
42
47
|
arguments = (options[:args].is_a?(Array) ? options[:args] : [options[:args]]).compact
|
@@ -44,7 +49,7 @@ module CapistranoMulticonfigParallel
|
|
44
49
|
[options[:actor_name], options[:type], *arguments]
|
45
50
|
else
|
46
51
|
#supervises_opts = options[:supervises].present? ? { supervises: options[:supervises] } : {}
|
47
|
-
|
52
|
+
{ as: options[:actor_name], type: options[:type], args: arguments, size: options.fetch(:size, nil) }
|
48
53
|
end
|
49
54
|
end
|
50
55
|
|
@@ -89,9 +89,7 @@ module CapistranoMulticonfigParallel
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def print_to_log_file(worker_log, options = {})
|
92
|
-
|
93
|
-
worker_log.send(options.fetch(:log_method, 'debug'), "#{options.fetch(:message, '')}\n")
|
94
|
-
end
|
92
|
+
worker_log.send(options.fetch(:log_method, 'debug'), "#{options.fetch(:message, '')}\n")
|
95
93
|
end
|
96
94
|
|
97
95
|
def find_worker_log(job_id, prefix = nil)
|
@@ -3,22 +3,6 @@ module CapistranoMulticonfigParallel
|
|
3
3
|
module InternalHelper
|
4
4
|
module_function
|
5
5
|
|
6
|
-
def get_current_gem_name
|
7
|
-
searcher = if Gem::Specification.respond_to? :find
|
8
|
-
# ruby 2.0
|
9
|
-
Gem::Specification
|
10
|
-
elsif Gem.respond_to? :searcher
|
11
|
-
# ruby 1.8/1.9
|
12
|
-
Gem.searcher.init_gemspecs
|
13
|
-
end
|
14
|
-
spec = unless searcher.nil?
|
15
|
-
searcher.find do |spec|
|
16
|
-
File.fnmatch(File.join(spec.full_gem_path,'*'), __FILE__)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
spec.name if spec.present?
|
20
|
-
end
|
21
|
-
|
22
6
|
def get_current_gem_name
|
23
7
|
searcher = if Gem::Specification.respond_to? :find
|
24
8
|
# ruby 2.0
|
@@ -90,7 +74,7 @@ module CapistranoMulticonfigParallel
|
|
90
74
|
|
91
75
|
def find_config_type(type)
|
92
76
|
type = type.to_s
|
93
|
-
%w(boolean filename string).include?(type) ? type.delete(':').to_sym : type.constantize
|
77
|
+
%w(boolean filename string).include?(type) ? type.delete(':').to_sym : type.to_s.constantize
|
94
78
|
end
|
95
79
|
|
96
80
|
def find_env_multi_cap_root
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano_multiconfig_parallel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bogdanRada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
version: '0.8'
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.8.
|
56
|
+
version: 0.8.4
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,7 +63,7 @@ dependencies:
|
|
63
63
|
version: '0.8'
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.8.
|
66
|
+
version: 0.8.4
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: composable_state_machine
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -247,7 +247,7 @@ dependencies:
|
|
247
247
|
version: '0.0'
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.0.
|
250
|
+
version: 0.0.17
|
251
251
|
type: :runtime
|
252
252
|
prerelease: false
|
253
253
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -257,7 +257,7 @@ dependencies:
|
|
257
257
|
version: '0.0'
|
258
258
|
- - ">="
|
259
259
|
- !ruby/object:Gem::Version
|
260
|
-
version: 0.0.
|
260
|
+
version: 0.0.17
|
261
261
|
- !ruby/object:Gem::Dependency
|
262
262
|
name: powerbar
|
263
263
|
requirement: !ruby/object:Gem::Requirement
|
@@ -545,7 +545,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
545
545
|
requirements:
|
546
546
|
- - ">="
|
547
547
|
- !ruby/object:Gem::Version
|
548
|
-
version: '2.
|
548
|
+
version: '2.2'
|
549
549
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
550
550
|
requirements:
|
551
551
|
- - ">="
|
@@ -553,7 +553,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
553
553
|
version: '0'
|
554
554
|
requirements: []
|
555
555
|
rubyforge_project:
|
556
|
-
rubygems_version: 2.4
|
556
|
+
rubygems_version: 2.6.4
|
557
557
|
signing_key:
|
558
558
|
specification_version: 4
|
559
559
|
summary: CapistranoMulticonfigParallel is a simple ruby implementation that allows
|