ruby_fly 0.38.0.pre.2 → 0.38.0.pre.3
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/Gemfile +2 -0
- data/Gemfile.lock +37 -2
- data/Rakefile +83 -46
- data/bin/console +4 -3
- data/lib/ruby_fly/commands/base.rb +11 -16
- data/lib/ruby_fly/commands/destroy_pipeline.rb +35 -23
- data/lib/ruby_fly/commands/get_pipeline.rb +21 -19
- data/lib/ruby_fly/commands/login.rb +44 -24
- data/lib/ruby_fly/commands/mixins/environment.rb +7 -5
- data/lib/ruby_fly/commands/mixins/required_params.rb +35 -0
- data/lib/ruby_fly/commands/set_pipeline.rb +62 -34
- data/lib/ruby_fly/commands/status.rb +22 -24
- data/lib/ruby_fly/commands/unpause_pipeline.rb +28 -21
- data/lib/ruby_fly/commands/version.rb +5 -3
- data/lib/ruby_fly/commands.rb +3 -1
- data/lib/ruby_fly/rc.rb +69 -83
- data/lib/ruby_fly/version.rb +3 -1
- data/lib/ruby_fly.rb +4 -0
- data/ruby_fly.gemspec +57 -0
- metadata +67 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a923ce7e879b4342da242cfa3dc805bd8aa14fced11105bdb78d749a59e9b37
|
4
|
+
data.tar.gz: cb492bc1bd6aabd920dbfa84cc4eeb3dbee36ff1fc14b254fbcb0e7a879bdcec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8298eeee2b9bae869f09da25cb3332f000a82ee736871e667e9fc47653197d1636f60075ada52fd4840fc2b2af607c87c30c89f90d5673d3a429d64cc66b9d51
|
7
|
+
data.tar.gz: ec8a3662cdb182d9364356b25da3e2c0cc65db3719f71e9b8b373633969d9c1fed52c766c2b2f8ed590c5a5d8db587d2fc00a3f4cf353c072603f0ad46c38eff
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby_fly (0.38.0.pre.
|
4
|
+
ruby_fly (0.38.0.pre.3)
|
5
5
|
lino (~> 3.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -14,9 +14,11 @@ GEM
|
|
14
14
|
tzinfo (~> 2.0)
|
15
15
|
addressable (2.8.0)
|
16
16
|
public_suffix (>= 2.0.2, < 5.0)
|
17
|
+
ast (2.4.2)
|
17
18
|
colored2 (3.1.2)
|
18
19
|
concurrent-ruby (1.1.9)
|
19
20
|
diff-lcs (1.5.0)
|
21
|
+
docile (1.4.0)
|
20
22
|
excon (0.92.0)
|
21
23
|
fakefs (1.4.1)
|
22
24
|
faker (2.20.0)
|
@@ -58,7 +60,11 @@ GEM
|
|
58
60
|
faraday (>= 0.9)
|
59
61
|
sawyer (~> 0.8.0, >= 0.5.3)
|
60
62
|
open4 (1.3.4)
|
63
|
+
parallel (1.22.1)
|
64
|
+
parser (3.1.1.0)
|
65
|
+
ast (~> 2.4.1)
|
61
66
|
public_suffix (4.0.6)
|
67
|
+
rainbow (3.1.1)
|
62
68
|
rake (13.0.6)
|
63
69
|
rake_circle_ci (0.9.0)
|
64
70
|
colored2 (~> 3.1)
|
@@ -80,6 +86,8 @@ GEM
|
|
80
86
|
colored2 (~> 3.1)
|
81
87
|
rake_factory (~> 0.23)
|
82
88
|
sshkey (~> 2.0)
|
89
|
+
regexp_parser (2.2.1)
|
90
|
+
rexml (3.2.5)
|
83
91
|
rspec (3.11.0)
|
84
92
|
rspec-core (~> 3.11.0)
|
85
93
|
rspec-expectations (~> 3.11.0)
|
@@ -93,15 +101,38 @@ GEM
|
|
93
101
|
diff-lcs (>= 1.2.0, < 2.0)
|
94
102
|
rspec-support (~> 3.11.0)
|
95
103
|
rspec-support (3.11.0)
|
104
|
+
rubocop (1.27.0)
|
105
|
+
parallel (~> 1.10)
|
106
|
+
parser (>= 3.1.0.0)
|
107
|
+
rainbow (>= 2.2.2, < 4.0)
|
108
|
+
regexp_parser (>= 1.8, < 3.0)
|
109
|
+
rexml
|
110
|
+
rubocop-ast (>= 1.16.0, < 2.0)
|
111
|
+
ruby-progressbar (~> 1.7)
|
112
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
113
|
+
rubocop-ast (1.16.0)
|
114
|
+
parser (>= 3.1.1.0)
|
115
|
+
rubocop-rake (0.6.0)
|
116
|
+
rubocop (~> 1.0)
|
117
|
+
rubocop-rspec (2.9.0)
|
118
|
+
rubocop (~> 1.19)
|
119
|
+
ruby-progressbar (1.11.0)
|
96
120
|
ruby2_keywords (0.0.5)
|
97
121
|
ruby_gpg2 (0.8.0)
|
98
122
|
lino (>= 1.5)
|
99
123
|
sawyer (0.8.2)
|
100
124
|
addressable (>= 2.3.5)
|
101
125
|
faraday (> 0.8, < 2.0)
|
126
|
+
simplecov (0.21.2)
|
127
|
+
docile (~> 1.1)
|
128
|
+
simplecov-html (~> 0.11)
|
129
|
+
simplecov_json_formatter (~> 0.1)
|
130
|
+
simplecov-html (0.12.3)
|
131
|
+
simplecov_json_formatter (0.1.4)
|
102
132
|
sshkey (2.0.0)
|
103
133
|
tzinfo (2.0.4)
|
104
134
|
concurrent-ruby (~> 1.0)
|
135
|
+
unicode-display_width (2.1.0)
|
105
136
|
|
106
137
|
PLATFORMS
|
107
138
|
ruby
|
@@ -117,7 +148,11 @@ DEPENDENCIES
|
|
117
148
|
rake_gpg
|
118
149
|
rake_ssh
|
119
150
|
rspec
|
151
|
+
rubocop
|
152
|
+
rubocop-rake
|
153
|
+
rubocop-rspec
|
120
154
|
ruby_fly!
|
155
|
+
simplecov
|
121
156
|
|
122
157
|
BUNDLED WITH
|
123
|
-
2.3.
|
158
|
+
2.3.11
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'yaml'
|
2
4
|
require 'rake_circle_ci'
|
3
5
|
require 'rake_github'
|
@@ -5,17 +7,26 @@ require 'rake_ssh'
|
|
5
7
|
require 'rake_gpg'
|
6
8
|
require 'securerandom'
|
7
9
|
require 'rspec/core/rake_task'
|
10
|
+
require 'rubocop/rake_task'
|
8
11
|
|
9
|
-
task :
|
10
|
-
|
11
|
-
|
12
|
+
task default: %i[
|
13
|
+
library:fix
|
14
|
+
test:unit
|
15
|
+
]
|
12
16
|
|
13
17
|
namespace :encryption do
|
18
|
+
namespace :directory do
|
19
|
+
desc 'Ensure CI secrets directory exists.'
|
20
|
+
task :ensure do
|
21
|
+
FileUtils.mkdir_p('config/secrets/ci')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
14
25
|
namespace :passphrase do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
26
|
+
desc 'Generate encryption passphrase used by CI.'
|
27
|
+
task generate: ['directory:ensure'] do
|
28
|
+
File.write('config/secrets/ci/encryption.passphrase',
|
29
|
+
SecureRandom.base64(36))
|
19
30
|
end
|
20
31
|
end
|
21
32
|
end
|
@@ -23,85 +34,111 @@ end
|
|
23
34
|
namespace :keys do
|
24
35
|
namespace :deploy do
|
25
36
|
RakeSSH.define_key_tasks(
|
26
|
-
|
27
|
-
|
37
|
+
path: 'config/secrets/ci/',
|
38
|
+
comment: 'maintainers@infrablocks.io'
|
39
|
+
)
|
28
40
|
end
|
29
41
|
|
30
42
|
namespace :gpg do
|
31
43
|
RakeGPG.define_generate_key_task(
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
44
|
+
output_directory: 'config/secrets/ci',
|
45
|
+
name_prefix: 'gpg',
|
46
|
+
owner_name: 'InfraBlocks Maintainers',
|
47
|
+
owner_email: 'maintainers@infrablocks.io',
|
48
|
+
owner_comment: 'ruby_fly CI Key'
|
49
|
+
)
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
53
|
+
namespace :secrets do
|
54
|
+
desc 'Regenerate all generatable secrets.'
|
55
|
+
task regenerate: %w[
|
56
|
+
encryption:passphrase:generate
|
57
|
+
keys:deploy:generate
|
58
|
+
keys:gpg:generate
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
RuboCop::RakeTask.new
|
63
|
+
|
64
|
+
namespace :library do
|
65
|
+
desc 'Run all checks of the library'
|
66
|
+
task check: [:rubocop]
|
67
|
+
|
68
|
+
desc 'Attempt to automatically fix issues with the library'
|
69
|
+
task fix: [:'rubocop:auto_correct']
|
70
|
+
end
|
71
|
+
|
72
|
+
namespace :test do
|
73
|
+
RSpec::Core::RakeTask.new(:unit)
|
74
|
+
end
|
75
|
+
|
40
76
|
RakeCircleCI.define_project_tasks(
|
41
|
-
|
42
|
-
|
77
|
+
namespace: :circle_ci,
|
78
|
+
project_slug: 'github/infrablocks/ruby_fly'
|
43
79
|
) do |t|
|
44
80
|
circle_ci_config =
|
45
|
-
|
81
|
+
YAML.load_file('config/secrets/circle_ci/config.yaml')
|
46
82
|
|
47
|
-
t.api_token = circle_ci_config[
|
83
|
+
t.api_token = circle_ci_config['circle_ci_api_token']
|
48
84
|
t.environment_variables = {
|
49
|
-
|
50
|
-
|
51
|
-
|
85
|
+
ENCRYPTION_PASSPHRASE:
|
86
|
+
File.read('config/secrets/ci/encryption.passphrase')
|
87
|
+
.chomp
|
52
88
|
}
|
53
89
|
t.checkout_keys = []
|
54
90
|
t.ssh_keys = [
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
91
|
+
{
|
92
|
+
hostname: 'github.com',
|
93
|
+
private_key: File.read('config/secrets/ci/ssh.private')
|
94
|
+
}
|
59
95
|
]
|
60
96
|
end
|
61
97
|
|
62
98
|
RakeGithub.define_repository_tasks(
|
63
|
-
|
64
|
-
|
99
|
+
namespace: :github,
|
100
|
+
repository: 'infrablocks/ruby_fly'
|
65
101
|
) do |t, args|
|
66
102
|
github_config =
|
67
|
-
|
103
|
+
YAML.load_file('config/secrets/github/config.yaml')
|
68
104
|
|
69
|
-
t.access_token = github_config[
|
105
|
+
t.access_token = github_config['github_personal_access_token']
|
70
106
|
t.deploy_keys = [
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
107
|
+
{
|
108
|
+
title: 'CircleCI',
|
109
|
+
public_key: File.read('config/secrets/ci/ssh.public')
|
110
|
+
}
|
75
111
|
]
|
76
112
|
t.branch_name = args.branch_name
|
77
113
|
t.commit_message = args.commit_message
|
78
114
|
end
|
79
115
|
|
80
116
|
namespace :pipeline do
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
117
|
+
desc 'Prepare CircleCI Pipeline'
|
118
|
+
task prepare: %i[
|
119
|
+
circle_ci:project:follow
|
120
|
+
circle_ci:env_vars:ensure
|
121
|
+
circle_ci:checkout_keys:ensure
|
122
|
+
circle_ci:ssh_keys:ensure
|
123
|
+
github:deploy_keys:ensure
|
87
124
|
]
|
88
125
|
end
|
89
126
|
|
90
127
|
namespace :version do
|
91
|
-
desc
|
128
|
+
desc 'Bump version for specified type (pre, major, minor, patch)'
|
92
129
|
task :bump, [:type] do |_, args|
|
93
130
|
bump_version_for(args.type)
|
94
131
|
end
|
95
132
|
end
|
96
133
|
|
97
|
-
desc
|
134
|
+
desc 'Release gem'
|
98
135
|
task :release do
|
99
|
-
sh
|
136
|
+
sh 'gem release --tag --push'
|
100
137
|
end
|
101
138
|
|
102
139
|
def bump_version_for(version_type)
|
103
|
-
sh "gem bump --version #{version_type} "
|
104
|
-
|
105
|
-
|
106
|
-
|
140
|
+
sh "gem bump --version #{version_type} " \
|
141
|
+
'&& bundle install ' \
|
142
|
+
'&& export LAST_MESSAGE="$(git log -1 --pretty=%B)" ' \
|
143
|
+
'&& git commit -a --amend -m "${LAST_MESSAGE} [ci skip]"'
|
107
144
|
end
|
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'ruby_fly'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "ruby_fly"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'lino'
|
2
4
|
|
3
5
|
module RubyFly
|
@@ -13,39 +15,32 @@ module RubyFly
|
|
13
15
|
end
|
14
16
|
|
15
17
|
def execute(opts = {})
|
16
|
-
builder = instantiate_builder
|
17
|
-
|
18
18
|
do_before(opts)
|
19
19
|
do_around(opts) do |new_opts|
|
20
|
-
configure_command(
|
21
|
-
|
22
|
-
|
23
|
-
stdin: stdin,
|
24
|
-
stdout: stdout,
|
25
|
-
stderr: stderr)
|
20
|
+
configure_command(instantiate_builder, new_opts)
|
21
|
+
.build
|
22
|
+
.execute(stdin: stdin, stdout: stdout, stderr: stderr)
|
26
23
|
end
|
27
24
|
do_after(opts)
|
28
25
|
end
|
29
26
|
|
30
27
|
def instantiate_builder
|
31
28
|
Lino::CommandLineBuilder
|
32
|
-
|
33
|
-
|
29
|
+
.for_command(binary)
|
30
|
+
.with_option_separator('=')
|
34
31
|
end
|
35
32
|
|
36
|
-
def do_before(opts)
|
37
|
-
end
|
33
|
+
def do_before(opts); end
|
38
34
|
|
39
35
|
def do_around(opts, &block)
|
40
36
|
block.call(opts)
|
41
37
|
end
|
42
38
|
|
43
|
-
def configure_command(builder,
|
39
|
+
def configure_command(builder, _opts)
|
44
40
|
builder
|
45
41
|
end
|
46
42
|
|
47
|
-
def do_after(opts)
|
48
|
-
end
|
43
|
+
def do_after(opts); end
|
49
44
|
end
|
50
45
|
end
|
51
|
-
end
|
46
|
+
end
|
@@ -1,41 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'lino'
|
2
4
|
require_relative 'base'
|
3
5
|
require_relative 'mixins/environment'
|
6
|
+
require_relative 'mixins/required_params'
|
4
7
|
|
5
8
|
module RubyFly
|
6
9
|
module Commands
|
7
10
|
class DestroyPipeline < Base
|
8
11
|
include Mixins::Environment
|
12
|
+
include Mixins::RequiredParams
|
9
13
|
|
10
14
|
def configure_command(builder, opts)
|
11
15
|
builder = super(builder, opts)
|
16
|
+
builder
|
17
|
+
.with_subcommand('destroy-pipeline') do |sub|
|
18
|
+
sub = with_target(sub, opts[:target])
|
19
|
+
sub = with_pipeline(sub, opts[:pipeline])
|
20
|
+
sub = with_team(sub, opts[:team])
|
21
|
+
sub = with_non_interactive(sub, opts[:non_interactive])
|
22
|
+
sub
|
23
|
+
end
|
24
|
+
end
|
12
25
|
|
13
|
-
|
14
|
-
:target,
|
15
|
-
:pipeline
|
16
|
-
].select { |param| opts[param].nil? }
|
26
|
+
private
|
17
27
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
28
|
+
def required_params
|
29
|
+
%i[target pipeline]
|
30
|
+
end
|
31
|
+
|
32
|
+
def with_target(sub, target)
|
33
|
+
sub.with_option('-t', target)
|
34
|
+
end
|
35
|
+
|
36
|
+
def with_pipeline(sub, pipeline)
|
37
|
+
sub.with_option('-p', pipeline)
|
38
|
+
end
|
24
39
|
|
25
|
-
|
26
|
-
|
27
|
-
non_interactive = opts[:non_interactive]
|
28
|
-
team = opts[:team]
|
40
|
+
def with_team(sub, team)
|
41
|
+
return sub unless team
|
29
42
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
43
|
+
sub.with_option('--team', team)
|
44
|
+
end
|
45
|
+
|
46
|
+
def with_non_interactive(sub, non_interactive)
|
47
|
+
return sub unless non_interactive
|
48
|
+
|
49
|
+
sub.with_flag('-n')
|
38
50
|
end
|
39
51
|
end
|
40
52
|
end
|
41
|
-
end
|
53
|
+
end
|
@@ -1,37 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'lino'
|
2
4
|
require_relative 'base'
|
3
5
|
require_relative 'mixins/environment'
|
6
|
+
require_relative 'mixins/required_params'
|
4
7
|
|
5
8
|
module RubyFly
|
6
9
|
module Commands
|
7
10
|
class GetPipeline < Base
|
8
11
|
include Mixins::Environment
|
12
|
+
include Mixins::RequiredParams
|
9
13
|
|
10
14
|
def configure_command(builder, opts)
|
11
15
|
builder = super(builder, opts)
|
16
|
+
builder
|
17
|
+
.with_subcommand('get-pipeline') do |sub|
|
18
|
+
sub = with_target(sub, opts[:target])
|
19
|
+
sub = with_pipeline(sub, opts[:pipeline])
|
20
|
+
sub
|
21
|
+
end
|
22
|
+
end
|
12
23
|
|
13
|
-
|
14
|
-
:target,
|
15
|
-
:pipeline
|
16
|
-
].select { |param| opts[param].nil? }
|
24
|
+
private
|
17
25
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
ArgumentError,
|
22
|
-
"Error: #{description} required but not provided.")
|
23
|
-
end
|
26
|
+
def required_params
|
27
|
+
%i[target pipeline]
|
28
|
+
end
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
def with_target(sub, target)
|
31
|
+
sub.with_option('-t', target)
|
32
|
+
end
|
27
33
|
|
28
|
-
|
29
|
-
|
30
|
-
sub = sub.with_option('-t', target)
|
31
|
-
sub = sub.with_option('-p', pipeline)
|
32
|
-
sub
|
33
|
-
end
|
34
|
+
def with_pipeline(sub, pipeline)
|
35
|
+
sub.with_option('-p', pipeline)
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
37
|
-
end
|
39
|
+
end
|
@@ -1,42 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'lino'
|
2
4
|
require_relative 'base'
|
3
5
|
require_relative 'mixins/environment'
|
6
|
+
require_relative 'mixins/required_params'
|
4
7
|
|
5
8
|
module RubyFly
|
6
9
|
module Commands
|
7
10
|
class Login < Base
|
8
11
|
include Mixins::Environment
|
12
|
+
include Mixins::RequiredParams
|
9
13
|
|
10
14
|
def configure_command(builder, opts)
|
11
15
|
builder = super(builder, opts)
|
12
|
-
|
13
|
-
missing_params = [
|
14
|
-
:target
|
15
|
-
].select { |param| opts[param].nil? }
|
16
|
-
|
17
|
-
unless missing_params.empty?
|
18
|
-
description = missing_params.map { |p| "'#{p}'" }.join(', ')
|
19
|
-
raise(
|
20
|
-
ArgumentError,
|
21
|
-
"Error: #{description} required but not provided.")
|
22
|
-
end
|
23
|
-
|
24
|
-
target = opts[:target]
|
25
|
-
concourse_url = opts[:concourse_url]
|
26
|
-
username = opts[:username]
|
27
|
-
password = opts[:password]
|
28
|
-
team = opts[:team]
|
29
|
-
|
30
16
|
builder
|
31
17
|
.with_subcommand('login') do |sub|
|
32
|
-
sub = sub
|
33
|
-
sub = sub
|
34
|
-
sub = sub
|
35
|
-
sub = sub
|
36
|
-
sub = sub
|
18
|
+
sub = with_target(sub, opts[:target])
|
19
|
+
sub = with_concourse_url(sub, opts[:concourse_url])
|
20
|
+
sub = with_username(sub, opts[:username])
|
21
|
+
sub = with_password(sub, opts[:password])
|
22
|
+
sub = with_team(sub, opts[:team])
|
37
23
|
sub
|
38
24
|
end
|
39
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def required_params
|
30
|
+
%i[target]
|
31
|
+
end
|
32
|
+
|
33
|
+
def with_target(builder, target)
|
34
|
+
builder.with_option('-t', target)
|
35
|
+
end
|
36
|
+
|
37
|
+
def with_concourse_url(builder, concourse_url)
|
38
|
+
return builder unless concourse_url
|
39
|
+
|
40
|
+
builder.with_option('-c', concourse_url)
|
41
|
+
end
|
42
|
+
|
43
|
+
def with_username(builder, username)
|
44
|
+
return builder unless username
|
45
|
+
|
46
|
+
builder.with_option('-u', username)
|
47
|
+
end
|
48
|
+
|
49
|
+
def with_password(builder, password)
|
50
|
+
return builder unless password
|
51
|
+
|
52
|
+
builder.with_option('-p', password)
|
53
|
+
end
|
54
|
+
|
55
|
+
def with_team(builder, team)
|
56
|
+
return builder unless team
|
57
|
+
|
58
|
+
builder.with_option('-n', team)
|
59
|
+
end
|
40
60
|
end
|
41
61
|
end
|
42
|
-
end
|
62
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RubyFly
|
2
4
|
module Commands
|
3
5
|
module Mixins
|
@@ -16,14 +18,14 @@ module RubyFly
|
|
16
18
|
builder = super(builder, opts)
|
17
19
|
environment = opts[:environment] || @environment
|
18
20
|
if environment
|
19
|
-
builder =
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
builder =
|
22
|
+
environment.to_a.inject(builder) do |b, environment_variable|
|
23
|
+
b.with_environment_variable(*environment_variable)
|
24
|
+
end
|
23
25
|
end
|
24
26
|
builder
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
29
|
-
end
|
31
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubyFly
|
4
|
+
module Commands
|
5
|
+
module Mixins
|
6
|
+
module RequiredParams
|
7
|
+
def configure_command(builder, opts)
|
8
|
+
assert_required_params(opts)
|
9
|
+
super(builder, opts)
|
10
|
+
end
|
11
|
+
|
12
|
+
def required_params
|
13
|
+
%i[]
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def missing_params(opts)
|
19
|
+
required_params.select { |param| opts[param].nil? }
|
20
|
+
end
|
21
|
+
|
22
|
+
def assert_required_params(opts)
|
23
|
+
missing_params = missing_params(opts)
|
24
|
+
return if missing_params.empty?
|
25
|
+
|
26
|
+
description = missing_params.map { |p| "'#{p}'" }.join(', ')
|
27
|
+
raise(
|
28
|
+
ArgumentError,
|
29
|
+
"Error: #{description} required but not provided."
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|