command-builder 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.txt CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ 0.2.0 (2011-07-30)
3
+ * asynchronous executing support using 'pipe-run'
4
+ * two more aliases for the #execute method
5
+ * readme correction
6
+
2
7
  0.1.1 (2011-07-24)
3
8
  * #reset method added
4
9
  * internal switch to more modern 'hash-utils'
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  gem "hash-utils", ">= 0.18.0"
5
+ gem "pipe-run", ">= 0.2.1"
5
6
 
6
7
  # Add dependencies to develop your gem here.
7
8
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -7,6 +7,7 @@ GEM
7
7
  bundler (~> 1.0)
8
8
  git (>= 1.2.5)
9
9
  rake
10
+ pipe-run (0.2.1)
10
11
  rake (0.9.2)
11
12
 
12
13
  PLATFORMS
@@ -16,3 +17,4 @@ DEPENDENCIES
16
17
  bundler (>= 1.0.0)
17
18
  hash-utils (>= 0.18.0)
18
19
  jeweler (>= 1.5.2)
20
+ pipe-run (>= 0.2.1)
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  Command Builder
2
2
  ===============
3
3
 
4
- **Command Builder** builds call to some command runnable from shell
5
- command line from its arguments. Here is real example of call to
6
- `jpegoptim`:
4
+ **Command Builder** builds command runnable from shell by simple and
5
+ ellegant way. Also allows both synchronous executing or asynchronous
6
+ one using [EventMachine][1]. Here is an real example of call
7
+ to `jpegoptim`:
7
8
 
8
9
  require "command-builder"
9
10
  cmd = CommandBuilder::new(:jpegoptim)
@@ -16,18 +17,33 @@ command line from its arguments. Here is real example of call to
16
17
 
17
18
  Value escaping and assignments are supported automatically of sure,
18
19
  so call:
20
+
19
21
  cmd.arg(:dest, './it\'s "my" folder')
20
22
 
21
23
  …will be interpreted as `jpegoptim --dest="it's \"my\" folder"`. It also
22
24
  takes spaces into the account.
23
25
 
26
+ ### Executing
27
+
28
+ Command can be executed directly by call:
29
+
30
+ cmd.execute! # for synchronous executing or...
31
+ cmd.execute do |output| # ...for asynchronous executing
32
+ # ...
33
+ end
34
+
35
+ Asynchronous executing requires [EventMachine][1] environment to be run.
36
+
37
+
24
38
  ### Flexibility
25
39
 
26
40
  Syntax described above is supported by default, but you can achieve for
27
41
  example an Windows like syntax:
42
+
28
43
  jpegoptim /m:2 -dest "directory"
29
44
 
30
45
  …simply by assigning:
46
+
31
47
  cmd.separators = ["/", ":", "-", " "]
32
48
 
33
49
  For illustration, the default one is `["-", " ", "--", "="]`.
@@ -50,5 +66,6 @@ Copyright
50
66
  Copyright © 2011 [Martin Kozák][3]. See `LICENSE.txt` for
51
67
  further details.
52
68
 
69
+ [1]: http://rubyeventmachine.com/
53
70
  [2]: http://github.com/martinkozak/command-builder/issues
54
71
  [3]: http://www.martinkozak.net/
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.name = "command-builder"
19
19
  gem.homepage = "https://github.com/martinkozak/command-builder"
20
20
  gem.license = "MIT"
21
- gem.summary = 'Builds call to some command runnable from shell command line from its arguments.'
21
+ gem.summary = 'Builds command runnable from shell by simple and ellegant way. Also allows both synchronous executing or asynchronous one using EventMachine.'
22
22
  gem.email = "martinkozak@martinkozak.net"
23
23
  gem.authors = ["Martin Kozák"]
24
24
  # Include your dependencies below. Runtime dependencies are required when using your gem,
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{command-builder}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Martin Kozák}]
12
- s.date = %q{2011-07-24}
12
+ s.date = %q{2011-07-30}
13
13
  s.email = %q{martinkozak@martinkozak.net}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -32,22 +32,25 @@ Gem::Specification.new do |s|
32
32
  s.licenses = [%q{MIT}]
33
33
  s.require_paths = [%q{lib}]
34
34
  s.rubygems_version = %q{1.8.5}
35
- s.summary = %q{Builds call to some command runnable from shell command line from its arguments.}
35
+ s.summary = %q{Builds command runnable from shell by simple and ellegant way. Also allows both synchronous executing or asynchronous one using EventMachine.}
36
36
 
37
37
  if s.respond_to? :specification_version then
38
38
  s.specification_version = 3
39
39
 
40
40
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
41
  s.add_runtime_dependency(%q<hash-utils>, [">= 0.18.0"])
42
+ s.add_runtime_dependency(%q<pipe-run>, [">= 0.2.1"])
42
43
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
43
44
  s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
44
45
  else
45
46
  s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
47
+ s.add_dependency(%q<pipe-run>, [">= 0.2.1"])
46
48
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
47
49
  s.add_dependency(%q<jeweler>, [">= 1.5.2"])
48
50
  end
49
51
  else
50
52
  s.add_dependency(%q<hash-utils>, [">= 0.18.0"])
53
+ s.add_dependency(%q<pipe-run>, [">= 0.2.1"])
51
54
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
52
55
  s.add_dependency(%q<jeweler>, [">= 1.5.2"])
53
56
  end
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "hash-utils/object"
5
5
  require "hash-utils/array"
6
+ require "pipe-run"
6
7
 
7
8
  ##
8
9
  # Represents one command line command with arguments and parameters.
@@ -224,14 +225,21 @@ class CommandBuilder
224
225
  end
225
226
 
226
227
  ##
227
- # Executes the command.
228
+ # Executes the command. If block given, takes it output of the
229
+ # command and runs it asynchronously using EventMachine.
230
+ #
231
+ # @see https://github.com/martinkozak/pipe-run
232
+ # @param [Proc] block if asynchronous run
233
+ # @return [String] output of the command or nil if asynchronous
228
234
  #
229
235
 
230
- def execute
231
- Kernel.system(self.to_s)
236
+ def execute(&block)
237
+ Pipe::run(self.to_s, &block)
232
238
  end
233
239
 
234
240
  alias :exec :execute
241
+ alias :"exec!" :execute
242
+ alias :"execute!" :execute
235
243
 
236
244
  ##
237
245
  # Converts command to string.
@@ -256,12 +264,15 @@ class CommandBuilder
256
264
 
257
265
  ##
258
266
  # Resets the arguments and parameters so prepares it for new build.
267
+ #
268
+ # @return [CommandBuilder] self instance
259
269
  # @since 0.1.1
260
270
  #
261
271
 
262
272
  def reset!
263
273
  @args = [ ]
264
274
  @params = [ ]
275
+ self
265
276
  end
266
277
 
267
278
  alias :reset :"reset!"
data/test.rb CHANGED
@@ -2,19 +2,27 @@
2
2
 
3
3
  $:.push("./lib")
4
4
  require "command-builder"
5
+ require "eventmachine"
5
6
 
6
- cmd = CommandBuilder::new(:jpegoptim)
7
- cmd << :preserve
8
- cmd << :p
9
- cmd << "file.jpg"
10
- cmd << ["1 1.jpg", "2.jpg"]
11
- cmd.arg(:max, 3)
12
- cmd.arg(:m, 3)
13
- cmd[:other] = "value"
14
- cmd[:o] = "another '\" value"
15
- puts cmd
7
+ EM::run do
8
+ cmd = CommandBuilder::new(:jpegoptim)
9
+ cmd << :preserve
10
+ cmd << :p
11
+ cmd << "file.jpg"
12
+ cmd << ["1 1.jpg", "2.jpg"]
13
+ cmd.arg(:max, 3)
14
+ cmd.arg(:m, 3)
15
+ cmd[:other] = "value"
16
+ cmd[:o] = "another '\" value"
17
+ puts cmd
16
18
 
17
- puts cmd[:max].inspect
19
+ puts cmd[:max].inspect
20
+ cmd.execute do |out|
21
+ p out
22
+ end
23
+
24
+ p cmd.execute
18
25
 
19
- cmd.reset!
20
- puts cmd
26
+ cmd.reset!
27
+ puts cmd
28
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: command-builder
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.1
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Martin Koz\xC3\xA1k"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-24 00:00:00 Z
13
+ date: 2011-07-30 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hash-utils
@@ -24,8 +24,19 @@ dependencies:
24
24
  prerelease: false
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
27
- name: bundler
27
+ name: pipe-run
28
28
  requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ requirement: &id003 !ruby/object:Gem::Requirement
29
40
  none: false
30
41
  requirements:
31
42
  - - ">="
@@ -33,10 +44,10 @@ dependencies:
33
44
  version: 1.0.0
34
45
  type: :development
35
46
  prerelease: false
36
- version_requirements: *id002
47
+ version_requirements: *id003
37
48
  - !ruby/object:Gem::Dependency
38
49
  name: jeweler
39
- requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirement: &id004 !ruby/object:Gem::Requirement
40
51
  none: false
41
52
  requirements:
42
53
  - - ">="
@@ -44,7 +55,7 @@ dependencies:
44
55
  version: 1.5.2
45
56
  type: :development
46
57
  prerelease: false
47
- version_requirements: *id003
58
+ version_requirements: *id004
48
59
  description:
49
60
  email: martinkozak@martinkozak.net
50
61
  executables: []
@@ -79,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
90
  requirements:
80
91
  - - ">="
81
92
  - !ruby/object:Gem::Version
82
- hash: 1643594554722513454
93
+ hash: -3638148640227519764
83
94
  segments:
84
95
  - 0
85
96
  version: "0"
@@ -95,6 +106,6 @@ rubyforge_project:
95
106
  rubygems_version: 1.8.5
96
107
  signing_key:
97
108
  specification_version: 3
98
- summary: Builds call to some command runnable from shell command line from its arguments.
109
+ summary: Builds command runnable from shell by simple and ellegant way. Also allows both synchronous executing or asynchronous one using EventMachine.
99
110
  test_files: []
100
111