fastlane-plugin-apprepo 0.1.0 → 0.2.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/.coveralls.yml +2 -0
- data/.gitignore +0 -0
- data/.rspec +3 -0
- data/.rubocop.yml +4 -0
- data/Gemfile +7 -1
- data/README.md +9 -2
- data/assets/RepofileDefault +34 -0
- data/assets/apprepo.png +0 -0
- data/assets/circle.key +27 -0
- data/assets/fastlane.png +0 -0
- data/assets/manifest.png +0 -0
- data/circle.yml +11 -9
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +1244 -0
- data/coverage/.resultset.json.lock +0 -0
- data/fastlane-plugin-apprepo.gemspec +6 -2
- data/fastlane/Appfile +1 -0
- data/fastlane/Fastfile +42 -0
- data/fastlane/Pluginfile +1 -0
- data/fastlane/Repofile +33 -0
- data/greeter.rb +6 -0
- data/lib/fastlane/plugin/apprepo.rb +26 -7
- data/lib/fastlane/plugin/apprepo/actions/apprepo_action.rb +106 -92
- data/lib/fastlane/plugin/apprepo/actions/download_manifest.rb +40 -0
- data/lib/fastlane/plugin/apprepo/actions/init.rb +46 -0
- data/lib/fastlane/plugin/apprepo/actions/rubocop.rb +29 -0
- data/lib/fastlane/plugin/apprepo/actions/run.rb +69 -0
- data/lib/fastlane/plugin/apprepo/actions/submit.rb +41 -0
- data/lib/fastlane/plugin/apprepo/analyser.rb +35 -0
- data/lib/fastlane/plugin/apprepo/command.rb +17 -0
- data/lib/fastlane/plugin/apprepo/commands_generator.rb +121 -0
- data/lib/fastlane/plugin/apprepo/detect_values.rb +29 -0
- data/lib/fastlane/plugin/apprepo/helper/analyser.rb +35 -0
- data/lib/fastlane/plugin/apprepo/helper/commands_generator.rb +121 -0
- data/lib/fastlane/plugin/apprepo/helper/detect_values.rb +29 -0
- data/lib/fastlane/plugin/apprepo/helper/loader.rb +15 -0
- data/lib/fastlane/plugin/apprepo/helper/manifest.rb +44 -0
- data/lib/fastlane/plugin/apprepo/helper/options.rb +120 -0
- data/lib/fastlane/plugin/apprepo/helper/runner.rb +68 -0
- data/lib/fastlane/plugin/apprepo/helper/setup.rb +49 -0
- data/lib/fastlane/plugin/apprepo/helper/uploader.rb +301 -0
- data/lib/fastlane/plugin/apprepo/loader.rb +15 -0
- data/lib/fastlane/plugin/apprepo/manifest.rb +44 -0
- data/lib/fastlane/plugin/apprepo/options.rb +120 -0
- data/lib/fastlane/plugin/apprepo/runner.rb +68 -0
- data/lib/fastlane/plugin/apprepo/setup.rb +49 -0
- data/lib/fastlane/plugin/apprepo/uploader.rb +301 -0
- data/lib/fastlane/plugin/apprepo/version.rb +4 -3
- data/manifest.json +10 -0
- data/sampleapp.ipa +1 -0
- data/test +0 -0
- metadata +46 -2
@@ -0,0 +1,29 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class RubocopAction < Action
|
4
|
+
def self.run(_params)
|
5
|
+
sh 'bundle exec rubocop -D'
|
6
|
+
end
|
7
|
+
|
8
|
+
#####################################################
|
9
|
+
# @!group Documentation
|
10
|
+
#####################################################
|
11
|
+
|
12
|
+
def self.description
|
13
|
+
'Runs the code style checks'
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.available_options
|
17
|
+
[]
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.authors
|
21
|
+
['KrauseFx']
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.is_supported?(_platform)
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require_relative '../version.rb'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Actions
|
5
|
+
class RunAction < Action
|
6
|
+
def self.run(_params)
|
7
|
+
program :version, Apprepo::VERSION
|
8
|
+
program :description, Apprepo::DESCRIPTION
|
9
|
+
program :help, 'Author', 'Matej Sychra <suculent@me.com>'
|
10
|
+
program :help, 'Website', 'https://github.com/suculent/apprepo'
|
11
|
+
program :help, 'GitHub', 'https://github.com/suculent/apprepo/tree/master/apprepo'
|
12
|
+
program :help_formatter, :compact
|
13
|
+
|
14
|
+
generator = FastlaneCore::CommanderGenerator.new
|
15
|
+
generator.generate(Apprepo::Options.available_options)
|
16
|
+
|
17
|
+
global_option('--verbose') { $verbose = true }
|
18
|
+
|
19
|
+
always_trace!
|
20
|
+
|
21
|
+
puts _params
|
22
|
+
|
23
|
+
command :run do |c|
|
24
|
+
c.syntax = 'apprepo'
|
25
|
+
c.description = 'Upload IPA and metadata to SFTP (e.g. Apprepo)'
|
26
|
+
c.action do |_args, options|
|
27
|
+
config = FastlaneCore::Configuration
|
28
|
+
available_opts = Apprepo::Options.available_options
|
29
|
+
options = config.create(available_opts, options.__hash__)
|
30
|
+
loaded = options.load_configuration_file('Repofile')
|
31
|
+
loaded = true if options[:repo_description] || options[:ipa]
|
32
|
+
|
33
|
+
unless loaded
|
34
|
+
UI.message('[Apprepo::CommandsGenerator] configuration file not loaded')
|
35
|
+
if UI.confirm('No Repofile found. Do you want to setup apprepo?')
|
36
|
+
require 'apprepo/setup'
|
37
|
+
Apprepo::Setup.new.run(options)
|
38
|
+
return 0
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Apprepo::Runner.new(options).run
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
#####################################################
|
49
|
+
# @!group Documentation
|
50
|
+
#####################################################
|
51
|
+
|
52
|
+
def self.description
|
53
|
+
'Runs the default Apprepo action'
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.available_options
|
57
|
+
[]
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.authors
|
61
|
+
['suculent@me.com']
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.is_supported?(_platform)
|
65
|
+
true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class SubmitAction < Action
|
4
|
+
def self.run(_params)
|
5
|
+
#sh 'bundle exec rubocop -D'
|
6
|
+
puts _params
|
7
|
+
command :submit do |c|
|
8
|
+
c.syntax = 'apprepo submit'
|
9
|
+
c.description = 'Submit a specific build-nr, use latest.'
|
10
|
+
c.action do |_args, options|
|
11
|
+
config = FastlaneCore::Configuration
|
12
|
+
available_opts = Apprepo::Options.available_options
|
13
|
+
options = config.create(available_opts, options.__hash__)
|
14
|
+
options.load_configuration_file('Repofile')
|
15
|
+
Apprepo::Runner.new(options).run
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#####################################################
|
21
|
+
# @!group Documentation
|
22
|
+
#####################################################
|
23
|
+
|
24
|
+
def self.description
|
25
|
+
'Submits IPA to Apprepo'
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.available_options
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.authors
|
33
|
+
['suculent@me.com']
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.is_supported?(_platform)
|
37
|
+
true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
require 'net/ssh'
|
4
|
+
require 'net/sftp'
|
5
|
+
require 'fastlane_core'
|
6
|
+
|
7
|
+
require_relative 'uploader'
|
8
|
+
|
9
|
+
module Fastlane
|
10
|
+
module Apprepo
|
11
|
+
# Should provide metadata for current appcode
|
12
|
+
class Analyser
|
13
|
+
attr_accessor :options
|
14
|
+
|
15
|
+
def initialize(options)
|
16
|
+
self.options = options
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fetches remote app version from metadata
|
20
|
+
def fetch_app_version(options)
|
21
|
+
metadata = Apprepo::Uploader.new(options).download_manifest_only
|
22
|
+
FastlaneCore::UI.command_output('TODO: Parse version out from metadata')
|
23
|
+
puts JSON.pretty_generate(metadata) unless metadata.nil?
|
24
|
+
FastlaneCore::UI.important('TODO: parse out the bundle-version')
|
25
|
+
metadata['bundle-version']
|
26
|
+
end
|
27
|
+
|
28
|
+
# only for testing, should be empty
|
29
|
+
def run
|
30
|
+
FastlaneCore::UI.message('Analyser run, will fetch_app_version...')
|
31
|
+
fetch_app_version(options)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Apprepo
|
2
|
+
# Responsible for performing commands
|
3
|
+
# will replace contents of commands-generator.
|
4
|
+
module Command
|
5
|
+
# Command class
|
6
|
+
class Make
|
7
|
+
def run
|
8
|
+
fputs 'make run executed'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Legacy classless run method
|
13
|
+
def run
|
14
|
+
fputs 'legacy run executed'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'commander'
|
2
|
+
|
3
|
+
HighLine.track_eof = false
|
4
|
+
|
5
|
+
module Fastlane
|
6
|
+
module Apprepo
|
7
|
+
# This class is responsible for providing commands with respective actions
|
8
|
+
class CommandsGenerator
|
9
|
+
include Commander::Methods
|
10
|
+
|
11
|
+
def self.start
|
12
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('Apprepo')
|
13
|
+
new.run
|
14
|
+
ensure
|
15
|
+
checker = FastlaneCore::UpdateChecker
|
16
|
+
checker.show_update_status('Apprepo', Apprepo::VERSION)
|
17
|
+
end
|
18
|
+
|
19
|
+
def download_manifest
|
20
|
+
command :download_manifest
|
21
|
+
end
|
22
|
+
|
23
|
+
def init
|
24
|
+
command :init
|
25
|
+
end
|
26
|
+
|
27
|
+
# rubocop:disable Metrics/AbcSize
|
28
|
+
# rubocop:disable Metrics/MethodLength
|
29
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
30
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
31
|
+
# rubocop:disable Style/GlobalVars
|
32
|
+
def run
|
33
|
+
program :version, Apprepo::VERSION
|
34
|
+
program :description, Apprepo::DESCRIPTION
|
35
|
+
program :help, 'Author', 'Matej Sychra <suculent@me.com>'
|
36
|
+
program :help, 'Website', 'https://github.com/suculent/apprepo'
|
37
|
+
program :help, 'GitHub', 'https://github.com/suculent/apprepo/tree/master/apprepo'
|
38
|
+
program :help_formatter, :compact
|
39
|
+
|
40
|
+
generator = FastlaneCore::CommanderGenerator.new
|
41
|
+
generator.generate(Apprepo::Options.available_options)
|
42
|
+
|
43
|
+
global_option('--verbose') { $verbose = true }
|
44
|
+
|
45
|
+
always_trace!
|
46
|
+
|
47
|
+
command :run do |c|
|
48
|
+
c.syntax = 'Apprepo'
|
49
|
+
c.description = 'Upload IPA and metadata to SFTP (e.g. Apprepo)'
|
50
|
+
c.action do |_args, options|
|
51
|
+
config = FastlaneCore::Configuration
|
52
|
+
available_opts = Apprepo::Options.available_options
|
53
|
+
options = config.create(available_opts, options.__hash__)
|
54
|
+
loaded = options.load_configuration_file('Repofile')
|
55
|
+
loaded = true if options[:repo_description] || options[:ipa]
|
56
|
+
|
57
|
+
unless loaded
|
58
|
+
UI.message('[Apprepo::CommandsGenerator] configuration file not loaded')
|
59
|
+
if UI.confirm('No Repofile found. Do you want to setup Apprepo?')
|
60
|
+
require 'Apprepo/setup'
|
61
|
+
Apprepo::Setup.new.run(options)
|
62
|
+
return 0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
Apprepo::Runner.new(options).run
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
command :download_manifest do |c|
|
71
|
+
c.syntax = 'Apprepo download_manifest'
|
72
|
+
c.description = 'Download metadata only'
|
73
|
+
c.action do |_args, options|
|
74
|
+
config = FastlaneCore::Configuration
|
75
|
+
available_opts = Apprepo::Options.available_options
|
76
|
+
options = config.create(available_opts, options.__hash__)
|
77
|
+
options.load_configuration_file('Repofile')
|
78
|
+
Apprepo::Runner.new(options).download_manifest
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
command :submit do |c|
|
83
|
+
c.syntax = 'Apprepo submit'
|
84
|
+
c.description = 'Submit a specific build-nr, use latest.'
|
85
|
+
c.action do |_args, options|
|
86
|
+
config = FastlaneCore::Configuration
|
87
|
+
available_opts = Apprepo::Options.available_options
|
88
|
+
options = config.create(available_opts, options.__hash__)
|
89
|
+
options.load_configuration_file('Repofile')
|
90
|
+
Apprepo::Runner.new(options).run
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
command :init do |c|
|
95
|
+
c.syntax = 'Apprepo init'
|
96
|
+
c.description = 'Create the initial `Apprepo` configuration'
|
97
|
+
c.action do |_args, options|
|
98
|
+
if File.exist?('Repofile') || File.exist?('fastlane/Repofile')
|
99
|
+
UI.important('You already got a running Apprepo setup.')
|
100
|
+
return 0
|
101
|
+
end
|
102
|
+
|
103
|
+
require 'Apprepo/setup'
|
104
|
+
config = FastlaneCore::Configuration
|
105
|
+
available_opts = Apprepo::Options.available_options
|
106
|
+
options = config.create(available_opts, options.__hash__)
|
107
|
+
Apprepo::Runner.new(options)
|
108
|
+
Apprepo::Setup.new.run(options)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# rubocop:enable Metrics/AbcSize
|
113
|
+
# rubocop:enable Metrics/MethodLength
|
114
|
+
|
115
|
+
default_command :run
|
116
|
+
|
117
|
+
run!
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module Fastlane
|
3
|
+
module Apprepo
|
4
|
+
# This class is responsible for detecting values from IPA.
|
5
|
+
class DetectValues
|
6
|
+
def run!(options)
|
7
|
+
find_app_identifier(options)
|
8
|
+
find_version(options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_app_identifier(options)
|
12
|
+
return if options[:app_identifier]
|
13
|
+
if options[:ipa]
|
14
|
+
# identifier = Apprepo::Analyser.fetch_app_identifier(options[:ipa])
|
15
|
+
end
|
16
|
+
options[:app_identifier] = identifier unless identifier.to_s.empty?
|
17
|
+
input_message = 'The Bundle Identifier of your App: '
|
18
|
+
options[:app_identifier] ||= UI.input(input_message)
|
19
|
+
end
|
20
|
+
|
21
|
+
def find_version(options)
|
22
|
+
unless options[:ipa].nil?
|
23
|
+
opt = Apprepo::Analyser.new(options)
|
24
|
+
options[:app_version] ||= opt.fetch_app_version(options[:ipa])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
require 'net/ssh'
|
4
|
+
require 'net/sftp'
|
5
|
+
require 'fastlane_core'
|
6
|
+
|
7
|
+
require_relative 'uploader'
|
8
|
+
|
9
|
+
module Fastlane
|
10
|
+
module Apprepo
|
11
|
+
# Should provide metadata for current appcode
|
12
|
+
class Analyser
|
13
|
+
attr_accessor :options
|
14
|
+
|
15
|
+
def initialize(options)
|
16
|
+
self.options = options
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fetches remote app version from metadata
|
20
|
+
def fetch_app_version(options)
|
21
|
+
metadata = Apprepo::Uploader.new(options).download_manifest_only
|
22
|
+
FastlaneCore::UI.command_output('TODO: Parse version out from metadata')
|
23
|
+
puts JSON.pretty_generate(metadata) unless metadata.nil?
|
24
|
+
FastlaneCore::UI.important('TODO: parse out the bundle-version')
|
25
|
+
metadata['bundle-version']
|
26
|
+
end
|
27
|
+
|
28
|
+
# only for testing, should be empty
|
29
|
+
def run
|
30
|
+
FastlaneCore::UI.message('Analyser run, will fetch_app_version...')
|
31
|
+
fetch_app_version(options)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'commander'
|
2
|
+
|
3
|
+
HighLine.track_eof = false
|
4
|
+
|
5
|
+
module Fastlane
|
6
|
+
module Apprepo
|
7
|
+
# This class is responsible for providing commands with respective actions
|
8
|
+
class CommandsGenerator
|
9
|
+
include Commander::Methods
|
10
|
+
|
11
|
+
def self.start
|
12
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('apprepo')
|
13
|
+
new.run
|
14
|
+
ensure
|
15
|
+
checker = FastlaneCore::UpdateChecker
|
16
|
+
checker.show_update_status('apprepo', Apprepo::VERSION)
|
17
|
+
end
|
18
|
+
|
19
|
+
def download_manifest
|
20
|
+
command :download_manifest
|
21
|
+
end
|
22
|
+
|
23
|
+
def init
|
24
|
+
command :init
|
25
|
+
end
|
26
|
+
|
27
|
+
# rubocop:disable Metrics/AbcSize
|
28
|
+
# rubocop:disable Metrics/MethodLength
|
29
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
30
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
31
|
+
# rubocop:disable Style/GlobalVars
|
32
|
+
def run
|
33
|
+
program :version, Apprepo::VERSION
|
34
|
+
program :description, Apprepo::DESCRIPTION
|
35
|
+
program :help, 'Author', 'Matej Sychra <suculent@me.com>'
|
36
|
+
program :help, 'Website', 'https://github.com/suculent/apprepo'
|
37
|
+
program :help, 'GitHub', 'https://github.com/suculent/apprepo/tree/master/apprepo'
|
38
|
+
program :help_formatter, :compact
|
39
|
+
|
40
|
+
generator = FastlaneCore::CommanderGenerator.new
|
41
|
+
generator.generate(Apprepo::Options.available_options)
|
42
|
+
|
43
|
+
global_option('--verbose') { $verbose = true }
|
44
|
+
|
45
|
+
always_trace!
|
46
|
+
|
47
|
+
command :run do |c|
|
48
|
+
c.syntax = 'apprepo'
|
49
|
+
c.description = 'Upload IPA and metadata to SFTP (e.g. Apprepo)'
|
50
|
+
c.action do |_args, options|
|
51
|
+
config = FastlaneCore::Configuration
|
52
|
+
available_opts = Apprepo::Options.available_options
|
53
|
+
options = config.create(available_opts, options.__hash__)
|
54
|
+
loaded = options.load_configuration_file('Repofile')
|
55
|
+
loaded = true if options[:repo_description] || options[:ipa]
|
56
|
+
|
57
|
+
unless loaded
|
58
|
+
UI.message('[Apprepo::CommandsGenerator] configuration file not loaded')
|
59
|
+
if UI.confirm('No Repofile found. Do you want to setup apprepo?')
|
60
|
+
require 'apprepo/setup'
|
61
|
+
Apprepo::Setup.new.run(options)
|
62
|
+
return 0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
Apprepo::Runner.new(options).run
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
command :download_manifest do |c|
|
71
|
+
c.syntax = 'apprepo download_manifest'
|
72
|
+
c.description = 'Download metadata only'
|
73
|
+
c.action do |_args, options|
|
74
|
+
config = FastlaneCore::Configuration
|
75
|
+
available_opts = Apprepo::Options.available_options
|
76
|
+
options = config.create(available_opts, options.__hash__)
|
77
|
+
options.load_configuration_file('Repofile')
|
78
|
+
Apprepo::Runner.new(options).download_manifest
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
command :submit do |c|
|
83
|
+
c.syntax = 'apprepo submit'
|
84
|
+
c.description = 'Submit a specific build-nr, use latest.'
|
85
|
+
c.action do |_args, options|
|
86
|
+
config = FastlaneCore::Configuration
|
87
|
+
available_opts = Apprepo::Options.available_options
|
88
|
+
options = config.create(available_opts, options.__hash__)
|
89
|
+
options.load_configuration_file('Repofile')
|
90
|
+
Apprepo::Runner.new(options).run
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
command :init do |c|
|
95
|
+
c.syntax = 'apprepo init'
|
96
|
+
c.description = 'Create the initial `apprepo` configuration'
|
97
|
+
c.action do |_args, options|
|
98
|
+
if File.exist?('Repofile') || File.exist?('fastlane/Repofile')
|
99
|
+
UI.important('You already got a running apprepo setup.')
|
100
|
+
return 0
|
101
|
+
end
|
102
|
+
|
103
|
+
require 'apprepo/setup'
|
104
|
+
config = FastlaneCore::Configuration
|
105
|
+
available_opts = Apprepo::Options.available_options
|
106
|
+
options = config.create(available_opts, options.__hash__)
|
107
|
+
Apprepo::Runner.new(options)
|
108
|
+
Apprepo::Setup.new.run(options)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# rubocop:enable Metrics/AbcSize
|
113
|
+
# rubocop:enable Metrics/MethodLength
|
114
|
+
|
115
|
+
default_command :run
|
116
|
+
|
117
|
+
run!
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|