browserify_rb 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9dd70243ad4d62334ac69f8efcdc690931ddccf9
4
- data.tar.gz: 15b681ba96ed567e57c30e77d3751b5e950aff27
3
+ metadata.gz: 658dbed00139171d4a384b5b3ff5353dd4dd75a0
4
+ data.tar.gz: 222af08171c17b78d0820e9f69e8f1b983e21a38
5
5
  SHA512:
6
- metadata.gz: edfd3ceeb8418deb65fe42e0cfce5204f5f50d9f841473c098dc59016842a29be28ad54142c3e39e7e3d382fcfdcff911605b10a0ef70216433b8ba7e16a03c4
7
- data.tar.gz: 12ac708441a7be2315f0cea06a06399d41ccd916e7a6365ad2c78801deb52fb2e1351e156f339502e989eb8f59d3667cba1ddda428019ddd6b29747347c5ab0f
6
+ metadata.gz: 80f4f97a884698b82ede735bb9429ad724f3a9087b868a99827068b840d63d798981be50c14ff770a874b400fa0a84466ee985106b9bcf97f2908f694482634f
7
+ data.tar.gz: 9686b3dad5db385021f2ca912a67250b262b9d1b5e23d3cb43b2912e1fcd9d52596ee6ee133e7903930256d5491eedc4c5b989e109ad75604c392decf15db865
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
18
  # delete this section to allow pushing this gem to any host.
19
19
  if spec.respond_to?(:metadata)
20
- spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
21
  else
22
22
  raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
23
  end
data/lib/browserify_rb.rb CHANGED
@@ -2,31 +2,34 @@ require "browserify_rb/version"
2
2
  require "browserify_rb/nvm"
3
3
 
4
4
  require "stringio"
5
+ require "logger"
5
6
 
6
7
  class BrowserifyRb
7
8
  DEFAULT_NVM_DIR = "#{ENV["HOME"]}/.nvm"
9
+ LOG = Logger.new(STDERR)
10
+ LOG.level = Logger::Severity.const_get(ENV["LOG"] || "INFO")
8
11
 
9
12
  def initialize(
10
13
  browserify_opts: "", node_ver: "stable", env: {},
11
- nvm_dir: DEFAULT_NVM_DIR, suppress_stderr: false)
14
+ nvm_dir: DEFAULT_NVM_DIR, suppress_stderr: false,
15
+ required_modules: nil)
12
16
  @nvm = BrowserifyRb::Nvm.new nvm_dir
13
17
  @node_ver = node_ver
14
18
  @env = env
15
19
  @browserify_opts = browserify_opts
16
20
  @suppress_stderr = suppress_stderr
17
21
  @prepared = false
22
+ @modules = required_modules
18
23
  end
19
24
 
20
25
  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
+ ms = ["browserify", *@modules].map{|m| %Q!"#{m}"! }.join(" ")
27
+ cmd = "npm install #{ms}"
26
28
  stdout_handler = proc {|d| }
27
29
  stderr_handler = @suppress_stderr ?
28
30
  proc {|d| } :
29
31
  proc {|d| STDERR.print d}
32
+ LOG.debug "run: #{cmd}"
30
33
  status = @nvm.run(
31
34
  cmd,
32
35
  node_ver: @node_ver,
@@ -43,10 +46,7 @@ class BrowserifyRb
43
46
 
44
47
  out_buf = StringIO.new
45
48
  cmd = <<-CMD
46
- if ! npm ls -g browserify &>/dev/null; then
47
- npm install -g browserify >&2
48
- fi
49
- browserify #{@browserify_opts} -- -
49
+ node_modules/.bin/browserify #{@browserify_opts} -- -
50
50
  CMD
51
51
  stdout_handler = proc {|d| out_buf << d }
52
52
  stderr_handler = @suppress_stderr ?
@@ -1,8 +1,13 @@
1
1
  require "browserify_rb/popen3"
2
+
2
3
  require "stringio"
4
+ require "logger"
3
5
 
4
6
  class BrowserifyRb
5
7
  class Nvm
8
+ LOG = Logger.new(STDERR)
9
+ LOG.level = Logger::Severity.const_get(ENV["LOG"] || "INFO")
10
+
6
11
  NVM_SH = File.join(__dir__, "nvm.sh")
7
12
 
8
13
  def initialize nvm_dir = "#{ENV["HOME"]}/.nvm"
@@ -22,8 +27,8 @@ class BrowserifyRb
22
27
  env: {})
23
28
  new_env = (env).merge(self.env)
24
29
  cmd = <<-CMD
25
- source "#{NVM_SH}" || {
26
- printf "Abort\n" >&2
30
+ . "#{NVM_SH}" || {
31
+ printf "Abort\\n" >&2
27
32
  exit 1
28
33
  }
29
34
  if ! nvm use "#{node_ver}" >&2; then
@@ -33,8 +38,10 @@ class BrowserifyRb
33
38
  #{cmd}
34
39
  CMD
35
40
 
41
+ LOG.debug "run: #{cmd}"
36
42
  BrowserifyRb::Popen3.async_exec(
37
- input: stdin, env: new_env, cmd: cmd,
43
+ cmd,
44
+ input: stdin, env: new_env,
38
45
  stdout_handler: stdout_handler,
39
46
  stderr_handler: stderr_handler
40
47
  )
@@ -44,15 +51,16 @@ class BrowserifyRb
44
51
  out = StringIO.new
45
52
  err = StringIO.new
46
53
  cmd = <<-CMD
47
- source "#{NVM_SH}" || {
48
- printf "Abort\n" >&2
54
+ . "#{NVM_SH}" || {
55
+ printf "Abort\\n" >&2
49
56
  exit 1
50
57
  }
51
58
  nvm --version
52
59
  CMD
53
60
 
61
+ LOG.debug "run: #{cmd}"
54
62
  st = BrowserifyRb::Popen3.async_exec(
55
- cmd: cmd,
63
+ cmd,
56
64
  stdout_handler: proc {|d| out << d },
57
65
  stderr_handler: proc {|d| err << d }
58
66
  ).value
@@ -5,30 +5,34 @@ require "logger"
5
5
  class BrowserifyRb
6
6
  module Popen3
7
7
  LOG = Logger.new(STDERR)
8
+ LOG.level = Logger::Severity.const_get(ENV["LOG"] || "INFO")
8
9
 
9
10
  CHUNK_SIZE = 2000
10
- DEFAULT_STDOUT_HANDLER = proc {|data| STDOUT.print data }
11
- DEFAULT_STDERR_HANDLER = proc {|data| STDERR.print data }
11
+ DEFAULT_STDOUT_HANDLER = proc {|data| STDOUT.write data }
12
+ DEFAULT_STDERR_HANDLER = proc {|data| STDERR.write data }
12
13
 
13
14
  def self.async_exec(
15
+ cmd,
14
16
  input: "",
15
17
  env: {},
16
- cmd: nil,
17
18
  stdout_handler: DEFAULT_STDOUT_HANDLER,
18
19
  stderr_handler: DEFAULT_STDERR_HANDLER,
19
20
  spawn_opts: {},
20
21
  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
22
  Thread.fork do
31
23
  begin
24
+ stdin, stdout, stderr, wait_thr = Open3.popen3 env, cmd, spawn_opts
25
+
26
+ input = input.is_a?(String) ?
27
+ StringIO.new(input) :
28
+ iput
29
+ input_buff = ""
30
+ opened_ins = [stdin]
31
+ opened_outs = [stdout, stderr]
32
+ handlers = {
33
+ stdout => stdout_handler,
34
+ stderr => stderr_handler
35
+ }
32
36
  while not opened_outs.empty?
33
37
  ios = IO.select opened_outs, opened_ins, nil, 1
34
38
  if ios.nil? and Process.waitpid(wait_thr.pid, Process::WNOHANG)
@@ -37,47 +41,39 @@ class BrowserifyRb
37
41
 
38
42
  outs, ins, = ios
39
43
 
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
44
+ if not outs.nil?
45
+ outs.each do |out|
46
+ if out.eof?
47
+ out.close
48
+ opened_outs.delete out
49
+ else
50
+ d = out.readpartial chunk_size
51
+ handlers[out].call d
56
52
  end
57
53
  end
58
54
  end
59
55
 
60
56
  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?
57
+ if input.eof?
67
58
  stdin.close
68
59
  opened_ins.delete stdin
60
+ elsif input_buff.empty?
61
+ d = input.readpartial(chunk_size)
62
+ bytes = stdin.write_nonblock(d)
63
+ input_buff = d[bytes .. -1]
69
64
  else
70
- bytes = stdin.write_nonblock(i)
71
- in_buf.seek bytes - i.bytesize, IO::SEEK_CUR
65
+ bytes = stdin.write_nonblock(input_buff)
66
+ input_buff = input_buff[bytes .. -1]
72
67
  end
73
68
  end
74
69
  end
70
+
71
+ wait_thr.value
75
72
  rescue => e
76
73
  LOG.error e
74
+ nil
77
75
  end
78
76
  end
79
-
80
- wait_thr
81
77
  end
82
78
  end
83
79
  end
@@ -1,3 +1,3 @@
1
1
  class BrowserifyRb
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browserify_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keiichiro Ui
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2015-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.11'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '5.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
55
  description: browserify wrapper with nvm to install node automatically
@@ -59,8 +59,8 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
64
  - Gemfile
65
65
  - LICENSE.txt
66
66
  - README.md
@@ -77,24 +77,24 @@ homepage: https://github.com/kui/browserify_rb
77
77
  licenses:
78
78
  - MIT
79
79
  metadata:
80
- allowed_push_host: 'TODO: Set to ''http://mygemserver.com'''
80
+ allowed_push_host: https://rubygems.org
81
81
  post_install_message:
82
82
  rdoc_options: []
83
83
  require_paths:
84
84
  - lib
85
85
  required_ruby_version: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - '>='
92
+ - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project:
97
- rubygems_version: 2.0.14
97
+ rubygems_version: 2.4.5.1
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: browserify wrapper