command_exec 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,24 +1,23 @@
1
- source "https://rubygems.org"
1
+ source :rubygems
2
2
 
3
- # Specify your gem's dependencies in ruby-pdflatex.gemspec
3
+ # Specify your gem's dependencies in workplace-letter_generator.gemspec
4
4
  gemspec
5
5
 
6
- group :development do
7
- gem 'cucumber'
8
- gem 'fakefs'
9
- gem 'fuubar'
10
- gem 'github-markup'
11
- gem 'guard'
12
- gem 'guard-cucumber'
13
- gem 'guard-rspec'
14
- gem 'guard-yard'
15
- gem 'libnotify'
16
- gem 'pry'
17
- gem 'rb-inotify'
18
- gem 'rb-readline'
19
- gem 'redcarpet' , '~>1.17.2'
6
+ group :test do
7
+ gem 'rake'
20
8
  gem 'rspec'
9
+ gem 'tmrb'
21
10
  gem 'simplecov'
22
- gem 'terminal_multiplexer'
11
+ gem 'aruba'
12
+ gem 'fuubar'
13
+ end
14
+
15
+ group :documentation do
23
16
  gem 'yard'
17
+ gem 'redcarpet'
18
+ gem 'github-markup'
19
+ end
20
+
21
+ group :development do
22
+ gem 'tmrb'
24
23
  end
data/Gemfile.lock CHANGED
@@ -1,60 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- command_exec (0.0.2)
4
+ command_exec (0.1.0)
5
5
  POpen4
6
6
  colored
7
7
 
8
8
  GEM
9
- remote: https://rubygems.org/
9
+ remote: http://rubygems.org/
10
10
  specs:
11
11
  POpen4 (0.1.4)
12
12
  Platform (>= 0.4.0)
13
13
  open4
14
14
  Platform (0.4.0)
15
+ aruba (0.4.11)
16
+ childprocess (>= 0.2.3)
17
+ cucumber (>= 1.1.1)
18
+ ffi (>= 1.0.11)
19
+ rspec (>= 2.7.0)
15
20
  builder (3.0.0)
16
- coderay (1.0.5)
21
+ childprocess (0.3.4)
22
+ ffi (~> 1.0, >= 1.0.6)
17
23
  colored (1.2)
18
- cucumber (1.1.9)
24
+ cucumber (1.2.1)
19
25
  builder (>= 2.1.2)
20
- diff-lcs (>= 1.1.2)
21
- gherkin (~> 2.9.0)
26
+ diff-lcs (>= 1.1.3)
27
+ gherkin (~> 2.11.0)
22
28
  json (>= 1.4.6)
23
- term-ansicolor (>= 1.0.6)
24
29
  diff-lcs (1.1.3)
25
- fakefs (0.4.0)
26
- ffi (1.0.11)
30
+ ffi (1.1.0)
27
31
  fuubar (1.0.0)
28
32
  rspec (~> 2.0)
29
33
  rspec-instafail (~> 0.2.0)
30
34
  ruby-progressbar (~> 0.0.10)
31
- gherkin (2.9.1)
35
+ gherkin (2.11.1)
32
36
  json (>= 1.4.6)
33
37
  github-markup (0.7.1)
34
- guard (1.0.1)
35
- ffi (>= 0.5.0)
36
- thor (~> 0.14.6)
37
- guard-cucumber (0.7.5)
38
- cucumber (>= 0.10)
39
- guard (>= 0.8.3)
40
- guard-rspec (0.6.0)
41
- guard (>= 0.10.0)
42
- guard-yard (1.0.2)
43
- guard (>= 0.2.2)
44
- yard (>= 0.7.0)
45
- highline (1.6.11)
46
- json (1.6.5)
47
- libnotify (0.7.2)
48
- method_source (0.7.1)
38
+ json (1.7.3)
49
39
  multi_json (1.1.0)
50
40
  open4 (1.3.0)
51
- pry (0.9.8.4)
52
- coderay (~> 1.0.5)
53
- method_source (~> 0.7.1)
54
- slop (>= 2.4.4, < 3)
55
- rb-inotify (0.8.8)
56
- ffi (>= 0.5.0)
57
- rb-readline (0.4.2)
41
+ rake (0.9.2.2)
58
42
  redcarpet (1.17.2)
59
43
  rspec (2.9.0)
60
44
  rspec-core (~> 2.9.0)
@@ -70,32 +54,22 @@ GEM
70
54
  multi_json (~> 1.0)
71
55
  simplecov-html (~> 0.5.3)
72
56
  simplecov-html (0.5.3)
73
- slop (2.4.4)
74
- term-ansicolor (1.0.7)
75
- terminal_multiplexer (1.0.2)
76
- highline
77
- thor (0.14.6)
57
+ thor (0.15.4)
58
+ tmrb (1.2.7)
59
+ thor
78
60
  yard (0.7.5)
79
61
 
80
62
  PLATFORMS
81
63
  ruby
82
64
 
83
65
  DEPENDENCIES
66
+ aruba
84
67
  command_exec!
85
- cucumber
86
- fakefs
87
68
  fuubar
88
69
  github-markup
89
- guard
90
- guard-cucumber
91
- guard-rspec
92
- guard-yard
93
- libnotify
94
- pry
95
- rb-inotify
96
- rb-readline
97
- redcarpet (~> 1.17.2)
70
+ rake
71
+ redcarpet
98
72
  rspec
99
73
  simplecov
100
- terminal_multiplexer
74
+ tmrb
101
75
  yard
data/Rakefile CHANGED
@@ -1 +1,49 @@
1
- require "bundler/gem_tasks"
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+ require 'yard'
4
+ require 'rubygems/package_task'
5
+
6
+ YARD::Rake::YardocTask.new do |t|
7
+ t.files = ['lib/**/*.rb', 'README.md', 'LICENCE.md']
8
+ t.options = ['--output-dir=doc/yard', '--markup-provider=redcarpet', '--markup=markdown' ]
9
+ end
10
+
11
+ task :terminal do
12
+ sh "script/terminal"
13
+ end
14
+
15
+ task :term => :terminal
16
+ task :t => :terminal
17
+
18
+ namespace :version do
19
+ version_file = Dir.glob('lib/**/version.rb').first
20
+
21
+ task :bump do
22
+
23
+ new_version = ENV['VERSION']
24
+
25
+ version_string = %Q{ module DataUri
26
+ VERSION = '#{new_version}'
27
+ end}
28
+
29
+ File.open(version_file, "w") do |f|
30
+ f.write version_string.strip_heredoc
31
+ end
32
+
33
+ sh "git add #{version_file}"
34
+ sh "git commit -m 'version bump to #{new_version}'"
35
+ sh "git tag data_uri-#{new_version}"
36
+ end
37
+
38
+ task :show do
39
+ raw_version = File.open(version_file, "r").readlines.grep(/VERSION/).first
40
+
41
+ if raw_version
42
+ version = raw_version.chomp.match(/VERSION\s+=\s+["']([^'"]+)["']/) { $1 }
43
+ puts version
44
+ else
45
+ warn "Could not parse version file \"#{version_file}\""
46
+ end
47
+
48
+ end
49
+ end
@@ -1,9 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'popen4'
4
- require 'colored'
5
- require 'logger'
6
-
7
3
  # Classes concerning command execution
8
4
  module CommandExec
9
5
  # Run commands
@@ -31,7 +27,7 @@ module CommandExec
31
27
  :error_keywords => [],
32
28
  :working_directory => Dir.pwd,
33
29
  :logfile => '',
34
- :debug => false,
30
+ :log_level => :info,
35
31
  }.update opts
36
32
 
37
33
  @logger = @opts[:logger]
@@ -41,6 +37,8 @@ module CommandExec
41
37
  @error_keywords = @opts[:error_keywords]
42
38
  @logfile = @opts[:logfile]
43
39
 
40
+ configure_logging
41
+
44
42
  @working_directory = @opts[:working_directory]
45
43
  Dir.chdir(working_directory)
46
44
 
@@ -48,6 +46,27 @@ module CommandExec
48
46
 
49
47
  private
50
48
 
49
+ def configure_logging
50
+ case @opts[:log_level]
51
+ when :debug
52
+ @logger.level = Logger::DEBUG
53
+ when :error
54
+ @logger.level = Logger::ERROR
55
+ when :fatal
56
+ @logger.level = Logger::FATAL
57
+ when :info
58
+ @logger.level = Logger::INFO
59
+ when :unknown
60
+ @logger.level = Logger::UNKNOWN
61
+ when :warn
62
+ @logger.level = Logger::WARN
63
+ when :silent
64
+ @logger.instance_variable_set(:@logdev, nil)
65
+ else
66
+ log_level = Logger::INFO
67
+ end
68
+ end
69
+
51
70
  # Find utility path
52
71
  #
53
72
  # @param [Symbol] name Name of utility
@@ -61,7 +80,7 @@ module CommandExec
61
80
  raise Exceptions::CommandNotFound
62
81
  end
63
82
 
64
- return path
83
+ path
65
84
  end
66
85
 
67
86
  # Build string to execute command
@@ -73,20 +92,17 @@ module CommandExec
73
92
  cmd += options.empty? ? "" : " #{options}"
74
93
  cmd += parameter.empty? ? "" : " #{parameter}"
75
94
 
76
- return cmd
95
+ cmd
77
96
  end
78
97
 
79
- # Checks for errors
80
- #
81
- # @raise [String]
82
-
83
98
  public
84
99
 
85
100
  # Output the textual representation of a command
101
+ # public alias for build_cmd_string
86
102
  #
87
103
  # @return [String] command in text form
88
- def to_txt
89
- return build_cmd_string
104
+ def to_txt
105
+ build_cmd_string
90
106
  end
91
107
 
92
108
  # Run the program
@@ -125,8 +141,7 @@ module CommandExec
125
141
 
126
142
  @logger.info "#{@name.to_s}: #{msg}"
127
143
 
128
- return @result
129
-
144
+ @result
130
145
  end
131
146
 
132
147
  # Read the content of the logfile
@@ -144,7 +159,7 @@ module CommandExec
144
159
  end
145
160
  end
146
161
 
147
- return content
162
+ content
148
163
  end
149
164
 
150
165
  # Decide if a program run was successful
@@ -184,8 +199,7 @@ module CommandExec
184
199
  result << stdout
185
200
  end
186
201
 
187
- return result
188
-
202
+ result
189
203
  end
190
204
 
191
205
  # Find error in stdout
@@ -203,8 +217,7 @@ module CommandExec
203
217
  end
204
218
  end
205
219
 
206
- return error_found
207
-
220
+ error_found
208
221
  end
209
222
 
210
223
  # Generate the message which is return to the user
@@ -221,7 +234,7 @@ module CommandExec
221
234
  message.concat msg.flatten
222
235
  end
223
236
 
224
- return message.join("\n")
237
+ message.join("\n")
225
238
  end
226
239
 
227
240
  # Constructur to initiate a new command and run it later
@@ -231,7 +244,7 @@ module CommandExec
231
244
  command = new(name,opts)
232
245
  command.run
233
246
 
234
- return command
247
+ command
235
248
  end
236
249
 
237
250
  end
@@ -1,3 +1,3 @@
1
1
  module CommandExec
2
- VERSION = "0.0.3"
2
+ VERSION='0.1.0'
3
3
  end
data/lib/command_exec.rb CHANGED
@@ -1,6 +1,11 @@
1
+ #encoding: utf-8
2
+
3
+ require 'popen4'
4
+ require 'colored'
5
+ require 'logger'
6
+
1
7
  require 'command_exec/version'
2
8
  require 'command_exec/exceptions'
3
9
  require 'command_exec/command'
4
10
 
5
- module CommandExec
6
- end
11
+ module CommandExec; end
data/script/terminal ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'tmrb'
4
+
5
+ tmux = TmRb::Multiplexer.new
6
+ #creates an empty window
7
+ tmux.new_session(session_name: 'command_exec')
8
+
9
+ tmux.new_window(:name => 'code', :command => "zsh -c 'vim -p lib/**/*.rb'")
10
+ tmux.new_window(:name => 'spec', :command => "zsh -c 'vim -p spec/**/*.rb'")
11
+ tmux.new_window(:name => 'features', :command => "zsh -c 'vim -p features/**/*.{rb,feature}'")
12
+ tmux.start
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Command do
4
- let(:logger) {Logger.new('/dev/null')}
4
+ let(:logger) {Logger.new(StringIO.new)}
5
5
  #let(:logger) {Logger.new($stdout)}
6
- let(:debug) {false}
7
- #let(:debug) {true}
8
- let(:command) { Command.new(:echo , :debug=>debug, :logger => logger, :parameter => "hello world" , :error_keywords => %q[abc def], :working_directory => '/tmp' ) }
6
+ let(:log_level) {:info}
7
+ let(:command) { Command.new(:echo , :log_level => :silent, :logger => logger, :parameter => "hello world" , :error_keywords => %q[abc def], :working_directory => '/tmp' ) }
9
8
 
10
9
 
11
10
  it "has a path" do
@@ -30,7 +29,7 @@ describe Command do
30
29
  end
31
30
 
32
31
  it "can be used to construct a command string, which can be executed" do
33
- command = Command.new(:pdflatex, :debug => debug, :logger => logger, :parameter => "index.tex blub.tex", :options => "-a -b")
32
+ command = Command.new(:pdflatex, :log_level => :silent, :logger => logger, :parameter => "index.tex blub.tex", :options => "-a -b")
34
33
  command.send(:build_cmd_string).should == "/usr/bin/pdflatex -a -b index.tex blub.tex"
35
34
  end
36
35
 
@@ -44,17 +43,17 @@ describe Command do
44
43
  end
45
44
 
46
45
  it "execute existing programs" do
47
- command = Command.execute(:echo, :debug => debug, :logger => logger ,:parameter => "index.tex blub.tex", :options => "-- -a -b")
46
+ command = Command.execute(:echo, :log_level => :silent, :logger => logger ,:parameter => "index.tex blub.tex", :options => "-- -a -b")
48
47
  command.result.should == true
49
48
  end
50
49
 
51
50
  it "does not execute non-existing programs" do
52
- command = Command.execute(:grep, :debug => debug, :logger => logger, :parameter => "index.tex blub.tex", :options => "-- -a -b")
51
+ command = Command.execute(:grep, :log_level => :silent, :logger => logger, :parameter => "index.tex blub.tex", :options => "-- -a -b")
53
52
  command.result.should == false
54
53
  end
55
54
 
56
55
  it "checks if errors have happend during execution" do
57
- lambda { Command.new(:echo1, :debug => debug, :logger => logger, :parameter => "index.tex blub.tex", :options => "-- -a -b") }.should raise_error CommandNotFound
56
+ lambda { Command.new(:echo1, :log_level => :silent, :logger => logger, :parameter => "index.tex blub.tex", :options => "-- -a -b") }.should raise_error CommandNotFound
58
57
  end
59
58
 
60
59
  it "decides which output should be returned to the user" do
@@ -95,6 +94,32 @@ describe Command do
95
94
  command.send(:message, true ).should == "\e[1m\e[32mOK\e[0m\e[0m"
96
95
  end
97
96
 
97
+ it "is very verbose and returns a lot of output" do
98
+ bucket = StringIO.new
99
+ logger = Logger.new(bucket)
100
+ Command.execute(:echo, :logger => logger ,:parameter => "index.tex blub.tex", :options => "-- -a -b" , :log_level => :debug)
101
+
102
+ bucket.string.should =~ /OK/
103
+ end
104
+
105
+ it "is silent and returns no output" do
106
+ bucket = StringIO.new
107
+ logger = Logger.new(bucket)
108
+ Command.execute(:echo, :logger => logger ,:parameter => "index.tex blub.tex", :options => "-- -a -b" , :log_level => :silent)
109
+
110
+ bucket.string.should == ""
111
+ end
112
+
113
+ # not completed
114
+ #it "use a log file if given" do
115
+ # application_log_file = Tempfile.new('command_exec_test')
116
+ # application_log_file.write "ERROR"
117
+
118
+ # binding.pry
119
+ # Command.execute(:echo, :logger => logger ,:parameter => "index.tex blub.tex", :options => "-- -a -b" , :log_level => :silent, :logfile => application_log_file, :error_keywords => %W[ERROR])
120
+
121
+ #end
122
+
98
123
 
99
124
 
100
125
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ $LOAD_PATH << File.expand_path('../lib' , File.dirname(__FILE__))
4
4
  require 'pry'
5
5
  require 'stringio'
6
6
 
7
+ require 'tempfile'
8
+
7
9
  require 'simplecov'
8
10
  SimpleCov.start
9
11
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_exec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-21 00:00:00.000000000Z
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: POpen4
16
- requirement: &16707080 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16707080
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: colored
27
- requirement: &16706660 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,7 +37,12 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *16706660
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  description: This adds bells and whistles to ease shell command execution
37
47
  email:
38
48
  - dev@fedux.org
@@ -54,6 +64,7 @@ files:
54
64
  - lib/command_exec/exceptions.rb
55
65
  - lib/command_exec/spec_helper_module.rb
56
66
  - lib/command_exec/version.rb
67
+ - script/terminal
57
68
  - spec/command/command_spec.rb
58
69
  - spec/spec_helper.rb
59
70
  homepage: ''
@@ -76,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
87
  version: '0'
77
88
  requirements: []
78
89
  rubyforge_project:
79
- rubygems_version: 1.8.17
90
+ rubygems_version: 1.8.24
80
91
  signing_key:
81
92
  specification_version: 3
82
93
  summary: Helper gem to exectue arbitrary shell commands