kamaze-project 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +18 -0
- data/bin/plop +5 -0
- data/lib/kamaze-project.rb +39 -0
- data/lib/kamaze/project.rb +155 -0
- data/lib/kamaze/project/boot/core_ext.rb +16 -0
- data/lib/kamaze/project/boot/listen.rb +38 -0
- data/lib/kamaze/project/concern.rb +13 -0
- data/lib/kamaze/project/concern/cli.rb +53 -0
- data/lib/kamaze/project/concern/cli/with_exit_on_failure.rb +36 -0
- data/lib/kamaze/project/concern/env.rb +63 -0
- data/lib/kamaze/project/concern/helper.rb +20 -0
- data/lib/kamaze/project/concern/mode.rb +19 -0
- data/lib/kamaze/project/concern/observable.rb +132 -0
- data/lib/kamaze/project/concern/sh.rb +91 -0
- data/lib/kamaze/project/concern/tasks.rb +55 -0
- data/lib/kamaze/project/concern/tools.rb +27 -0
- data/lib/kamaze/project/config.rb +58 -0
- data/lib/kamaze/project/core_ext/object.rb +27 -0
- data/lib/kamaze/project/core_ext/pp.rb +28 -0
- data/lib/kamaze/project/debug.rb +136 -0
- data/lib/kamaze/project/dsl.rb +16 -0
- data/lib/kamaze/project/dsl/definition.rb +43 -0
- data/lib/kamaze/project/dsl/setup.rb +11 -0
- data/lib/kamaze/project/helper.rb +63 -0
- data/lib/kamaze/project/helper/inflector.rb +44 -0
- data/lib/kamaze/project/helper/project.rb +34 -0
- data/lib/kamaze/project/helper/project/config.rb +25 -0
- data/lib/kamaze/project/observable.rb +20 -0
- data/lib/kamaze/project/observer.rb +37 -0
- data/lib/kamaze/project/resources/Vagrantfile +128 -0
- data/lib/kamaze/project/resources/config/tools.yml +15 -0
- data/lib/kamaze/project/struct.rb +34 -0
- data/lib/kamaze/project/tasks/cs.rb +23 -0
- data/lib/kamaze/project/tasks/cs/control.rb +17 -0
- data/lib/kamaze/project/tasks/cs/correct.rb +17 -0
- data/lib/kamaze/project/tasks/cs/pre_commit.rb +66 -0
- data/lib/kamaze/project/tasks/doc.rb +21 -0
- data/lib/kamaze/project/tasks/doc/watch.rb +41 -0
- data/lib/kamaze/project/tasks/gem.rb +14 -0
- data/lib/kamaze/project/tasks/gem/build.rb +34 -0
- data/lib/kamaze/project/tasks/gem/compile.rb +30 -0
- data/lib/kamaze/project/tasks/gem/gemspec.rb +20 -0
- data/lib/kamaze/project/tasks/gem/install.rb +32 -0
- data/lib/kamaze/project/tasks/gem/push.rb +27 -0
- data/lib/kamaze/project/tasks/misc/gitignore.rb +29 -0
- data/lib/kamaze/project/tasks/shell.rb +17 -0
- data/lib/kamaze/project/tasks/sources.rb +6 -0
- data/lib/kamaze/project/tasks/sources/license.rb +35 -0
- data/lib/kamaze/project/tasks/test.rb +16 -0
- data/lib/kamaze/project/tasks/vagrant.rb +71 -0
- data/lib/kamaze/project/tasks/version/edit.rb +16 -0
- data/lib/kamaze/project/tools.rb +18 -0
- data/lib/kamaze/project/tools/base_tool.rb +55 -0
- data/lib/kamaze/project/tools/console.rb +48 -0
- data/lib/kamaze/project/tools/console/output.rb +120 -0
- data/lib/kamaze/project/tools/console/output/buffer.rb +48 -0
- data/lib/kamaze/project/tools/gemspec.rb +33 -0
- data/lib/kamaze/project/tools/gemspec/builder.rb +99 -0
- data/lib/kamaze/project/tools/gemspec/concern.rb +13 -0
- data/lib/kamaze/project/tools/gemspec/concern/reading.rb +49 -0
- data/lib/kamaze/project/tools/gemspec/packager.rb +67 -0
- data/lib/kamaze/project/tools/gemspec/packer.rb +89 -0
- data/lib/kamaze/project/tools/gemspec/packer/command.rb +143 -0
- data/lib/kamaze/project/tools/gemspec/reader.rb +70 -0
- data/lib/kamaze/project/tools/gemspec/reader/decorator.rb +78 -0
- data/lib/kamaze/project/tools/gemspec/writer.rb +127 -0
- data/lib/kamaze/project/tools/gemspec/writer/dep_gen.rb +61 -0
- data/lib/kamaze/project/tools/gemspec/writer/dependency.rb +104 -0
- data/lib/kamaze/project/tools/git.rb +95 -0
- data/lib/kamaze/project/tools/git/hooks.rb +66 -0
- data/lib/kamaze/project/tools/git/hooks/base_hook.rb +33 -0
- data/lib/kamaze/project/tools/git/hooks/pre_commit.rb +81 -0
- data/lib/kamaze/project/tools/git/status.rb +101 -0
- data/lib/kamaze/project/tools/git/status/decorator.rb +39 -0
- data/lib/kamaze/project/tools/git/status/file.rb +180 -0
- data/lib/kamaze/project/tools/git/status/files_array.rb +39 -0
- data/lib/kamaze/project/tools/git/status/index.rb +77 -0
- data/lib/kamaze/project/tools/git/status/worktree.rb +19 -0
- data/lib/kamaze/project/tools/git/util.rb +35 -0
- data/lib/kamaze/project/tools/licenser.rb +197 -0
- data/lib/kamaze/project/tools/packager.rb +86 -0
- data/lib/kamaze/project/tools/packager/filesystem.rb +178 -0
- data/lib/kamaze/project/tools/packager/filesystem/operator.rb +83 -0
- data/lib/kamaze/project/tools/packager/filesystem/operator/utils.rb +77 -0
- data/lib/kamaze/project/tools/process_locker.rb +106 -0
- data/lib/kamaze/project/tools/rspec.rb +115 -0
- data/lib/kamaze/project/tools/rubocop.rb +128 -0
- data/lib/kamaze/project/tools/rubocop/arguments.rb +19 -0
- data/lib/kamaze/project/tools/rubocop/config.rb +43 -0
- data/lib/kamaze/project/tools/shell.rb +85 -0
- data/lib/kamaze/project/tools/vagrant.rb +182 -0
- data/lib/kamaze/project/tools/vagrant/composer.rb +88 -0
- data/lib/kamaze/project/tools/vagrant/composer/file.rb +79 -0
- data/lib/kamaze/project/tools/vagrant/remote.rb +79 -0
- data/lib/kamaze/project/tools/vagrant/shell.rb +102 -0
- data/lib/kamaze/project/tools/vagrant/writer.rb +81 -0
- data/lib/kamaze/project/tools/yardoc.rb +75 -0
- data/lib/kamaze/project/tools/yardoc/file.rb +55 -0
- data/lib/kamaze/project/tools/yardoc/watchable.rb +70 -0
- data/lib/kamaze/project/tools/yardoc/watcher.rb +106 -0
- data/lib/kamaze/project/tools_provider.rb +161 -0
- data/lib/kamaze/project/tools_provider/resolver.rb +42 -0
- data/lib/kamaze/project/version.rb +104 -0
- data/lib/kamaze/project/version.yml +17 -0
- metadata +321 -0
@@ -0,0 +1,128 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
8
|
+
|
9
|
+
require_relative '../tools'
|
10
|
+
require_relative '../concern/cli/with_exit_on_failure'
|
11
|
+
require 'pathname'
|
12
|
+
require 'rubocop'
|
13
|
+
|
14
|
+
# rubocop:disable Style/Documentation
|
15
|
+
|
16
|
+
module Kamaze::Project::Tools
|
17
|
+
class Rubocop < BaseTool
|
18
|
+
class Arguments < Array
|
19
|
+
require_relative 'rubocop/arguments'
|
20
|
+
end
|
21
|
+
|
22
|
+
class Config
|
23
|
+
require_relative 'rubocop/config'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# rubocop:enable Style/Documentation
|
29
|
+
|
30
|
+
# Tool to run ``Rubocop::CLI``
|
31
|
+
#
|
32
|
+
# Sample of use:
|
33
|
+
#
|
34
|
+
# ```ruby
|
35
|
+
# Rubocop.new.prepare do |c|
|
36
|
+
# c.patterns = ["#{Dir.pwd}/test/cs.rb"]
|
37
|
+
# c.options = ['--fail-level', 'E']
|
38
|
+
# end.run
|
39
|
+
# ```
|
40
|
+
class Kamaze::Project::Tools::Rubocop
|
41
|
+
include Kamaze::Project::Concern::Cli::WithExitOnFailure
|
42
|
+
|
43
|
+
# Default arguments used by ``Rubocop::CLI``
|
44
|
+
#
|
45
|
+
# @type [Array|Arguments]
|
46
|
+
# @return [Arguments]
|
47
|
+
attr_accessor :defaults
|
48
|
+
|
49
|
+
def mutable_attributes
|
50
|
+
[:defaults]
|
51
|
+
end
|
52
|
+
|
53
|
+
def prepare
|
54
|
+
reset
|
55
|
+
|
56
|
+
if block_given?
|
57
|
+
config = Config.new
|
58
|
+
yield(config)
|
59
|
+
arguments.concat(config.freeze.to_a)
|
60
|
+
end
|
61
|
+
|
62
|
+
arguments.freeze
|
63
|
+
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
# Arguments used by ``CLI`` (during execution/``run``)
|
68
|
+
#
|
69
|
+
# @return [Arguments]
|
70
|
+
def arguments
|
71
|
+
@arguments = defaults.clone if @arguments.to_a.size.zero?
|
72
|
+
|
73
|
+
if caller_locations(1..1).first.path == __FILE__
|
74
|
+
@arguments
|
75
|
+
else
|
76
|
+
@arguments.clone.freeze
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Denote runnable
|
81
|
+
#
|
82
|
+
# When last argument is ``--`` we suppose there is no files
|
83
|
+
#
|
84
|
+
# @return [Boolean]
|
85
|
+
def runnable?
|
86
|
+
'--' != arguments.last
|
87
|
+
end
|
88
|
+
|
89
|
+
# @raise [SystemExit]
|
90
|
+
# @return [self]
|
91
|
+
def run
|
92
|
+
prepare if arguments.to_a.empty?
|
93
|
+
|
94
|
+
if runnable?
|
95
|
+
with_exit_on_failure do
|
96
|
+
core.run(arguments.to_a).yield_self do |retcode|
|
97
|
+
self.retcode = retcode
|
98
|
+
reset
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
self
|
104
|
+
end
|
105
|
+
|
106
|
+
protected
|
107
|
+
|
108
|
+
attr_writer :arguments
|
109
|
+
|
110
|
+
def setup
|
111
|
+
@defaults = Arguments.new(@defaults.to_a)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Reset arguments + retcode
|
115
|
+
#
|
116
|
+
# @return [self]
|
117
|
+
def reset
|
118
|
+
@arguments = nil
|
119
|
+
self.retcode = nil if retcode.to_i.zero?
|
120
|
+
|
121
|
+
self
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [YARD::CLI::Yardoc]
|
125
|
+
def core
|
126
|
+
RuboCop::CLI.new
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
8
|
+
|
9
|
+
require_relative '../rubocop'
|
10
|
+
|
11
|
+
# Arguments
|
12
|
+
#
|
13
|
+
# Almost a basic ``Array``
|
14
|
+
class Kamaze::Project::Tools::Rubocop::Arguments < Array
|
15
|
+
# @return [Array<String>]
|
16
|
+
def to_a
|
17
|
+
super.map(&:to_s)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
8
|
+
|
9
|
+
require_relative '../rubocop'
|
10
|
+
|
11
|
+
# Config used during prepare method
|
12
|
+
#
|
13
|
+
# Config is defined by ``options`` and ``patterns``
|
14
|
+
class Kamaze::Project::Tools::Rubocop::Config
|
15
|
+
# Patterns used to match files
|
16
|
+
#
|
17
|
+
# @type [Array]
|
18
|
+
# @return [Array]
|
19
|
+
attr_accessor :patterns
|
20
|
+
|
21
|
+
# Command options
|
22
|
+
#
|
23
|
+
# @type [Array]
|
24
|
+
# @return [Array]
|
25
|
+
attr_accessor :options
|
26
|
+
|
27
|
+
# @return [Array<String>]
|
28
|
+
def to_a
|
29
|
+
filepaths = match_patterns(patterns)
|
30
|
+
|
31
|
+
self.options.to_a.clone.concat(['--'] + filepaths)
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
# Match against given patterns
|
37
|
+
#
|
38
|
+
# @param [Array<String>] patterns
|
39
|
+
# @return [Array<String>]
|
40
|
+
def match_patterns(patterns)
|
41
|
+
Dir.glob(patterns)
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
8
|
+
|
9
|
+
require_relative '../tools'
|
10
|
+
|
11
|
+
# Provide a REPL (based on ``Pry``)
|
12
|
+
class Kamaze::Project::Tools::Shell < Kamaze::Project::Tools::BaseTool
|
13
|
+
# REPL provider
|
14
|
+
#
|
15
|
+
# Allowing to replace ``Pry`` by ``IRB``, or any REPL
|
16
|
+
# class or instance responding to a `start`` method.
|
17
|
+
#
|
18
|
+
# @type [Pry|Class|Object]
|
19
|
+
attr_writer :provider
|
20
|
+
|
21
|
+
# Console used for outputs (``stderr`` and ``stdout``)
|
22
|
+
#
|
23
|
+
# @type [Kamaze::Project::Tools::Console]
|
24
|
+
attr_writer :console
|
25
|
+
|
26
|
+
# @type [String]
|
27
|
+
attr_writer :banner
|
28
|
+
|
29
|
+
# Get banner
|
30
|
+
#
|
31
|
+
# @return [String]
|
32
|
+
def banner
|
33
|
+
return @banner if @banner
|
34
|
+
|
35
|
+
patch = defined?(RUBY_PATCHLEVEL) ? "p#{RUBY_PATCHLEVEL}" : nil
|
36
|
+
# almost like RUBY_DESCRIPTION
|
37
|
+
descr = ["#{RUBY_ENGINE} #{RUBY_VERSION}#{patch}".rstrip,
|
38
|
+
"(#{RUBY_RELEASE_DATE})",
|
39
|
+
"[#{RUBY_PLATFORM}]"].join(' ')
|
40
|
+
|
41
|
+
"{{green:#{descr}}}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup
|
45
|
+
@console ||= Kamaze.project.tools.fetch(:console)
|
46
|
+
@provider ||= require_any(:pry) ? Pry : nil
|
47
|
+
@banner ||= nil
|
48
|
+
end
|
49
|
+
|
50
|
+
# Start REPL session
|
51
|
+
def start
|
52
|
+
require_any(:interesting_methods)
|
53
|
+
console.stdout.puts(banner)
|
54
|
+
provider.start
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
# Get console
|
60
|
+
#
|
61
|
+
# @return [Kamaze::Project::Tools::Console]
|
62
|
+
attr_reader :console
|
63
|
+
|
64
|
+
# Get provider
|
65
|
+
#
|
66
|
+
# @return [Pry|Class|Object]
|
67
|
+
attr_reader :provider
|
68
|
+
|
69
|
+
# Require any gem based on ``Gem::Specification``
|
70
|
+
#
|
71
|
+
# @param [String|Symbol] gem_name
|
72
|
+
# @param [String|Symbol] req_name
|
73
|
+
# @return [Boolean]
|
74
|
+
def require_any(gem_name, req_name = nil)
|
75
|
+
gem_name = gem_name.to_s
|
76
|
+
req_name ||= gem_name
|
77
|
+
spec = Gem::Specification
|
78
|
+
|
79
|
+
return false unless spec.find_all_by_name(gem_name).any?
|
80
|
+
|
81
|
+
require req_name
|
82
|
+
|
83
|
+
true
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (C) 2017-2018 Dimitri Arrigoni <dimitri@arrigoni.me>
|
4
|
+
# License GPLv3+: GNU GPL version 3 or later
|
5
|
+
# <http://www.gnu.org/licenses/gpl.html>.
|
6
|
+
# This is free software: you are free to change and redistribute it.
|
7
|
+
# There is NO WARRANTY, to the extent permitted by law.
|
8
|
+
|
9
|
+
require_relative '../tools'
|
10
|
+
require_relative 'base_tool'
|
11
|
+
require 'base64'
|
12
|
+
require 'pathname'
|
13
|
+
|
14
|
+
# rubocop:disable Style/Documentation
|
15
|
+
|
16
|
+
module Kamaze::Project::Tools
|
17
|
+
class Vagrant < BaseTool
|
18
|
+
end
|
19
|
+
|
20
|
+
[:composer, :shell, :writer, :remote].each do |req|
|
21
|
+
require_relative "vagrant/#{req}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# rubocop:enable Style/Documentation
|
26
|
+
|
27
|
+
# Vagrant based,
|
28
|
+
# this class provides a easy and ready to use wrapper around ``vagrant``
|
29
|
+
# executable. VM configuration is easyfied by the use of YAML files.
|
30
|
+
#
|
31
|
+
# VM configurations are stored in a single directory (default: ``vagrant``)
|
32
|
+
# and can be overriden by an ``.override.yml`` file.
|
33
|
+
# A ``Vagrantfile`` is generated upon configurations.
|
34
|
+
#
|
35
|
+
# Sample use in Rake task:
|
36
|
+
#
|
37
|
+
# ```ruby
|
38
|
+
# vagrant = project.tools.fetch(:vagrant)
|
39
|
+
#
|
40
|
+
# if vagrant.boxes? and vagrant.executable?
|
41
|
+
# file vagrant.vagrantfile => vagrant.sources do
|
42
|
+
# vagrant.install
|
43
|
+
# end
|
44
|
+
# end
|
45
|
+
# ```
|
46
|
+
#
|
47
|
+
# This class is almost a facade based on:
|
48
|
+
#
|
49
|
+
# * Composer
|
50
|
+
# * Writer
|
51
|
+
# * Shell
|
52
|
+
# * Remote
|
53
|
+
#
|
54
|
+
# @see http://yaml.org/YAML_for_ruby.html
|
55
|
+
# @see https://friendsofvagrant.github.io/v1/docs/boxes.html
|
56
|
+
class Kamaze::Project::Tools::Vagrant
|
57
|
+
# Template file (used for code generation)
|
58
|
+
#
|
59
|
+
# @return [String]
|
60
|
+
attr_accessor :template
|
61
|
+
|
62
|
+
# Absolute path to the vagrant executable
|
63
|
+
#
|
64
|
+
# @return [String|nil]
|
65
|
+
attr_accessor :executable
|
66
|
+
|
67
|
+
# Get path to actual ``Vagrantfile``
|
68
|
+
#
|
69
|
+
# @return [Pathname]
|
70
|
+
attr_accessor :vagrantfile
|
71
|
+
|
72
|
+
# Path to files describing boxes (directory)
|
73
|
+
#
|
74
|
+
# defaults to ``./vagrant``
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
attr_accessor :path
|
78
|
+
|
79
|
+
def mutable_attributes
|
80
|
+
[:path, :executable, :template, :vagrantfile]
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get working dir
|
84
|
+
#
|
85
|
+
# @return [Pathname]
|
86
|
+
def pwd
|
87
|
+
Pathname.new(Dir.pwd).realpath
|
88
|
+
end
|
89
|
+
|
90
|
+
# Denote ``vagrant`` executable is present
|
91
|
+
#
|
92
|
+
# @return [Boolean]
|
93
|
+
def executable?
|
94
|
+
shell.executable?
|
95
|
+
end
|
96
|
+
|
97
|
+
# Run the vagrant command with given ``args``.
|
98
|
+
#
|
99
|
+
# @see https://github.com/ruby/rake/blob/master/lib/rake/file_utils.rb
|
100
|
+
def execute(*args, &block)
|
101
|
+
shell.execute(*args, &block)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Run a command remotely on box identified by ``box_id``
|
105
|
+
#
|
106
|
+
# Sample of use:
|
107
|
+
#
|
108
|
+
# ```ruby
|
109
|
+
# vagrant.ssh('freebsd', 'rake clobber')
|
110
|
+
# ```
|
111
|
+
def ssh(*args, &block)
|
112
|
+
remote.execute(*args, &block)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Install a new Vagrantfile
|
116
|
+
#
|
117
|
+
# Vagrant file is installed with additionnal YAML file,
|
118
|
+
# defining ``boxes``
|
119
|
+
#
|
120
|
+
# @return [self]
|
121
|
+
def install
|
122
|
+
writer.write(boxes)
|
123
|
+
|
124
|
+
self
|
125
|
+
end
|
126
|
+
|
127
|
+
def method_missing(method, *args, &block)
|
128
|
+
if respond_to_missing?(method)
|
129
|
+
composer.public_send(method, *args, &block)
|
130
|
+
else
|
131
|
+
super
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def respond_to_missing?(method, include_private = false)
|
136
|
+
return true if composer.respond_to?(method, include_private)
|
137
|
+
|
138
|
+
super
|
139
|
+
end
|
140
|
+
|
141
|
+
protected
|
142
|
+
|
143
|
+
# Get composer, responsible to read and combine files describing boxes
|
144
|
+
#
|
145
|
+
# @return [Composer]
|
146
|
+
attr_reader :composer
|
147
|
+
|
148
|
+
# Get a shell, to execute ``vagrant`` commands
|
149
|
+
#
|
150
|
+
# @return [Shell]
|
151
|
+
attr_reader :shell
|
152
|
+
|
153
|
+
# Get writer, reponsible of ``Vagrantfile`` generation
|
154
|
+
#
|
155
|
+
# @return [Writer]
|
156
|
+
attr_reader :writer
|
157
|
+
|
158
|
+
def setup
|
159
|
+
@template ||= Pathname.new(__dir__).join('..', 'resources').to_s
|
160
|
+
@vagrantfile ||= ::Pathname.new(@vagrantfile || pwd.join('Vagrantfile'))
|
161
|
+
@executable ||= :vagrant
|
162
|
+
@path ||= pwd.join('vagrant').to_s
|
163
|
+
|
164
|
+
setup_compose
|
165
|
+
end
|
166
|
+
|
167
|
+
# Initialize most of the tools used internally
|
168
|
+
def setup_compose
|
169
|
+
@composer = Composer.new(@path)
|
170
|
+
@shell = Shell.new(executable: executable)
|
171
|
+
@writer = Writer.new(@template, vagrantfile)
|
172
|
+
|
173
|
+
self
|
174
|
+
end
|
175
|
+
|
176
|
+
# Get remote shell provider
|
177
|
+
#
|
178
|
+
# @return [Remote]
|
179
|
+
def remote
|
180
|
+
Remote.new(boxes, executable: executable)
|
181
|
+
end
|
182
|
+
end
|