rigit 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -0
- data/bin/rig +4 -1
- data/lib/rigit/command_line.rb +7 -1
- data/lib/rigit/commands/build.rb +5 -2
- data/lib/rigit/commands/info.rb +6 -2
- data/lib/rigit/commands/install.rb +5 -4
- data/lib/rigit/commands/list.rb +6 -2
- data/lib/rigit/commands/uninstall.rb +67 -0
- data/lib/rigit/commands/update.rb +0 -2
- data/lib/rigit/config.rb +6 -0
- data/lib/rigit/docopt.txt +5 -0
- data/lib/rigit/errors.rb +10 -0
- data/lib/rigit/git.rb +3 -0
- data/lib/rigit/prompt.rb +7 -0
- data/lib/rigit/rig.rb +20 -1
- data/lib/rigit/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 587a5ce7b7cc4f78aed7b500eebc77d6a8cde3f0203dd662473bda17b6fd2dd4
|
4
|
+
data.tar.gz: 21317d234a17a214cc14cd4909916b91912beb4da5e72f99bf62becd8d7fd6c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1589fb24b1c56af3bd893c381466bdc59bd81e946b4108554b0b3faca4e5f3f05057cd73de3cd36b5a1c0813bbca50363360496c3f11ae7918006360c18ae609
|
7
|
+
data.tar.gz: 86969745861ee54ec697c5429bd0523dffd21f07f89651cc1b01bb1c76fded36486544e009bac3bdfa51d75b0bd88c0cae41cb04c31f7db05d3dc25571e775e9
|
data/README.md
CHANGED
@@ -61,6 +61,7 @@ $ rig
|
|
61
61
|
Usage:
|
62
62
|
rig build RIG [PARAMS...]
|
63
63
|
rig install RIG REPO
|
64
|
+
rig uninstall RIG
|
64
65
|
rig update RIG
|
65
66
|
rig info RIG
|
66
67
|
rig list [SUBFOLDER]
|
@@ -165,6 +166,18 @@ There are two types of folders in a rig template.
|
|
165
166
|
2. Conditional folders (`parameter=value`) - contents in these folders will
|
166
167
|
only be copied if the user answerd `value` to the question `parameter`.
|
167
168
|
|
169
|
+
A typical rig folder looks like this:
|
170
|
+
|
171
|
+
myrig
|
172
|
+
|-- base
|
173
|
+
| |-- files
|
174
|
+
| `-- and-folders
|
175
|
+
|-- param=y
|
176
|
+
| |-- files
|
177
|
+
| `-- and-folders
|
178
|
+
|-- param=n
|
179
|
+
`-- config.yml
|
180
|
+
|
168
181
|
|
169
182
|
### Dynamic Tokens
|
170
183
|
|
data/bin/rig
CHANGED
@@ -10,8 +10,11 @@ rescue Rigit::Exit => e
|
|
10
10
|
say message unless message == 'Rigit::Exit'
|
11
11
|
exit 1
|
12
12
|
rescue Rigit::ConfigError => e
|
13
|
-
say "
|
13
|
+
say "!txtred!#{e.class} - #{e.message}"
|
14
14
|
exit 1
|
15
|
+
rescue Rigit::TemplateError => e
|
16
|
+
say "!txtred!#{e.class} - #{e.message}!txtrst!\nin !txtgrn!#{e.file}!txtrst!"
|
17
|
+
say "Are you escaping % characters as %%?" if e.message =~ /%/
|
15
18
|
rescue TTY::Reader::InputInterrupt
|
16
19
|
say "\nGoodbye"
|
17
20
|
exit 1
|
data/lib/rigit/command_line.rb
CHANGED
@@ -1,20 +1,26 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'colsole'
|
1
3
|
require 'super_docopt'
|
4
|
+
|
2
5
|
require 'rigit/version'
|
3
6
|
|
4
7
|
require 'rigit/commands/build'
|
5
8
|
require 'rigit/commands/info'
|
6
9
|
require 'rigit/commands/install'
|
7
10
|
require 'rigit/commands/list'
|
11
|
+
require 'rigit/commands/uninstall'
|
8
12
|
require 'rigit/commands/update'
|
9
13
|
|
10
14
|
module Rigit
|
15
|
+
# Handles command line execution using docopt.
|
11
16
|
class CommandLine < SuperDocopt::Base
|
12
17
|
version VERSION
|
13
18
|
docopt File.expand_path 'docopt.txt', __dir__
|
14
|
-
subcommands [:build, :install, :update, :info, :list]
|
19
|
+
subcommands [:build, :install, :uninstall, :update, :info, :list]
|
15
20
|
|
16
21
|
include Commands::Build
|
17
22
|
include Commands::Install
|
23
|
+
include Commands::Uninstall
|
18
24
|
include Commands::Update
|
19
25
|
include Commands::Info
|
20
26
|
include Commands::List
|
data/lib/rigit/commands/build.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
-
require 'colsole'
|
2
|
-
|
3
1
|
module Rigit::Commands
|
2
|
+
# The {Build} module provides the {#build} command for the {CommandLine}
|
3
|
+
# module.
|
4
4
|
module Build
|
5
|
+
|
6
|
+
# The command line +build+ command.
|
5
7
|
def build
|
6
8
|
BuildHandler.new(args).execute
|
7
9
|
end
|
8
10
|
|
11
|
+
# Internal class to handle scaffolding for the {CommandLine} class.
|
9
12
|
class BuildHandler
|
10
13
|
attr_reader :args, :rig_name, :target_dir
|
11
14
|
|
data/lib/rigit/commands/info.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
require 'colsole'
|
2
|
-
|
3
1
|
module Rigit::Commands
|
2
|
+
# The {Info} module provides the {#info} command for the {CommandLine}
|
3
|
+
# module.
|
4
4
|
module Info
|
5
|
+
|
6
|
+
# The command line +info+ command.
|
5
7
|
def info
|
6
8
|
InfoHandler.new(args).execute
|
7
9
|
end
|
8
10
|
|
11
|
+
# Internal class to handle the display of metadata about a rig for the
|
12
|
+
# {CommandLine} class.
|
9
13
|
class InfoHandler
|
10
14
|
include Colsole
|
11
15
|
|
@@ -1,12 +1,13 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'colsole'
|
3
|
-
|
4
1
|
module Rigit::Commands
|
2
|
+
# The {Install} module provides the {#install} command for the
|
3
|
+
# {CommandLine} module.
|
5
4
|
module Install
|
5
|
+
# The command line +install+ command.
|
6
6
|
def install
|
7
7
|
InstallHandler.new(args).execute
|
8
8
|
end
|
9
9
|
|
10
|
+
# Internal class to handle rig installation for the {CommandLine} class.
|
10
11
|
class InstallHandler
|
11
12
|
include Colsole
|
12
13
|
|
@@ -36,7 +37,7 @@ module Rigit::Commands
|
|
36
37
|
say " !txtpur!rig build #{rig_name}\n"
|
37
38
|
else
|
38
39
|
# :nocov:
|
39
|
-
say "!txtred!
|
40
|
+
say "!txtred!Install failed"
|
40
41
|
# :nocov:
|
41
42
|
end
|
42
43
|
|
data/lib/rigit/commands/list.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
require 'colsole'
|
2
|
-
|
3
1
|
module Rigit::Commands
|
2
|
+
# The {List} module provides the {#list} command for the {CommandLine}
|
3
|
+
# module.
|
4
4
|
module List
|
5
|
+
|
6
|
+
# The command line +list+ command.
|
5
7
|
def list
|
6
8
|
ListHandler.new(args).execute
|
7
9
|
end
|
8
10
|
|
11
|
+
# Internal class to handle listing of available rigs for the
|
12
|
+
# {CommandLine} class.
|
9
13
|
class ListHandler
|
10
14
|
include Colsole
|
11
15
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Rigit::Commands
|
2
|
+
# The {Uninstall} module provides the {#uninstall} command for the
|
3
|
+
# {CommandLine} module.
|
4
|
+
module Uninstall
|
5
|
+
# The command line +uninstall+ command.
|
6
|
+
def uninstall
|
7
|
+
UninstallHandler.new(args).execute
|
8
|
+
end
|
9
|
+
|
10
|
+
# Internal class to handle rig removal for the {CommandLine} class.
|
11
|
+
class UninstallHandler
|
12
|
+
include Colsole
|
13
|
+
|
14
|
+
attr_reader :args, :rig_name
|
15
|
+
|
16
|
+
def initialize(args)
|
17
|
+
@args = args
|
18
|
+
@rig_name = args['RIG']
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute
|
22
|
+
verify_dirs
|
23
|
+
uninstall
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def uninstall
|
29
|
+
say "This will remove !txtgrn!#{rig_name}!txtrst! and delete\n#{target_path}"
|
30
|
+
continue = tty_prompt.yes? "Continue?", default: false
|
31
|
+
uninstall! if continue
|
32
|
+
end
|
33
|
+
|
34
|
+
def uninstall!
|
35
|
+
say "Uninstalling !txtgrn!#{rig_name}"
|
36
|
+
success = FileUtils.rm_rf target_path
|
37
|
+
|
38
|
+
if success
|
39
|
+
say "Rig uninstalled !txtgrn!successfully"
|
40
|
+
else
|
41
|
+
# :nocov:
|
42
|
+
say "!txtred!Uninstall failed"
|
43
|
+
# :nocov:
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def rig
|
48
|
+
@rig ||= Rigit::Rig.new rig_name
|
49
|
+
end
|
50
|
+
|
51
|
+
def target_path
|
52
|
+
@target_path ||= rig.path
|
53
|
+
end
|
54
|
+
|
55
|
+
def tty_prompt
|
56
|
+
@tty_prompt ||= TTY::Prompt.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def verify_dirs
|
60
|
+
if !rig.exist?
|
61
|
+
say "Rig !txtgrn!#{rig_name}!txtrst! is not installed"
|
62
|
+
raise Rigit::Exit
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/rigit/config.rb
CHANGED
@@ -2,9 +2,15 @@ require 'configatron/core'
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
module Rigit
|
5
|
+
# Handles the rig config file.
|
6
|
+
# Usage example:
|
7
|
+
#
|
8
|
+
# Config.load 'path/to.yml'
|
9
|
+
#
|
5
10
|
class Config
|
6
11
|
attr_reader :path
|
7
12
|
|
13
|
+
# Returns a new +configatron+ instance, after loading from a YAML file.
|
8
14
|
def self.load(path)
|
9
15
|
new(path).settings
|
10
16
|
end
|
data/lib/rigit/docopt.txt
CHANGED
@@ -3,6 +3,7 @@ Rigit
|
|
3
3
|
Usage:
|
4
4
|
rig build RIG [PARAMS...]
|
5
5
|
rig install RIG REPO
|
6
|
+
rig uninstall RIG
|
6
7
|
rig update RIG
|
7
8
|
rig info RIG
|
8
9
|
rig list [SUBFOLDER]
|
@@ -19,6 +20,9 @@ Commands:
|
|
19
20
|
install
|
20
21
|
Clone a remote rig git repository and install it locally.
|
21
22
|
|
23
|
+
uninstall
|
24
|
+
Remove an installed rig.
|
25
|
+
|
22
26
|
update
|
23
27
|
Update an installed rig to its latest version.
|
24
28
|
|
@@ -51,6 +55,7 @@ Environment Variables:
|
|
51
55
|
Examples:
|
52
56
|
rig build gem name=mygem spec=y
|
53
57
|
rig install example https://github.com/DannyBen/example-rig.git
|
58
|
+
rig uninstall example
|
54
59
|
rig update example
|
55
60
|
rig info example
|
56
61
|
rig list
|
data/lib/rigit/errors.rb
CHANGED
data/lib/rigit/git.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module Rigit
|
2
|
+
# A utility class that handles all +git+ operations.
|
2
3
|
class Git
|
4
|
+
# Clones a git repo.
|
3
5
|
def self.clone(repo, target_path)
|
4
6
|
execute %Q[git clone #{repo} "#{target_path}"]
|
5
7
|
end
|
6
8
|
|
9
|
+
# Pulls a git repo.
|
7
10
|
def self.pull(target_path)
|
8
11
|
Dir.chdir target_path do
|
9
12
|
execute %Q[git pull]
|
data/lib/rigit/prompt.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'tty-prompt'
|
2
2
|
|
3
3
|
module Rigit
|
4
|
+
# Handles prompt request for user input in batch.
|
5
|
+
# This is a wrapper around +TTY::Prompt+ that gets all the params (typically
|
6
|
+
# from the rig config file), and asks the user for input one by one, while
|
7
|
+
# considering prefilled values.
|
4
8
|
class Prompt
|
5
9
|
attr_reader :params
|
6
10
|
|
@@ -8,6 +12,9 @@ module Rigit
|
|
8
12
|
@params = params
|
9
13
|
end
|
10
14
|
|
15
|
+
# Asks the user for input. If a +prefill+ hash is provided, it will be
|
16
|
+
# used for values, and skip asking the user to provide answers for the
|
17
|
+
# ones that are prefilled.
|
11
18
|
def get_input(prefill={})
|
12
19
|
result = {}
|
13
20
|
params.each do |key, spec|
|
data/lib/rigit/rig.rb
CHANGED
@@ -1,19 +1,27 @@
|
|
1
1
|
module Rigit
|
2
|
+
# Handles "rigging" (scaffolding) of new projects from template rigs.
|
2
3
|
class Rig
|
3
4
|
attr_reader :name
|
4
5
|
|
6
|
+
# Returns the root path for all rigs. By default, it will be +~/.rigs+
|
7
|
+
# unless the +RIG_HOME+ environment variable is set.
|
5
8
|
def self.home
|
6
9
|
ENV['RIG_HOME'] ||= File.expand_path('.rigs', Dir.home)
|
7
10
|
end
|
8
11
|
|
12
|
+
# Sets the +RIG_HOME+ environment variable, and the new root path for
|
13
|
+
# rigs.
|
9
14
|
def self.home=(path)
|
10
15
|
ENV['RIG_HOME'] = path
|
11
16
|
end
|
12
17
|
|
18
|
+
# Returns a new instance of Rig. The +name+ argument should be the name
|
19
|
+
# of an existing (installed) rig.
|
13
20
|
def initialize(name)
|
14
21
|
@name = name
|
15
22
|
end
|
16
23
|
|
24
|
+
# Builds the project from the template rig.
|
17
25
|
def scaffold(arguments: {}, target_dir:'.', &block)
|
18
26
|
scaffold_dir dir: "#{path}/base", arguments: arguments,
|
19
27
|
target_dir: target_dir, &block
|
@@ -27,26 +35,32 @@ module Rigit
|
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
38
|
+
# Returns the full path to the rig template.
|
30
39
|
def path
|
31
40
|
"#{Rig.home}/#{name}"
|
32
41
|
end
|
33
42
|
|
43
|
+
# Returns true if the rig path exists.
|
34
44
|
def exist?
|
35
45
|
Dir.exist? path
|
36
46
|
end
|
37
47
|
|
48
|
+
# Returns true if the rig has a +config.yml+ file.
|
38
49
|
def has_config?
|
39
50
|
File.exist? config_file
|
40
51
|
end
|
41
52
|
|
53
|
+
# Returns the path to the +config.yml+ file of the rig.
|
42
54
|
def config_file
|
43
55
|
"#{path}/config.yml"
|
44
56
|
end
|
45
57
|
|
58
|
+
# Returns a +configatron+ instance.
|
46
59
|
def config
|
47
60
|
@config ||= Config.load(config_file)
|
48
61
|
end
|
49
62
|
|
63
|
+
# Returns metadata about the rig, including all of its config values.
|
50
64
|
def info
|
51
65
|
{
|
52
66
|
name: name,
|
@@ -65,7 +79,12 @@ module Rigit
|
|
65
79
|
|
66
80
|
next if block_given? and !yield target_file
|
67
81
|
|
68
|
-
|
82
|
+
begin
|
83
|
+
content = File.read(file) % arguments
|
84
|
+
rescue ArgumentError => e
|
85
|
+
raise TemplateError.new file, e.message
|
86
|
+
end
|
87
|
+
|
69
88
|
File.deep_write target_file, content
|
70
89
|
end
|
71
90
|
end
|
data/lib/rigit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rigit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: super_docopt
|
@@ -207,6 +207,7 @@ files:
|
|
207
207
|
- lib/rigit/commands/info.rb
|
208
208
|
- lib/rigit/commands/install.rb
|
209
209
|
- lib/rigit/commands/list.rb
|
210
|
+
- lib/rigit/commands/uninstall.rb
|
210
211
|
- lib/rigit/commands/update.rb
|
211
212
|
- lib/rigit/config.rb
|
212
213
|
- lib/rigit/docopt.txt
|
@@ -216,7 +217,7 @@ files:
|
|
216
217
|
- lib/rigit/prompt.rb
|
217
218
|
- lib/rigit/rig.rb
|
218
219
|
- lib/rigit/version.rb
|
219
|
-
homepage: https://github.
|
220
|
+
homepage: https://dannyben.github.io/rigit/
|
220
221
|
licenses:
|
221
222
|
- MIT
|
222
223
|
metadata: {}
|
@@ -236,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
237
|
version: '0'
|
237
238
|
requirements: []
|
238
239
|
rubyforge_project:
|
239
|
-
rubygems_version: 2.7.
|
240
|
+
rubygems_version: 2.7.6
|
240
241
|
signing_key:
|
241
242
|
specification_version: 4
|
242
243
|
summary: Zero-coding project scaffolding
|