execjs-xtrn 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c121f6027c69f2d3109081cfd4e5234ea86167f0
4
- data.tar.gz: 1bb4b7e1866c93cb106be86ac6f5dc6b75994917
3
+ metadata.gz: 7006a7dbaff18583232a21dec541ac5aabbe990c
4
+ data.tar.gz: 87fa10ad61fb6be63aca1f564c31d6bbad3de260
5
5
  SHA512:
6
- metadata.gz: d412ec4742fbb3b70a892fc89647b3538e87db6223d2ffc75fb9d80549c20baf091bf5bbaddd42e756daef613403ea6c784b0e157e98fb93eb63e9c9996eb877
7
- data.tar.gz: 98294762eb590e6503383e02cf0ac288c14a9e0e60b2a793c717628853d1dbde3ef2433bb079fde4735bd1ae347469491ee0ae2110a18d0ef9f46676729208a0
6
+ metadata.gz: a69efc3cf4ac48d7dbd419fc11e36d456edb08f314c826b23890d0fa31e155f5167fa712b9517d6b66f74f6c095e1d6f0b2292b45978bcebda58382bf034cdca
7
+ data.tar.gz: bbd08a8d11fcd3f8e6c341f8488ce31f8b791247ecf0ba8345f71b52acf3cd7f7d2cf00234345440d37b42ede81e67b2e36bc9cd03e1444acdcff5d195eb4df9
@@ -1,12 +1,19 @@
1
+ sudo: false
2
+
1
3
  language: ruby
4
+
2
5
  rvm:
3
6
  - '2.2'
4
7
  - '2.1'
5
8
  - '2.0'
6
9
  - 1.9.3
7
- before_install:
8
- - sudo apt-get update -qq
9
- - sudo apt-get install -y npm
10
+
11
+ env:
12
+ - NODEV=node
13
+ - NODEV=0
14
+
10
15
  install:
16
+ - nvm install $NODEV
17
+ - gem install bundler
11
18
  - bundle install
12
19
  - bundle exec rake npm
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in execjs-xtrn.gemspec
4
4
  gemspec
5
+
6
+ gem 'json', "#{/^1[.]/.match(RUBY_VERSION)? '~>' : '>='} 1.8"
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # ExecJS::Xtrn
2
2
 
3
3
  [![Build Status](https://travis-ci.org/ukoloff/execjs-xtrn.svg?branch=master)](https://travis-ci.org/ukoloff/execjs-xtrn)
4
+ [![Build status](https://ci.appveyor.com/api/projects/status/tw7av89nj591fg8w?svg=true)](https://ci.appveyor.com/project/ukoloff/execjs-xtrn)
4
5
  [![Gem Version](https://badge.fury.io/rb/execjs-xtrn.svg)](http://badge.fury.io/rb/execjs-xtrn)
5
6
 
6
7
  Drop-in replacement for ExecJS. The latter spawns separate process for every JavaScript compilation
@@ -198,12 +199,15 @@ The following packages have been tested to run under ExecJS::Xtrn out-of-box:
198
199
  CoffeeScript since v1.9.0 introduces new incompatibility:
199
200
  it uses `Object.create` that is missing from WSH.
200
201
  To fix it, `Object.create` was manually defined in ExecJS::Xtrn::Wsh
201
- (sort of [ExecJS::Xtrn::Wsh::Preload](#preloading))
202
+ (sort of [ExecJS::Xtrn::Wsh::Preload](#preloading)).
203
+ Path to this polyfill is available as `ExecJS::Xtrn::Wsh::ES5` constant.
202
204
 
203
205
  Gem [coffee-script](https://rubygems.org/gems/coffee-script) since v2.4.0 introduces another incompatibility:
204
206
  it silently creates global function. This approach works in regular ExecJS but fails in ExecJS::Xtrn.
205
207
  As a workaround pin `coffee-script` gem version to 2.3.0.
206
208
 
209
+ Later [uglifier](https://github.com/lautis/uglifier) from v3 started to use globals either. Pin it to '~> 2'.
210
+
207
211
  ## Testing
208
212
 
209
213
  After git checkout, required NPM modules must be installed. Simply run:
@@ -227,3 +231,5 @@ And `bundle exec` may be ommited in most cases.
227
231
  * [therubyracer](https://github.com/cowboyd/therubyracer)
228
232
  * [Node.js](http://nodejs.org/)
229
233
  * [Windows Script Host](http://en.wikipedia.org/wiki/Windows_Script_Host)
234
+ * [Travis CI](https://travis-ci.org/)
235
+ * [AppVeyor](http://www.appveyor.com/)
@@ -0,0 +1,36 @@
1
+ version: 1.0.{build}-{branch}
2
+
3
+ cache:
4
+ - vendor/bundle
5
+
6
+ environment:
7
+ matrix:
8
+ - RUBY_VERSION: 23
9
+ - RUBY_VERSION: 22
10
+ - RUBY_VERSION: 21
11
+ - RUBY_VERSION: 200
12
+ - RUBY_VERSION: 193
13
+
14
+ install:
15
+ - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
16
+ - bundle config --local path vendor/bundle
17
+ - bundle install
18
+ - bundle exec rake npm
19
+
20
+ build: off
21
+
22
+ before_test:
23
+ - ruby -v
24
+ - gem -v
25
+ - bundle -v
26
+ - node -v
27
+
28
+ test_script:
29
+ - bundle exec rake
30
+
31
+ after_test:
32
+ - bundle exec rake build
33
+
34
+ artifacts:
35
+ - path: pkg/*.gem
36
+ name: Gem
@@ -19,9 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ spec.add_dependency "json"
23
+
22
24
  spec.add_development_dependency "bundler", "~> 1.3"
23
25
  spec.add_development_dependency "rake"
24
26
  spec.add_development_dependency "minitest"
25
27
  spec.add_development_dependency "coffee-script", '2.3.0'
26
- spec.add_development_dependency "uglifier"
28
+ spec.add_development_dependency "uglifier", '~> 2'
29
+ spec.add_development_dependency "appveyor-worker"
27
30
  end
@@ -1,4 +1,5 @@
1
1
  {
2
+ "private": true,
2
3
  "dependencies": {
3
4
  "split": "^0.3.0",
4
5
  "through": "^2.3.6"
@@ -0,0 +1,13 @@
1
+ //
2
+ // Missing methods for Windows Script Host
3
+ //
4
+ +function (){
5
+
6
+ if(!Object.create)
7
+ Object.create = function(proto){
8
+ function fn(){}
9
+ fn.prototype=proto
10
+ return new fn
11
+ }
12
+
13
+ }()
@@ -1,12 +1,14 @@
1
- !function(){
1
+ //
2
+ // Communicate with cscript via stdin/stderr
3
+ //
4
+ +function(){
2
5
 
3
6
  var
4
7
  w = WScript,
5
8
  i = w.StdIn,
6
9
  o = w.StdErr
7
10
 
8
- json2()
9
- oCreate()
11
+ loadShivs('json2 es5')
10
12
 
11
13
  while(!i.AtEndOfStream)
12
14
  o.WriteLine(wrap(i.ReadLine()))
@@ -42,16 +44,19 @@ function json2()
42
44
  new Function(fso.OpenTextFile(j2).ReadAll())()
43
45
  }
44
46
 
45
- // Fix for CoffeeScript 1.9+
46
- function oCreate()
47
+ function loadJS(name)
47
48
  {
48
- if(Object.create) return
49
- Object.create=function(proto)
50
- {
51
- function f(){}
52
- f.prototype=proto
53
- return new f
54
- }
49
+ var
50
+ fso = new ActiveXObject("Scripting.FileSystemObject")
51
+ name = fso.GetParentFolderName(w.ScriptFullName)+"/"+name+".js"
52
+ new Function(fso.OpenTextFile(name).ReadAll())()
53
+ }
54
+
55
+ function loadShivs(names)
56
+ {
57
+ names = names.split(' ')
58
+ for(var i in names)
59
+ loadJS(names[i])
55
60
  }
56
61
 
57
62
  }()
@@ -14,8 +14,14 @@ module ExecJS::Xtrn
14
14
  # Install into ExecJS
15
15
  def self.init
16
16
  slf=self
17
- sc=(class<<ExecJS;self;end)
18
- Engine.methods(false).each{|m| sc.instance_eval{define_method(m){|*args| slf.engine.send m, *args }}}
17
+ sc=(class << ExecJS; self ;end)
18
+ Engine.methods(false).each do |m|
19
+ sc.instance_eval do
20
+ define_method(m) do |*args|
21
+ slf.engine.send m, *args
22
+ end
23
+ end
24
+ end
19
25
  end
20
26
 
21
27
  init
@@ -14,6 +14,7 @@ class ExecJS::Xtrn::Child
14
14
  }
15
15
  @stdin.puts delta[:o]=JSON.generate([obj])[1...-1]
16
16
  i=@stdout.gets
17
+ i.force_encoding 'UTF-8'
17
18
 
18
19
  delta[:t]=Time.now-delta[:t]
19
20
  delta[:i]=i.length
@@ -1,5 +1,5 @@
1
1
  module ExecJS
2
2
  module Xtrn
3
- VERSION = "1.1.2"
3
+ VERSION = "1.1.3"
4
4
  end
5
5
  end
@@ -8,6 +8,8 @@ class ExecJS::Xtrn::Wsh < ExecJS::Xtrn::Engine
8
8
  encoding: 'UTF-16LE:UTF-8',
9
9
  }
10
10
 
11
+ ES5 = File.expand_path('../../wsh/es5.js', __FILE__)
12
+
11
13
  Valid=Gem.win_platform?
12
14
 
13
15
  exec '//' rescue nil if Valid # Warm up
@@ -18,7 +18,7 @@ class TestChild < Shagi
18
18
  ancestors[1].instance_methods(false).grep(/^shag_/).each do |m|
19
19
  Children.each_with_index do |klass, idx|
20
20
  (1..Spawn).each do |n|
21
- define_method("test_#{m.to_s.sub /.*?_/, ''}_#{klass.name.split(/\W+/).last}_#{n}")do
21
+ define_method("test_#{m.to_s.sub(/.*?_/, '')}_#{klass.name.split(/\W+/).last}_#{n}")do
22
22
  skip unless @child=(@@children||=children)[n-1][idx]
23
23
  send m
24
24
  end
@@ -103,7 +103,7 @@ class TestEngine < Minitest::Test
103
103
  instance_methods(false).grep(/^shag_/).each do |m|
104
104
  Engines.each_with_index do |klass, idx|
105
105
  (1..Spawn).each do |n|
106
- define_method("test_#{m.to_s.sub /.*?_/, ''}_#{klass.name.split(/\W+/).last}_#{n}")do
106
+ define_method("test_#{m.to_s.sub(/.*?_/, '')}_#{klass.name.split(/\W+/).last}_#{n}")do
107
107
  skip unless @engine=(@@engines||=engines)[n-1][idx]
108
108
  send m
109
109
  end
@@ -113,7 +113,7 @@ class TestEngine < Minitest::Test
113
113
 
114
114
  instance_methods(false).grep(/^klas_/).each do |m|
115
115
  Engines.each do |klass|
116
- define_method("test_#{m.to_s.sub /.*?_/, ''}_#{klass.name.split(/\W+/).last}_class")do
116
+ define_method("test_#{m.to_s.sub(/.*?_/, '')}_#{klass.name.split(/\W+/).last}_class")do
117
117
  skip unless klass::Valid
118
118
  @class=klass
119
119
  send m
@@ -124,11 +124,4 @@ class TestEngine < Minitest::Test
124
124
 
125
125
  build
126
126
 
127
- ObjectSpace.define_finalizer(M)do
128
- puts "Statistics:"
129
- s=M.stats
130
- len=s.keys.map(&:length).max+1
131
- s.each{|k, v| puts "#{' '*(len-k.length)}#{k}: "+v.map{|k, v| "#{k}=#{v.round(3).to_s.sub /[.]?0*$/, ''}"}*', ' }
132
- end
133
-
134
127
  end
@@ -5,10 +5,7 @@ class TestNvm < Shagi
5
5
  Child=M::Nvm
6
6
 
7
7
  def say(code)
8
- # puts "s: child=#{@child} vm=#{@vm}, code=#{code}"
9
- r=@child.say vm: @vm, js: code
10
- # puts "r: #{r}"
11
- r
8
+ @child.say vm: @vm, js: code
12
9
  end
13
10
 
14
11
  def buildVMs
@@ -21,7 +18,7 @@ class TestNvm < Shagi
21
18
  def self.build
22
19
  ancestors[1].instance_methods(false).grep(/^shag_/).each do |m|
23
20
  (1..Spawn).each do |n|
24
- define_method("test_#{m.to_s.sub /.*?_/, ''}_#{n}")do
21
+ define_method("test_#{m.to_s.sub(/.*?_/, '')}_#{n}")do
25
22
  skip unless Child::Valid
26
23
  @vm=(@@vms||=buildVMs)[n-1]
27
24
  @child=@@child
@@ -1,5 +1,6 @@
1
1
  require 'coffee-script'
2
2
  require 'uglifier'
3
+
3
4
  ExecJS::Xtrn.init
4
5
 
5
6
  class TestTop < Minitest::Test
@@ -70,6 +71,22 @@ class TestTop < Minitest::Test
70
71
  assert_equal 42, ExecJS.eval('21*2')
71
72
  end
72
73
 
74
+ def test_info
75
+ at_exit do
76
+ puts "Statistics:"
77
+ s=ExecJS::Xtrn.stats
78
+ len=s.keys.map(&:length).max+1
79
+ z = s.map do |k, v|
80
+ "#{' '*(len-k.length)}#{k}: "+
81
+ v.map do |kx, vx|
82
+ "#{kx}=#{vx.round(3).to_s.sub(/[.]?0*$/, '')}"
83
+ end * ', '
84
+ end * "\n"
85
+ puts z
86
+ AppVeyor::Worker.message "Compilations: #{s['Engine'][:n]}", z
87
+ end
88
+ end
89
+
73
90
  end
74
91
 
75
92
  class FakeEngine < ExecJS::Xtrn::Engine
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: execjs-xtrn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stas Ukolov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2016-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
33
  version: '1.3'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.3'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - '>='
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
@@ -70,14 +84,28 @@ dependencies:
70
84
  name: uglifier
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: appveyor-worker
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
103
  version: '0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - '>='
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  description: Drop-in replacement for ExecJS with persistent external runtime
@@ -87,18 +115,20 @@ executables: []
87
115
  extensions: []
88
116
  extra_rdoc_files: []
89
117
  files:
90
- - .gitignore
91
- - .travis.yml
118
+ - ".gitignore"
119
+ - ".travis.yml"
92
120
  - FarMenu.ini
93
121
  - Gemfile
94
122
  - LICENSE.txt
95
123
  - README.md
96
124
  - Rakefile
125
+ - appveyor.yml
97
126
  - execjs-xtrn.gemspec
98
127
  - lib/execjs/node/index.js
99
128
  - lib/execjs/node/node_modules/split/index.js
100
129
  - lib/execjs/node/node_modules/through/index.js
101
130
  - lib/execjs/node/package.json
131
+ - lib/execjs/wsh/es5.js
102
132
  - lib/execjs/wsh/json2.js
103
133
  - lib/execjs/wsh/repl.js
104
134
  - lib/execjs/xtrn.rb
@@ -127,17 +157,17 @@ require_paths:
127
157
  - lib
128
158
  required_ruby_version: !ruby/object:Gem::Requirement
129
159
  requirements:
130
- - - '>='
160
+ - - ">="
131
161
  - !ruby/object:Gem::Version
132
162
  version: '0'
133
163
  required_rubygems_version: !ruby/object:Gem::Requirement
134
164
  requirements:
135
- - - '>='
165
+ - - ">="
136
166
  - !ruby/object:Gem::Version
137
167
  version: '0'
138
168
  requirements: []
139
169
  rubyforge_project:
140
- rubygems_version: 2.4.6
170
+ rubygems_version: 2.2.3
141
171
  signing_key:
142
172
  specification_version: 4
143
173
  summary: 'Proof-of-concept: make ExecJS fast even without therubyracer'