summaryrefslogtreecommitdiff
path: root/src/json/ext/ParserService.java
diff options
context:
space:
mode:
authorCharles Oliver Nutter <headius@headius.com>2010-08-03 12:21:11 -0500
committerCharles Oliver Nutter <headius@headius.com>2010-08-03 12:21:11 -0500
commit2288d74466463d34a5054ef413e099c850cd832b (patch)
tree76db71c439f26b5c3b7e60fb15178a2bce92c2fb /src/json/ext/ParserService.java
parent6ebee56297dfd9c380f8f8fb6c0b8bb5254901b7 (diff)
downloadjson-2288d74466463d34a5054ef413e099c850cd832b.tar.gz
Merge JRuby-compatible extension into json proper.
Diffstat (limited to 'src/json/ext/ParserService.java')
-rw-r--r--src/json/ext/ParserService.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/json/ext/ParserService.java b/src/json/ext/ParserService.java
new file mode 100644
index 0000000..e0805a7
--- /dev/null
+++ b/src/json/ext/ParserService.java
@@ -0,0 +1,34 @@
+/*
+ * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
+ *
+ * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
+ * for details.
+ */
+package json.ext;
+
+import java.io.IOException;
+
+import org.jruby.Ruby;
+import org.jruby.RubyClass;
+import org.jruby.RubyModule;
+import org.jruby.runtime.load.BasicLibraryService;
+
+/**
+ * The service invoked by JRuby's {@link org.jruby.runtime.load.LoadService LoadService}.
+ * Defines the <code>JSON::Ext::Parser</code> class.
+ * @author mernen
+ */
+public class ParserService implements BasicLibraryService {
+ public boolean basicLoad(Ruby runtime) throws IOException {
+ runtime.getLoadService().require("json/common");
+ RuntimeInfo info = RuntimeInfo.initRuntime(runtime);
+
+ info.jsonModule = runtime.defineModule("JSON");
+ RubyModule jsonExtModule = info.jsonModule.defineModuleUnder("Ext");
+ RubyClass parserClass =
+ jsonExtModule.defineClassUnder("Parser", runtime.getObject(),
+ Parser.ALLOCATOR);
+ parserClass.defineAnnotatedMethods(Parser.class);
+ return true;
+ }
+}