inline_javascript 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require=./spec/helpers/spec_helper.rb
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create use 1.9.2@ruby_inline_javascript
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ gem 'json'
5
+
6
+ group :test do
7
+ gem 'rspec', '>= 2.5'
8
+ end
9
+
10
+ group :development do
11
+ gem 'hoe', '>= 2.7.0'
12
+ gem 'newgem', '>= 1.5.3'
13
+ gem 'rdoc', '>= 3.2'
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ RedCloth (4.2.7)
5
+ activesupport (2.3.11)
6
+ diff-lcs (1.1.2)
7
+ hoe (2.9.1)
8
+ rake (>= 0.8.7)
9
+ i18n (0.5.0)
10
+ json (1.5.1)
11
+ newgem (1.5.3)
12
+ RedCloth (>= 4.1.1)
13
+ activesupport (~> 2.3.4)
14
+ hoe (>= 2.4.0)
15
+ rubigen (>= 1.5.3)
16
+ syntax (>= 1.0.0)
17
+ rake (0.8.7)
18
+ rdoc (3.5.3)
19
+ rspec (2.5.0)
20
+ rspec-core (~> 2.5.0)
21
+ rspec-expectations (~> 2.5.0)
22
+ rspec-mocks (~> 2.5.0)
23
+ rspec-core (2.5.1)
24
+ rspec-expectations (2.5.0)
25
+ diff-lcs (~> 1.1.2)
26
+ rspec-mocks (2.5.0)
27
+ rubigen (1.5.6)
28
+ activesupport (>= 2.3.5)
29
+ i18n
30
+ syntax (1.0.0)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ hoe (>= 2.7.0)
37
+ json
38
+ newgem (>= 1.5.3)
39
+ rdoc (>= 3.2)
40
+ rspec (>= 2.5)
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2011-02-23
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,21 @@
1
+ .rspec
2
+ .rvmrc
3
+ Gemfile
4
+ Gemfile.lock
5
+ History.txt
6
+ Manifest.txt
7
+ PostInstall.txt
8
+ README.rdoc
9
+ Rakefile
10
+ ext/inline_java_script_v8_wrapper/extconf.rb
11
+ ext/inline_java_script_v8_wrapper/inline_java_script_v8_wrapper.cc
12
+ lib/inline_java_script.rb
13
+ lib/inline_java_script/v8_wrapper.rb
14
+ script/console
15
+ script/destroy
16
+ script/generate
17
+ spec/helpers/spec_helper.rb
18
+ spec/inline_javascript_spec.rb
19
+ spec/inline_javascript_v8_wrapper_extn_spec.rb
20
+ tasks/extconf.rake
21
+ tasks/extconf/inline_java_script_v8_wrapper.rake
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on inline_javascript, see http://inline_javascript.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,89 @@
1
+ = inline_javascript
2
+
3
+ * http://github.com/moowahaha/ruby_inline_javascript
4
+
5
+ == DESCRIPTION:
6
+
7
+ Call JavaScript methods from Ruby using either InlineJavaScript or, more directly,
8
+ InlineJavaScript::V8Wrapper.
9
+
10
+
11
+ == FEATURES/PROBLEMS:
12
+
13
+ * InlineJavaScript supports calling methods with multiple parameters of Fixnum (integer),
14
+ String, Hash, Array or any other class that supports the ".to_json" method (as provided
15
+ by the "json" gem).
16
+
17
+ * InlineJavaScript supports JavaScript return values of type String, Integer, Hash, Array or any
18
+ other type supported by JavaScript's "JSON.stringify()" method.
19
+
20
+ * InlineJavaScript::V8Wrapper only currently supports functions returning basic scalars,
21
+ that it then turns into strings.
22
+
23
+
24
+ == SYNOPSIS:
25
+
26
+ To call a JavaScript function as if it was Ruby:
27
+
28
+ require 'inline_java_script'
29
+
30
+ js = InlineJavaScript.new('function my_add (a, b) { return a+b}')
31
+ js.my_add(1, 2) #=> 3
32
+
33
+ Using more complex types:
34
+
35
+ js = InlineJavaScript.new('function my_concat (a) { return {concat_string: a[0] + " " + a[1]} }')
36
+ js.my_concat(['hello', 'world']) #=> {"concat_string" => "hello world"}
37
+
38
+ To call the V8 engine directly (no smarts):
39
+
40
+ require 'inline_java_script/v8_wrapper'
41
+
42
+ wrapper = InlineJavaScript::V8Wrapper.new
43
+ wrapper.execute('1 + 2') #=> "3"
44
+
45
+ An instance of the V8Wrapper maintains state:
46
+
47
+ wrapper = InlineJavaScript::V8Wrapper.new
48
+ wrapper.execute('var e = "monster"')
49
+ wrapper.execute('e') #=> "monster"
50
+
51
+ # ... But I cannot access another instance...
52
+ InlineJavaScript::V8Wrapper.new.execute('e') #=> SyntaxError
53
+
54
+
55
+ == REQUIREMENTS:
56
+
57
+ * Google's libv8. I installed this using Homebrew (https://github.com/mxcl/homebrew)
58
+ by running "brew install v8" on OSX. libv8 is also available for other operating
59
+ systems through various means (e.g. yum install libv8-dev).
60
+
61
+
62
+ == INSTALL:
63
+
64
+ * gem install inline_javascript
65
+
66
+ == LICENSE:
67
+
68
+ (The MIT License)
69
+
70
+ Copyright (c) 2011 Stephen Hardisty.
71
+
72
+ Permission is hereby granted, free of charge, to any person obtaining
73
+ a copy of this software and associated documentation files (the
74
+ 'Software'), to deal in the Software without restriction, including
75
+ without limitation the rights to use, copy, modify, merge, publish,
76
+ distribute, sublicense, and/or sell copies of the Software, and to
77
+ permit persons to whom the Software is furnished to do so, subject to
78
+ the following conditions:
79
+
80
+ The above copyright notice and this permission notice shall be
81
+ included in all copies or substantial portions of the Software.
82
+
83
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
84
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
85
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
86
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
87
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
88
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
89
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/inline_java_script'
6
+
7
+ Hoe.plugin :newgem
8
+
9
+ $hoe = Hoe.spec 'inline_javascript' do
10
+ self.developer 'Stephen Hardisty', 'moowahaha@hotmail.com'
11
+ self.post_install_message = 'PostInstall.txt'
12
+ self.rubyforge_name = self.name
13
+ self.extra_deps = [['json','>= 0']]
14
+
15
+ self.clean_globs = [
16
+ 'ext/inline_java_script_v8_wrapper/Makefile',
17
+ 'ext/inline_java_script_v8_wrapper/*.{o,so,bundle,a,log,dll}',
18
+ 'ext/inline_java_script_v8_wrapper/conftest.dSYM'
19
+ ]
20
+
21
+ self.spec_extras = { :extensions => ["ext/inline_java_script_v8_wrapper/extconf.rb"] }
22
+ end
23
+
24
+ task :default do
25
+ sh 'rake clean && rake extconf:compile && rake spec'
26
+ end
27
+
28
+ require 'newgem/tasks'
29
+ Dir['tasks/**/*.rake'].each { |t| load t }
30
+
@@ -0,0 +1,6 @@
1
+ require 'mkmf'
2
+
3
+ have_library("stdc++")
4
+ have_library('v8')
5
+
6
+ create_makefile("inline_java_script_v8_wrapper")
@@ -0,0 +1,103 @@
1
+ #include "ruby.h"
2
+ #include <v8.h>
3
+
4
+ using namespace v8;
5
+
6
+ class V8Context {
7
+
8
+ public:
9
+
10
+ V8Context() {
11
+ this->context = Context::New();
12
+ }
13
+
14
+ ~V8Context() {
15
+ this->dispose();
16
+ }
17
+
18
+ void dispose() {
19
+ this->context.Dispose();
20
+ }
21
+
22
+ VALUE execute(VALUE javascript_string) {
23
+ Context::Scope context_scope(this->context);
24
+
25
+ HandleScope handle_scope;
26
+
27
+ Handle<String> source = String::New(StringValueCStr(javascript_string));
28
+
29
+ TryCatch try_catch;
30
+
31
+ Handle<Script> javascript_functions = Script::Compile(source);
32
+
33
+ if (javascript_functions.IsEmpty()) {
34
+ throw_javascript_exception(&try_catch);
35
+ }
36
+
37
+ Handle<Value> result = javascript_functions->Run();
38
+
39
+ return this->rb_result(result, &try_catch);
40
+ }
41
+
42
+ private:
43
+
44
+ Persistent<Context> context;
45
+
46
+ VALUE rb_result(Handle<Value> result, TryCatch *try_catch) {
47
+ if (result.IsEmpty()) {
48
+ throw_javascript_exception(try_catch);
49
+ }
50
+
51
+ if (result->IsUndefined()) {
52
+ return Qnil;
53
+ }
54
+
55
+ String::Utf8Value str(result);
56
+
57
+ return rb_str_new2(*str);
58
+ }
59
+
60
+ void throw_javascript_exception(TryCatch *try_catch) {
61
+ Handle<Value> exception = try_catch->Exception();
62
+ String::AsciiValue exception_str(exception);
63
+
64
+ Handle<Message> message = try_catch->Message();
65
+ if (message.IsEmpty()) {
66
+ rb_raise(rb_eSyntaxError, "JavaScript error: %s", *exception_str);
67
+ }
68
+
69
+ int line = message->GetLineNumber();
70
+ String::Utf8Value sourceline(message->GetSourceLine());
71
+
72
+ rb_raise(rb_eSyntaxError, "JavaScript error: %s on line %d:\n%s", *exception_str, line, *sourceline);
73
+ }
74
+
75
+ };
76
+
77
+ VALUE rb_cInlineJavaScriptV8Wrapper = Qnil;
78
+
79
+ VALUE rb_execute_java_script(VALUE self, VALUE javascript_string) {
80
+ V8Context *this_context;
81
+ Data_Get_Struct(self, V8Context, this_context);
82
+ return this_context->execute(javascript_string);
83
+
84
+ }
85
+
86
+ void dispose_of_context(V8Context *this_context) {
87
+ this_context->dispose();
88
+ free(this_context);
89
+ }
90
+
91
+ VALUE allocate_context(VALUE klass) {
92
+ V8Context *this_context = new V8Context();
93
+ return Data_Wrap_Struct(klass, 0, dispose_of_context, this_context);
94
+ }
95
+
96
+ extern "C" void Init_inline_java_script_v8_wrapper() {
97
+ VALUE rb_cInlineJavaScript = rb_define_class("InlineJavaScript", rb_cObject);
98
+ rb_cInlineJavaScriptV8Wrapper = rb_define_class_under(rb_cInlineJavaScript, "V8Wrapper", rb_cObject);
99
+
100
+ rb_define_method(rb_cInlineJavaScriptV8Wrapper, "execute", (VALUE(*)(...))&rb_execute_java_script, 1);
101
+ rb_define_alloc_func(rb_cInlineJavaScriptV8Wrapper, allocate_context);
102
+ }
103
+
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+
3
+ #== SYNOPSIS:
4
+ #
5
+ #To call a JavaScript function as if it was Ruby:
6
+ #
7
+ # require 'inline_java_script'
8
+ #
9
+ # js = InlineJavaScript.new('function my_add (a, b) { return a+b}')
10
+ # js.my_add(1, 2) #=> 3
11
+ #
12
+ #Using more complex types:
13
+ #
14
+ # js = InlineJavaScript.new('function my_concat (a) { return {concat_string: a[0] + " " + a[1]} }')
15
+ # js.my_concat(['hello', 'world']) #=> {"concat_string" => "hello world"}
16
+
17
+
18
+ class InlineJavaScript
19
+ VERSION = '0.1'
20
+
21
+ # Takes a string containing some JavaScript and executes it. The state is maintained.
22
+ # JavaScript functions defined in the string can be called directly from an instance
23
+ # of InlineJavaScript as if they were methods.
24
+
25
+ def initialize javascript_functions
26
+ require File.join(File.dirname(__FILE__), %w{.. ext inline_java_script_v8_wrapper inline_java_script_v8_wrapper})
27
+
28
+ @wrapper = InlineJavaScript::V8Wrapper.new
29
+ @wrapper.execute(javascript_functions)
30
+ end
31
+
32
+ # Attempts to call whatever JavaScript function you defined in the constructor.
33
+ # It will accept any number of parameters of String, Fixnum, Array or Hash and can
34
+ # support returning the same from JavaScript.
35
+
36
+ def method_missing(method, *arguments, &unused_block)
37
+ json_arguments = arguments.map do |arg|
38
+ "JSON.parse(" + arg.to_json.to_json + ")"
39
+ end
40
+
41
+ JSON[@wrapper.execute("JSON.stringify({result: #{method}(#{json_arguments.join(',')})})")]['result']
42
+ end
43
+ end
@@ -0,0 +1,21 @@
1
+ require File.join(File.dirname(__FILE__), %w{.. .. ext inline_java_script_v8_wrapper inline_java_script_v8_wrapper})
2
+
3
+ #== SYNOPSIS:
4
+ #To call the V8 engine:
5
+ #
6
+ # require 'inline_java_script/v8_wrapper'
7
+ #
8
+ # wrapper = InlineJavaScript::V8Wrapper.new
9
+ # wrapper.execute('1 + 2') #=> "3"
10
+ #
11
+ #An instance of the V8Wrapper maintains state:
12
+ #
13
+ # wrapper = InlineJavaScript::V8Wrapper.new
14
+ # wrapper.execute('var e = "monster"')
15
+ # wrapper.execute('e') #=> "monster"
16
+ #
17
+ # # ... But I cannot access another instance...
18
+ # InlineJavaScript::V8Wrapper.new.execute('e') #=> SyntaxError
19
+
20
+ class InlineJavaScript::V8Wrapper
21
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/pickaxe.rb'}"
9
+ puts "Loading pickaxe gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1 @@
1
+ require 'inline_java_script'
@@ -0,0 +1,18 @@
1
+ describe InlineJavaScript do
2
+
3
+ it "should call pass arguments and return results" do
4
+ js = InlineJavaScript.new('function concat (a, b) { return(a + " " + b) }')
5
+ js.concat('bath', 'rules').should == 'bath rules'
6
+ end
7
+
8
+ it "should be able to deal with numeric values" do
9
+ js = InlineJavaScript.new('function add (a, b) { return(a + b) }')
10
+ js.add(1, 100).should == 101
11
+ end
12
+
13
+ it "should handle more complex types" do
14
+ js = InlineJavaScript.new('function something (some_array) { return {second: some_array[1]} }')
15
+ js.something(%w{hopefully this works great}).should == {'second' => 'this'}
16
+ end
17
+
18
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + "/../ext/inline_java_script_v8_wrapper/inline_java_script_v8_wrapper"
2
+
3
+ describe InlineJavaScript::V8Wrapper do
4
+
5
+ it "should execute some javascript" do
6
+ wrapper = InlineJavaScript::V8Wrapper.new
7
+ wrapper.execute('function blah() { return "hello"}')
8
+ wrapper.execute('blah()').should == "hello"
9
+ end
10
+
11
+ it "should not have globally scoped JS" do
12
+ InlineJavaScript::V8Wrapper.new.execute('function i_should_have_a_short_life() {}')
13
+
14
+ wrapper = InlineJavaScript::V8Wrapper.new
15
+ wrapper.execute('function i_am_wasted_javascript () {}')
16
+ -> { wrapper.execute('i_should_have_a_short_life()') }.should raise_error(SyntaxError)
17
+ end
18
+
19
+ it "should return nil when nothing is returned" do
20
+ InlineJavaScript::V8Wrapper.new.execute('var x = 2').should be_nil
21
+ end
22
+
23
+ it "should throw exceptions with syntax errors" do
24
+ -> { InlineJavaScript::V8Wrapper.new.execute('sdfsdf') }.should raise_error(SyntaxError)
25
+ end
26
+
27
+ end
@@ -0,0 +1,13 @@
1
+ namespace :extconf do
2
+ desc "Compiles the Ruby extension"
3
+ task :compile
4
+ end
5
+
6
+ task :compile => "extconf:compile"
7
+
8
+ task :test => :compile
9
+
10
+ BIN = "*.{bundle,jar,so,obj,pdb,lib,def,exp,o}"
11
+ $hoe.clean_globs |= ["ext/**/#{BIN}", "lib/**/#{BIN}", 'ext/**/Makefile']
12
+ $hoe.spec.require_paths = Dir['{lib,ext/*}']
13
+ $hoe.spec.extensions = FileList["ext/**/extconf.rb"].to_a
@@ -0,0 +1,43 @@
1
+ namespace :extconf do
2
+ extension = File.basename(__FILE__, '.rake')
3
+
4
+ ext = "ext/#{extension}"
5
+ ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
6
+ ext_files = FileList[
7
+ "#{ext}/*.c",
8
+ "#{ext}/*.h",
9
+ "#{ext}/*.rl",
10
+ "#{ext}/extconf.rb",
11
+ "#{ext}/Makefile",
12
+ # "lib"
13
+ ]
14
+
15
+
16
+ task :compile => extension do
17
+ if Dir.glob("**/#{extension}.{o,so,dll}").length == 0
18
+ STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
19
+ STDERR.puts "Gem actually failed to build. Your system is"
20
+ STDERR.puts "NOT configured properly to build #{GEM_NAME}."
21
+ STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
22
+ exit(1)
23
+ end
24
+ end
25
+
26
+ desc "Builds just the #{extension} extension"
27
+ task extension.to_sym => ["#{ext}/Makefile", ext_so ]
28
+
29
+ file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
30
+ Dir.chdir(ext) do ruby "extconf.rb" end
31
+ end
32
+
33
+ file ext_so => ext_files do
34
+ Dir.chdir(ext) do
35
+ sh(RUBY_PLATFORM =~ /win32/ ? 'nmake' : 'make') do |ok, res|
36
+ if !ok
37
+ require "fileutils"
38
+ FileUtils.rm Dir.glob('*.{so,o,dll,bundle}')
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inline_javascript
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Stephen Hardisty
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-02-27 00:00:00.000000000 +11:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json
17
+ requirement: &2757730 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2757730
26
+ - !ruby/object:Gem::Dependency
27
+ name: hoe
28
+ requirement: &2757460 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 2.9.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *2757460
37
+ description: ! 'Call JavaScript methods from Ruby using either InlineJavaScript or,
38
+ more directly,
39
+
40
+ InlineJavaScript::V8Wrapper.'
41
+ email:
42
+ - moowahaha@hotmail.com
43
+ executables: []
44
+ extensions:
45
+ - ext/inline_java_script_v8_wrapper/extconf.rb
46
+ extra_rdoc_files:
47
+ - History.txt
48
+ - Manifest.txt
49
+ - PostInstall.txt
50
+ files:
51
+ - .rspec
52
+ - .rvmrc
53
+ - Gemfile
54
+ - Gemfile.lock
55
+ - History.txt
56
+ - Manifest.txt
57
+ - PostInstall.txt
58
+ - README.rdoc
59
+ - Rakefile
60
+ - ext/inline_java_script_v8_wrapper/extconf.rb
61
+ - ext/inline_java_script_v8_wrapper/inline_java_script_v8_wrapper.cc
62
+ - lib/inline_java_script.rb
63
+ - lib/inline_java_script/v8_wrapper.rb
64
+ - script/console
65
+ - script/destroy
66
+ - script/generate
67
+ - spec/helpers/spec_helper.rb
68
+ - spec/inline_javascript_spec.rb
69
+ - spec/inline_javascript_v8_wrapper_extn_spec.rb
70
+ - tasks/extconf.rake
71
+ - tasks/extconf/inline_java_script_v8_wrapper.rake
72
+ has_rdoc: true
73
+ homepage: http://github.com/moowahaha/ruby_inline_javascript
74
+ licenses: []
75
+ post_install_message: PostInstall.txt
76
+ rdoc_options:
77
+ - --main
78
+ - README.rdoc
79
+ require_paths:
80
+ - lib
81
+ - ext/inline_java_script_v8_wrapper
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project: inline_javascript
96
+ rubygems_version: 1.5.2
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: Call JavaScript methods from Ruby using either InlineJavaScript or, more
100
+ directly, InlineJavaScript::V8Wrapper.
101
+ test_files: []