rprogram 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,11 @@
1
+ ### 0.3.2 / 2012-07-15
2
+
3
+ * Require Ruby >= 1.8.7.
4
+ * Removed env as a dependency.
5
+ * Added {RProgram::Argument}.
6
+ * Removed orphaned `rprogram/yard.rb` file.
7
+ * Style improvements.
8
+
1
9
  ### 0.3.1 / 2012-05-27
2
10
 
3
11
  * Replaced ore-tasks with
@@ -76,7 +84,7 @@
76
84
  * Renamed `PRogram::Compat.PATHS` to `RProgram::Compat.paths`.
77
85
  * Refactored {RProgram::Option#arguments}.
78
86
  * Removed `RProgram::Option#format`.
79
- * Refactored {RProgram::NonOption#arguments}.
87
+ * Refactored `RProgram::NonOption#arguments`.
80
88
  * Renamed `RProgram::NonOption#leading` to {RProgram::NonOption#leading?}.
81
89
  * Removed `RProgram::NonOption#tailing`.
82
90
  * Added {RProgram::NonOption#tailing?}.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007-2011 Hal Brodigan
1
+ Copyright (c) 2007-2012 Hal Brodigan
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -49,8 +49,8 @@ First, create the class to represent the options of the program, using
49
49
  long_option :flag => '--includes', :multiple => true
50
50
 
51
51
  # options with multiple values can have a custom separator character
52
- long_option :flag => '--ops',
53
- :multiple => true,
52
+ long_option :flag => '--ops',
53
+ :multiple => true,
54
54
  :separator => ','
55
55
 
56
56
  # define any non-options (aka additional arguments)
@@ -89,23 +89,19 @@ Finally, run your program with options or a block:
89
89
 
90
90
  MyProgram.my_run do |my_prog|
91
91
  my_prog.includes = ['one', 'two', 'three']
92
- my_prog.mode == :safe
92
+ my_prog.mode = :safe
93
93
 
94
94
  my_prog.output = 'output.txt'
95
- my_prog.files = ['test1.txt', 'test2.txt']
95
+ my_prog.files = ['test1.txt', 'test2.txt']
96
96
  end
97
97
  # => true
98
98
 
99
- ## Requirements
100
-
101
- * [env](https://github.com/postmodern/env) ~> 0.1, >= 0.1.2
102
-
103
99
  ## Install
104
100
 
105
- $ sudo gem install rprogram
101
+ $ gem install rprogram
106
102
 
107
103
  ## License
108
104
 
109
- Copyright (c) 2007-2011 Hal Brodigan
105
+ Copyright (c) 2007-2012 Hal Brodigan
110
106
 
111
107
  See {file:LICENSE.txt} for license information.
@@ -13,8 +13,7 @@ email: postmodern.mod3@gmail.com
13
13
  homepage: https://github.com/postmodern/rprogram#readme
14
14
  has_yard: true
15
15
 
16
- dependencies:
17
- env: ~> 0.1, >= 0.1.2
16
+ required_ruby_version: ">= 1.8.7"
18
17
 
19
18
  development_dependencies:
20
19
  rubygems-tasks: ~> 0.1
@@ -0,0 +1,31 @@
1
+ module RProgram
2
+ class Argument
3
+
4
+ #
5
+ # Formats a value into an Array of arguments.
6
+ #
7
+ # @param [Hash, Array, String] value
8
+ # The value to format.
9
+ #
10
+ # @return [Array]
11
+ # The formatted arguments.
12
+ #
13
+ def arguments(value)
14
+ value = case value
15
+ when Hash
16
+ value.map do |key,sub_value|
17
+ if sub_value == true then key.to_s
18
+ elsif sub_value then "#{key}=#{sub_value}"
19
+ end
20
+ end
21
+ when false, nil
22
+ []
23
+ else
24
+ Array(value)
25
+ end
26
+
27
+ return value.compact
28
+ end
29
+
30
+ end
31
+ end
@@ -1,5 +1,7 @@
1
+ require 'rprogram/argument'
2
+
1
3
  module RProgram
2
- class NonOption
4
+ class NonOption < Argument
3
5
 
4
6
  # Name of the argument(s)
5
7
  attr_reader :name
@@ -28,12 +30,9 @@ module RProgram
28
30
  def initialize(options={})
29
31
  @name = options[:name]
30
32
 
31
- @tailing = if options[:leading]
32
- !(options[:leading])
33
- elsif options[:tailing]
34
- options[:tailing]
35
- else
36
- true
33
+ @tailing = if options[:leading] then !options[:leading]
34
+ elsif options[:tailing] then options[:tailing]
35
+ else true
37
36
  end
38
37
 
39
38
  @multiple = (options[:multiple] || false)
@@ -59,34 +58,5 @@ module RProgram
59
58
  !(@tailing)
60
59
  end
61
60
 
62
- #
63
- # Formats the arguments for the non-option.
64
- #
65
- # @param [Hash, Array, String, nil] value
66
- # The value to use for the arguments of the non-option.
67
- #
68
- # @return [Array]
69
- # The arguments for the non-option.
70
- #
71
- def arguments(value)
72
- return [] unless value
73
-
74
- if value.kind_of?(Hash)
75
- value = value.map do |key,sub_value|
76
- if sub_value == true
77
- key.to_s
78
- elsif sub_value
79
- "#{key}=#{sub_value}"
80
- end
81
- end
82
- elsif value.kind_of?(Array)
83
- value = value.flatten
84
- else
85
- value = [value]
86
- end
87
-
88
- return value.compact
89
- end
90
-
91
61
  end
92
62
  end
@@ -1,5 +1,7 @@
1
+ require 'rprogram/argument'
2
+
1
3
  module RProgram
2
- class Option
4
+ class Option < Argument
3
5
 
4
6
  # Flag of the option
5
7
  attr_reader :flag
@@ -54,26 +56,24 @@ module RProgram
54
56
  def initialize(options={},&block)
55
57
  @flag = options[:flag]
56
58
 
57
- @equals = (options[:equals] || false)
58
- @multiple = (options[:multiple] || false)
59
- @separator = if options[:separator]
60
- options[:separator]
61
- elsif options[:equals]
62
- ' '
59
+ @equals = (options[:equals] || false)
60
+ @multiple = (options[:multiple] || false)
61
+ @separator = if options[:separator] then options[:separator]
62
+ elsif options[:equals] then ' '
63
63
  end
64
64
  @sub_options = (options[:sub_options] || false)
65
65
 
66
66
  @formatter = if block
67
- block
68
- else
69
- Proc.new do |opt,value|
70
- if opt.equals
71
- ["#{opt.flag}=#{value.first}"]
72
- else
73
- [opt.flag] + value
74
- end
75
- end
76
- end
67
+ block
68
+ else
69
+ Proc.new do |opt,value|
70
+ if opt.equals
71
+ ["#{opt.flag}=#{value.first}"]
72
+ else
73
+ [opt.flag] + value
74
+ end
75
+ end
76
+ end
77
77
  end
78
78
 
79
79
  #
@@ -86,38 +86,27 @@ module RProgram
86
86
  # The formatted arguments of the option.
87
87
  #
88
88
  def arguments(value)
89
- return [@flag] if value == true
90
- return [] unless value
89
+ case value
90
+ when true
91
+ [@flag]
92
+ when false, nil
93
+ []
94
+ else
95
+ value = super(value)
91
96
 
92
- value = value.arguments if value.respond_to?(:arguments)
97
+ if @multiple
98
+ args = []
93
99
 
94
- if value.kind_of?(Hash)
95
- value = value.map { |key,sub_value|
96
- if sub_value == true
97
- key.to_s
98
- elsif sub_value
99
- "#{key}=#{sub_value}"
100
+ value.each do |arg|
101
+ args += Array(@formatter.call(self,[arg]))
100
102
  end
101
- }
102
- elsif value.kind_of?(Array)
103
- value.flatten!
104
- else
105
- value = [value]
106
- end
107
103
 
108
- value.compact!
104
+ return args
105
+ else
106
+ value = [value.join(@separator)] if @separator
109
107
 
110
- if @multiple
111
- return value.inject([]) do |args,value|
112
- arg = @formatter.call(self,[value])
113
-
114
- args += arg if arg
115
- args
108
+ return Array(@formatter.call(self,value))
116
109
  end
117
- else
118
- value = [value.join(@separator)] if @separator
119
-
120
- return (@formatter.call(self,value) || [])
121
110
  end
122
111
  end
123
112
 
@@ -32,17 +32,17 @@ module RProgram
32
32
  # @example
33
33
  # Program.new('/usr/bin/ls')
34
34
  #
35
- def initialize(path,&block)
35
+ def initialize(path)
36
36
  path = File.expand_path(path)
37
37
 
38
38
  unless File.file?(path)
39
- raise(ProgramNotFound,"program #{path.dump} does not exist",caller)
39
+ raise(ProgramNotFound,"program #{path.dump} does not exist")
40
40
  end
41
41
 
42
42
  @path = path
43
43
  @name = File.basename(path)
44
44
 
45
- block.call(self) if block
45
+ yield self if block_given?
46
46
  end
47
47
 
48
48
  #
@@ -94,7 +94,7 @@ module RProgram
94
94
  # alias_program 'vim', 'vi'
95
95
  #
96
96
  def self.alias_program(*aliases)
97
- @program_aliases = aliases.map { |name| name.to_s }
97
+ @program_aliases = aliases.map(&:to_s)
98
98
  end
99
99
 
100
100
  #
@@ -229,9 +229,9 @@ module RProgram
229
229
  path ||= System.find_program_by_names(*self.program_names)
230
230
 
231
231
  unless path
232
- names = self.program_names.map { |name| name.dump }.join(', ')
232
+ names = self.program_names.map(&:dump).join(', ')
233
233
 
234
- raise(ProgramNotFound,"programs #{names} were not found",caller)
234
+ raise(ProgramNotFound,"programs #{names} were not found")
235
235
  end
236
236
 
237
237
  return self.new(path,*arguments,&block)
@@ -339,10 +339,9 @@ module RProgram
339
339
  # For valid `:sudo` options.
340
340
  #
341
341
  def sudo(*arguments)
342
- options = if arguments.last.kind_of?(Hash)
343
- arguments.pop
344
- else
345
- {}
342
+ options = case arguments.last
343
+ when Hash then arguments.pop
344
+ else {}
346
345
  end
347
346
 
348
347
  task = SudoTask.new(options.delete(:sudo) || {})
@@ -1,11 +1,13 @@
1
1
  module RProgram
2
+ @debug = false
3
+
2
4
  #
3
5
  # @return [true, false]
4
6
  # Specifies whether debugging messages are enabled for RProgram.
5
7
  # Defaults to false, if not set.
6
8
  #
7
- def RProgram.debug
8
- @@rprogram_debug ||= false
9
+ def self.debug
10
+ @debug
9
11
  end
10
12
 
11
13
  #
@@ -17,7 +19,7 @@ module RProgram
17
19
  # @return [true, false]
18
20
  # The new value of RProgram.debug.
19
21
  #
20
- def RProgram.debug=(value)
21
- @@rprogram_debug = value
22
+ def self.debug=(value)
23
+ @debug = value
22
24
  end
23
25
  end
@@ -1,14 +1,13 @@
1
1
  require 'rprogram/exceptions/program_not_found'
2
2
  require 'rprogram/rprogram'
3
3
 
4
- require 'env/variables'
4
+ require 'pathname'
5
5
 
6
6
  module RProgram
7
7
  #
8
8
  # @since 0.3.0
9
9
  #
10
10
  module System
11
- extend Env::Variables
12
11
 
13
12
  @arch, @platform = RUBY_PLATFORM.split('-',2)
14
13
  @platform ||= @arch
@@ -25,7 +24,7 @@ module RProgram
25
24
  #
26
25
  # @since 0.3.0
27
26
  #
28
- def System.arch
27
+ def self.arch
29
28
  @arch
30
29
  end
31
30
 
@@ -39,7 +38,7 @@ module RProgram
39
38
  # System.platform
40
39
  # # => "linux"
41
40
  #
42
- def System.platform
41
+ def self.platform
43
42
  @platform
44
43
  end
45
44
 
@@ -51,7 +50,7 @@ module RProgram
51
50
  #
52
51
  # @since 0.3.0
53
52
  #
54
- def System.windows?
53
+ def self.windows?
55
54
  if @platform
56
55
  @platform.include?('mingw') || @platform.include?('mswin')
57
56
  else
@@ -67,8 +66,8 @@ module RProgram
67
66
  #
68
67
  # @since 0.3.0
69
68
  #
70
- def System.ruby_1_8?
71
- RUBY_VERSION[0,4] == '1.8.'
69
+ def self.ruby_1_8?
70
+ RUBY_VERSION.start_with?('1.8.')
72
71
  end
73
72
 
74
73
  #
@@ -79,9 +78,20 @@ module RProgram
79
78
  #
80
79
  # @since 0.3.0
81
80
  #
82
- def System.jruby?
83
- Object.const_defined?(:RUBY_ENGINE) && \
84
- Object.const_get(:RUBY_ENGINE) == 'jruby'
81
+ def self.jruby?
82
+ const_defined?(:RUBY_ENGINE) && const_get(:RUBY_ENGINE) == 'jruby'
83
+ end
84
+
85
+ #
86
+ # The directories to search for programs.
87
+ #
88
+ # @return [Array<Pathname>]
89
+ # The directories containing programs.
90
+ #
91
+ def self.paths
92
+ @paths ||= ENV['PATH'].split(File::PATH_SEPARATOR).map do |dir|
93
+ Pathname.new(dir)
94
+ end
85
95
  end
86
96
 
87
97
  #
@@ -97,11 +107,9 @@ module RProgram
97
107
  # System.find_program('as')
98
108
  # #=> #<Pathname:/usr/bin/as>
99
109
  #
100
- def System.find_program(name)
110
+ def self.find_program(name)
101
111
  # add the `.exe` suffix to the name, if running on Windows
102
- if windows?
103
- name = "#{name}.exe"
104
- end
112
+ name = "#{name}.exe" if windows?
105
113
 
106
114
  paths.each do |dir|
107
115
  full_path = dir.join(name).expand_path
@@ -125,7 +133,7 @@ module RProgram
125
133
  # System.find_program_by_names("gas","as")
126
134
  # # => #<Pathname:/usr/bin/as>
127
135
  #
128
- def System.find_program_by_names(*names)
136
+ def self.find_program_by_names(*names)
129
137
  names.each do |name|
130
138
  if (path = find_program(name))
131
139
  return path
@@ -171,24 +179,25 @@ module RProgram
171
179
  #
172
180
  # @raise [RuntimeError]
173
181
  # Passing `:popen`, `:env` or exec options is not supported
174
- # before Ruby 1.9.1.
182
+ # on Ruby 1.8.x.
175
183
  #
176
184
  # @see http://rubydoc.info/stdlib/core/1.9.2/Kernel#spawn-instance_method
177
185
  # For acceptable options.
178
186
  #
179
- def System.run(*arguments)
187
+ def self.run(*arguments)
180
188
  # extra tailing options and ENV variables from arguments
181
- if arguments.last.kind_of?(Hash)
189
+ case arguments.last
190
+ when Hash
182
191
  options = arguments.pop
183
- env = (options.delete(:env) || {})
184
- popen = options.delete(:popen)
192
+ env = (options.delete(:env) || {})
193
+ popen = options.delete(:popen)
185
194
  else
186
195
  options = {}
187
- env = {}
196
+ env = {}
188
197
  end
189
198
 
190
199
  # all arguments must be Strings
191
- arguments = arguments.map { |arg| arg.to_s }
200
+ arguments = arguments.map(&:to_s)
192
201
 
193
202
  # print debugging information
194
203
  if RProgram.debug
@@ -222,13 +231,11 @@ module RProgram
222
231
  end
223
232
 
224
233
  # re-add ENV variables and exec options
225
- arguments.unshift(env) unless env.empty?
234
+ arguments.unshift(env) unless env.empty?
226
235
  arguments.push(options) unless options.empty?
227
236
 
228
- if popen
229
- IO.popen(arguments,popen)
230
- else
231
- Kernel.system(*arguments)
237
+ if popen then IO.popen(arguments,popen)
238
+ else Kernel.system(*arguments)
232
239
  end
233
240
  end
234
241
 
@@ -240,7 +247,7 @@ module RProgram
240
247
  #
241
248
  # @since 0.3.0
242
249
  #
243
- def System.sudo_path
250
+ def self.sudo_path
244
251
  @sudo ||= find_program('sudo')
245
252
  end
246
253
 
@@ -255,7 +262,7 @@ module RProgram
255
262
  #
256
263
  # @since 0.3.0
257
264
  #
258
- def System.sudo_path=(path)
265
+ def self.sudo_path=(path)
259
266
  @sudo = Pathname.new(path)
260
267
  end
261
268
 
@@ -267,7 +274,7 @@ module RProgram
267
274
  #
268
275
  # @since 0.3.0
269
276
  #
270
- def System.sudo?
277
+ def self.sudo?
271
278
  !sudo_path.nil?
272
279
  end
273
280
 
@@ -305,7 +312,7 @@ module RProgram
305
312
  #
306
313
  # @see run
307
314
  #
308
- def System.sudo(*arguments)
315
+ def self.sudo(*arguments)
309
316
  unless sudo?
310
317
  raise(ProgramNotFound,'could not find the "sudo" program')
311
318
  end