runfile 0.3.4 → 0.3.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
  SHA1:
3
- metadata.gz: 11d95123351c1b39b85ab9922f790ca7b0f80efb
4
- data.tar.gz: 2bb5759b98df1f2d44c64fe634a4b1ed3ee819e2
3
+ metadata.gz: 222548480931d04a04df3ff85727d00b22f6da55
4
+ data.tar.gz: 47139374b01f97e8797295f22555cfe0389640e2
5
5
  SHA512:
6
- metadata.gz: f2a9c14a241d455601eba541028858cb29381d3dd5fb833079e3c3d3bb437820fb38421d5082cbd78743f6ff60a90ae548aa186b6e7ff9b8ac4582c518714bdc
7
- data.tar.gz: aa5767d460f6f88130ba8eb48987d8e8d5e20eba368b49b52269d676d16c9150f6384c043b3a2f2d82c35eff93d2337d40d298db202058b78fb54fbe04600961
6
+ metadata.gz: ed8ab0427040556585a8d2504dbf09e0ec29309f7c1fb4fd79866ef5c2d52d0d754815403ca99604025107ce07b1cdd9f221cd1513d72752ecc5a51c9017b6f3
7
+ data.tar.gz: a7184d573a3ead9707b14cf75a150fc40df54b102ef7a6481a8a4746b77b039a3dba5268fd163dd0a0f6e36b1566df3ef681f5d1a3dea8c2480aae5734713e83
data/README.md CHANGED
@@ -59,7 +59,7 @@ Executing `run` without parameters, will show the usage patterns:
59
59
  $ run
60
60
  Usage:
61
61
  run greet <name>
62
- run (-h | --help | --version)
62
+ run (-h|--help|--version)
63
63
  ```
64
64
 
65
65
  Executing `run --help` will show the full help document (docopt)
@@ -70,7 +70,7 @@ Runfile 0.0.0
70
70
 
71
71
  Usage:
72
72
  run greet <name>
73
- run (-h | --help | --version)
73
+ run (-h|--help|--version)
74
74
 
75
75
  Options:
76
76
  -h --help
@@ -1,21 +1,21 @@
1
1
  module Runfile
2
2
 
3
- # The Action class represents a single Runfile action.
4
- # This object holds all the information needed to execute it and
5
- # show its help text (excluding the options, as they are considered
6
- # global throughout the application)
7
- class Action
8
- attr :usage, :help
3
+ # The Action class represents a single Runfile action.
4
+ # This object holds all the information needed to execute it and
5
+ # show its help text (excluding the options, as they are considered
6
+ # global throughout the application)
7
+ class Action
8
+ attr :usage, :help
9
9
 
10
- def initialize(block, usage, help)
11
- @usage = usage
12
- @help = help
13
- @block = block
14
- end
10
+ def initialize(block, usage, help)
11
+ @usage = usage
12
+ @help = help
13
+ @block = block
14
+ end
15
15
 
16
- # Call the provided block
17
- def execute(args)
18
- @block.yield args
19
- end
20
- end
16
+ # Call the provided block
17
+ def execute(args)
18
+ @block.yield args
19
+ end
20
+ end
21
21
  end
@@ -2,84 +2,84 @@ require 'docopt'
2
2
  require 'colsole'
3
3
 
4
4
  module Runfile
5
- include Colsole
5
+ include Colsole
6
6
 
7
- # The DocoptHelper class handles the dynamic generation of the
8
- # docopt document and the docopt part of the execution (meaning,
9
- # to call Docopt so it returns the parsed arguments or halts with
10
- # usage message).
11
- class DocoptHelper
7
+ # The DocoptHelper class handles the dynamic generation of the
8
+ # docopt document and the docopt part of the execution (meaning,
9
+ # to call Docopt so it returns the parsed arguments or halts with
10
+ # usage message).
11
+ class DocoptHelper
12
12
 
13
- # The constructor expects to get all the textual details
14
- # needed to generate a docopt document (name, version,
15
- # summary, options) and an array of Action objects.
16
- def initialize(name, version, summary, actions, options)
17
- @name = name
18
- @version = version
19
- @summary = summary
20
- @actions = actions
21
- @options = options
22
- end
13
+ # The constructor expects to get all the textual details
14
+ # needed to generate a docopt document (name, version,
15
+ # summary, options) and an array of Action objects.
16
+ def initialize(name, version, summary, actions, options)
17
+ @name = name
18
+ @version = version
19
+ @summary = summary
20
+ @actions = actions
21
+ @options = options
22
+ end
23
23
 
24
- # Generate a document based on all the actions, help messages
25
- # and options we have collected from the Runfile DSL.
26
- def docopt
27
- width, height = detect_terminal_size
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
24
+ # Generate a document based on all the actions, help messages
25
+ # and options we have collected from the Runfile DSL.
26
+ def docopt
27
+ width, height = detect_terminal_size
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
35
 
36
- # Return all docopt lines for the 'Usage' section
37
- def docopt_usage
38
- doc = ["\nUsage:"];
39
- @actions.each do |name, action|
40
- doc << " run #{action.usage}" unless action.usage == false
41
- end
42
- doc << " run ( -h | --help | --version )\n"
43
- doc
44
- end
36
+ # Return all docopt lines for the 'Usage' section
37
+ def docopt_usage
38
+ doc = ["\nUsage:"];
39
+ @actions.each do |name, action|
40
+ doc << " run #{action.usage}" unless action.usage == false
41
+ end
42
+ doc << " run (-h|--help|--version)\n"
43
+ doc
44
+ end
45
45
 
46
- # Return all docopt lines for the 'Commands' section
47
- def docopt_commands(width)
48
- doc = []
49
- caption_printed = false
50
- @actions.each do |name, action|
51
- action.help or next
52
- doc << "Commands:" unless caption_printed
53
- caption_printed = true
54
- helpline = " #{action.help}"
55
- wrapped = word_wrap helpline, width
56
- doc << " #{action.usage}\n#{wrapped}\n" unless action.usage == false
57
- end
58
- doc
59
- end
46
+ # Return all docopt lines for the 'Commands' section
47
+ def docopt_commands(width)
48
+ doc = []
49
+ caption_printed = false
50
+ @actions.each do |name, action|
51
+ action.help or next
52
+ doc << "Commands:" unless caption_printed
53
+ caption_printed = true
54
+ helpline = " #{action.help}"
55
+ wrapped = word_wrap helpline, width
56
+ doc << " #{action.usage}\n#{wrapped}\n" unless action.usage == false
57
+ end
58
+ doc
59
+ end
60
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'
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
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
75
- end
76
- doc
77
- end
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
75
+ end
76
+ doc
77
+ end
78
78
 
79
- # Call the docopt handler, which will either return a parsed
80
- # arguments list, or halt execution and show usage.
81
- def args(argv)
82
- Docopt::docopt(docopt, version: @version, argv:argv)
83
- end
84
- end
79
+ # Call the docopt handler, which will either return a parsed
80
+ # arguments list, or halt execution and show usage.
81
+ def args(argv)
82
+ Docopt::docopt(docopt, version: @version, argv:argv)
83
+ end
84
+ end
85
85
  end
@@ -4,53 +4,53 @@
4
4
 
5
5
  # Smells of :reek:UtilityFunction
6
6
  module Runfile
7
- # Set the name of your Runfile program
8
- def name(name)
9
- Runner.instance.name = name
10
- end
11
-
12
- # Set the version of your Runfile program
13
- def version(ver)
14
- Runner.instance.version = ver
15
- end
16
-
17
- # Set the one line summary of your Runfile program
18
- def summary(text)
19
- Runner.instance.summary = text
20
- end
21
-
22
- # Set the usage pattern for the next action
23
- def usage(text)
24
- Runner.instance.last_usage = text
25
- end
26
-
27
- # Set the help message for the next action
28
- def help(text)
29
- Runner.instance.last_help = text
30
- end
31
-
32
- # Add an option/flag to the next action (can be called multiple
33
- # times)
34
- def option(flag, text, scope=nil)
35
- Runner.instance.add_option flag, text, scope
36
- end
37
-
38
- # Define the action
39
- def action(name, altname=nil, &block)
40
- Runner.instance.add_action name, altname, &block
41
- end
42
-
43
- # Define a new command namespace
44
- def command(name=nil)
45
- Runner.instance.namespace = name
46
- end
47
-
48
- # Cross-call another action
49
- def call(command_string)
50
- Runner.instance.cross_call command_string
51
- end
52
-
53
- # Also allow to use 'endcommand' instead of 'command' to end
54
- # a command namespace definition
55
- alias_method :endcommand, :command
7
+ # Set the name of your Runfile program
8
+ def name(name)
9
+ Runner.instance.name = name
10
+ end
11
+
12
+ # Set the version of your Runfile program
13
+ def version(ver)
14
+ Runner.instance.version = ver
15
+ end
16
+
17
+ # Set the one line summary of your Runfile program
18
+ def summary(text)
19
+ Runner.instance.summary = text
20
+ end
21
+
22
+ # Set the usage pattern for the next action
23
+ def usage(text)
24
+ Runner.instance.last_usage = text
25
+ end
26
+
27
+ # Set the help message for the next action
28
+ def help(text)
29
+ Runner.instance.last_help = text
30
+ end
31
+
32
+ # Add an option/flag to the next action (can be called multiple
33
+ # times)
34
+ def option(flag, text, scope=nil)
35
+ Runner.instance.add_option flag, text, scope
36
+ end
37
+
38
+ # Define the action
39
+ def action(name, altname=nil, &block)
40
+ Runner.instance.add_action name, altname, &block
41
+ end
42
+
43
+ # Define a new command namespace
44
+ def command(name=nil)
45
+ Runner.instance.namespace = name
46
+ end
47
+
48
+ # Cross-call another action
49
+ def call(command_string)
50
+ Runner.instance.cross_call command_string
51
+ end
52
+
53
+ # Also allow to use 'endcommand' instead of 'command' to end
54
+ # a command namespace definition
55
+ alias_method :endcommand, :command
56
56
  end
@@ -3,99 +3,99 @@ require 'pp'
3
3
 
4
4
  module Runfile
5
5
 
6
- # The RunfileHelper class assists in:
7
- # 1. Finding named.runfiles
8
- # 2. Creating new runfiles (`run make`)
9
- # 3. Showing a list of found system runfiles in a colorful help
10
- class RunfileHelper
11
-
12
- # Handle the case when `run` is called without a Runfile
13
- # present. We will let the user know they can type `run make`
14
- # to create a new sample Runfile.
15
- # If the first argument matches the name of a *.runfile name,
16
- # we will return it to the caller. Otherwise, we return false
17
- # to indicate "no further handling is needed".
18
- def handle(argv)
19
- # make a new runfile
20
- if argv[0] == "make"
21
- make_runfile argv[1]
22
- return false
23
- end
6
+ # The RunfileHelper class assists in:
7
+ # 1. Finding named.runfiles
8
+ # 2. Creating new runfiles (`run make`)
9
+ # 3. Showing a list of found system runfiles in a colorful help
10
+ class RunfileHelper
11
+
12
+ # Handle the case when `run` is called without a Runfile
13
+ # present. We will let the user know they can type `run make`
14
+ # to create a new sample Runfile.
15
+ # If the first argument matches the name of a *.runfile name,
16
+ # we will return it to the caller. Otherwise, we return false
17
+ # to indicate "no further handling is needed".
18
+ def handle(argv)
19
+ # make a new runfile
20
+ if argv[0] == "make"
21
+ make_runfile argv[1]
22
+ return false
23
+ end
24
24
 
25
- # get a list of *.runfile path-wide
26
- runfiles = find_runfiles || []
25
+ # get a list of *.runfile path-wide
26
+ runfiles = find_runfiles || []
27
27
 
28
- # if first arg is a valid *.runfile, run it
29
- if argv[0]
30
- runfile = runfiles.select { |f| f[/#{argv[0]}.runfile/] }.first
31
- runfile and return runfile
32
- end
28
+ # if first arg is a valid *.runfile, run it
29
+ if argv[0]
30
+ runfile = runfiles.select { |f| f[/#{argv[0]}.runfile/] }.first
31
+ runfile and return runfile
32
+ end
33
33
 
34
- # if we are here, offer some help and advice
35
- show_make_help runfiles
36
- return false
37
- end
34
+ # if we are here, offer some help and advice
35
+ show_make_help runfiles
36
+ return false
37
+ end
38
38
 
39
- private
39
+ private
40
40
 
41
- # Create a new runfile in the current directory. We can either
42
- # create a standard 'Runfile' or a 'named.runfile'.
43
- def make_runfile(name=nil)
44
- name = 'Runfile' if name.nil?
45
- template = File.expand_path("../templates/Runfile", __FILE__)
46
- name += ".runfile" unless name == 'Runfile'
47
- dest = "#{Dir.pwd}/#{name}"
48
- begin
49
- File.write(dest, File.read(template))
50
- puts "#{name} created."
51
- rescue => e
52
- abort "Failed creating #{name}\n#{e.message}"
53
- end
54
- end
41
+ # Create a new runfile in the current directory. We can either
42
+ # create a standard 'Runfile' or a 'named.runfile'.
43
+ def make_runfile(name=nil)
44
+ name = 'Runfile' if name.nil?
45
+ template = File.expand_path("../templates/Runfile", __FILE__)
46
+ name += ".runfile" unless name == 'Runfile'
47
+ dest = "#{Dir.pwd}/#{name}"
48
+ begin
49
+ File.write(dest, File.read(template))
50
+ puts "#{name} created."
51
+ rescue => e
52
+ abort "Failed creating #{name}\n#{e.message}"
53
+ end
54
+ end
55
55
 
56
- # Find all *.runfile files in in our search difrectories
57
- def find_runfiles
58
- result = []
59
- dirs = runfile_folders
60
- dirs.each do |d|
61
- found = Dir[File.join(d, '*.runfile')]
62
- result << found unless found.empty?
63
- end
64
- return result.empty? ? false : result.flatten.uniq
65
- end
56
+ # Find all *.runfile files in in our search difrectories
57
+ def find_runfiles
58
+ result = []
59
+ dirs = runfile_folders
60
+ dirs.each do |d|
61
+ found = Dir[File.join(d, '*.runfile')]
62
+ result << found unless found.empty?
63
+ end
64
+ return result.empty? ? false : result.flatten.uniq
65
+ end
66
66
 
67
- # Show some helpful tips, and a list of available runfiles
68
- def show_make_help(runfiles)
69
- say "!txtpur!Runfile engine v#{Runfile::VERSION}"
70
- runfiles.size < 3 and say "\nTip: Type '!txtblu!run make!txtrst!' or '!txtblu!run make name!txtrst!' to create a runfile.\nFor global access, place !txtblu!named.runfiles!txtrst! in ~/runfile/ or in /etc/runfile/ or anywhere in the PATH."
71
- if runfiles.empty?
72
- say "\n!txtred!Runfile not found."
73
- else
74
- say ""
75
- say_runfile_list runfiles
76
- end
77
- end
67
+ # Show some helpful tips, and a list of available runfiles
68
+ def show_make_help(runfiles)
69
+ say "!txtpur!Runfile engine v#{Runfile::VERSION}"
70
+ runfiles.size < 3 and say "\nTip: Type '!txtblu!run make!txtrst!' or '!txtblu!run make name!txtrst!' to create a runfile.\nFor global access, place !txtblu!named.runfiles!txtrst! in ~/runfile/ or in /etc/runfile/ or anywhere in the PATH."
71
+ if runfiles.empty?
72
+ say "\n!txtred!Runfile not found."
73
+ else
74
+ say ""
75
+ say_runfile_list runfiles
76
+ end
77
+ end
78
78
 
79
- # Return array of folders we should search for runfiles
80
- def runfile_folders
81
- dirs = path_dirs
82
- dirs.insert 0, Dir.pwd, "#{Dir.home}/runfile", "/etc/runfile"
83
- dirs
84
- end
79
+ # Return array of folders we should search for runfiles
80
+ def runfile_folders
81
+ dirs = path_dirs
82
+ dirs.insert 0, Dir.pwd, "#{Dir.home}/runfile", "/etc/runfile"
83
+ dirs
84
+ end
85
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
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
99
 
100
- end
100
+ end
101
101
  end
@@ -3,144 +3,144 @@ require 'pp'
3
3
 
4
4
  module Runfile
5
5
 
6
- # The Runner class is the main workhorse behind Runfile.
7
- # It handles all the Runfile DSL commands and executes the
8
- # Runfile with the help of two more specialized classes:
9
- # 1. DocoptHelper - for deeper docopt related actions
10
- # 2. RunfileHelper - for Runfile creation and system wide search
11
- class Runner
12
- attr_accessor :last_usage, :last_help, :name, :version,
13
- :summary, :namespace, :superspace
6
+ # The Runner class is the main workhorse behind Runfile.
7
+ # It handles all the Runfile DSL commands and executes the
8
+ # Runfile with the help of two more specialized classes:
9
+ # 1. DocoptHelper - for deeper docopt related actions
10
+ # 2. RunfileHelper - for Runfile creation and system wide search
11
+ class Runner
12
+ attr_accessor :last_usage, :last_help, :name, :version,
13
+ :summary, :namespace, :superspace
14
14
 
15
- @@instance = nil
15
+ @@instance = nil
16
16
 
17
- # Initialize all variables to sensible defaults.
18
- def initialize
19
- @superspace = nil # used when filename != Runfile
20
- @last_usage = nil # dsl: usage
21
- @last_help = nil # dsl: help
22
- @namespace = nil # dsl: command
23
- @actions = {} # dsl: action
24
- @options = {} # dsl: option
25
- @name = "Runfile" # dsl: name
26
- @version = "0.0.0" # dsl: version
27
- @summary = false # dsl: summary
28
- end
17
+ # Initialize all variables to sensible defaults.
18
+ def initialize
19
+ @superspace = nil # used when filename != Runfile
20
+ @last_usage = nil # dsl: usage
21
+ @last_help = nil # dsl: help
22
+ @namespace = nil # dsl: command
23
+ @actions = {} # dsl: action
24
+ @options = {} # dsl: option
25
+ @name = "Runfile" # dsl: name
26
+ @version = "0.0.0" # dsl: version
27
+ @summary = false # dsl: summary
28
+ end
29
29
 
30
- # Return a singleton Runner instance.
31
- def self.instance
32
- @@instance = self.new if @@instance.nil?
33
- @@instance
34
- end
30
+ # Return a singleton Runner instance.
31
+ def self.instance
32
+ @@instance = self.new if @@instance.nil?
33
+ @@instance
34
+ end
35
35
 
36
- # Load and execute a Runfile call.
37
- def execute(argv, filename='Runfile')
38
- File.file?(filename) or handle_no_runfile argv
39
- begin
40
- load filename
41
- rescue => ex
42
- abort "Runfile error:\n#{ex.message}\n#{ex.backtrace[0]}"
43
- end
44
- @@instance.run *argv
45
- end
36
+ # Load and execute a Runfile call.
37
+ def execute(argv, filename='Runfile')
38
+ File.file?(filename) or handle_no_runfile argv
39
+ begin
40
+ load filename
41
+ rescue => ex
42
+ abort "Runfile error:\n#{ex.message}\n#{ex.backtrace[0]}"
43
+ end
44
+ @@instance.run *argv
45
+ end
46
46
 
47
- # Add an action to the @actions array, and use the last known
48
- # usage and help messages sent by the DSL.
49
- def add_action(name, altname=nil, &block)
50
- if @last_usage.nil?
51
- @last_usage = altname ? "( #{name} | #{altname} )" : name
52
- end
53
- [@namespace, @superspace].each do |prefix|
54
- prefix or next
55
- name = "#{prefix}_#{name}"
56
- @last_usage = "#{prefix} #{last_usage}" unless @last_usage == false
57
- end
58
- name = name.to_sym
59
- @actions[name] = Action.new(block, @last_usage, @last_help)
60
- @last_usage = nil
61
- @last_help = nil
62
- if altname
63
- @last_usage = false
64
- add_action(altname, nil, &block)
65
- end
66
- end
47
+ # Add an action to the @actions array, and use the last known
48
+ # usage and help messages sent by the DSL.
49
+ def add_action(name, altname=nil, &block)
50
+ if @last_usage.nil?
51
+ @last_usage = altname ? "(#{name}|#{altname})" : name
52
+ end
53
+ [@namespace, @superspace].each do |prefix|
54
+ prefix or next
55
+ name = "#{prefix}_#{name}"
56
+ @last_usage = "#{prefix} #{last_usage}" unless @last_usage == false
57
+ end
58
+ name = name.to_sym
59
+ @actions[name] = Action.new(block, @last_usage, @last_help)
60
+ @last_usage = nil
61
+ @last_help = nil
62
+ if altname
63
+ @last_usage = false
64
+ add_action(altname, nil, &block)
65
+ end
66
+ end
67
67
 
68
- # Add an option flag and its help text.
69
- def add_option(flag, text, scope=nil)
70
- scope or scope = 'Options'
71
- @options[scope] ||= {}
72
- @options[scope][flag] = text
73
- end
68
+ # Add an option flag and its help text.
69
+ def add_option(flag, text, scope=nil)
70
+ scope or scope = 'Options'
71
+ @options[scope] ||= {}
72
+ @options[scope][flag] = text
73
+ end
74
74
 
75
- # Run the command. This is a wrapper around docopt. It will
76
- # generate the docopt document on the fly, using all the
77
- # information collected so far.
78
- def run(*argv)
79
- begin
80
- docopt_exec argv
81
- rescue Docopt::Exit => ex
82
- puts ex.message
83
- end
84
- end
75
+ # Run the command. This is a wrapper around docopt. It will
76
+ # generate the docopt document on the fly, using all the
77
+ # information collected so far.
78
+ def run(*argv)
79
+ begin
80
+ docopt_exec argv
81
+ rescue Docopt::Exit => ex
82
+ puts ex.message
83
+ end
84
+ end
85
85
 
86
- # Invoke action from another action. Used by the DSL's #call
87
- # function. Expects to get a single string that looks as if
88
- # it was typed in the command prompt.
89
- def cross_call(command_string)
90
- argv = command_string.split /\s(?=(?:[^"]|"[^"]*")*$)/
91
- begin
92
- docopt_exec argv
93
- rescue Docopt::Exit => ex
94
- puts "Cross call failed: #{command_string}"
95
- abort ex.message
96
- end
97
- end
86
+ # Invoke action from another action. Used by the DSL's #call
87
+ # function. Expects to get a single string that looks as if
88
+ # it was typed in the command prompt.
89
+ def cross_call(command_string)
90
+ argv = command_string.split /\s(?=(?:[^"]|"[^"]*")*$)/
91
+ begin
92
+ docopt_exec argv
93
+ rescue Docopt::Exit => ex
94
+ puts "Cross call failed: #{command_string}"
95
+ abort ex.message
96
+ end
97
+ end
98
98
 
99
- private
99
+ private
100
100
 
101
- # Call the docopt parser and execute the action with the
102
- # parsed arguments.
103
- # This should always be called in a begin...rescue block and
104
- # you should handle the Docopt::Exit exception.
105
- def docopt_exec(argv)
106
- helper = DocoptHelper.new(@name, @version, @summary, @actions, @options)
107
- args = helper.args argv
108
- action = find_action argv
109
- action or abort "Runfile error: Action not found"
110
- @actions[action].execute args
111
- end
101
+ # Call the docopt parser and execute the action with the
102
+ # parsed arguments.
103
+ # This should always be called in a begin...rescue block and
104
+ # you should handle the Docopt::Exit exception.
105
+ def docopt_exec(argv)
106
+ helper = DocoptHelper.new(@name, @version, @summary, @actions, @options)
107
+ args = helper.args argv
108
+ action = find_action argv
109
+ action or abort "Runfile error: Action not found"
110
+ @actions[action].execute args
111
+ end
112
112
 
113
- # Inspect the first three arguments in the argv and look for
114
- # a matching action.
115
- # We will first look for a_b_c action, then for a_b and
116
- # finally for a. This is intended to allow "overloading" of
117
- # the command as an action (e.g. also allow a global action
118
- # called 'a').
119
- # if no command was found, but we have a :global command,
120
- # assume this is the requested one (since we will not reach
121
- # this point unless the usage pattern matches).
122
- def find_action(argv)
123
- 3.downto(1).each do |count|
124
- next unless argv.size >= count
125
- action = argv[0..count-1].join('_').to_sym
126
- return action if @actions.has_key? action
127
- end
128
- return :global if @actions.has_key? :global
129
- return false
130
- end
113
+ # Inspect the first three arguments in the argv and look for
114
+ # a matching action.
115
+ # We will first look for a_b_c action, then for a_b and
116
+ # finally for a. This is intended to allow "overloading" of
117
+ # the command as an action (e.g. also allow a global action
118
+ # called 'a').
119
+ # if no command was found, but we have a :global command,
120
+ # assume this is the requested one (since we will not reach
121
+ # this point unless the usage pattern matches).
122
+ def find_action(argv)
123
+ 3.downto(1).each do |count|
124
+ next unless argv.size >= count
125
+ action = argv[0..count-1].join('_').to_sym
126
+ return action if @actions.has_key? action
127
+ end
128
+ return :global if @actions.has_key? :global
129
+ return false
130
+ end
131
131
 
132
- # When `run` is called without a Runfile (or runfile not
133
- # found), hand over handling to the RunfileHelper class.
134
- # If will either return false if no further handling is needed
135
- # on our part, or the name of a runfile to execute.
136
- def handle_no_runfile(argv)
137
- maker = RunfileHelper.new
138
- runfile = maker.handle argv
139
- if runfile
140
- @superspace = argv[0]
141
- execute argv, runfile
142
- end
143
- exit
144
- end
145
- end
132
+ # When `run` is called without a Runfile (or runfile not
133
+ # found), hand over handling to the RunfileHelper class.
134
+ # If will either return false if no further handling is needed
135
+ # on our part, or the name of a runfile to execute.
136
+ def handle_no_runfile(argv)
137
+ maker = RunfileHelper.new
138
+ runfile = maker.handle argv
139
+ if runfile
140
+ @superspace = argv[0]
141
+ execute argv, runfile
142
+ end
143
+ exit
144
+ end
145
+ end
146
146
  end
@@ -6,9 +6,9 @@ usage "hello [<name> --color]"
6
6
  help "Say hello"
7
7
  option "-c --color", "Greet with color"
8
8
  action :hello do |args|
9
- if args['--color']
10
- say "!txtgrn!Hello #{args['<name>']}"
11
- else
12
- say "Hello #{args['<name>']}"
13
- end
9
+ if args['--color']
10
+ say "!txtgrn!Hello #{args['<name>']}"
11
+ else
12
+ say "Hello #{args['<name>']}"
13
+ end
14
14
  end
@@ -1,15 +1,15 @@
1
1
  # Utility methods
2
2
  module Runfile
3
- # Debug print and exit
3
+ # Debug print and exit
4
4
  # Smells of :reek:UncommunicativeMethodName
5
- def d(obj)
6
- pp obj
7
- exit
8
- end
5
+ def d(obj)
6
+ pp obj
7
+ exit
8
+ end
9
9
 
10
- # Return an array of path directories
10
+ # Return an array of path directories
11
11
  # Smells of :reek:UtilityFunction
12
- def path_dirs
13
- ENV['PATH'].split(File::PATH_SEPARATOR)
14
- end
12
+ def path_dirs
13
+ ENV['PATH'].split(File::PATH_SEPARATOR)
14
+ end
15
15
  end
@@ -1,3 +1,3 @@
1
1
  module Runfile
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
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
4
+ version: 0.3.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: 2015-08-02 00:00:00.000000000 Z
11
+ date: 2015-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colsole
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.6'
47
+ version: '5.8'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.6'
54
+ version: '5.8'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: run-gem-dev
57
57
  requirement: !ruby/object:Gem::Requirement