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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +48 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/browserify_rb.gemspec +33 -0
- data/lib/browserify_rb/nvm.rb +64 -0
- data/lib/browserify_rb/nvm.sh +2284 -0
- data/lib/browserify_rb/popen3.rb +83 -0
- data/lib/browserify_rb/version.rb +3 -0
- data/lib/browserify_rb.rb +79 -0
- metadata +101 -0
@@ -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,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: []
|