mustang 0.2.1 → 0.2.2

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
@@ -4,6 +4,55 @@ Mustang development is proudly sponsored by [Cubox, Agile Rails Devshop](http://
4
4
 
5
5
  Mustang is ruby proxy library for awesome Google V8 JavaScript engine.
6
6
 
7
+ ## Motivation
8
+
9
+ JavaScript integration testing suite which contains more than 4000 steps and running time
10
+ more that 2 hours... I think that's enough. There is lot of different ways to handle headless
11
+ testing, but they all have lot of issues as well. They are super slow (Selenium, Watir), or
12
+ they are not working with ruby 1.9 (Johsnon), or they requires tricky external stuff (Culerity/Celerity,
13
+ Zombie). Our goal is to create fast javascript engine working fine on all popular ruby implementations
14
+ (1.8.x, 1.9.x, ree, rubinius), and make it core element of headless, virtual browser for testing
15
+ purposes (of course integrated with capybara and cucubmer).
16
+
17
+ ## TheRubyRacer and PyV8 influence...
18
+
19
+ Yeap, [TheRubyRacer](http://github.com/cowboyd/therubyracer) from [Charles Lowell](http://github.com/cowboyd)
20
+ and [PyV8](http://code.google.com/p/pyv8/) made big influence on our Mustang code, so let say now big thanks
21
+ to the authors...
22
+
23
+ You can of course ask why we wrote library which seems to be very similar to TheRubyRacer... yeah it seems, but there
24
+ are a lot of differences. Here is short comparison of TheRubyRacer and Mustang:
25
+
26
+ Similarities:
27
+
28
+ * Both are using similar integration with ruby's garbage collector. Actually, Mustang's code which handles
29
+ that references is just improved version of TheRubyRacer's code (check the <tt>ext/v8/v8_ref.cpp</tt>).
30
+ * Both are reflecting JS objects to ruby and vice-versa.
31
+
32
+ Diffs:
33
+
34
+ * Mustang reflects all JavaScript objects and values properly. Properly, means
35
+ all values from within V8 are reflected to <tt>Mustang::V8::*</tt> objects,
36
+ regarding V8 inheritance tree which you can find [here](http://izs.me/v8-docs/classv8_1_1Data.html).
37
+ * Once reflected ruby object (and vice-versa) is always the same object in ruby
38
+ world.
39
+ * All reflected V8 objects acts exacltly the same as ruby natives. For example
40
+ you can deal with Mustang::V8::Array exactly the same as with native Ruby arrays
41
+ (eg. they are comparable with ruby objects, etc).
42
+ * Functions are reflected more accurately. Ruby objects' methods are represented
43
+ properly.
44
+ * Classes are converted to V8 function templates, so you can deal with them as with
45
+ prototypes.
46
+ * Different approach to deal with contexts, compiling JS scripts and exceptions handling.
47
+ * Support for regexp reflections.
48
+ * Way more friendly ruby api.
49
+ * A very thorough test suite (over 250 tests passing on all ruby versions)
50
+ * Clean codebase, less magic, fully documented.
51
+ * Lower memory usage.
52
+
53
+ And the most important, like i said before, Mustang is used as core element of our
54
+ bigger idea, so it have to exactly fit to our needs.
55
+
7
56
  ## Installation
8
57
 
9
58
  Before you install mustang gem make sure you have `scons` installed.
@@ -38,6 +87,10 @@ For now it's only proof of concept. It implements very simple evaluation of java
38
87
  cxt.eval("puts(a)") # displays "1" on the screen
39
88
  cxt[:a] # => 1
40
89
 
90
+ ### Advanced
91
+
92
+ TODO: coming soon...
93
+
41
94
  ## Note on Patches/Pull Requests
42
95
 
43
96
  * Fork the project.
data/TODO.md CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
  * better exceptions handling
4
4
  * V8::Integer should inherit V8::Number
5
- * specs for Mustang's classes
5
+ * specs for Mustang context
6
6
  * specs for support modules
7
7
  * v8 debug stuff
8
8
  * support for ObjectTemplates
9
9
  * reflecting ruby classes to FunctionTemplates
10
10
  * getting entered context
11
+
12
+ * V8::Data, V8::Value, V8::Primitive should be modules included in
13
+ other v8's datatypes. All that types should inherit native ruby
14
+ classes as well.
@@ -28,30 +28,37 @@ def compile_vendor_v8!(dir)
28
28
  arch = cpu_x64? ? 'x64' : 'ia32'
29
29
  flags = '-fPIC -fno-builtin-memcpy -shared'
30
30
 
31
- Dir.chdir dir do
32
- begin
33
- make_sure_scons_installed!
34
- defaults, ENV['CCFLAGS'] = ENV['CCFLAGS'], flags
35
- build_cmd = "scons mode=release snapshot=off library=static arch=#{arch}"
36
- puts build_cmd
37
- system build_cmd
38
- ensure
39
- ENV['CCFLAGS'] = defaults
40
- end
31
+ begin
32
+ make_sure_scons_installed!
33
+ defaults, ENV['CCFLAGS'] = ENV['CCFLAGS'], flags
34
+ puts "-"*30
35
+ compile_cmd = "cd #{dir} && scons mode=release snapshot=off library=static arch=#{arch}"
36
+ puts compile_cmd
37
+ system compile_cmd
38
+ puts "-"*30
39
+ ensure
40
+ ENV['CCFLAGS'] = defaults
41
41
  end
42
42
  end
43
43
 
44
- V8_DIR = File.expand_path("../../../vendor/v8", __FILE__)
45
- inc, lib = dir_config('v8', File.join(V8_DIR, 'include'), V8_DIR)
44
+ unless have_library('v8')
45
+ V8_DIR = File.expand_path("../../../vendor/v8", __FILE__)
46
+ inc, lib = dir_config('v8', File.join(V8_DIR, 'include'), V8_DIR)
46
47
 
47
- if V8_DIR == lib
48
- compile_vendor_v8!(V8_DIR)
49
- $LOCAL_LIBS << Dir[File.join(V8_DIR, "**/**/libv8.a")].first
48
+ if V8_DIR == lib
49
+ compile_vendor_v8!(V8_DIR)
50
+ $LOCAL_LIBS << Dir[File.join(V8_DIR, "**/**/libv8.a")].first
51
+ end
52
+
53
+ find_library('v8', nil, lib)
50
54
  end
51
55
 
52
- find_library('v8', nil, lib)
53
56
  have_library('pthread')
57
+ have_header('string.h')
58
+ have_header('ruby.h')
54
59
  have_header('v8.h')
60
+ have_header('v8-debug.h')
61
+ have_header('v8-profiler.h')
55
62
 
56
63
  CONFIG['LDSHARED'] = '$(CXX) -shared' unless darwin?
57
64
 
@@ -12,6 +12,7 @@
12
12
  #include "v8_function.h"
13
13
  #include "v8_regexp.h"
14
14
  #include "v8_external.h"
15
+ #include "v8_boolean.h"
15
16
  #include "v8_errors.h"
16
17
 
17
18
  extern "C" void Init_v8() {
@@ -33,5 +34,6 @@ extern "C" void Init_v8() {
33
34
  Init_V8_Function();
34
35
  Init_V8_Regexp();
35
36
  Init_V8_External();
37
+ Init_V8_Boolean();
36
38
  Init_V8_Errors();
37
39
  }
@@ -0,0 +1,29 @@
1
+ #include "v8_ref.h"
2
+ #include "v8_cast.h"
3
+ #include "v8_boolean.h"
4
+ #include "v8_errors.h"
5
+ #include "v8_value.h"
6
+ #include "v8_macros.h"
7
+
8
+ using namespace v8;
9
+
10
+ VALUE rb_cV8Boolean;
11
+ VALUE rb_cV8FalseClass;
12
+ VALUE rb_cV8TrueClass;
13
+
14
+ /* Booleans initializer */
15
+ void Init_V8_Boolean()
16
+ {
17
+ rb_cV8Boolean = rb_define_class_under(rb_mV8, "Boolean", rb_cV8Primitive);
18
+ VALUE args;
19
+
20
+ /* false */
21
+ args = Qfalse;
22
+ rb_cV8FalseClass = rb_define_class_under(rb_mV8, "FalseClass", rb_cV8Boolean);
23
+ rb_define_const(rb_mV8, "False", rb_funcall2(rb_cV8FalseClass, rb_intern("new"), 1, &args));
24
+
25
+ /* true */
26
+ args = Qtrue;
27
+ rb_cV8TrueClass = rb_define_class_under(rb_mV8, "TrueClass", rb_cV8Boolean);
28
+ rb_define_const(rb_mV8, "True", rb_funcall2(rb_cV8TrueClass, rb_intern("new"), 1, &args));
29
+ }
@@ -0,0 +1,18 @@
1
+ #ifndef __V8_BOOLEAN_H
2
+ #define __V8_BOOLEAN_H
3
+
4
+ #include "v8_main.h"
5
+
6
+ using namespace v8;
7
+
8
+ /* V8::Boolean class */
9
+ RUBY_EXTERN VALUE rb_cV8Boolean;
10
+ /* V8::FalseClass class */
11
+ RUBY_EXTERN VALUE rb_cV8FalseClass;
12
+ /* V8::TrueClass class */
13
+ RUBY_EXTERN VALUE rb_cV8TrueClass;
14
+
15
+ /* API */
16
+ void Init_V8_Boolean();
17
+
18
+ #endif /* __V8_BOOLEAN_H */
@@ -12,6 +12,7 @@
12
12
  #include "v8_regexp.h"
13
13
  #include "v8_context.h"
14
14
  #include "v8_external.h"
15
+ #include "v8_boolean.h"
15
16
  #include "v8_errors.h"
16
17
  #include "v8_macros.h"
17
18
 
@@ -80,7 +81,7 @@ VALUE to_ruby(Handle<Value> value)
80
81
  } else if (value->IsNull()) {
81
82
  return rb_const_get(rb_mV8, rb_intern("Null"));
82
83
  } else if (value->IsBoolean()) {
83
- return value->BooleanValue() ? Qtrue : Qfalse;
84
+ return rb_const_get(rb_mV8, value->BooleanValue() ? rb_intern("True") : rb_intern("False"));
84
85
  } else if (value->IsDate()) {
85
86
  return to_ruby_without_peer<Date>(value, rb_cV8Date);
86
87
  } else if (value->IsUint32() || value->IsInt32()) {
@@ -101,7 +102,7 @@ VALUE to_ruby(Handle<Value> value)
101
102
  return to_ruby_with_peer<Object>(value, rb_cV8Object);
102
103
  }
103
104
 
104
- return Qnil;
105
+ return rb_const_get(rb_mV8, rb_intern("Empty"));
105
106
  }
106
107
 
107
108
  OVERLOAD_TO_RUBY_WITH(Boolean);
@@ -21,8 +21,12 @@ UNWRAPPER(Value);
21
21
  */
22
22
  static VALUE rb_v8_value_new(VALUE self, VALUE data)
23
23
  {
24
- HandleScope scope;
25
- PREVENT_CREATION_WITHOUT_CONTEXT();
24
+ HandleScope scope;
25
+
26
+ if (data != Qtrue && data != Qfalse && data != Qnil) {
27
+ PREVENT_CREATION_WITHOUT_CONTEXT();
28
+ }
29
+
26
30
  return v8_ref_new(self, to_v8(data));
27
31
  }
28
32
 
@@ -11,6 +11,7 @@ require 'mustang/v8/date'
11
11
  require 'mustang/v8/regexp'
12
12
  require 'mustang/v8/function'
13
13
  require 'mustang/v8/external'
14
+ require 'mustang/v8/boolean'
14
15
  require 'mustang/v8/error'
15
16
 
16
17
  require 'mustang/core_ext/object'
@@ -16,6 +16,10 @@ module Mustang
16
16
  def delegate
17
17
  to_a
18
18
  end
19
+
20
+ def kind_of?(klass)
21
+ klass == ::Array or super(klass)
22
+ end
19
23
  end # Array
20
24
  end # V8
21
25
  end # Mustang
@@ -0,0 +1,45 @@
1
+ module Mustang
2
+ module V8
3
+ class Boolean
4
+ def true?
5
+ self.is_a?(TrueClass)
6
+ end
7
+
8
+ def false?
9
+ self.is_a?(FalseClass)
10
+ end
11
+
12
+ def to_s
13
+ to_bool.to_s
14
+ end
15
+
16
+ def &(other)
17
+ to_bool & other
18
+ end
19
+
20
+ def |(other)
21
+ to_bool | other
22
+ end
23
+
24
+ def ^(other)
25
+ to_bool ^ other
26
+ end
27
+
28
+ def ==(other)
29
+ to_bool == other
30
+ end
31
+
32
+ def <=>(other)
33
+ to_bool <=> other
34
+ end
35
+
36
+ def kind_of?(klass)
37
+ klass == (false? ? false.class : true.class) or super(klass)
38
+ end
39
+
40
+ def to_bool
41
+ false? ? false : true
42
+ end
43
+ end # Boolean
44
+ end # V8
45
+ end # Mustang
@@ -15,6 +15,10 @@ module Mustang
15
15
  def delegate
16
16
  to_time
17
17
  end
18
+
19
+ def kind_of?(klass)
20
+ klass == ::Time or klass == ::Date or klass == ::DateTime or super(klass)
21
+ end
18
22
  end # Date
19
23
  end # V8
20
24
  end # Mustang
@@ -8,6 +8,10 @@ module Mustang
8
8
  def to_proc
9
9
  origin.to_proc if origin
10
10
  end
11
+
12
+ def kind_of?(klass)
13
+ origin.is_a?(klass) or super(klass)
14
+ end
11
15
  end # Function
12
16
  end # V8
13
17
  end # Mustang
@@ -11,6 +11,10 @@ module Mustang
11
11
  def delegate
12
12
  to_i
13
13
  end
14
+
15
+ def kind_of?(klass)
16
+ klass == ::Fixnum or super(klass)
17
+ end
14
18
  end # Integer
15
19
  end # V8
16
20
  end # Mustang
@@ -11,6 +11,10 @@ module Mustang
11
11
  def delegate
12
12
  to_f
13
13
  end
14
+
15
+ def kind_of?(klass)
16
+ klass == ::Float or super(klass)
17
+ end
14
18
  end # Number
15
19
  end # V8
16
20
  end # Mustang
@@ -18,6 +18,10 @@ module Mustang
18
18
  def to_regexp
19
19
  ::Regexp.new(source, options)
20
20
  end
21
+
22
+ def kind_of?(klass)
23
+ klass == ::Regexp or super(klass)
24
+ end
21
25
  end # Regexp
22
26
  end # V8
23
27
  end # Mustang
@@ -22,6 +22,10 @@ module Mustang
22
22
  def delegate
23
23
  to_s
24
24
  end
25
+
26
+ def kind_of?(klass)
27
+ klass == ::String or super(klass)
28
+ end
25
29
  end # String
26
30
  end # V8
27
31
  end # Mustang
@@ -3,7 +3,7 @@
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "mustang"
5
5
  s.summary = "Awesome V8 JavaScript engine embedded into the Ruby's shiny body"
6
- s.version = "0.2.1"
6
+ s.version = "0.2.2"
7
7
  s.authors = ["Chris Kowalik", "Cubox"]
8
8
  s.description = "Ruby proxy library for Google V8 Javascript engine."
9
9
  s.homepage = "http://github.com/nu7hatch/mustang"
@@ -7,6 +7,10 @@ describe Mustang::V8::Array do
7
7
  it "inherits Mustang::V8::Object" do
8
8
  subject.new(1,2,3).should be_kind_of(Mustang::V8::Object)
9
9
  end
10
+
11
+ it "is kind of Array" do
12
+ subject.new(1,2,3).should be_kind_of Array
13
+ end
10
14
 
11
15
  describe ".new" do
12
16
  context "when no context entered" do
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Mustang::V8::Boolean do
4
+ subject { Mustang::V8::Boolean }
5
+ setup_context
6
+
7
+ it "inherits Mustang::V8::Data" do
8
+ subject.new(10).should be_kind_of(Mustang::V8::Primitive)
9
+ end
10
+
11
+ it "is kind of FalseClass or TrueClass" do
12
+ Mustang::V8::False.should be_kind_of FalseClass
13
+ Mustang::V8::True.should be_kind_of TrueClass
14
+ end
15
+ end
16
+
17
+ shared_examples_for "Boolean" do
18
+ describe "#to_bool" do
19
+ it "returns ruby bool value" do
20
+ subject.to_bool.should == compare
21
+ end
22
+ end
23
+
24
+ describe "#true?" do
25
+ it "returns proper value" do
26
+ subject.true?.should == (compare == true)
27
+ end
28
+ end
29
+
30
+ describe "#false?" do
31
+ it "returns proper value" do
32
+ subject.false?.should == (compare == false)
33
+ end
34
+ end
35
+
36
+ describe "#&" do
37
+ it "acts as ruby bool's method" do
38
+ (subject & true).should == (compare & true)
39
+ (subject & false).should == (compare & false)
40
+ end
41
+ end
42
+
43
+ describe "#|" do
44
+ it "acts as ruby bool's method" do
45
+ (subject | true).should == (compare | true)
46
+ (subject | false).should == (compare | false)
47
+ end
48
+ end
49
+
50
+ describe "#^" do
51
+ it "acts as ruby bool's method" do
52
+ (subject ^ true).should == (compare ^ true)
53
+ (subject ^ false).should == (compare ^ false)
54
+ end
55
+ end
56
+
57
+ describe "#==" do
58
+ it "acts as ruby bool's method" do
59
+ subject.should == compare
60
+ subject.should_not == !compare
61
+ end
62
+ end
63
+
64
+ describe "#to_s" do
65
+ it "acts as ruby bool's method" do
66
+ subject.to_s.should == compare.to_s
67
+ end
68
+ end
69
+ end
70
+
71
+ describe Mustang::V8::False do
72
+ let(:compare) { false }
73
+ it_should_behave_like "Boolean"
74
+
75
+ it "acts as normal bool in conditional statements" do
76
+ pending
77
+ (subject ? 'foo' : 'bar').should == 'bar'
78
+ (!subject ? 'foo' : 'bar').should == 'foo'
79
+ end
80
+ end
81
+
82
+ describe Mustang::V8::True do
83
+ let(:compare) { true }
84
+ it_should_behave_like "Boolean"
85
+
86
+ it "acts as normal bool in conditional statements" do
87
+ pending
88
+ (!subject ? 'foo' : 'bar').should == 'bar'
89
+ (subject ? 'foo' : 'bar').should == 'foo'
90
+ end
91
+ end
@@ -31,8 +31,8 @@ describe "Typecasting" do
31
31
  end
32
32
 
33
33
  it "converts boolean values properly" do
34
- cxt.eval("true", "<eval>").should be_true
35
- cxt.eval("false", "<eval>").should be_false
34
+ cxt.eval("true", "<eval>").should == true
35
+ cxt.eval("false", "<eval>").should == false
36
36
  end
37
37
 
38
38
  it "converts strings properly" do
@@ -12,6 +12,12 @@ describe Mustang::V8::Date do
12
12
  subject.new(@now).should be_kind_of(Mustang::V8::Value)
13
13
  end
14
14
 
15
+ it "is kind of Date, DateTime, Time" do
16
+ subject.new(@now).should be_kind_of Date
17
+ subject.new(@now).should be_kind_of DateTime
18
+ subject.new(@now).should be_kind_of Time
19
+ end
20
+
15
21
  describe ".new" do
16
22
  context "when no context entered" do
17
23
  it "should raise error" do
@@ -8,6 +8,10 @@ describe Mustang::V8::Function do
8
8
  subject.new(lambda { "foo" }).should be_kind_of(Mustang::V8::Object)
9
9
  end
10
10
 
11
+ it "is kind of Proc" do
12
+ subject.new(proc {}).should be_kind_of Proc
13
+ end
14
+
11
15
  describe ".new" do
12
16
  context "when no context entered" do
13
17
  it "should raise error" do
@@ -9,6 +9,10 @@ describe Mustang::V8::Integer do
9
9
  subject.new(10).should be_kind_of(Mustang::V8::Number)
10
10
  end
11
11
 
12
+ it "is kind of Fixnum" do
13
+ subject.new(1).should be_kind_of Fixnum
14
+ end
15
+
12
16
  describe ".new" do
13
17
  context "when no context entered" do
14
18
  it "should raise error" do
@@ -8,6 +8,10 @@ describe Mustang::V8::Number do
8
8
  subject.new(10.5).should be_kind_of(Mustang::V8::Primitive)
9
9
  end
10
10
 
11
+ it "is kind of Float" do
12
+ subject.new(10.5).should be_kind_of Float
13
+ end
14
+
11
15
  describe ".new" do
12
16
  it "creates new v8 number based on passed value" do
13
17
  subject.new(10.5).should == 10.5
@@ -8,6 +8,10 @@ describe Mustang::V8::Regexp do
8
8
  subject.new(/foo(bar)?/).should be_kind_of(Mustang::V8::Value)
9
9
  end
10
10
 
11
+ it "is kind of Regexp" do
12
+ subject.new(/foo/).should be_kind_of Regexp
13
+ end
14
+
11
15
  describe ".new" do
12
16
  context "when no context entered" do
13
17
  it "should raise error" do
@@ -9,6 +9,10 @@ describe Mustang::V8::String do
9
9
  subject.new("foo").should be_kind_of(Mustang::V8::Primitive)
10
10
  end
11
11
 
12
+ it "is kind of String" do
13
+ subject.new("foo").should be_kind_of String
14
+ end
15
+
12
16
  describe ".new" do
13
17
  context "when no context entered" do
14
18
  it "should raise error" do
@@ -169,8 +169,8 @@ describe Mustang::V8::Value do
169
169
 
170
170
  describe "#to_boolean" do
171
171
  it "return V8 boolean representation of value" do
172
- Mustang::V8::Object.new(:foo => 1).to_boolean.should be_true
173
- Mustang::V8::Integer.new(0).to_boolean.should be_false
172
+ Mustang::V8::Object.new(:foo => 1).to_boolean.should == true
173
+ Mustang::V8::Integer.new(0).to_boolean.should == false
174
174
  end
175
175
  end
176
176
 
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustang
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.2.1
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 2
10
+ version: 0.2.2
6
11
  platform: ruby
7
12
  authors:
8
13
  - Chris Kowalik
@@ -11,7 +16,8 @@ autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
18
 
14
- date: 2011-04-07 00:00:00 Z
19
+ date: 2011-04-11 00:00:00 -03:00
20
+ default_executable:
15
21
  dependencies:
16
22
  - !ruby/object:Gem::Dependency
17
23
  name: ore-tasks
@@ -21,6 +27,10 @@ dependencies:
21
27
  requirements:
22
28
  - - ~>
23
29
  - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ - 4
24
34
  version: "0.4"
25
35
  type: :development
26
36
  version_requirements: *id001
@@ -32,6 +42,10 @@ dependencies:
32
42
  requirements:
33
43
  - - ~>
34
44
  - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 2
48
+ - 0
35
49
  version: "2.0"
36
50
  type: :development
37
51
  version_requirements: *id002
@@ -43,6 +57,10 @@ dependencies:
43
57
  requirements:
44
58
  - - ~>
45
59
  - !ruby/object:Gem::Version
60
+ hash: 25
61
+ segments:
62
+ - 0
63
+ - 9
46
64
  version: "0.9"
47
65
  type: :development
48
66
  version_requirements: *id003
@@ -54,6 +72,10 @@ dependencies:
54
72
  requirements:
55
73
  - - ~>
56
74
  - !ruby/object:Gem::Version
75
+ hash: 5
76
+ segments:
77
+ - 0
78
+ - 7
57
79
  version: "0.7"
58
80
  type: :development
59
81
  version_requirements: *id004
@@ -78,6 +100,8 @@ files:
78
100
  - ext/v8/v8_array.h
79
101
  - ext/v8/v8_base.cpp
80
102
  - ext/v8/v8_base.h
103
+ - ext/v8/v8_boolean.cpp
104
+ - ext/v8/v8_boolean.h
81
105
  - ext/v8/v8_cast.cpp
82
106
  - ext/v8/v8_cast.h
83
107
  - ext/v8/v8_context.cpp
@@ -115,6 +139,7 @@ files:
115
139
  - lib/mustang/errors.rb
116
140
  - lib/mustang/support/delegated.rb
117
141
  - lib/mustang/v8/array.rb
142
+ - lib/mustang/v8/boolean.rb
118
143
  - lib/mustang/v8/context.rb
119
144
  - lib/mustang/v8/date.rb
120
145
  - lib/mustang/v8/error.rb
@@ -132,6 +157,7 @@ files:
132
157
  - spec/mustang/core_ext/object_spec.rb
133
158
  - spec/mustang/core_ext/symbol_spec.rb
134
159
  - spec/mustang/v8/array_spec.rb
160
+ - spec/mustang/v8/boolean_spec.rb
135
161
  - spec/mustang/v8/cast_spec.rb
136
162
  - spec/mustang/v8/context_spec.rb
137
163
  - spec/mustang/v8/data_spec.rb
@@ -1577,6 +1603,7 @@ files:
1577
1603
  - vendor/v8/tools/visual_studio/v8_x64.vcproj
1578
1604
  - vendor/v8/tools/visual_studio/x64.vsprops
1579
1605
  - vendor/v8/tools/windows-tick-processor.bat
1606
+ has_rdoc: true
1580
1607
  homepage: http://github.com/nu7hatch/mustang
1581
1608
  licenses:
1582
1609
  - MIT
@@ -1591,17 +1618,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
1591
1618
  requirements:
1592
1619
  - - ">="
1593
1620
  - !ruby/object:Gem::Version
1621
+ hash: 3
1622
+ segments:
1623
+ - 0
1594
1624
  version: "0"
1595
1625
  required_rubygems_version: !ruby/object:Gem::Requirement
1596
1626
  none: false
1597
1627
  requirements:
1598
1628
  - - ">="
1599
1629
  - !ruby/object:Gem::Version
1630
+ hash: 3
1631
+ segments:
1632
+ - 0
1600
1633
  version: "0"
1601
1634
  requirements: []
1602
1635
 
1603
1636
  rubyforge_project:
1604
- rubygems_version: 1.7.1
1637
+ rubygems_version: 1.3.7
1605
1638
  signing_key:
1606
1639
  specification_version: 3
1607
1640
  summary: Awesome V8 JavaScript engine embedded into the Ruby's shiny body
@@ -1612,6 +1645,7 @@ test_files:
1612
1645
  - spec/mustang/core_ext/object_spec.rb
1613
1646
  - spec/mustang/core_ext/symbol_spec.rb
1614
1647
  - spec/mustang/v8/array_spec.rb
1648
+ - spec/mustang/v8/boolean_spec.rb
1615
1649
  - spec/mustang/v8/cast_spec.rb
1616
1650
  - spec/mustang/v8/context_spec.rb
1617
1651
  - spec/mustang/v8/data_spec.rb