node.rb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,31 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ build
23
+ Makefile
24
+ mkmf.log
25
+ .lock-wscript
26
+ *.node
27
+ .idea
28
+ *.so
29
+ *.o
30
+ wscript
31
+ *.bundle
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Colin MacKenzie IV
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,54 @@
1
+ = node.rb
2
+
3
+ Embeds a Ruby interpreter (www.ruby-lang.org) into Node.js (www.nodejs.org) for your coding pleasure.
4
+
5
+ == Installation
6
+
7
+ gem install node.rb
8
+
9
+ == Usage
10
+
11
+ To create a Ruby context within your node.js application, do so like this:
12
+
13
+ var ruby = require('ruby');
14
+ ruby.eval('p 1+1');
15
+
16
+ == Execution
17
+
18
+ For your convenience, the node.rb gem ships with an executable so that you can just:
19
+ node-rb filename.js
20
+
21
+ To execute with the stock node.js executable:
22
+ NODE_PATH=$NODE_PATH:path/to/node.rb node filename.js
23
+
24
+ NODE_PATH is a standard option in node.js and is a simple environment variable. That means you can do this:
25
+
26
+ export NODE_PATH=$NODE_PATH:path/to/node.rb
27
+ node filename.js
28
+
29
+ And finally, though I'm not sure why you'd want to do this, you can invoke Node from within Ruby:
30
+
31
+ require 'node-rb'
32
+ n = Node.new("path/to/javascript.js")
33
+ n.run
34
+
35
+ That's roughly equivalent to running the node-rb command directly.
36
+
37
+ == Roadmap
38
+
39
+ There are plans to expose Node to Ruby and vice versa so that objects can travel between the two contexts,
40
+ but that's not available at this time.
41
+
42
+ == Note on Patches/Pull Requests
43
+
44
+ * Fork the project.
45
+ * Make your feature addition or bug fix.
46
+ * Add tests for it. This is important so I don't break it in a
47
+ future version unintentionally.
48
+ * Commit, do not mess with rakefile, version, or history.
49
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
50
+ * Send me a pull request. Bonus points for topic branches.
51
+
52
+ == Copyright
53
+
54
+ Copyright (c) 2010 Colin MacKenzie IV. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,81 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "node.rb"
8
+ gem.summary = %Q{Embeds a Ruby interpreter (www.ruby-lang.org) into Node.js (www.nodejs.org) for your coding pleasure.}
9
+ gem.description = %Q{Embeds a Ruby interpreter (www.ruby-lang.org) into Node.js (www.nodejs.org) for your coding pleasure.}
10
+ gem.email = "sinisterchipmunk@gmail.com"
11
+ gem.homepage = "http://github.com/sinisterchipmunk/node.rb"
12
+ gem.authors = ["Colin MacKenzie IV"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ begin
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_opts = ["-c"]
26
+ spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ end
28
+
29
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
+ spec.libs << 'lib' << 'spec'
31
+ spec.spec_opts = ["-c"]
32
+ spec.pattern = 'spec/**/*_spec.rb'
33
+ spec.rcov = true
34
+ end
35
+ rescue LoadError
36
+ require 'rspec/core/rake_task'
37
+ RSpec::Core::RakeTask.new(:spec) do |spec|
38
+ spec.spec_opts = ["-c"]
39
+ end
40
+ end
41
+
42
+ def each_extension(&block)
43
+ Dir[File.join(File.dirname(__FILE__), "ext/*")].each do |path|
44
+ chdir path, &block
45
+ end
46
+ end
47
+
48
+ desc "make extensions"
49
+ task :make do
50
+ each_extension do
51
+ system("ruby extconf.rb") && system("make") || raise("make failed")
52
+ end
53
+ end
54
+
55
+ namespace :make do
56
+ desc "make clean"
57
+ task :clean do
58
+ Dir['*.node'].each { |f| rm f }
59
+ each_extension do
60
+ system("make clean")
61
+ %w(build .lock-wscript wscript Makefile).each do |fi|
62
+ system("find . -name \"#{fi}\" -exec rm -rf {} \\;")
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ task :spec => [:check_dependencies, :make]
69
+ task :clean => 'make:clean'
70
+
71
+ task :default => :spec
72
+
73
+ require 'rake/rdoctask'
74
+ Rake::RDocTask.new do |rdoc|
75
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
76
+
77
+ rdoc.rdoc_dir = 'rdoc'
78
+ rdoc.title = "node.rb #{version}"
79
+ rdoc.rdoc_files.include('README*')
80
+ rdoc.rdoc_files.include('lib/**/*.rb')
81
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/bin/node-rb ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ require File.join(File.dirname(__FILE__), "../lib/node")
3
+ node = Node.new(*ARGV)
4
+
5
+ # node.run executes invokes node.js but collects the output; the user will expect
6
+ # the output in stdout when invoking this script so we have to do it this
7
+ # way instead
8
+ system node.command
@@ -0,0 +1,4 @@
1
+ #ifndef EXTCONF_H
2
+ #define EXTCONF_H
3
+ #define RUBY_VERSION 1.8.7
4
+ #endif
@@ -0,0 +1,40 @@
1
+ require 'mkmf'
2
+ require 'erb'
3
+ require 'fileutils'
4
+
5
+ this_dir = File.expand_path(File.dirname(__FILE__))
6
+ $LIBS << " -lstdc++"
7
+ include FileUtils
8
+
9
+ ##find_header('node.h')
10
+ #find_header('node/v8.h')
11
+ $defs << "-DRUBY_VERSION=#{RUBY_VERSION}"
12
+
13
+ create_header
14
+ create_makefile('ruby', File.join(this_dir, "ruby"))
15
+
16
+ if RUBY_VERSION < "1.9.0"
17
+ version_specific_source = "ruby18.cpp"
18
+ else
19
+ version_specific_source = "ruby19.cpp"
20
+ end
21
+
22
+ erb = ERB.new(File.read(File.join(File.dirname(__FILE__), "wscript.rb.erb")))
23
+
24
+ File.open(File.join(this_dir, "node/wscript"), "w") do |file|
25
+ srcdir = File.join this_dir, 'node'
26
+ blddir = File.join this_dir, 'node/build'
27
+ version = File.read(File.join(this_dir, "../../VERSION")).strip
28
+
29
+ file.puts erb.result(binding)
30
+ end
31
+
32
+ Dir.chdir File.join(this_dir, "node") do
33
+ cmd = "node-waf configure build"
34
+ system(cmd) || raise("Could not build extension for node.js!")
35
+ end
36
+
37
+ ruby_node = Dir[File.join(this_dir, "**/ruby.node")].reject { |s| s =~ /\.svn/ }.shift
38
+ raise "Couldn't find newly-generated ruby.node!" unless ruby_node
39
+ destination = File.join(this_dir, "../..")
40
+ cp(ruby_node, destination)
@@ -0,0 +1,15 @@
1
+ #ifndef NODE_RB_COMMON_H
2
+ #define NODE_RB_COMMON_H
3
+
4
+ #include "../extconf.h"
5
+ #include <v8.h>
6
+
7
+ using namespace v8;
8
+
9
+ #define ToCString(value) (*value ? *value : "<string conversion failed>")
10
+
11
+ extern void init_ruby(void);
12
+
13
+ extern Handle<Value> ruby_eval(const Arguments &args);
14
+
15
+ #endif//NODE_RB_COMMON_H
@@ -0,0 +1,14 @@
1
+ #include <node.h>
2
+ #include "common.h"
3
+
4
+ using namespace node;
5
+
6
+ extern "C" void init(Handle<Object> target)
7
+ {
8
+ init_ruby();
9
+
10
+ HandleScope scope;
11
+ Handle<Function> eval_func = FunctionTemplate::New(ruby_eval)->GetFunction();
12
+ eval_func->SetName(String::New("eval"));
13
+ target->Set(String::New("eval"), eval_func);
14
+ }
@@ -0,0 +1,34 @@
1
+ #include <ruby.h>
2
+ #include "common.h"
3
+
4
+ extern "C"
5
+ void Init_ruby(void) {
6
+ /* not used at this time */
7
+ }
8
+
9
+ /* protected ruby_eval function, this is always wrapped with rb_protect */
10
+ static VALUE p_ruby_eval(VALUE code)
11
+ {
12
+ return rb_eval_string(StringValuePtr(code));
13
+ }
14
+
15
+ Handle<Value> ruby_eval(const Arguments &args)
16
+ {
17
+ if (args.Length() != 1) return ThrowException(String::New("Expected 1 argument"));
18
+ String::Utf8Value code(Handle<String>::Cast(args[0]));
19
+
20
+ int error;
21
+ VALUE ruby_code = rb_str_new2(ToCString(code));
22
+ VALUE result = rb_protect(p_ruby_eval, ruby_code, &error);
23
+
24
+ if (error)
25
+ {
26
+ VALUE message = rb_funcall(rb_gv_get("$!"), rb_intern("message"), 0);
27
+ return ThrowException(String::New(StringValuePtr(message)));
28
+ }
29
+
30
+ // TODO translate Ruby into JS using Tomato!
31
+ VALUE message = rb_funcall(result, rb_intern("inspect"), 0);
32
+ char *ptr = StringValuePtr(message);
33
+ return String::New(ptr);
34
+ }
@@ -0,0 +1,12 @@
1
+ #include <ruby.h>
2
+ #include "common.h"
3
+
4
+ /* This file initializes Ruby when compiled against 1.8.x header files. */
5
+
6
+ void init_ruby(void)
7
+ {
8
+ RUBY_INIT_STACK
9
+ ruby_init();
10
+ // FIXME: a Ruby error causes a segfault. This is because we aren't wrapping with rb_protect and re-raising in Node.
11
+ // rb_funcall(rb_cObject, rb_intern("puts"), 1, rb_str_new2("Ruby initialized from within node.js"));
12
+ }
@@ -0,0 +1,14 @@
1
+ #include <ruby.h>
2
+ #include "common.h"
3
+
4
+ /* This file initializes Ruby when compiled against 1.9.x header files. */
5
+
6
+ RUBY_GLOBAL_SETUP
7
+ void init_ruby(void)
8
+ {
9
+ RUBY_INIT_STACK;
10
+ ruby_init();
11
+
12
+ // FIXME: a Ruby error causes a segfault. This is because we aren't wrapping with rb_protect and re-raising in Node.
13
+ // rb_funcall(rb_cObject, rb_intern("puts"), 1, rb_str_new2("Ruby initialized from within node.js"));
14
+ }
@@ -0,0 +1,9 @@
1
+ /* Not yet implemented. */
2
+
3
+ #include "ruby.h"
4
+
5
+ extern "C"
6
+ void Init_ruby(void)
7
+ {
8
+
9
+ }
@@ -0,0 +1,68 @@
1
+ import os
2
+ import Options
3
+
4
+ srcdir = '<%=srcdir%>'
5
+ blddir = '<%=blddir%>'
6
+ VERSION = '<%=version%>'
7
+
8
+ def set_options(opt):
9
+ opt.tool_options('compiler_cxx')
10
+ opt.add_option('--with-ruby-archdir', type='string', dest='rubyarchdir', help='Specify directory where to install arch specific files')
11
+ opt.add_option('--with-ruby-libdir', type='string', dest='rubylibdir', help='Specify alternate ruby library path')
12
+
13
+ def configure(conf):
14
+ conf.check_tool('compiler_cxx')
15
+ conf.check_tool('node_addon')
16
+
17
+ archdir = ['<%=Config::expand CONFIG['archdir']%>']
18
+ cpppath = archdir
19
+ <%if RUBY_VERSION >= "1.9.0"%>
20
+ ruby_hdrdir = ['<%=Config::expand CONFIG['rubyhdrdir']%>']
21
+ cpppath += ruby_hdrdir
22
+ cpppath += [os.path.join(ruby_hdrdir[0], '<%=Config::expand CONFIG['arch']%>')]
23
+ <%end%>
24
+
25
+ conf.env.CPPPATH_RUBY += cpppath
26
+ conf.env.LIB_RUBY = 'ruby'
27
+ conf.env.LIBPATH_RUBY = ['<%=Config::expand CONFIG['libdir']%>']
28
+ conf.env.LIBPATH_RUBY += archdir
29
+
30
+ conf.check(header_name="ruby.h", includes=cpppath, errmsg='could not find ruby header file')
31
+ conf.env.CCFLAGS_RUBY += ['<%=Config::expand CONFIG['CCDLFLAGS']%>']
32
+ conf.env.shlib_PATTERN = '%s.<%=Config::expand CONFIG['DLEXT']%>'
33
+
34
+ # ok this is really stupid, but the command and flags are combined.
35
+ # so we try to find the first argument...
36
+ flags = <%=(Config::expand CONFIG['LDSHARED']).split.inspect%>
37
+
38
+ while flags and flags[0][0] != '-':
39
+ flags = flags[1:]
40
+
41
+ # we also want to strip out the deprecated ppc flags
42
+ if len(flags) > 1 and flags[1] == "ppc":
43
+ flags = flags[2:]
44
+
45
+ conf.env.LINKFLAGS_RUBYEXT = flags
46
+ conf.env.LINKFLAGS_RUBYEXT += ['<%=Config::expand CONFIG['LIBS']%>']
47
+ conf.env.LINKFLAGS_RUBYEXT += ['<%=Config::expand CONFIG['LIBRUBYARG_SHARED']%>']
48
+
49
+ if Options.options.rubyarchdir:
50
+ conf.env.ARCHDIR_RUBY = Options.options.rubyarchdir
51
+ else:
52
+ conf.env.ARCHDIR_RUBY = '<%=Config::expand CONFIG['sitearchdir']%>'
53
+
54
+ if Options.options.rubylibdir:
55
+ conf.env.LIBDIR_RUBY = Options.options.rubylibdir
56
+ else:
57
+ conf.env.LIBDIR_RUBY = '<%=Config::expand CONFIG['sitelibdir']%>'
58
+
59
+ def build(bld):
60
+ obj1 = bld.new_task_gen('cxx', 'objects', 'node_addon')
61
+ obj1.target = 'wrapper'
62
+ obj1.source = 'node_wrapper.cpp'
63
+
64
+ ruby = bld.new_task_gen('cxx', 'shlib', 'node_addon')
65
+ ruby.target = 'ruby'
66
+ ruby.source = 'ruby.cpp <%=version_specific_source%>'
67
+ ruby.add_objects = 'wrapper'
68
+ ruby.uselib = 'RUBY'
data/lib/node.rb ADDED
@@ -0,0 +1,82 @@
1
+ require 'rbconfig'
2
+ ENV['LD_LIBRARY_PATH'] ||= Config::expand(Config::CONFIG['libdir'])
3
+ require File.join(File.dirname(__FILE__), "../ext/ruby/ruby")
4
+
5
+ class Node
6
+ # the value of NODE_PATH. This is an array.
7
+ attr_accessor :path
8
+
9
+ # the name of the stock node.js executable, which is normally just "node"
10
+ attr_accessor :exec_name
11
+
12
+ # If true, prints additional debug output. Defaults to false.
13
+ attr_accessor :node_debug
14
+
15
+ # If set true, loads modules in their own global contexts.
16
+ attr_accessor :module_contexts
17
+
18
+ # Array of command-line arguments for node.js.
19
+ attr_accessor :opts
20
+
21
+ def initialize(file)
22
+ @file = file
23
+ @path = default_node_path
24
+ @exec_name = "node"
25
+ @node_debug = false
26
+ @module_contexts = false
27
+ @opts = []
28
+ end
29
+
30
+ def run
31
+ %x[#{command}].strip
32
+ end
33
+
34
+ # Constructs the execution command.
35
+ def command
36
+ parts = [construct_path, construct_debug, construct_contexts, construct_name, construct_opts, @file]
37
+ parts.reject { |a| a.nil? || a.length == 0 }.join " "
38
+ end
39
+
40
+ class << self
41
+ # Returns the path to the node.rb gem.
42
+ def path_to_gem
43
+ File.expand_path(File.join(File.dirname(__FILE__), ".."))
44
+ end
45
+ end
46
+
47
+ # Returns the path to the node.rb gem.
48
+ def path_to_gem
49
+ self.class.path_to_gem
50
+ end
51
+
52
+ private
53
+ def construct_path
54
+ path.empty? ? "" : "NODE_PATH=#{path.join(":")}"
55
+ end
56
+
57
+ def construct_debug
58
+ node_debug ? "NODE_DEBUG" : ""
59
+ end
60
+
61
+ def construct_contexts
62
+ module_contexts ? "NODE_MODULE_CONTEXTS=1" : ""
63
+ end
64
+
65
+ def construct_name
66
+ exec_name
67
+ end
68
+
69
+ def construct_opts
70
+ opts.join(" ")
71
+ end
72
+
73
+ def default_node_path
74
+ path = [path_to_gem] # for node.rb extensions
75
+ if ENV['NODE_PATH']
76
+ path.unshift ENV['NODE_PATH']
77
+ else
78
+ path.unshift "$NODE_PATH"
79
+ end
80
+ path
81
+ end
82
+ end
data/lib/node.rb.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "node")
data/lib/node_rb.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "node")
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Node.rb" do
4
+ it "can evaluate Ruby code within Node.js" do
5
+ node("context").should == '2'
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ module NodeExecution
5
+ def node(filename)
6
+ node = Node.new(File.join(File.dirname(__FILE__), "support/nodes", "#{filename}.js"))
7
+ puts "Executing:\n #{node.command}"
8
+ node.run
9
+ end
10
+ end
11
+
12
+ begin
13
+ require 'spec'
14
+ require 'spec/autorun'
15
+ require 'node-rb'
16
+
17
+ Spec::Runner.configure do |config|
18
+ config.include NodeExecution
19
+ end
20
+ rescue LoadError
21
+ require 'rspec'
22
+ require 'node-rb'
23
+
24
+ RSpec.configure do |config|
25
+ config.include NodeExecution
26
+ end
27
+ end
@@ -0,0 +1,2 @@
1
+ var ruby_context = require('ruby');
2
+ ruby_context.eval("p 1+1");
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: node.rb
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Colin MacKenzie IV
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-01 00:00:00 -04:00
18
+ default_executable: node-rb
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 2
31
+ - 9
32
+ version: 1.2.9
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: Embeds a Ruby interpreter (www.ruby-lang.org) into Node.js (www.nodejs.org) for your coding pleasure.
36
+ email: sinisterchipmunk@gmail.com
37
+ executables:
38
+ - node-rb
39
+ extensions:
40
+ - ext/ruby/extconf.rb
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.rdoc
44
+ files:
45
+ - .document
46
+ - .gitignore
47
+ - LICENSE
48
+ - README.rdoc
49
+ - Rakefile
50
+ - VERSION
51
+ - bin/node-rb
52
+ - ext/ruby/extconf.h
53
+ - ext/ruby/extconf.rb
54
+ - ext/ruby/node/common.h
55
+ - ext/ruby/node/node_wrapper.cpp
56
+ - ext/ruby/node/ruby.cpp
57
+ - ext/ruby/node/ruby18.cpp
58
+ - ext/ruby/node/ruby19.cpp
59
+ - ext/ruby/ruby/ruby.cpp
60
+ - ext/ruby/wscript.rb.erb
61
+ - lib/node.rb
62
+ - lib/node.rb.rb
63
+ - lib/node_rb.rb
64
+ - spec/lib/noderb_spec.rb
65
+ - spec/spec_helper.rb
66
+ - spec/support/nodes/context.js
67
+ has_rdoc: true
68
+ homepage: http://github.com/sinisterchipmunk/node.rb
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options:
73
+ - --charset=UTF-8
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ requirements: []
93
+
94
+ rubyforge_project:
95
+ rubygems_version: 1.3.7
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Embeds a Ruby interpreter (www.ruby-lang.org) into Node.js (www.nodejs.org) for your coding pleasure.
99
+ test_files:
100
+ - spec/lib/noderb_spec.rb
101
+ - spec/spec_helper.rb