browserify_rb 0.1.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.
@@ -0,0 +1,83 @@
1
+ require "open3"
2
+ require "stringio"
3
+ require "logger"
4
+
5
+ class BrowserifyRb
6
+ module Popen3
7
+ LOG = Logger.new(STDERR)
8
+
9
+ CHUNK_SIZE = 2000
10
+ DEFAULT_STDOUT_HANDLER = proc {|data| STDOUT.print data }
11
+ DEFAULT_STDERR_HANDLER = proc {|data| STDERR.print data }
12
+
13
+ def self.async_exec(
14
+ input: "",
15
+ env: {},
16
+ cmd: nil,
17
+ stdout_handler: DEFAULT_STDOUT_HANDLER,
18
+ stderr_handler: DEFAULT_STDERR_HANDLER,
19
+ spawn_opts: {},
20
+ chunk_size: CHUNK_SIZE)
21
+
22
+ raise ArgumentError, "'cmd' require" if cmd.nil?
23
+
24
+ stdin, stdout, stderr, wait_thr = Open3.popen3 env, cmd, spawn_opts
25
+
26
+ in_buf = StringIO.new input
27
+ opened_ins = [stdin]
28
+ opened_outs = [stdout, stderr]
29
+
30
+ Thread.fork do
31
+ begin
32
+ while not opened_outs.empty?
33
+ ios = IO.select opened_outs, opened_ins, nil, 1
34
+ if ios.nil? and Process.waitpid(wait_thr.pid, Process::WNOHANG)
35
+ break
36
+ end
37
+
38
+ outs, ins, = ios
39
+
40
+ unless outs.nil?
41
+ if outs.include? stdout
42
+ begin
43
+ d = stdout.readpartial CHUNK_SIZE
44
+ stdout_handler.yield d
45
+ rescue EOFError
46
+ opened_outs.delete stdout
47
+ end
48
+ end
49
+
50
+ if outs.include? stderr
51
+ begin
52
+ d = stderr.readpartial CHUNK_SIZE
53
+ stderr_handler.yield d
54
+ rescue EOFError
55
+ opened_outs.delete stderr
56
+ end
57
+ end
58
+ end
59
+
60
+ if not ins.nil? and ins.include? stdin
61
+ i = begin
62
+ in_buf.readpartial CHUNK_SIZE
63
+ rescue EOFError
64
+ nil
65
+ end
66
+ if i.nil?
67
+ stdin.close
68
+ opened_ins.delete stdin
69
+ else
70
+ bytes = stdin.write_nonblock(i)
71
+ in_buf.seek bytes - i.bytesize, IO::SEEK_CUR
72
+ end
73
+ end
74
+ end
75
+ rescue => e
76
+ LOG.error e
77
+ end
78
+ end
79
+
80
+ wait_thr
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,3 @@
1
+ class BrowserifyRb
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,79 @@
1
+ require "browserify_rb/version"
2
+ require "browserify_rb/nvm"
3
+
4
+ require "stringio"
5
+
6
+ class BrowserifyRb
7
+ DEFAULT_NVM_DIR = "#{ENV["HOME"]}/.nvm"
8
+
9
+ def initialize(
10
+ browserify_opts: "", node_ver: "stable", env: {},
11
+ nvm_dir: DEFAULT_NVM_DIR, suppress_stderr: false)
12
+ @nvm = BrowserifyRb::Nvm.new nvm_dir
13
+ @node_ver = node_ver
14
+ @env = env
15
+ @browserify_opts = browserify_opts
16
+ @suppress_stderr = suppress_stderr
17
+ @prepared = false
18
+ end
19
+
20
+ def prepare
21
+ cmd = <<-CMD
22
+ if ! npm ls -g browserify &>/dev/null; then
23
+ npm install -g browserify >&2
24
+ fi
25
+ CMD
26
+ stdout_handler = proc {|d| }
27
+ stderr_handler = @suppress_stderr ?
28
+ proc {|d| } :
29
+ proc {|d| STDERR.print d}
30
+ status = @nvm.run(
31
+ cmd,
32
+ node_ver: @node_ver,
33
+ env: @env,
34
+ stdout_handler: stdout_handler,
35
+ stderr_handler: stderr_handler
36
+ ).value
37
+ raise "non-zero exit status: #{status.to_i}" unless status.success?
38
+ @prepared = true
39
+ end
40
+
41
+ def compile source
42
+ prepare unless @prepared
43
+
44
+ out_buf = StringIO.new
45
+ cmd = <<-CMD
46
+ if ! npm ls -g browserify &>/dev/null; then
47
+ npm install -g browserify >&2
48
+ fi
49
+ browserify #{@browserify_opts} -- -
50
+ CMD
51
+ stdout_handler = proc {|d| out_buf << d }
52
+ stderr_handler = @suppress_stderr ?
53
+ proc {|d| } :
54
+ proc {|d| STDERR.print d}
55
+ status = @nvm.run(
56
+ cmd,
57
+ stdin: source,
58
+ node_ver: @node_ver,
59
+ env: @env,
60
+ stdout_handler: stdout_handler,
61
+ stderr_handler: stderr_handler
62
+ ).value
63
+ raise "non-zero exit status: #{status.to_i}" unless status.success?
64
+
65
+ return out_buf.string
66
+ end
67
+
68
+ def self.compile(
69
+ source, browserify_opts: "", node_ver: "stable", env: {},
70
+ nvm_dir: DEFAULT_NVM_DIR, suppress_stderr: false)
71
+ new(
72
+ browserify_opts: browserify_opts,
73
+ node_ver: node_ver,
74
+ env: env,
75
+ nvm_dir: nvm_dir,
76
+ suppress_stderr: suppress_stderr
77
+ ).compile(source)
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: browserify_rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Keiichiro Ui
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-12-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: browserify wrapper with nvm to install node automatically
56
+ email:
57
+ - keiichiro.ui@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - .travis.yml
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - bin/console
69
+ - bin/setup
70
+ - browserify_rb.gemspec
71
+ - lib/browserify_rb.rb
72
+ - lib/browserify_rb/nvm.rb
73
+ - lib/browserify_rb/nvm.sh
74
+ - lib/browserify_rb/popen3.rb
75
+ - lib/browserify_rb/version.rb
76
+ homepage: https://github.com/kui/browserify_rb
77
+ licenses:
78
+ - MIT
79
+ metadata:
80
+ allowed_push_host: 'TODO: Set to ''http://mygemserver.com'''
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.0.14
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: browserify wrapper
101
+ test_files: []