mirror of
				https://github.com/rubyjs/mini_racer
				synced 2023-03-27 23:21:28 -04:00 
			
		
		
		
	initial commit
This commit is contained in:
		
						commit
						1dd2a44a6f
					
				
					 16 changed files with 416 additions and 0 deletions
				
			
		
							
								
								
									
										9
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
/.bundle/
 | 
			
		||||
/.yardoc
 | 
			
		||||
/Gemfile.lock
 | 
			
		||||
/_yardoc/
 | 
			
		||||
/coverage/
 | 
			
		||||
/doc/
 | 
			
		||||
/pkg/
 | 
			
		||||
/spec/reports/
 | 
			
		||||
/tmp/
 | 
			
		||||
							
								
								
									
										5
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.travis.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
sudo: false
 | 
			
		||||
language: ruby
 | 
			
		||||
rvm:
 | 
			
		||||
  - 2.3.1
 | 
			
		||||
before_install: gem install bundler -v 1.12.0
 | 
			
		||||
							
								
								
									
										49
									
								
								CODE_OF_CONDUCT.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								CODE_OF_CONDUCT.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
# Contributor Code of Conduct
 | 
			
		||||
 | 
			
		||||
As contributors and maintainers of this project, and in the interest of
 | 
			
		||||
fostering an open and welcoming community, we pledge to respect all people who
 | 
			
		||||
contribute through reporting issues, posting feature requests, updating
 | 
			
		||||
documentation, submitting pull requests or patches, and other activities.
 | 
			
		||||
 | 
			
		||||
We are committed to making participation in this project a harassment-free
 | 
			
		||||
experience for everyone, regardless of level of experience, gender, gender
 | 
			
		||||
identity and expression, sexual orientation, disability, personal appearance,
 | 
			
		||||
body size, race, ethnicity, age, religion, or nationality.
 | 
			
		||||
 | 
			
		||||
Examples of unacceptable behavior by participants include:
 | 
			
		||||
 | 
			
		||||
* The use of sexualized language or imagery
 | 
			
		||||
* Personal attacks
 | 
			
		||||
* Trolling or insulting/derogatory comments
 | 
			
		||||
* Public or private harassment
 | 
			
		||||
* Publishing other's private information, such as physical or electronic
 | 
			
		||||
  addresses, without explicit permission
 | 
			
		||||
* Other unethical or unprofessional conduct
 | 
			
		||||
 | 
			
		||||
Project maintainers have the right and responsibility to remove, edit, or
 | 
			
		||||
reject comments, commits, code, wiki edits, issues, and other contributions
 | 
			
		||||
that are not aligned to this Code of Conduct, or to ban temporarily or
 | 
			
		||||
permanently any contributor for other behaviors that they deem inappropriate,
 | 
			
		||||
threatening, offensive, or harmful.
 | 
			
		||||
 | 
			
		||||
By adopting this Code of Conduct, project maintainers commit themselves to
 | 
			
		||||
fairly and consistently applying these principles to every aspect of managing
 | 
			
		||||
this project. Project maintainers who do not follow or enforce the Code of
 | 
			
		||||
Conduct may be permanently removed from the project team.
 | 
			
		||||
 | 
			
		||||
This code of conduct applies both within project spaces and in public spaces
 | 
			
		||||
when an individual is representing the project or its community.
 | 
			
		||||
 | 
			
		||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
			
		||||
reported by contacting a project maintainer at sam.saffron@gmail.com. All
 | 
			
		||||
complaints will be reviewed and investigated and will result in a response that
 | 
			
		||||
is deemed necessary and appropriate to the circumstances. Maintainers are
 | 
			
		||||
obligated to maintain confidentiality with regard to the reporter of an
 | 
			
		||||
incident.
 | 
			
		||||
 | 
			
		||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
 | 
			
		||||
version 1.3.0, available at
 | 
			
		||||
[http://contributor-covenant.org/version/1/3/0/][version]
 | 
			
		||||
 | 
			
		||||
[homepage]: http://contributor-covenant.org
 | 
			
		||||
[version]: http://contributor-covenant.org/version/1/3/0/
 | 
			
		||||
							
								
								
									
										4
									
								
								Gemfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Gemfile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
source 'https://rubygems.org'
 | 
			
		||||
 | 
			
		||||
# Specify your gem's dependencies in mini_racer.gemspec
 | 
			
		||||
gemspec
 | 
			
		||||
							
								
								
									
										21
									
								
								LICENSE.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2016 TODO: Write your name
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in
 | 
			
		||||
all copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
THE SOFTWARE.
 | 
			
		||||
							
								
								
									
										41
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
# MiniRacer
 | 
			
		||||
 | 
			
		||||
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/mini_racer`. To experiment with that code, run `bin/console` for an interactive prompt.
 | 
			
		||||
 | 
			
		||||
TODO: Delete this and the text above, and describe your gem
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
Add this line to your application's Gemfile:
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
gem 'mini_racer'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
And then execute:
 | 
			
		||||
 | 
			
		||||
    $ bundle
 | 
			
		||||
 | 
			
		||||
Or install it yourself as:
 | 
			
		||||
 | 
			
		||||
    $ gem install mini_racer
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
TODO: Write usage instructions here
 | 
			
		||||
 | 
			
		||||
## Development
 | 
			
		||||
 | 
			
		||||
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
 | 
			
		||||
 | 
			
		||||
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
 | 
			
		||||
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/mini_racer. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								Rakefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Rakefile
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
require "bundler/gem_tasks"
 | 
			
		||||
require "rake/testtask"
 | 
			
		||||
require "rake/extensiontask"
 | 
			
		||||
 | 
			
		||||
Rake::TestTask.new(:test) do |t|
 | 
			
		||||
  t.libs << "test"
 | 
			
		||||
  t.libs << "lib"
 | 
			
		||||
  t.test_files = FileList['test/**/*_test.rb']
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
task :default => :test
 | 
			
		||||
 | 
			
		||||
gem = Gem::Specification.load( File.dirname(__FILE__) + '/mini_racer.gemspec' )
 | 
			
		||||
Rake::ExtensionTask.new( 'mini_racer_extension', gem )
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								bin/console
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								bin/console
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#!/usr/bin/env ruby
 | 
			
		||||
 | 
			
		||||
require "bundler/setup"
 | 
			
		||||
require "mini_racer"
 | 
			
		||||
 | 
			
		||||
# You can add fixtures and/or initialization code here to make experimenting
 | 
			
		||||
# with your gem easier. You can also use a different console, if you like.
 | 
			
		||||
 | 
			
		||||
# (If you use this, don't forget to add pry to your Gemfile!)
 | 
			
		||||
# require "pry"
 | 
			
		||||
# Pry.start
 | 
			
		||||
 | 
			
		||||
require "irb"
 | 
			
		||||
IRB.start
 | 
			
		||||
							
								
								
									
										8
									
								
								bin/setup
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								bin/setup
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
IFS=$'\n\t'
 | 
			
		||||
set -vx
 | 
			
		||||
 | 
			
		||||
bundle install
 | 
			
		||||
 | 
			
		||||
# Do any other automated setup that you need to do here
 | 
			
		||||
							
								
								
									
										41
									
								
								ext/mini_racer_extension/extconf.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ext/mini_racer_extension/extconf.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
require 'mkmf'
 | 
			
		||||
 | 
			
		||||
have_library('pthread')
 | 
			
		||||
have_library('objc') if RUBY_PLATFORM =~ /darwin/
 | 
			
		||||
$CPPFLAGS += " -Wall" unless $CPPFLAGS.split.include? "-Wall"
 | 
			
		||||
$CPPFLAGS += " -g" unless $CPPFLAGS.split.include? "-g"
 | 
			
		||||
$CPPFLAGS += " -rdynamic" unless $CPPFLAGS.split.include? "-rdynamic"
 | 
			
		||||
$CPPFLAGS += " -fPIC" unless $CPPFLAGS.split.include? "-rdynamic" or RUBY_PLATFORM =~ /darwin/
 | 
			
		||||
$CPPFLAGS += " -std=c++0x"
 | 
			
		||||
$CPPFLAGS += " -fpermissive"
 | 
			
		||||
 | 
			
		||||
CONFIG['LDSHARED'] = '$(CXX) -shared' unless RUBY_PLATFORM =~ /darwin/
 | 
			
		||||
if CONFIG['warnflags']
 | 
			
		||||
  CONFIG['warnflags'].gsub!('-Wdeclaration-after-statement', '')
 | 
			
		||||
  CONFIG['warnflags'].gsub!('-Wimplicit-function-declaration', '')
 | 
			
		||||
end
 | 
			
		||||
if enable_config('debug')
 | 
			
		||||
  $CFLAGS += " -O0 -ggdb3"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
LIBV8_COMPATIBILITY = '~> 5.0.71.35.0'
 | 
			
		||||
 | 
			
		||||
begin
 | 
			
		||||
  require 'rubygems'
 | 
			
		||||
  gem 'libv8', LIBV8_COMPATIBILITY
 | 
			
		||||
rescue Gem::LoadError
 | 
			
		||||
  warn "Warning! Unable to load libv8 #{LIBV8_COMPATIBILITY}."
 | 
			
		||||
rescue LoadError
 | 
			
		||||
  warn "Warning! Could not load rubygems. Please make sure you have libv8 #{LIBV8_COMPATIBILITY} installed."
 | 
			
		||||
ensure
 | 
			
		||||
  require 'libv8'
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Libv8.configure_makefile
 | 
			
		||||
 | 
			
		||||
# Temp Hack
 | 
			
		||||
find_header('v8.h', '/home/sam/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/libv8-5.0.71.35.0/vendor/v8/include')
 | 
			
		||||
 | 
			
		||||
find_header('libplatform/libplatform.h', '/home/sam/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/libv8-5.0.71.35.0/vendor/v8/include')
 | 
			
		||||
 | 
			
		||||
create_makefile 'mini_racer_extension'
 | 
			
		||||
							
								
								
									
										127
									
								
								ext/mini_racer_extension/mini_racer_extension.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								ext/mini_racer_extension/mini_racer_extension.cc
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <ruby.h>
 | 
			
		||||
#include <v8.h>
 | 
			
		||||
#include <libplatform/libplatform.h>
 | 
			
		||||
#include <ruby/encoding.h>
 | 
			
		||||
 | 
			
		||||
using namespace v8;
 | 
			
		||||
 | 
			
		||||
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual void* Allocate(size_t length) {
 | 
			
		||||
    void* data = AllocateUninitialized(length);
 | 
			
		||||
    return data == NULL ? data : memset(data, 0, length);
 | 
			
		||||
  }
 | 
			
		||||
  virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
 | 
			
		||||
  virtual void Free(void* data, size_t) { free(data); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Platform* current_platform = NULL;
 | 
			
		||||
ArrayBufferAllocator* allocator = NULL;
 | 
			
		||||
Isolate* isolate = NULL;
 | 
			
		||||
 | 
			
		||||
static void init_v8() {
 | 
			
		||||
    if (current_platform == NULL) {
 | 
			
		||||
	V8::InitializeICU();
 | 
			
		||||
	current_platform = platform::CreateDefaultPlatform();
 | 
			
		||||
	V8::InitializePlatform(current_platform);
 | 
			
		||||
	V8::Initialize();
 | 
			
		||||
	allocator = new ArrayBufferAllocator();
 | 
			
		||||
 | 
			
		||||
	Isolate::CreateParams create_params;
 | 
			
		||||
	create_params.array_buffer_allocator = allocator;
 | 
			
		||||
	isolate = Isolate::New(create_params);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void shutdown_v8() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static VALUE rb_context_eval(VALUE self, VALUE str) {
 | 
			
		||||
    init_v8();
 | 
			
		||||
 | 
			
		||||
    Isolate::Scope isolate_scope(isolate);
 | 
			
		||||
    HandleScope handle_scope(isolate);
 | 
			
		||||
    Persistent<Context>* persistent_context;
 | 
			
		||||
 | 
			
		||||
    Data_Get_Struct(self, Persistent<Context>, persistent_context);
 | 
			
		||||
    Local<v8::Context> context = Local<Context>::New(isolate, *persistent_context);
 | 
			
		||||
 | 
			
		||||
    Context::Scope context_scope(context);
 | 
			
		||||
 | 
			
		||||
    Local<String> eval = String::NewFromUtf8(isolate, RSTRING_PTR(str),
 | 
			
		||||
					      NewStringType::kNormal, (int)RSTRING_LEN(str)).ToLocalChecked();
 | 
			
		||||
 | 
			
		||||
    Local<Script> script = Script::Compile(context, eval).ToLocalChecked();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    MaybeLocal<Value> initial_result = script->Run(context);
 | 
			
		||||
 | 
			
		||||
    if (initial_result.IsEmpty()) {
 | 
			
		||||
	// exception report about what happened
 | 
			
		||||
	rb_raise(rb_eStandardError, "JavaScript Error");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Local<Value> result = initial_result.ToLocalChecked();
 | 
			
		||||
 | 
			
		||||
    if (result->IsNull() || result->IsUndefined()){
 | 
			
		||||
	return Qnil;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (result->IsInt32()) {
 | 
			
		||||
	return INT2FIX(result->Int32Value());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (result->IsNumber()) {
 | 
			
		||||
	return rb_float_new(result->NumberValue());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Local<String> rstr = result->ToString();
 | 
			
		||||
    return rb_enc_str_new(*v8::String::Utf8Value(rstr), rstr->Utf8Length(), rb_enc_find("utf-8"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void deallocate(void * context) {
 | 
			
		||||
    Isolate::Scope isolate_scope(isolate);
 | 
			
		||||
    HandleScope handle_scope(isolate);
 | 
			
		||||
 | 
			
		||||
    Persistent<Context>* cast_context = context;
 | 
			
		||||
 | 
			
		||||
    cast_context->Reset();
 | 
			
		||||
    delete cast_context;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VALUE allocate(VALUE klass) {
 | 
			
		||||
    init_v8();
 | 
			
		||||
 | 
			
		||||
    Isolate::Scope isolate_scope(isolate);
 | 
			
		||||
    HandleScope handle_scope(isolate);
 | 
			
		||||
    Local<Context> context = Context::New(isolate);
 | 
			
		||||
 | 
			
		||||
    Persistent<Context>* persistent_context = new Persistent<Context>();
 | 
			
		||||
    persistent_context->Reset(isolate, context);
 | 
			
		||||
 | 
			
		||||
    return Data_Wrap_Struct(klass, NULL, deallocate, (void*)persistent_context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static VALUE
 | 
			
		||||
rb_context_init(VALUE self) {
 | 
			
		||||
 | 
			
		||||
    return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
 | 
			
		||||
    void Init_mini_racer_extension ( void )
 | 
			
		||||
    {
 | 
			
		||||
	VALUE rb_mMiniRacer = rb_define_module("MiniRacer");
 | 
			
		||||
	VALUE rb_cContext = rb_define_class_under(rb_mMiniRacer, "Context", rb_cObject);
 | 
			
		||||
	rb_define_method(rb_cContext, "eval", rb_context_eval, 1);
 | 
			
		||||
	rb_define_method(rb_cContext, "initialize", rb_context_init, 0);
 | 
			
		||||
	rb_define_alloc_func(rb_cContext, allocate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								lib/mini_racer.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								lib/mini_racer.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
require "mini_racer/version"
 | 
			
		||||
require "mini_racer_extension"
 | 
			
		||||
 | 
			
		||||
module MiniRacer
 | 
			
		||||
  class JavaScriptError < StandardError; end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										3
									
								
								lib/mini_racer/version.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								lib/mini_racer/version.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
module MiniRacer
 | 
			
		||||
  VERSION = "0.1.0"
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										33
									
								
								mini_racer.gemspec
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								mini_racer.gemspec
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
# coding: utf-8
 | 
			
		||||
lib = File.expand_path('../lib', __FILE__)
 | 
			
		||||
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
 | 
			
		||||
require 'mini_racer/version'
 | 
			
		||||
 | 
			
		||||
Gem::Specification.new do |spec|
 | 
			
		||||
  spec.name          = "mini_racer"
 | 
			
		||||
  spec.version       = MiniRacer::VERSION
 | 
			
		||||
  spec.authors       = ["Sam Saffron"]
 | 
			
		||||
  spec.email         = ["sam.saffron@gmail.com"]
 | 
			
		||||
 | 
			
		||||
  spec.summary       = %q{Minimal embedded v8 for Ruby}
 | 
			
		||||
  spec.description   = %q{Minimal embedded v8 engine for Ruby}
 | 
			
		||||
  spec.homepage      = ""
 | 
			
		||||
  spec.license       = "MIT"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
 | 
			
		||||
  spec.bindir        = "exe"
 | 
			
		||||
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
 | 
			
		||||
  spec.require_paths = ["lib"]
 | 
			
		||||
 | 
			
		||||
  spec.add_development_dependency "bundler", "~> 1.12"
 | 
			
		||||
  spec.add_development_dependency "rake", "~> 10.0"
 | 
			
		||||
  spec.add_development_dependency "minitest", "~> 5.0"
 | 
			
		||||
  spec.add_development_dependency "rake-compiler"
 | 
			
		||||
 | 
			
		||||
  spec.add_dependency 'libv8', '~> 5.0.71.0'
 | 
			
		||||
  spec.require_paths = ["lib", "ext"]
 | 
			
		||||
 | 
			
		||||
  spec.extensions = ["ext/mini_racer_extension/extconf.rb"]
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										36
									
								
								test/mini_racer_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								test/mini_racer_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
class MiniRacerTest < Minitest::Test
 | 
			
		||||
  def test_that_it_has_a_version_number
 | 
			
		||||
    refute_nil ::MiniRacer::VERSION
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_it_can_eval_int
 | 
			
		||||
    context = MiniRacer::Context.new
 | 
			
		||||
    assert_equal 2, context.eval('1+1')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_it_can_eval_string
 | 
			
		||||
    context = MiniRacer::Context.new
 | 
			
		||||
    assert_equal "1+1", context.eval('"1+1"')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_it_returns_useful_errors
 | 
			
		||||
    context = MiniRacer::Context.new
 | 
			
		||||
    assert_raises do
 | 
			
		||||
      context.eval('var x=function(){boom;}; x()')
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_floats
 | 
			
		||||
    context = MiniRacer::Context.new
 | 
			
		||||
    assert_equal 1.2, context.eval('1.2')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_it_remembers_stuff_in_context
 | 
			
		||||
    context = MiniRacer::Context.new
 | 
			
		||||
    context.eval('var x = function(){return 22;}')
 | 
			
		||||
    assert_equal 22, context.eval('x()')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										4
									
								
								test/test_helper.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								test/test_helper.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
 | 
			
		||||
require 'mini_racer'
 | 
			
		||||
 | 
			
		||||
require 'minitest/autorun'
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue