commonjs 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.
data/README.md CHANGED
@@ -3,15 +3,42 @@
3
3
 
4
4
  Host CommonJS JavaScript environments in Ruby
5
5
 
6
- ## An experimental API for hosting CommonJS apps
6
+ ## Why?
7
7
 
8
- class MyRuntime < CommonJS::Runtime
9
- modules :require, :filesystem, :process, :crypto
10
- end
8
+ The internet is now awash with non-browser JavaScript code. Much of this code conforms to some
9
+ simple conventions that let you use it anywhere you have a JavaScript interpreter available. These
10
+ conventions are collectively called "commonjs"
11
11
 
12
- runtime = CommonJS::Runtime.new
13
- runtime.modules :require, :filesystem, :process
12
+ We have several JavaScript interpreters available to us from Ruby. Therefore, why shouldn't we be
13
+ able to use commonjs applications and libraries?
14
+
15
+ ## Using common JS from Ruby.
16
+
17
+ `CommonJS` now passes all of the Modules 1.0 unit tests
18
+
19
+ env = CommonJS::Environment.new(:path => '/path/to/lib/dir')
20
+ env.require('foo.js')
21
+
22
+
23
+
24
+ ## Future directions
25
+
26
+ By default, all you get with a bare commonjs environment is the Modules API
27
+
28
+ The plan however, is to allow you to extend your commonjs environment to have whatever native
29
+ interfaces you want in it. So for example, if you want to allow filesystem access, as well as
30
+ access to the process information, you would say:
31
+
32
+ env.modules :filesystem, :process
14
33
 
15
34
  ## Supported runtimes
16
35
 
17
- We'll shoot for Johnson, The Ruby Racer, The Ruby Rhino, (and possibly Lyndon?)
36
+ ### Current
37
+
38
+ * The Ruby Racer (V8) - [https://github.com/cowboyd/therubyracer]
39
+
40
+ ### Desired
41
+
42
+ * The Ruby Rhino (JRuby) - [https://github.com/cowboyd/therubyrhino]
43
+ * Johnson (TraceMonkey) - [https://github.com/jbarnette/johnson]
44
+ * Lyndon (MacRuby) - [https://github.com/defunkt/lyndon]
@@ -15,7 +15,9 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = CommonJS::VERSION
17
17
 
18
+
19
+ gem.add_dependency "therubyracer", "~> 0.9.9"
20
+
18
21
  gem.add_development_dependency "rake"
19
22
  gem.add_development_dependency "rspec"
20
- gem.add_development_dependency "therubyracer", ">= 0.10.0beta1"
21
23
  end
@@ -4,8 +4,8 @@ module CommonJS
4
4
 
5
5
  attr_reader :runtime
6
6
 
7
- def initialize(options = {})
8
- @runtime = choose
7
+ def initialize(runtime, options = {})
8
+ @runtime = runtime
9
9
  @path = Pathname(options[:path])
10
10
  @modules = {}
11
11
  end
@@ -24,30 +24,16 @@ module CommonJS
24
24
  @modules[module_id] = Module::Native.new(impl)
25
25
  end
26
26
 
27
- private
28
-
29
- def choose
30
- RubyRacerRuntime.new
27
+ def new_object
28
+ @runtime['Object'].new
31
29
  end
32
30
 
31
+ private
32
+
33
33
  def find(module_id)
34
34
  filepath = @path.join("#{module_id}.js")
35
35
  filepath if filepath.exist?
36
36
  end
37
37
 
38
- class RubyRacerRuntime
39
- def initialize
40
- require 'v8'
41
- @context = V8::Context.new
42
- end
43
-
44
- def new_object
45
- @context['Object'].new
46
- end
47
-
48
- def eval(source, path)
49
- @context.eval(source, path)
50
- end
51
- end
52
38
  end
53
39
  end
@@ -7,12 +7,12 @@ module CommonJS
7
7
  def initialize(id, env)
8
8
  @id = id
9
9
  @env = env
10
- @exports = env.runtime.new_object
10
+ @exports = env.new_object
11
11
  @segments = id.split('/')
12
12
  end
13
13
 
14
14
  def require_function
15
- @require_function ||= lambda do |this, module_id|
15
+ @require_function ||= lambda do |module_id|
16
16
  @env.require(expand(module_id))
17
17
  end
18
18
  end
@@ -1,3 +1,3 @@
1
1
  module CommonJS
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'v8'
4
+
5
+ describe "modules 1.0" do
6
+
7
+ def self.make_before(path)
8
+ proc do
9
+ @env = CommonJS::Environment.new(V8::Context.new, :path => path)
10
+ @env.native('system', QuietSystem.new)
11
+ end
12
+ end
13
+
14
+ tests = Pathname(__FILE__).dirname.join('../ext/commonjs/tests/modules/1.0')
15
+ tests.entries.each do |path|
16
+ next if ['.','..'].include?(path.to_s)
17
+
18
+ describe path do
19
+ before(&make_before(tests.join(path)))
20
+
21
+ it "✓" do
22
+ @env.require('program')
23
+ end
24
+ end
25
+ end
26
+
27
+ class QuietSystem
28
+ def stdio
29
+ self
30
+ end
31
+ def print(*args)
32
+ # puts args.join('')
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,56 +1,76 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: commonjs
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Charles Lowell
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-10-07 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rake
16
- requirement: &2152591120 !ruby/object:Gem::Requirement
17
+
18
+ date: 2011-11-29 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: therubyracer
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 41
29
+ segments:
30
+ - 0
31
+ - 9
32
+ - 9
33
+ version: 0.9.9
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
23
38
  prerelease: false
24
- version_requirements: *2152591120
25
- - !ruby/object:Gem::Dependency
26
- name: rspec
27
- requirement: &2152590620 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
28
40
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
33
48
  type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
34
52
  prerelease: false
35
- version_requirements: *2152590620
36
- - !ruby/object:Gem::Dependency
37
- name: therubyracer
38
- requirement: &2152590020 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
39
54
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: 0.10.0beta1
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
44
62
  type: :development
45
- prerelease: false
46
- version_requirements: *2152590020
63
+ version_requirements: *id003
47
64
  description: Host CommonJS JavaScript environments in Ruby
48
- email:
65
+ email:
49
66
  - cowboyd@thefrontside.net
50
67
  executables: []
68
+
51
69
  extensions: []
70
+
52
71
  extra_rdoc_files: []
53
- files:
72
+
73
+ files:
54
74
  - .gitignore
55
75
  - .gitmodules
56
76
  - Gemfile
@@ -61,33 +81,41 @@ files:
61
81
  - lib/commonjs/environment.rb
62
82
  - lib/commonjs/module.rb
63
83
  - lib/commonjs/version.rb
64
- - spec/commonjs/environment_spec.rb
84
+ - spec/commonjs/modules_spec.rb
65
85
  - spec/spec_helper.rb
66
86
  homepage: http://github.com/cowboyd/commonjs
67
87
  licenses: []
88
+
68
89
  post_install_message:
69
90
  rdoc_options: []
70
- require_paths:
91
+
92
+ require_paths:
71
93
  - lib
72
- required_ruby_version: !ruby/object:Gem::Requirement
94
+ required_ruby_version: !ruby/object:Gem::Requirement
73
95
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
104
  none: false
80
- requirements:
81
- - - ! '>='
82
- - !ruby/object:Gem::Version
83
- version: '0'
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
84
112
  requirements: []
113
+
85
114
  rubyforge_project:
86
115
  rubygems_version: 1.8.10
87
116
  signing_key:
88
117
  specification_version: 3
89
- summary: Provide access to your Ruby and Operating System runtime via the commonjs
90
- API
91
- test_files:
92
- - spec/commonjs/environment_spec.rb
118
+ summary: Provide access to your Ruby and Operating System runtime via the commonjs API
119
+ test_files:
120
+ - spec/commonjs/modules_spec.rb
93
121
  - spec/spec_helper.rb
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CommonJS::Environment do
4
-
5
- describe "modules 1.0" do
6
-
7
- def self.make_before(path)
8
- proc do
9
- @env = CommonJS::Environment.new(:path => path)
10
- @env.native('system', QuietSystem.new)
11
- end
12
- end
13
-
14
- tests = Pathname(__FILE__).dirname.join('../ext/commonjs/tests/modules/1.0')
15
- tests.entries.each do |path|
16
- next if ['.','..'].include?(path.to_s)
17
-
18
- describe path do
19
- before(&make_before(tests.join(path)))
20
-
21
- it "...yup." do
22
- @env.require('program')
23
- end
24
- end
25
- end
26
- end
27
-
28
- class QuietSystem
29
- def stdio
30
- self
31
- end
32
- def print(*args)
33
- # puts args.join('')
34
- end
35
- end
36
- end