justrun 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/justrun.rb +64 -0
  3. metadata +87 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7ba0830fb9aa41d2dc2f4e73e5f574a798bdaecb
4
+ data.tar.gz: a21c4123f097bb74ac3f89dafca0ad7f34cd94b9
5
+ SHA512:
6
+ metadata.gz: 66b2bd7010a8bccc8a9784a5243c8a6861c07a9cad70f2ff8c8b33da2fc414f6f21f5fb4e775997cf0891e8c76ed3161393feba3144d51b322f665c18bd76212
7
+ data.tar.gz: ec6c0fd746e9d0fa96e447c15f9f7c8b7b61d8b0c94b52de56f3d81cf0436f971e9191ff5b5061b02b15f72ef019dc1ffec485403df3b9922cb82bcc8be5d0ab
data/lib/justrun.rb ADDED
@@ -0,0 +1,64 @@
1
+ require 'open3'
2
+
3
+ class JustRun
4
+
5
+
6
+ def self.command(command, init: lambda { |stdin|
7
+ stdin.close_write
8
+ }, &block)
9
+ ret_code = -1
10
+ Open3.popen3 command do |stdin, stdout, stderr, wait_thr|
11
+ init.call stdin
12
+ fileno_lines = {}
13
+ begin
14
+ files = [stdout, stderr]
15
+ fileno2name = {
16
+ stdout.fileno => :stdout,
17
+ stderr.fileno => :stderr
18
+ }
19
+ until all_eof files do
20
+ ready = IO.select files
21
+ if ready
22
+ readable = ready[0]
23
+ readable.each do |f|
24
+ fileno = f.fileno
25
+ fileno_lines[fileno] ||= []
26
+ lines = fileno_lines[fileno]
27
+ name = fileno2name[fileno]
28
+ begin
29
+ data = f.read_nonblock BLOCK_SIZE
30
+ lines_new = data.lines
31
+ if lines.length > 0 and lines[-1] !~ /\n\r?$/
32
+ lines[-1] = lines[-1] + lines_new.shift
33
+ end
34
+ lines.push(*lines_new)
35
+ while lines[0] =~ /\n\r?/
36
+ block.call lines.shift.chomp, name, stdin
37
+ end
38
+ rescue EOFError => e
39
+ # expected
40
+ end
41
+ end
42
+ end
43
+ end
44
+ fileno_lines.each do |fileno, lines|
45
+ name = fileno2name[fileno]
46
+ if lines.length > 0
47
+ block.call lines.shift.chomp, name, stdin
48
+ end
49
+ end
50
+ rescue IOError => e
51
+ raise e
52
+ end
53
+ ret_code = wait_thr.value
54
+ end
55
+ ret_code.exitstatus
56
+ end
57
+
58
+ private
59
+ def self.all_eof(files)
60
+ files.find { |f| !f.eof }.nil?
61
+ end
62
+ BLOCK_SIZE = 4096*4
63
+
64
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: justrun
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Damian Kaczmarek
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-core
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.2.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: lorem_ipsum_amet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.6.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.6.2
55
+ description: Wraps popen3 in a nice interface that allows to just run a command and
56
+ get line by line output
57
+ email: rush@virtkick.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/justrun.rb
63
+ homepage: http://rubygems.org/gems/justrun
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.4.6
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Run command and get live line by line callback
87
+ test_files: []