TestsTested | ✓ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Jan 2016 |
Maintained by Francis Chong.
Depends on: | |
ObjectiveSugar | ~> 1.1.0 |
IGDigest | >= 1.1.3 |
Ruby for Objective-C, via Opal and JavaScriptCore.
#import <JavaScriptCore/JavaScriptCore.h>
#import "JSContext+OpalAdditions.h"
JSValue* value = [context evaluateRuby:@"[1,2,3,4,5].inject{|total, i| total + i }"];
[value toNumber]; // => 15
Opal works by compile Ruby into JavaScript. When running on JavaScriptCore however, you don't always want to load everything into the context.
OpalAdditions modify Opal implementation of require
. You may require a ruby file
on runtime.
// require with Ruby
[context evaluateRuby:@"require 'singleton'"];
or
// require with Objective-C
[context requireRubyWithFilename:@"singleton" error:nil];
OpalAdditions will search the filename from $LOAD_PATH, compile the file and load it.
Note: If you always use certain classes, you should precompile them with opal-sprockets
and bundle the JavaScript instead.
You can add more path to $LOAD_PATH to load your custom gems:
// Add load path
NSString* newPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"gems" ofType:nil];
[context appendOpalLoadPathsWithPath:newPath];
// load addition gems
[context requireRubyWithFilename:@"my_awesome_gems" error:nil];
You might want to add your gem path as "Folder Reference" instead of regular "Group".
To install JavaScriptCoreOpalAdditions throught CocoaPods, add following lines to your Podfile:
pod "JavaScriptCoreOpalAdditions", '~> 0.3.0'
Install Pods for Objective-C libraries
Download submodule for opal, and build necessary files: