rigit 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61bc7c4f474a82ed1c5a4c74696972482fbf5c583f0784cc842efeb6d74ffa63
4
- data.tar.gz: ac7e0abb56fc7877c35ca670264e2a0aebc63a87b5e055d5e79f17ae4738d8eb
3
+ metadata.gz: c64487a87ae7122b0d47a53d3843b374beb6d3ae12ccf0cf171d83d0f68075e8
4
+ data.tar.gz: ca486b20b6ba0ba9af18c1d10c3254b352a2598226995d6decdb785f86ff7ae5
5
5
  SHA512:
6
- metadata.gz: 6ae8b817dbdddfcfd36fad2b0b5a8ba7f9ba58e5a5cbc0cce261bde1645e01e83b1066c97c468ed3865718740bf0e8cc4c5aedd4a5992605a3434f46dfd55904
7
- data.tar.gz: f0622b36f6c9d8d5d75a4a4b4c67d1717f265ab8775dba8ff1e32b25e7b15d32b7b93e9294c682796bb979414f1fd4f1412c984a04305864733b5d07fe6d3ed9
6
+ metadata.gz: f3bff17c87022e3742de0fddc5e9616e63f5fc1c443751104db0c292fba7c3f4ff86b2c4793a8795c544a0660178144c0fa18ce96cfe95ac7f6fffef790874da
7
+ data.tar.gz: a976e1b1ae23a1c207964957725e05d2d00622f0b2d4407858d1d8e8fec92c048d3401b96001fec503da3f46fc238a4a052415f854f8becd294d2f8430b050b1
data/README.md CHANGED
@@ -28,9 +28,10 @@ Table of Contents
28
28
  * [Directory Structure](#directory-structure)
29
29
  * [Dynamic Tokens](#dynamic-tokens)
30
30
  * [Config File](#config-file)
31
- * [`intro`](#intro)
32
- * [`outro`](#outro)
33
- * [`params`](#params)
31
+ * [Example Config](#example-config)
32
+ * [Showing messages before/after scaffolding](#showing-messages-beforeafter-scaffolding)
33
+ * [Executing commands before/after scaffolding](#executing-commands-beforeafter-scaffolding)
34
+ * [Scaffolding parameters](#scaffolding-parameters)
34
35
 
35
36
 
36
37
  Installation
@@ -61,6 +62,7 @@ Usage
61
62
  ```
62
63
  $ rig
63
64
  Usage:
65
+ rig new NAME
64
66
  rig build RIG [--force] [PARAMS...]
65
67
  rig install RIG REPO
66
68
  rig uninstall RIG
@@ -129,7 +131,7 @@ Most rigs will have parameters, you will be prompted to input them as needed.
129
131
  You can also provide some (or all) of the parameters in the command line,
130
132
  if you need to avoid interactivity.
131
133
 
132
- $ rig build example name=myapp spec=y console=irb license=MIT
134
+ $ rig build example name=myapp spec=yes console=irb license=MIT
133
135
 
134
136
  To learn about the parameters of a rig:
135
137
 
@@ -159,6 +161,10 @@ The steps in creating a rig are:
159
161
  a folder with s special `parameter=value` folder.
160
162
  5. Create a config file to specify the needed parameters.
161
163
 
164
+ In order to quickly get started with creating a new rig, you can also run
165
+ `rig new your_new_rig_name`. This will create the initial folder structure
166
+ and an initial `config.yml` for you to build on.
167
+
162
168
 
163
169
  ### Directory Structure
164
170
 
@@ -192,19 +198,36 @@ Tokens are specified using this syntax:
192
198
 
193
199
  %{name}
194
200
 
201
+ If you are using the
202
+ [`before` and `after`](#showing-messages-beforeafter-scaffolding)
203
+ definitions in your config file, you can use dynamic tokens in both the
204
+ label and the command of each definition.
205
+
195
206
 
196
207
  ### Config File
197
208
 
198
209
  Place a `config.yml` file at the root of your rig template. A config file
199
210
  is optional for rigs that do not have any variables.
200
211
 
201
- A typical config file looks like this:
212
+
213
+ #### Example Config
214
+
215
+ The below config file example contains all the available options:
202
216
 
203
217
  ```yaml
218
+ # Optional messages to show before/after scaffolding
204
219
  intro: A sample generator
205
-
206
220
  outro: Something to say after scaffolding is done
207
221
 
222
+ # Optional commands to execute before/after scaffolding
223
+ before:
224
+ "Create empty .env file": "touch .env"
225
+
226
+ after:
227
+ "Install Dependencies": "bundle install"
228
+ "Initialize git repo": "git init"
229
+
230
+ # Parameters to collect on scaffolding
208
231
  params:
209
232
  name:
210
233
  prompt: "Name your project:"
@@ -222,29 +245,43 @@ params:
222
245
  list: [irb, pry]
223
246
  ```
224
247
 
225
- #### `intro`
248
+ #### Showing messages before/after scaffolding
226
249
 
227
- A short optional message to display before building.
250
+ Use the `intro` and `outro` options to show short message that will be
251
+ displayed before or after building. Both are optional.
228
252
 
229
- This string is displayed using the [Colsole][colsole] gem, so
253
+ The message is displayed using the [Colsole][colsole] gem, so
230
254
  you can use [color markers][colsole-colors]
231
255
 
232
- Example: `intro: Welcome to my blue !txtblu!rig!txtrst!`
256
+ Example:
233
257
 
258
+ ```yaml
259
+ intro: Welcome to my blue !txtblu!rig!txtrst!`
260
+ outro: Installation completed successfully
261
+ ```
234
262
 
235
- #### `outro`
263
+ #### Executing commands before/after scaffolding
236
264
 
237
- A short optional message to display after building.
265
+ Use the `before` and `after` options to specify one or more commands to
266
+ run before or after building. Each command has a label and an action, and
267
+ both support [dynamic tokens](#dynamic-tokens), so you can use the input the user provided in
268
+ your commands.
238
269
 
239
- This string is displayed using the [Colsole][colsole] gem, so
240
- you can use [color markers][colsole-colors]
270
+ Example:
241
271
 
242
- Example: `outro: "!txtgrn!Thank you!txtrst!\nGoodbye."`
272
+ ```yaml
273
+ before:
274
+ "Create empty .env file": "touch .env"
243
275
 
276
+ after:
277
+ "Install Dependencies": "bundle install"
278
+ "Initialize git repo": "git init"
279
+ "Run setup script": "myscript %{name}"
280
+ ```
244
281
 
245
- #### `params`
282
+ #### Scaffolding parameters
246
283
 
247
- A list of parameters required by the rig.
284
+ The `params` option contains a list of parameters required by the rig.
248
285
 
249
286
  Each definition in the `params` key should start with the name of the
250
287
  variable (`name`, `spec` and `console` in the above example), and contain
@@ -257,6 +294,16 @@ the below specifications:
257
294
  | `default` | The default value. When using `yesno`, use `yes` or `no` |
258
295
  | `list` | An array of allowed options (only used in `select` type) |
259
296
 
297
+ Example:
298
+
299
+ ```yaml
300
+ params:
301
+ name:
302
+ prompt: "Name your project:"
303
+ type: text
304
+ default: project
305
+ ```
306
+
260
307
  ---
261
308
 
262
309
  [example-rig]: https://github.com/DannyBen/example-rig
@@ -10,13 +10,14 @@ require 'rigit/commands/install'
10
10
  require 'rigit/commands/list'
11
11
  require 'rigit/commands/uninstall'
12
12
  require 'rigit/commands/update'
13
+ require 'rigit/commands/new_rig'
13
14
 
14
15
  module Rigit
15
16
  # Handles command line execution using docopt.
16
17
  class CommandLine < SuperDocopt::Base
17
18
  version VERSION
18
19
  docopt File.expand_path 'docopt.txt', __dir__
19
- subcommands [:build, :install, :uninstall, :update, :info, :list]
20
+ subcommands [:build, :install, :uninstall, :update, :info, :list, new: :new_rig]
20
21
 
21
22
  include Commands::Build
22
23
  include Commands::Install
@@ -24,5 +25,6 @@ module Rigit
24
25
  include Commands::Update
25
26
  include Commands::Info
26
27
  include Commands::List
28
+ include Commands::NewRig
27
29
  end
28
30
  end
@@ -38,9 +38,23 @@ module Rigit::Commands
38
38
  # Call Rig#scaffold while checking each file to see if it should be
39
39
  # overwritten or not.
40
40
  def scaffold(arguments)
41
+ execute_actions config.before, arguments if config.has_key? :before
42
+
41
43
  rig.scaffold arguments: arguments, target_dir: target_dir do |file|
42
44
  overwrite_file? file
43
45
  end
46
+
47
+ execute_actions config.after, arguments if config.has_key? :after
48
+ end
49
+
50
+ # Execute user-defined system commands.
51
+ # Actions are expected to be provided as a hash (label=command) and
52
+ # both labels and commands accept string interpolation +%{tokens}+
53
+ def execute_actions(actions, arguments)
54
+ actions.each do |label, command|
55
+ say "!txtgrn!#{label}" % arguments
56
+ system command % arguments
57
+ end
44
58
  end
45
59
 
46
60
  # Check various scenarios to decide if the file should be overwritten
@@ -69,7 +83,7 @@ module Rigit::Commands
69
83
 
70
84
  def prompt_user_to_overwrite(file)
71
85
  say "File !txtgrn!#{file}!txtrst! already exists."
72
- tty_prompt.expand "Overwrite?" do |menu|
86
+ tty_prompt.expand " Overwrite?" do |menu|
73
87
  menu.choice key: 'y', name: 'overwrite', value: true
74
88
  menu.choice key: 'n', name: 'skip', value: false
75
89
  menu.choice key: 'a', name: 'overwrite all' do @overwrite_all = true; true end
@@ -0,0 +1,43 @@
1
+ module Rigit::Commands
2
+ # The {NewRIg} module provides the {#new_rig} command for the {CommandLine}
3
+ # module.
4
+ module NewRig
5
+
6
+ # The command line +new+ command.
7
+ def new_rig
8
+ NewRigHandler.new(args).execute
9
+ end
10
+
11
+ # Internal class to handle the creation of a new rig template for the
12
+ # {CommandLine} class.
13
+ class NewRigHandler
14
+ include Colsole
15
+
16
+ attr_reader :args, :name
17
+
18
+ def initialize(args)
19
+ @args = args
20
+ @name = args['NAME']
21
+ end
22
+
23
+ def execute
24
+ verify_presence
25
+ Rigit::Rig.create name
26
+ say "Rig template created in !txtgrn!#{rig.path}"
27
+ end
28
+
29
+ private
30
+
31
+ def rig
32
+ @rig ||= Rigit::Rig.new name
33
+ end
34
+
35
+ def verify_presence
36
+ if rig.exist?
37
+ say "Rig !txtgrn!#{name}!txtrst! already exists, choose a different name"
38
+ raise Rigit::Exit
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,6 +1,7 @@
1
1
  Rigit
2
2
 
3
3
  Usage:
4
+ rig new NAME
4
5
  rig build RIG [--force] [PARAMS...]
5
6
  rig install RIG REPO
6
7
  rig uninstall RIG
@@ -10,6 +11,9 @@ Usage:
10
11
  rig (-h|--help|--version)
11
12
 
12
13
  Commands:
14
+ new
15
+ Create a new rig template.
16
+
13
17
  build
14
18
  Create a new project based on one of the installed rig templates.
15
19
  This command should be executed in an empty directory.
@@ -34,6 +38,9 @@ Commands:
34
38
  of subfolders (possibly rigs) inside it.
35
39
 
36
40
  Parameters:
41
+ NAME
42
+ The name of the new rig template.
43
+
37
44
  RIG
38
45
  The name of the source folder (installed rig).
39
46
 
@@ -69,4 +76,5 @@ Examples:
69
76
  rig update example
70
77
  rig info example
71
78
  rig list
79
+ rig new myrig
72
80
 
@@ -15,6 +15,15 @@ module Rigit
15
15
  ENV['RIG_HOME'] = path
16
16
  end
17
17
 
18
+ # Create a new empty rig with a basic config file as a starting point.
19
+ def self.create(name)
20
+ target_dir = "#{home}/#{name}"
21
+ template_file = File.expand_path 'template_config.yml', __dir__
22
+
23
+ FileUtils.mkdir_p "#{target_dir}/base"
24
+ FileUtils.cp template_file, "#{target_dir}/config.yml"
25
+ end
26
+
18
27
  # Returns a new instance of Rig. The +name+ argument should be the name
19
28
  # of an existing (installed) rig.
20
29
  def initialize(name)
@@ -0,0 +1,21 @@
1
+ intro: Optional intro message
2
+
3
+ outro: Optional outro message
4
+
5
+ params:
6
+ name:
7
+ prompt: "Name your project:"
8
+ type: text
9
+ default: project
10
+
11
+ # More parameter examples
12
+
13
+ # spec:
14
+ # prompt: Include RSpec files?
15
+ # type: yesno
16
+ # default: yes
17
+
18
+ # console:
19
+ # prompt: "Select console:"
20
+ # type: select
21
+ # list: [irb, pry]
@@ -1,3 +1,3 @@
1
1
  module Rigit
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
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
4
+ version: 0.1.5
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-03-08 00:00:00.000000000 Z
11
+ date: 2018-03-09 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/new_rig.rb
210
211
  - lib/rigit/commands/uninstall.rb
211
212
  - lib/rigit/commands/update.rb
212
213
  - lib/rigit/config.rb
@@ -216,6 +217,7 @@ files:
216
217
  - lib/rigit/git.rb
217
218
  - lib/rigit/prompt.rb
218
219
  - lib/rigit/rig.rb
220
+ - lib/rigit/template_config.yml
219
221
  - lib/rigit/version.rb
220
222
  homepage: https://dannyben.github.io/rigit/
221
223
  licenses: