runfile 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/runfile/docopt_helper.rb +39 -15
- data/lib/runfile/dsl.rb +2 -2
- data/lib/runfile/runfile_helper.rb +15 -10
- data/lib/runfile/runner.rb +13 -9
- data/lib/runfile/util.rb +1 -1
- data/lib/runfile/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b3f76f9bd21810f1bcec6852443b345ed34b96b
|
4
|
+
data.tar.gz: e0a618c50953691f9c4e8e03d6a07d889406b2c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73b60741536a682d32c26c96276694f7d0dcfc23110c1b4c410d7647186613e064311b4c22cca3c8d5522c856b98b54d4b51f90f6728f89686e26b299377a07a
|
7
|
+
data.tar.gz: 2f586193dc34d876851a36d5510ff5fb69ca826e650f3b21a7aa2ea738346fe91cb0ffc2ce899e6232b7a9f1974be1bbfad8b79a3cf0c9be9f670edd9e3bcf0b
|
data/README.md
CHANGED
@@ -3,6 +3,8 @@ Runfile - If Rake and Docopt had a baby
|
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/runfile.svg)](http://badge.fury.io/rb/runfile)
|
5
5
|
[![Build Status](https://travis-ci.org/DannyBen/runfile.svg?branch=master)](https://travis-ci.org/DannyBen/runfile)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/DannyBen/runfile/badges/gpa.svg)](https://codeclimate.com/github/DannyBen/runfile)
|
7
|
+
[![Gem](https://img.shields.io/gem/dt/runfile.svg)](https://rubygems.org/gems/runfile)
|
6
8
|
|
7
9
|
A beautiful command line application framework.
|
8
10
|
Rake-inspired, Docopt inside.
|
@@ -25,34 +25,58 @@ module Runfile
|
|
25
25
|
# and options we have collected from the Runfile DSL.
|
26
26
|
def docopt
|
27
27
|
width, height = detect_terminal_size
|
28
|
-
doc = "#{@name} #{@version}
|
29
|
-
doc
|
30
|
-
doc +=
|
28
|
+
doc = ["#{@name} #{@version}"]
|
29
|
+
doc << "#{@summary}" if @summary
|
30
|
+
doc += docopt_usage
|
31
|
+
doc += docopt_commands width
|
32
|
+
doc += docopt_options width
|
33
|
+
doc.join "\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return all docopt lines for the 'Usage' section
|
37
|
+
def docopt_usage
|
38
|
+
doc = ["\nUsage:"];
|
31
39
|
@actions.each do |name, action|
|
32
|
-
doc
|
40
|
+
doc << " run #{action.usage}" unless action.usage == false
|
33
41
|
end
|
34
|
-
doc
|
42
|
+
doc << " run ( -h | --help | --version )\n"
|
43
|
+
doc
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return all docopt lines for the 'Commands' section
|
47
|
+
def docopt_commands(width)
|
48
|
+
doc = []
|
35
49
|
caption_printed = false
|
36
50
|
@actions.each do |name, action|
|
37
51
|
action.help or next
|
38
|
-
doc
|
52
|
+
doc << "Commands:" unless caption_printed
|
39
53
|
caption_printed = true
|
40
54
|
helpline = " #{action.help}"
|
41
55
|
wrapped = word_wrap helpline, width
|
42
|
-
doc
|
56
|
+
doc << " #{action.usage}\n#{wrapped}\n" unless action.usage == false
|
43
57
|
end
|
44
|
-
doc
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
58
|
+
doc
|
59
|
+
end
|
60
|
+
|
61
|
+
# Return all docopt lines for the various 'Options' sections
|
62
|
+
def docopt_options(width)
|
63
|
+
@options['Options'] = {} unless @options['Options']
|
64
|
+
@options['Options']['-h --help'] = 'Show this screen'
|
65
|
+
@options['Options']['--version'] = 'Show version number'
|
66
|
+
|
67
|
+
doc = []
|
68
|
+
@options.each do |scope, values|
|
69
|
+
doc << "#{scope}:"
|
70
|
+
values.each do |flag, text|
|
71
|
+
helpline = " #{text}"
|
72
|
+
wrapped = word_wrap helpline, width
|
73
|
+
doc << " #{flag}\n#{wrapped}\n"
|
74
|
+
end
|
51
75
|
end
|
52
76
|
doc
|
53
77
|
end
|
54
78
|
|
55
|
-
#
|
79
|
+
# Call the docopt handler, which will either return a parsed
|
56
80
|
# arguments list, or halt execution and show usage.
|
57
81
|
def args(argv)
|
58
82
|
Docopt::docopt(docopt, version: @version, argv:argv)
|
data/lib/runfile/dsl.rb
CHANGED
@@ -30,8 +30,8 @@ module Runfile
|
|
30
30
|
|
31
31
|
# Add an option/flag to the next action (can be called multiple
|
32
32
|
# times)
|
33
|
-
def option(flag, text)
|
34
|
-
Runner.instance.add_option flag, text
|
33
|
+
def option(flag, text, scope=nil)
|
34
|
+
Runner.instance.add_option flag, text, scope
|
35
35
|
end
|
36
36
|
|
37
37
|
# Define the action
|
@@ -72,16 +72,7 @@ module Runfile
|
|
72
72
|
say "\n!txtred!Runfile not found."
|
73
73
|
else
|
74
74
|
say ""
|
75
|
-
|
76
|
-
width, height = detect_terminal_size
|
77
|
-
runfiles.each do |f|
|
78
|
-
f[/([^\/]+).runfile$/]
|
79
|
-
command = "run #{$1}"
|
80
|
-
spacer_size = width - max - command.size - 6
|
81
|
-
spacer_size = [1, spacer_size].max
|
82
|
-
spacer = '.' * spacer_size
|
83
|
-
say " !txtgrn!#{command}!txtrst! #{spacer} #{f}"
|
84
|
-
end
|
75
|
+
say_runfile_list runfiles
|
85
76
|
end
|
86
77
|
end
|
87
78
|
|
@@ -92,5 +83,19 @@ module Runfile
|
|
92
83
|
dirs
|
93
84
|
end
|
94
85
|
|
86
|
+
# Output the list of available runfiles
|
87
|
+
def say_runfile_list(runfiles)
|
88
|
+
max = runfiles.max_by(&:length).size
|
89
|
+
width, height = detect_terminal_size
|
90
|
+
runfiles.each do |f|
|
91
|
+
f[/([^\/]+).runfile$/]
|
92
|
+
command = "run #{$1}"
|
93
|
+
spacer_size = width - max - command.size - 6
|
94
|
+
spacer_size = [1, spacer_size].max
|
95
|
+
spacer = '.' * spacer_size
|
96
|
+
say " !txtgrn!#{command}!txtrst! #{spacer} #{f}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
95
100
|
end
|
96
101
|
end
|
data/lib/runfile/runner.rb
CHANGED
@@ -48,22 +48,22 @@ module Runfile
|
|
48
48
|
# usage and help messages sent by the DSL.
|
49
49
|
def add_action(name, &block)
|
50
50
|
@last_usage = name if @last_usage.nil?
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
if @superspace
|
56
|
-
name = "#{superspace}_#{name}".to_sym
|
57
|
-
@last_usage = "#{@superspace} #{@last_usage}" unless @last_usage == false
|
51
|
+
[@namespace, @superspace].each do |prefix|
|
52
|
+
prefix or next
|
53
|
+
name = "#{prefix}_#{name}"
|
54
|
+
@last_usage = "#{prefix} #{last_usage}" unless @last_usage == false
|
58
55
|
end
|
56
|
+
name = name.to_sym
|
59
57
|
@actions[name] = Action.new(block, @last_usage, @last_help)
|
60
58
|
@last_usage = nil
|
61
59
|
@last_help = nil
|
62
60
|
end
|
63
61
|
|
64
62
|
# Add an option flag and its help text.
|
65
|
-
def add_option(flag, text)
|
66
|
-
|
63
|
+
def add_option(flag, text, scope=nil)
|
64
|
+
scope or scope = 'Options'
|
65
|
+
@options[scope] = {} unless @options[scope]
|
66
|
+
@options[scope][flag] = text
|
67
67
|
end
|
68
68
|
|
69
69
|
# Run the command. This is a wrapper around docopt. It will
|
@@ -110,12 +110,16 @@ module Runfile
|
|
110
110
|
# finally for a. This is intended to allow "overloading" of
|
111
111
|
# the command as an action (e.g. also allow a global action
|
112
112
|
# called 'a').
|
113
|
+
# if no command was found, but we have a :global command,
|
114
|
+
# assume this is the requested one (since we will not reach
|
115
|
+
# this point unless the usage pattern matches).
|
113
116
|
def find_action(argv)
|
114
117
|
3.downto(1).each do |n|
|
115
118
|
next unless argv.size >= n
|
116
119
|
action = argv[0..n-1].join('_').to_sym
|
117
120
|
return action if @actions.has_key? action
|
118
121
|
end
|
122
|
+
return :global if @actions.has_key? :global
|
119
123
|
return false
|
120
124
|
end
|
121
125
|
|
data/lib/runfile/util.rb
CHANGED
data/lib/runfile/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
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: 2015-
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colsole
|