rprogram 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/Manifest.txt +2 -0
- data/README.txt +1 -4
- data/Rakefile +2 -5
- data/lib/rprogram/compat.rb +63 -7
- data/lib/rprogram/nameable.rb +16 -8
- data/lib/rprogram/non_option.rb +19 -15
- data/lib/rprogram/option.rb +28 -21
- data/lib/rprogram/option_list.rb +2 -1
- data/lib/rprogram/options.rb +21 -12
- data/lib/rprogram/program.rb +83 -45
- data/lib/rprogram/rprogram.rb +8 -4
- data/lib/rprogram/task.rb +104 -59
- data/lib/rprogram/version.rb +1 -1
- data/spec/task_spec.rb +15 -0
- data/tasks/spec.rb +10 -0
- data/tasks/yard.rb +18 -0
- data.tar.gz.sig +0 -0
- metadata +10 -8
- metadata.gz.sig +0 -0
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -25,6 +25,8 @@ lib/rprogram/yard/handlers/ruby.rb
|
|
25
25
|
lib/rprogram/yard/handlers/ruby/metaclass_eval_handler.rb
|
26
26
|
lib/rprogram/yard/handlers/ruby/legacy.rb
|
27
27
|
lib/rprogram/yard/handlers/ruby/legacy/metaclass_eval_handler.rb
|
28
|
+
tasks/spec.rb
|
29
|
+
tasks/yard.rb
|
28
30
|
spec/spec_helper.rb
|
29
31
|
spec/classes/named_program.rb
|
30
32
|
spec/classes/aliased_program.rb
|
data/README.txt
CHANGED
@@ -15,15 +15,12 @@ system.
|
|
15
15
|
|
16
16
|
* Uses Kernel.system for safe execution of individual programs and their
|
17
17
|
separate command-line arguments.
|
18
|
+
* Allows running programs under +sudo+.
|
18
19
|
* Provides cross-platform access to the PATH variable.
|
19
20
|
* Supports leading/tailing non-options.
|
20
21
|
* Supports long-options and short-options.
|
21
22
|
* Supports custom formating of options.
|
22
23
|
|
23
|
-
== REQUIREMENTS:
|
24
|
-
|
25
|
-
* {YARD}[http://yard.soen.ca/] >= 0.2.3.5
|
26
|
-
|
27
24
|
== INSTALL:
|
28
25
|
|
29
26
|
$ sudo gem install rprogram
|
data/Rakefile
CHANGED
@@ -11,12 +11,9 @@ Hoe.spec('rprogram') do
|
|
11
11
|
self.developer('Postmodern', 'postmodern.mod3@gmail.com')
|
12
12
|
self.remote_rdoc_dir = ''
|
13
13
|
|
14
|
-
self.extra_deps = [
|
15
|
-
['yard', '>=0.2.3.5']
|
16
|
-
]
|
17
|
-
|
18
14
|
self.extra_dev_deps = [
|
19
|
-
['rspec', '>=1.2.8']
|
15
|
+
['rspec', '>=1.2.8'],
|
16
|
+
['yard', '>=0.5.2']
|
20
17
|
]
|
21
18
|
|
22
19
|
self.spec_extras = {:has_rdoc => 'yard'}
|
data/lib/rprogram/compat.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
require 'rprogram/exceptions/program_not_found'
|
2
|
+
|
1
3
|
module RProgram
|
2
4
|
module Compat
|
3
5
|
#
|
4
6
|
# Determines the native platform.
|
5
7
|
#
|
6
|
-
# @return [String]
|
8
|
+
# @return [String]
|
9
|
+
# The native platform.
|
7
10
|
#
|
8
11
|
# @example
|
9
12
|
# Compat.arch #=> "linux"
|
@@ -15,7 +18,8 @@ module RProgram
|
|
15
18
|
#
|
16
19
|
# Determines the contents of the +PATH+ environment variable.
|
17
20
|
#
|
18
|
-
# @return [Array]
|
21
|
+
# @return [Array]
|
22
|
+
# The contents of the +PATH+ environment variable.
|
19
23
|
#
|
20
24
|
# @example
|
21
25
|
# Compat.paths #=> ["/bin", "/usr/bin"]
|
@@ -35,9 +39,11 @@ module RProgram
|
|
35
39
|
#
|
36
40
|
# Finds the full-path of the program with the matching name.
|
37
41
|
#
|
38
|
-
# @param [String] name
|
42
|
+
# @param [String] name
|
43
|
+
# The name of the program to find.
|
39
44
|
#
|
40
|
-
# @return [String, nil]
|
45
|
+
# @return [String, nil]
|
46
|
+
# The full-path of the desired program.
|
41
47
|
#
|
42
48
|
# @example
|
43
49
|
# Compat.find_program('as') #=> "/usr/bin/as"
|
@@ -55,10 +61,11 @@ module RProgram
|
|
55
61
|
#
|
56
62
|
# Finds the program matching one of the matching names.
|
57
63
|
#
|
58
|
-
# @param [Array] names
|
59
|
-
#
|
64
|
+
# @param [Array] names
|
65
|
+
# The names of the program to use while searching for the program.
|
60
66
|
#
|
61
|
-
# @return [String, nil]
|
67
|
+
# @return [String, nil]
|
68
|
+
# The first full-path for the program.
|
62
69
|
#
|
63
70
|
# @example
|
64
71
|
# Compat.find_program_by_names("gas","as") #=> "/usr/bin/as"
|
@@ -66,5 +73,54 @@ module RProgram
|
|
66
73
|
def Compat.find_program_by_names(*names)
|
67
74
|
names.map { |name| Compat.find_program(name) }.compact.first
|
68
75
|
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Runs a program.
|
79
|
+
#
|
80
|
+
# @param [String] path
|
81
|
+
# The path to the program.
|
82
|
+
#
|
83
|
+
# @param [Array] args
|
84
|
+
# Additional arguments to run the program with.
|
85
|
+
#
|
86
|
+
# @return [Boolean]
|
87
|
+
# Specifies whether the program exited successfully.
|
88
|
+
#
|
89
|
+
def Compat.run(path,*args)
|
90
|
+
args = args.map { |arg| arg.to_s }
|
91
|
+
|
92
|
+
if RProgram.debug
|
93
|
+
STDERR.puts ">>> #{path} #{args.join(' ')}"
|
94
|
+
end
|
95
|
+
|
96
|
+
return Kernel.system(path,*args)
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Runs a program under sudo.
|
101
|
+
#
|
102
|
+
# @param [String] path
|
103
|
+
# Path of the program to run.
|
104
|
+
#
|
105
|
+
# @param [Array] args
|
106
|
+
# Additional arguments to run the program with.
|
107
|
+
#
|
108
|
+
# @return [Boolean]
|
109
|
+
# Specifies whether the program exited successfully.
|
110
|
+
#
|
111
|
+
# @raise [ProgramNotFound]
|
112
|
+
# Indicates that the +sudo+ program could not be located.
|
113
|
+
#
|
114
|
+
# @since 0.1.8
|
115
|
+
#
|
116
|
+
def Compat.sudo(path,*args)
|
117
|
+
sudo_path = Compat.find_program('sudo')
|
118
|
+
|
119
|
+
unless sudo_path
|
120
|
+
raise(ProgramNotFound,'could not find the "sudo" program',caller)
|
121
|
+
end
|
122
|
+
|
123
|
+
return Compat.run(sudo_path,path,*args)
|
124
|
+
end
|
69
125
|
end
|
70
126
|
end
|
data/lib/rprogram/nameable.rb
CHANGED
@@ -6,14 +6,16 @@ module RProgram
|
|
6
6
|
def self.included(base)
|
7
7
|
base.metaclass_eval do
|
8
8
|
#
|
9
|
-
# @return [String]
|
9
|
+
# @return [String]
|
10
|
+
# The name of the program.
|
10
11
|
#
|
11
12
|
def program_name
|
12
13
|
@program_name ||= nil
|
13
14
|
end
|
14
15
|
|
15
16
|
#
|
16
|
-
# @return [Array]
|
17
|
+
# @return [Array]
|
18
|
+
# The program's aliases.
|
17
19
|
#
|
18
20
|
def program_aliases
|
19
21
|
@program_aliases ||= []
|
@@ -22,7 +24,8 @@ module RProgram
|
|
22
24
|
#
|
23
25
|
# Combines program_name with program_aliases.
|
24
26
|
#
|
25
|
-
# @return [Array]
|
27
|
+
# @return [Array]
|
28
|
+
# Names the program is known by.
|
26
29
|
#
|
27
30
|
def program_names
|
28
31
|
([program_name] + program_aliases).compact
|
@@ -31,7 +34,8 @@ module RProgram
|
|
31
34
|
#
|
32
35
|
# Sets the program name for the class.
|
33
36
|
#
|
34
|
-
# @param [String, Symbol] name
|
37
|
+
# @param [String, Symbol] name
|
38
|
+
# The new program name.
|
35
39
|
#
|
36
40
|
# @example
|
37
41
|
# name_program 'ls'
|
@@ -43,7 +47,8 @@ module RProgram
|
|
43
47
|
#
|
44
48
|
# Sets the program aliases for the class.
|
45
49
|
#
|
46
|
-
# @param [Array] aliases
|
50
|
+
# @param [Array] aliases
|
51
|
+
# The new program aliases.
|
47
52
|
#
|
48
53
|
# @example
|
49
54
|
# alias_program 'vim', 'vi'
|
@@ -55,21 +60,24 @@ module RProgram
|
|
55
60
|
end
|
56
61
|
|
57
62
|
#
|
58
|
-
# @return [String]
|
63
|
+
# @return [String]
|
64
|
+
# The program name of the class.
|
59
65
|
#
|
60
66
|
def program_name
|
61
67
|
self.class.program_name
|
62
68
|
end
|
63
69
|
|
64
70
|
#
|
65
|
-
# @return [Array]
|
71
|
+
# @return [Array]
|
72
|
+
# The program aliases of the class.
|
66
73
|
#
|
67
74
|
def program_aliases
|
68
75
|
self.class.program_aliases
|
69
76
|
end
|
70
77
|
|
71
78
|
#
|
72
|
-
# @return [Array]
|
79
|
+
# @return [Array]
|
80
|
+
# The program names of the class.
|
73
81
|
#
|
74
82
|
def program_names
|
75
83
|
self.class.program_names
|
data/lib/rprogram/non_option.rb
CHANGED
@@ -10,17 +10,20 @@ module RProgram
|
|
10
10
|
#
|
11
11
|
# Creates a new NonOption object.
|
12
12
|
#
|
13
|
-
# @param [Hash] options
|
14
|
-
#
|
13
|
+
# @param [Hash] options
|
14
|
+
# Additional options.
|
15
|
+
#
|
16
|
+
# @option options [Symbol] :name
|
17
|
+
# The name of the non-option.
|
18
|
+
#
|
15
19
|
# @option options [true, false] :leading (true)
|
16
|
-
#
|
17
|
-
#
|
20
|
+
# Implies the non-option is a leading non-option.
|
21
|
+
#
|
18
22
|
# @option options [false, true] :tailing (false)
|
19
|
-
#
|
20
|
-
#
|
23
|
+
# Implies the non-option is a tailing non-option.
|
24
|
+
#
|
21
25
|
# @option options [false, true] :multiple (false)
|
22
|
-
#
|
23
|
-
# given an Array of values.
|
26
|
+
# Implies the non-option maybe given an Array of values.
|
24
27
|
#
|
25
28
|
def initialize(options={})
|
26
29
|
@name = options[:name]
|
@@ -39,8 +42,8 @@ module RProgram
|
|
39
42
|
#
|
40
43
|
# Determines whether the non-option's arguments are tailing.
|
41
44
|
#
|
42
|
-
# @return [true, false]
|
43
|
-
#
|
45
|
+
# @return [true, false]
|
46
|
+
# Specifies whether the non-option's arguments are tailing.
|
44
47
|
#
|
45
48
|
def tailing?
|
46
49
|
@tailing == true
|
@@ -49,8 +52,8 @@ module RProgram
|
|
49
52
|
#
|
50
53
|
# Determines whether the non-option's arguments are leading.
|
51
54
|
#
|
52
|
-
# @return [true, false]
|
53
|
-
#
|
55
|
+
# @return [true, false]
|
56
|
+
# Specifies whether the non-option's arguments are leading.
|
54
57
|
#
|
55
58
|
def leading?
|
56
59
|
!(@tailing)
|
@@ -59,10 +62,11 @@ module RProgram
|
|
59
62
|
#
|
60
63
|
# Formats the arguments for the non-option.
|
61
64
|
#
|
62
|
-
# @param [Hash, Array, String, nil] value
|
63
|
-
#
|
65
|
+
# @param [Hash, Array, String, nil] value
|
66
|
+
# The value to use for the arguments of the non-option.
|
64
67
|
#
|
65
|
-
# @return [Array]
|
68
|
+
# @return [Array]
|
69
|
+
# The arguments for the non-option.
|
66
70
|
#
|
67
71
|
def arguments(value)
|
68
72
|
return [] unless value
|
data/lib/rprogram/option.rb
CHANGED
@@ -22,30 +22,35 @@ module RProgram
|
|
22
22
|
# _block_ is not given, the option will use the default_format when
|
23
23
|
# generating the arguments.
|
24
24
|
#
|
25
|
-
# @param [Hash] options
|
26
|
-
#
|
25
|
+
# @param [Hash] options
|
26
|
+
# Additional options.
|
27
|
+
#
|
28
|
+
# @option options [String] :flag
|
29
|
+
# The command-line flag to use.
|
30
|
+
#
|
27
31
|
# @option options [true, false] :equals (false)
|
28
|
-
#
|
29
|
-
# formated as
|
30
|
-
# <tt>"--flag=value"</tt>.
|
32
|
+
# Implies the option maybe formated as <tt>"--flag=value"</tt>.
|
31
33
|
#
|
32
34
|
# @option options [true, false] :multiple (false)
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# @option options [String] :separator
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
35
|
+
# Specifies the option maybe given an Array of values.
|
36
|
+
#
|
37
|
+
# @option options [String] :separator
|
38
|
+
# The separator to use for formating multiple arguments into one
|
39
|
+
# +String+. Cannot be used with the +:multiple+ option.
|
40
|
+
#
|
39
41
|
# @option options [true, false] :sub_options (false)
|
40
|
-
#
|
41
|
-
#
|
42
|
+
# Specifies that the option contains sub-options.
|
43
|
+
#
|
44
|
+
# @yield [option, value]
|
45
|
+
# If a block is given, it will be used to format each value of the
|
46
|
+
# option.
|
47
|
+
#
|
48
|
+
# @yieldparam [Option] option
|
49
|
+
# The option that is being formatted.
|
42
50
|
#
|
43
|
-
# @
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# @yieldparam [String, Array] value The value to format for the
|
47
|
-
# option. May be an Array, if multiple
|
48
|
-
# values are allowed with the option.
|
51
|
+
# @yieldparam [String, Array] value
|
52
|
+
# The value to format for the option. May be an Array, if multiple
|
53
|
+
# values are allowed with the option.
|
49
54
|
#
|
50
55
|
def initialize(options={},&block)
|
51
56
|
@flag = options[:flag]
|
@@ -75,9 +80,11 @@ module RProgram
|
|
75
80
|
#
|
76
81
|
# Formats the arguments for the option.
|
77
82
|
#
|
78
|
-
# @param [Hash, Array, String] value
|
83
|
+
# @param [Hash, Array, String] value
|
84
|
+
# The arguments to format.
|
79
85
|
#
|
80
|
-
# @return [Array]
|
86
|
+
# @return [Array]
|
87
|
+
# The formatted arguments of the option.
|
81
88
|
#
|
82
89
|
def arguments(value)
|
83
90
|
return [@flag] if value == true
|
data/lib/rprogram/option_list.rb
CHANGED
data/lib/rprogram/options.rb
CHANGED
@@ -7,7 +7,8 @@ module RProgram
|
|
7
7
|
def self.included(base)
|
8
8
|
base.metaclass_eval do
|
9
9
|
#
|
10
|
-
# @return [Hash]
|
10
|
+
# @return [Hash]
|
11
|
+
# All defined non-options of the class.
|
11
12
|
#
|
12
13
|
def non_options
|
13
14
|
@non_options ||= {}
|
@@ -17,10 +18,12 @@ module RProgram
|
|
17
18
|
# Searches for the non-option with the matching name in the class
|
18
19
|
# and it's ancestors.
|
19
20
|
#
|
20
|
-
# @param [Symbol, String] name
|
21
|
+
# @param [Symbol, String] name
|
22
|
+
# The name to search for.
|
21
23
|
#
|
22
|
-
# @return [true, false]
|
23
|
-
#
|
24
|
+
# @return [true, false]
|
25
|
+
# Specifies whether the non-option with the matching name was
|
26
|
+
# defined.
|
24
27
|
#
|
25
28
|
def has_non_option?(name)
|
26
29
|
name = name.to_sym
|
@@ -38,9 +41,11 @@ module RProgram
|
|
38
41
|
# Searches for the non-option with the matching name in the class
|
39
42
|
# and it's ancestors.
|
40
43
|
#
|
41
|
-
# @param [Symbol, String] name
|
44
|
+
# @param [Symbol, String] name
|
45
|
+
# The name to search for.
|
42
46
|
#
|
43
|
-
# @return [NonOption]
|
47
|
+
# @return [NonOption]
|
48
|
+
# The non-option with the matching name.
|
44
49
|
#
|
45
50
|
def get_non_option(name)
|
46
51
|
name = name.to_sym
|
@@ -57,7 +62,8 @@ module RProgram
|
|
57
62
|
end
|
58
63
|
|
59
64
|
#
|
60
|
-
# @return [Hash]
|
65
|
+
# @return [Hash]
|
66
|
+
# All defined options for the class.
|
61
67
|
#
|
62
68
|
def options
|
63
69
|
@options ||= {}
|
@@ -67,10 +73,11 @@ module RProgram
|
|
67
73
|
# Searches for the option with the matching name in the class and
|
68
74
|
# it's ancestors.
|
69
75
|
#
|
70
|
-
# @param [Symbol, String] name
|
76
|
+
# @param [Symbol, String] name
|
77
|
+
# The name to search for.
|
71
78
|
#
|
72
|
-
# @return [true, false]
|
73
|
-
#
|
79
|
+
# @return [true, false]
|
80
|
+
# Specifies whether the option with the matching name was defined.
|
74
81
|
#
|
75
82
|
def has_option?(name)
|
76
83
|
name = name.to_sym
|
@@ -88,9 +95,11 @@ module RProgram
|
|
88
95
|
# Searches for the option with the matching name in the class and
|
89
96
|
# it's ancestors.
|
90
97
|
#
|
91
|
-
# @param [Symbol, String] name
|
98
|
+
# @param [Symbol, String] name
|
99
|
+
# The name to search for.
|
92
100
|
#
|
93
|
-
# @return [Option]
|
101
|
+
# @return [Option]
|
102
|
+
# The option with the matching name.
|
94
103
|
#
|
95
104
|
def get_option(name)
|
96
105
|
name = name.to_sym
|
data/lib/rprogram/program.rb
CHANGED
@@ -18,14 +18,18 @@ module RProgram
|
|
18
18
|
#
|
19
19
|
# Creates a new Program object.
|
20
20
|
#
|
21
|
-
# @param [String] path
|
21
|
+
# @param [String] path
|
22
|
+
# The full-path of the program.
|
22
23
|
#
|
23
|
-
# @yield [prog]
|
24
|
-
#
|
25
|
-
#
|
24
|
+
# @yield [prog]
|
25
|
+
# If a block is given, it will be passed the newly created Program
|
26
|
+
# object.
|
26
27
|
#
|
27
|
-
# @
|
28
|
-
#
|
28
|
+
# @yieldparam [Program] prog
|
29
|
+
# The newly created program object.
|
30
|
+
#
|
31
|
+
# @raise [ProgramNotFound]
|
32
|
+
# Specifies the given path was not a valid file.
|
29
33
|
#
|
30
34
|
# @example
|
31
35
|
# Program.new('/usr/bin/ls')
|
@@ -46,17 +50,22 @@ module RProgram
|
|
46
50
|
#
|
47
51
|
# Creates a new program object.
|
48
52
|
#
|
49
|
-
# @param [String] path
|
50
|
-
#
|
51
|
-
#
|
53
|
+
# @param [String] path
|
54
|
+
# The full-path of the program.
|
55
|
+
#
|
56
|
+
# @param [Array] arguments
|
57
|
+
# Additional arguments to initialize the program with.
|
52
58
|
#
|
53
|
-
# @yield [prog]
|
54
|
-
#
|
55
|
-
#
|
59
|
+
# @yield [prog]
|
60
|
+
# If a block is given, it will be passed the newly created Program
|
61
|
+
# object.
|
56
62
|
#
|
57
|
-
# @
|
58
|
-
#
|
59
|
-
#
|
63
|
+
# @yieldparam [Program] prog
|
64
|
+
# The newly created program object.
|
65
|
+
#
|
66
|
+
# @return [Program, nil]
|
67
|
+
# Returns the newly created Program object. If the given path was
|
68
|
+
# not a valid file, +nil+ will be returned.
|
60
69
|
#
|
61
70
|
# @example
|
62
71
|
# Program.find_with_path('/bin/cd')
|
@@ -75,17 +84,22 @@ module RProgram
|
|
75
84
|
# if a path within _paths_ is a valid file. Any given _arguments_ or
|
76
85
|
# a given _block_ will be used in creating the new program.
|
77
86
|
#
|
78
|
-
# @param [Array] paths
|
79
|
-
#
|
80
|
-
#
|
87
|
+
# @param [Array] paths
|
88
|
+
# The Array of paths to search for the program.
|
89
|
+
#
|
90
|
+
# @param [Array] arguments
|
91
|
+
# Additional arguments to initialize the program with.
|
81
92
|
#
|
82
|
-
# @yield [prog]
|
83
|
-
#
|
84
|
-
#
|
93
|
+
# @yield [prog]
|
94
|
+
# If a block is given, it will be passed the newly created Program
|
95
|
+
# object.
|
85
96
|
#
|
86
|
-
# @
|
87
|
-
#
|
88
|
-
#
|
97
|
+
# @yieldparam [Program] prog
|
98
|
+
# The newly created program object.
|
99
|
+
#
|
100
|
+
# @return [Program, nil]
|
101
|
+
# Returns the newly created Program object. If none of the given
|
102
|
+
# paths were valid files, +nil+ will be returned.
|
89
103
|
#
|
90
104
|
# @example
|
91
105
|
# Program.find_with_paths(['/bin/cd','/usr/bin/cd'])
|
@@ -104,17 +118,21 @@ module RProgram
|
|
104
118
|
#
|
105
119
|
# Finds and creates the program using it's +program_names+.
|
106
120
|
#
|
107
|
-
# @param [Array] arguments
|
108
|
-
#
|
121
|
+
# @param [Array] arguments
|
122
|
+
# Additional arguments to initialize the program object with.
|
123
|
+
#
|
124
|
+
# @yield [prog]
|
125
|
+
# If a block is given, it will be passed the newly created Program
|
126
|
+
# object.
|
109
127
|
#
|
110
|
-
# @
|
111
|
-
#
|
112
|
-
# @yieldparam [Program] prog The newly created program object.
|
128
|
+
# @yieldparam [Program] prog
|
129
|
+
# The newly created program object.
|
113
130
|
#
|
114
|
-
# @return [Program]
|
131
|
+
# @return [Program]
|
132
|
+
# The newly created program object.
|
115
133
|
#
|
116
|
-
# @raise [ProgramNotFound]
|
117
|
-
#
|
134
|
+
# @raise [ProgramNotFound]
|
135
|
+
# Non of the +program_names+ represented valid programs on the system.
|
118
136
|
#
|
119
137
|
# @example
|
120
138
|
# Program.find
|
@@ -140,9 +158,11 @@ module RProgram
|
|
140
158
|
#
|
141
159
|
# Runs the program.
|
142
160
|
#
|
143
|
-
# @param [Array] args
|
161
|
+
# @param [Array] args
|
162
|
+
# Addition arguments to run the program with.
|
144
163
|
#
|
145
|
-
# @return [true, false]
|
164
|
+
# @return [true, false]
|
165
|
+
# Specifies the exit status of the program.
|
146
166
|
#
|
147
167
|
# @example
|
148
168
|
# echo = Program.find_by_name('echo')
|
@@ -153,33 +173,51 @@ module RProgram
|
|
153
173
|
# @see Kernel.system
|
154
174
|
#
|
155
175
|
def run(*args)
|
156
|
-
args
|
157
|
-
|
158
|
-
if RProgram.debug
|
159
|
-
STDERR.puts ">>> #{@path} #{args.join(' ')}"
|
160
|
-
end
|
176
|
+
Compat.run(@path,*args)
|
177
|
+
end
|
161
178
|
|
162
|
-
|
179
|
+
#
|
180
|
+
# Runs the program under sudo.
|
181
|
+
#
|
182
|
+
# @param [Array] args
|
183
|
+
# Additional arguments to run the program with.
|
184
|
+
#
|
185
|
+
# @return [Boolean]
|
186
|
+
# Specifies whether the program exited successfully.
|
187
|
+
#
|
188
|
+
# @raise [ProgramNotFound]
|
189
|
+
# Indicates that the +sudo+ program could not be located.
|
190
|
+
#
|
191
|
+
# @since 0.1.8
|
192
|
+
#
|
193
|
+
def sudo(*args)
|
194
|
+
Compat.sudo(@path,*args)
|
163
195
|
end
|
164
196
|
|
165
197
|
#
|
166
198
|
# Runs the program with the arguments from the given task.
|
167
199
|
#
|
168
|
-
# @param [Task] task
|
169
|
-
#
|
200
|
+
# @param [Task] task
|
201
|
+
# The task who's arguments will be used to run the program.
|
170
202
|
#
|
171
|
-
# @return [true, false]
|
203
|
+
# @return [true, false]
|
204
|
+
# Specifies the exit status of the program.
|
172
205
|
#
|
173
206
|
# @see Kernel.system
|
174
207
|
#
|
175
208
|
def run_task(task)
|
176
|
-
|
209
|
+
if task.sudo?
|
210
|
+
return sudo(*(task.arguments))
|
211
|
+
else
|
212
|
+
return run(*(task.arguments))
|
213
|
+
end
|
177
214
|
end
|
178
215
|
|
179
216
|
#
|
180
217
|
# Converts the program to a String.
|
181
218
|
#
|
182
|
-
# @return [String]
|
219
|
+
# @return [String]
|
220
|
+
# The path of the program.
|
183
221
|
#
|
184
222
|
# @example
|
185
223
|
# Program.find_by_name('echo').to_s
|
data/lib/rprogram/rprogram.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module RProgram
|
2
2
|
#
|
3
|
-
# @return [true, false]
|
4
|
-
#
|
3
|
+
# @return [true, false]
|
4
|
+
# Specifies whether debugging messages are enabled for RProgram.
|
5
|
+
# Defaults to false, if not set.
|
5
6
|
#
|
6
7
|
def RProgram.debug
|
7
8
|
@@rprogram_debug ||= false
|
@@ -10,8 +11,11 @@ module RProgram
|
|
10
11
|
#
|
11
12
|
# Enables or disables debugging messages for RProgram.
|
12
13
|
#
|
13
|
-
# @param [true, false] value
|
14
|
-
#
|
14
|
+
# @param [true, false] value
|
15
|
+
# The new value of RProgram.debug.
|
16
|
+
#
|
17
|
+
# @return [true, false]
|
18
|
+
# The new value of RProgram.debug.
|
15
19
|
#
|
16
20
|
def RProgram.debug=(value)
|
17
21
|
@@rprogram_debug = value
|
data/lib/rprogram/task.rb
CHANGED
@@ -6,14 +6,20 @@ module RProgram
|
|
6
6
|
|
7
7
|
include Options
|
8
8
|
|
9
|
+
# Specifies whether the task will be run under sudo
|
10
|
+
attr_accessor :sudo
|
11
|
+
|
9
12
|
#
|
10
13
|
# Creates a new Task object.
|
11
14
|
#
|
12
|
-
# @param [Hash{Symbol => Object}] options
|
15
|
+
# @param [Hash{Symbol => Object}] options
|
16
|
+
# Additional task options.
|
17
|
+
#
|
18
|
+
# @yield [task]
|
19
|
+
# If a block is given, it will be passed the newly created task.
|
13
20
|
#
|
14
|
-
# @
|
15
|
-
#
|
16
|
-
# @yieldparam [Task] task The newly created Task object.
|
21
|
+
# @yieldparam [Task] task
|
22
|
+
# The newly created Task object.
|
17
23
|
#
|
18
24
|
# @example
|
19
25
|
# Task.new(:test => 'example', :count => 2, :verbose => true)
|
@@ -24,6 +30,7 @@ module RProgram
|
|
24
30
|
# end
|
25
31
|
#
|
26
32
|
def initialize(options={},&block)
|
33
|
+
@sudo = (options.delete(:sudo) || false)
|
27
34
|
@subtasks = {}
|
28
35
|
@options = options
|
29
36
|
|
@@ -34,13 +41,17 @@ module RProgram
|
|
34
41
|
# Creates a new Task object, then formats command-line arguments
|
35
42
|
# using the Task object.
|
36
43
|
#
|
37
|
-
# @param [Hash{Symbol => Object}] options
|
44
|
+
# @param [Hash{Symbol => Object}] options
|
45
|
+
# Additional task options.
|
38
46
|
#
|
39
|
-
# @yield [task]
|
40
|
-
#
|
41
|
-
# @yieldparam [Task] task The newly created Task object.
|
47
|
+
# @yield [task]
|
48
|
+
# If a block is given, it will be passed the newly created task.
|
42
49
|
#
|
43
|
-
# @
|
50
|
+
# @yieldparam [Task] task
|
51
|
+
# The newly created Task object.
|
52
|
+
#
|
53
|
+
# @return [Array]
|
54
|
+
# The formatted arguments from a Task object.
|
44
55
|
#
|
45
56
|
# @example
|
46
57
|
# MyTask.arguments(:verbose => true, :count => 2)
|
@@ -57,11 +68,24 @@ module RProgram
|
|
57
68
|
self.new(options,&block).arguments
|
58
69
|
end
|
59
70
|
|
71
|
+
#
|
72
|
+
# Specifies whether the task will be ran under sudo.
|
73
|
+
#
|
74
|
+
# @return [Boolean]
|
75
|
+
# Returns +true+ if sudo is enabled, returns +false+ otherwise.
|
76
|
+
#
|
77
|
+
# @since 0.1.8
|
78
|
+
#
|
79
|
+
def sudo?
|
80
|
+
@sudo == true
|
81
|
+
end
|
82
|
+
|
60
83
|
#
|
61
84
|
# Generates the command-line arguments for all leading non-options.
|
62
85
|
#
|
63
|
-
# @return [Array]
|
64
|
-
#
|
86
|
+
# @return [Array]
|
87
|
+
# The command-line arguments generated from all the leading
|
88
|
+
# non-options of the task and it's sub-tasks.
|
65
89
|
#
|
66
90
|
def leading_non_options
|
67
91
|
args = []
|
@@ -86,8 +110,9 @@ module RProgram
|
|
86
110
|
#
|
87
111
|
# Generates the command-line arguments from all options.
|
88
112
|
#
|
89
|
-
# @return [Array]
|
90
|
-
#
|
113
|
+
# @return [Array]
|
114
|
+
# The command-line arguments generated from all the options of the
|
115
|
+
# task and it's sub-tasks.
|
91
116
|
#
|
92
117
|
def options
|
93
118
|
args = []
|
@@ -109,8 +134,9 @@ module RProgram
|
|
109
134
|
#
|
110
135
|
# Generates the command-line arguments from all tailing non-options.
|
111
136
|
#
|
112
|
-
# @return [Array]
|
113
|
-
#
|
137
|
+
# @return [Array]
|
138
|
+
# The command-line arguments generated from all the tailing
|
139
|
+
# non-options of the task and it's sub-tasks.
|
114
140
|
#
|
115
141
|
def tailing_non_options
|
116
142
|
args = []
|
@@ -135,9 +161,9 @@ module RProgram
|
|
135
161
|
#
|
136
162
|
# Generates the command-line arguments from the task.
|
137
163
|
#
|
138
|
-
# @return [Array]
|
139
|
-
#
|
140
|
-
#
|
164
|
+
# @return [Array]
|
165
|
+
# The command-line arguments compiled from the leading non-options,
|
166
|
+
# options and tailing non-options of the task and it's sub-tasks.
|
141
167
|
#
|
142
168
|
def arguments
|
143
169
|
leading_non_options + options + tailing_non_options
|
@@ -148,8 +174,11 @@ module RProgram
|
|
148
174
|
#
|
149
175
|
# Defines a sub-task.
|
150
176
|
#
|
151
|
-
# @param [String, Symbol] name
|
152
|
-
#
|
177
|
+
# @param [String, Symbol] name
|
178
|
+
# The name of the sub-task.
|
179
|
+
#
|
180
|
+
# @param [Task] task
|
181
|
+
# The task class of the sub-task.
|
153
182
|
#
|
154
183
|
# @example
|
155
184
|
# subtask :extra, ExtraTask
|
@@ -175,17 +204,20 @@ module RProgram
|
|
175
204
|
#
|
176
205
|
# Defines a non-option.
|
177
206
|
#
|
178
|
-
# @param [Hash] options
|
179
|
-
#
|
207
|
+
# @param [Hash] options
|
208
|
+
# Additional options for the non-option.
|
209
|
+
#
|
210
|
+
# @option options [Symbol] :name
|
211
|
+
# The name of the non-option.
|
212
|
+
#
|
180
213
|
# @option options [true, false] :leading (true)
|
181
|
-
#
|
182
|
-
#
|
214
|
+
# Implies the non-option is a leading non-option.
|
215
|
+
#
|
183
216
|
# @option options [false, true] :tailing (false)
|
184
|
-
#
|
185
|
-
#
|
217
|
+
# Implies the non-option is a tailing non-option.
|
218
|
+
#
|
186
219
|
# @option options [false, true] :multiple (false)
|
187
|
-
#
|
188
|
-
# given an Array of values.
|
220
|
+
# Implies the non-option maybe given an Array of values.
|
189
221
|
#
|
190
222
|
# @example
|
191
223
|
# non_option :name => 'input_file', :tailing => true
|
@@ -214,19 +246,22 @@ module RProgram
|
|
214
246
|
#
|
215
247
|
# Defines a long-option.
|
216
248
|
#
|
217
|
-
# @param [Hash] options
|
218
|
-
#
|
219
|
-
#
|
220
|
-
#
|
221
|
-
#
|
249
|
+
# @param [Hash] options
|
250
|
+
# Additional options of the long-option.
|
251
|
+
#
|
252
|
+
# @option options [String] :flag
|
253
|
+
# The flag to use for the option.
|
254
|
+
#
|
255
|
+
# @option options [Symbol] :name
|
256
|
+
# The name of the option. Defaults to the flag_namify'ed form of
|
257
|
+
# <tt>options[:flag]</tt>, if not given.
|
258
|
+
#
|
222
259
|
# @option options [true, false] :multiply (false)
|
223
|
-
#
|
224
|
-
#
|
225
|
-
#
|
260
|
+
# Specifies that the option may appear multiple times in the
|
261
|
+
# arguments.
|
262
|
+
#
|
226
263
|
# @option options [true, false] :sub_options (false)
|
227
|
-
#
|
228
|
-
# contains multiple
|
229
|
-
# sub-options.
|
264
|
+
# Specifies that the option contains multiple sub-options.
|
230
265
|
#
|
231
266
|
# @example
|
232
267
|
# long_option :flag => '--output'
|
@@ -245,17 +280,21 @@ module RProgram
|
|
245
280
|
#
|
246
281
|
# Defines a short_option.
|
247
282
|
#
|
248
|
-
# @param [Hash] options
|
249
|
-
#
|
250
|
-
#
|
283
|
+
# @param [Hash] options
|
284
|
+
# Additional options for the short-option.
|
285
|
+
#
|
286
|
+
# @option options [Symbol, String] :name
|
287
|
+
# The name of the short-option.
|
288
|
+
#
|
289
|
+
# @option options [String] :flag
|
290
|
+
# The flag to use for the short-option.
|
291
|
+
#
|
251
292
|
# @option options [true, false] :multiply (false)
|
252
|
-
#
|
253
|
-
#
|
254
|
-
#
|
293
|
+
# Specifies that the option may appear multiple times in the
|
294
|
+
# arguments.
|
295
|
+
#
|
255
296
|
# @option options [true, false] :sub_options (false)
|
256
|
-
#
|
257
|
-
# contains multiple
|
258
|
-
# sub-options.
|
297
|
+
# Specifies that the option contains multiple sub-options.
|
259
298
|
#
|
260
299
|
# @example
|
261
300
|
# short_option :flag => '-c', :name => :count
|
@@ -267,17 +306,21 @@ module RProgram
|
|
267
306
|
#
|
268
307
|
# Defines an option.
|
269
308
|
#
|
270
|
-
# @param [Hash] options
|
271
|
-
#
|
272
|
-
#
|
309
|
+
# @param [Hash] options
|
310
|
+
# Additional options.
|
311
|
+
#
|
312
|
+
# @option options [Symbol, String] :name
|
313
|
+
# The name of the option.
|
314
|
+
#
|
315
|
+
# @option options [String] :flag
|
316
|
+
# The flag to use for the option.
|
317
|
+
#
|
273
318
|
# @option options [true, false] :multiple (false)
|
274
|
-
#
|
275
|
-
#
|
276
|
-
#
|
319
|
+
# Specifies that the option may appear multiple times in the
|
320
|
+
# arguments.
|
321
|
+
#
|
277
322
|
# @option options [true, false] :sub_options (false)
|
278
|
-
#
|
279
|
-
# contains multiple
|
280
|
-
# sub-options.
|
323
|
+
# Specifies that the option contains multiple sub-options.
|
281
324
|
#
|
282
325
|
def self.define_option(options,&block)
|
283
326
|
method_name = options[:name].to_sym
|
@@ -306,9 +349,11 @@ module RProgram
|
|
306
349
|
#
|
307
350
|
# Converts a long-option flag to a Ruby method name.
|
308
351
|
#
|
309
|
-
# @param [String] flag
|
352
|
+
# @param [String] flag
|
353
|
+
# The command-line flag to convert.
|
310
354
|
#
|
311
|
-
# @return [String]
|
355
|
+
# @return [String]
|
356
|
+
# A method-name compatible version of the given flag.
|
312
357
|
#
|
313
358
|
# @example
|
314
359
|
# Task.flag_namify('--output-file')
|
data/lib/rprogram/version.rb
CHANGED
data/spec/task_spec.rb
CHANGED
@@ -35,6 +35,21 @@ describe Task do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
describe "sudo" do
|
39
|
+
it "should allow passing in the :sudo option" do
|
40
|
+
task = LSTask.new(:sudo => true)
|
41
|
+
|
42
|
+
task.should be_sudo
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should allow enabling sudo after the task has been initialized" do
|
46
|
+
task = LSTask.new
|
47
|
+
|
48
|
+
task.sudo = true
|
49
|
+
task.should be_sudo
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
38
53
|
before(:each) do
|
39
54
|
@task = LSTask.new
|
40
55
|
end
|
data/tasks/spec.rb
ADDED
data/tasks/yard.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
lib_dir = File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
|
2
|
+
unless $LOAD_PATH.include?(lib_dir)
|
3
|
+
$LOAD_PATH.unshift(lib_dir)
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'rprogram/yard/handlers/ruby'
|
7
|
+
|
8
|
+
YARD::Rake::YardocTask.new do |t|
|
9
|
+
t.files = ['lib/**/*.rb']
|
10
|
+
t.options = [
|
11
|
+
'--protected',
|
12
|
+
'--files', 'History.txt',
|
13
|
+
'--title', 'RProgram',
|
14
|
+
'--quiet'
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
task :docs => :yard
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rprogram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Postmodern
|
@@ -30,28 +30,28 @@ cert_chain:
|
|
30
30
|
pDj+ws7QjtH/Qcrr1l9jfN0ehDs=
|
31
31
|
-----END CERTIFICATE-----
|
32
32
|
|
33
|
-
date: 2009-
|
33
|
+
date: 2009-12-24 00:00:00 -08:00
|
34
34
|
default_executable:
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
type: :
|
37
|
+
name: rspec
|
38
|
+
type: :development
|
39
39
|
version_requirement:
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: 1.2.8
|
45
45
|
version:
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: yard
|
48
48
|
type: :development
|
49
49
|
version_requirement:
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.5.2
|
55
55
|
version:
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: hoe
|
@@ -61,7 +61,7 @@ dependencies:
|
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: 2.
|
64
|
+
version: 2.4.0
|
65
65
|
version:
|
66
66
|
description: |-
|
67
67
|
RProgram is a library for creating wrappers around command-line programs.
|
@@ -107,6 +107,8 @@ files:
|
|
107
107
|
- lib/rprogram/yard/handlers/ruby/metaclass_eval_handler.rb
|
108
108
|
- lib/rprogram/yard/handlers/ruby/legacy.rb
|
109
109
|
- lib/rprogram/yard/handlers/ruby/legacy/metaclass_eval_handler.rb
|
110
|
+
- tasks/spec.rb
|
111
|
+
- tasks/yard.rb
|
110
112
|
- spec/spec_helper.rb
|
111
113
|
- spec/classes/named_program.rb
|
112
114
|
- spec/classes/aliased_program.rb
|
metadata.gz.sig
CHANGED
Binary file
|