bind-it 0.2.1-java

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/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ == BindIt Ruby Gem
2
+ BindIt is a tool to facilitate the creation of Java bindings in Ruby.
3
+
4
+ This program is free software: you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation, either version 3 of the License, or
7
+ (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ This license also applies to the included Stanford CoreNLP files.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ Author: Louis-Antoine Mullie (louis.mullie@gmail.com). Copyright 2012.
@@ -0,0 +1,72 @@
1
+ **About**
2
+
3
+ BindIt is a very simple tool that allows to make Ruby bindings to Java packages that work both on JRuby and MRI platforms. It provides a simplified interface to load JARs and Java classes, and allows logging of JVM output to a text file.
4
+
5
+ BindIt uses the Ruby-Java-Bridge (Rjb) to access Java objects. It runs on Ruby 1.9.2 and 1.9.3.
6
+
7
+ **Installing**
8
+
9
+ `gem install bind-it`
10
+
11
+ **Usage**
12
+
13
+ 1. Create a module into which Java classes will be loaded.
14
+ 2. Make sure that module extends `BindIt::Binding`.
15
+ 3. Set your configuration options (see examples below).
16
+ 4. Run YourModule.bind to load the default JARs and classes.
17
+ 5. Access loaded Java classes using YourModule::YourClass.
18
+
19
+ **Example**
20
+
21
+ ```ruby
22
+
23
+ require 'bind-it'
24
+
25
+ module MyBindings
26
+
27
+ extend BindIt::Binding
28
+
29
+ # Arguments to use when initializing the JVM.
30
+ self.jvm_args = ['-option1X', '-option2X']
31
+
32
+ # If set, JVM output is redirected to file.
33
+ self.log_file = 'log_file.txt'
34
+
35
+ # The path in which to look for JAR files.
36
+ self.jar_path = '/path/to/jars/'
37
+
38
+ # Default JAR files to load.
39
+ self.default_jars = [
40
+ 'jar1.jar',
41
+ 'jar2.jar'
42
+ ]
43
+
44
+ # Default namespace to use when loading classes.
45
+ self.default_namespace = 'path.to.default'
46
+
47
+ # Default classes to load under MyBindings.
48
+ # Shown are the three different ways of adding
49
+ # a class to the default list.
50
+ self.default_classes = [
51
+ # Will search for class in default_namespace.
52
+ ['MyClass'],
53
+ # Supply a non-default namespace.
54
+ ['MyClass', 'path.to.namespace'],
55
+ # Rename the Java class in Ruby.
56
+ ['MyClass', 'path.to.namespace', 'MyClass2']
57
+ ]
58
+
59
+ # Load the default JARs and classes.
60
+ self.bind
61
+
62
+ end
63
+
64
+
65
+
66
+ obj = MyBindings::MyClass.new
67
+
68
+ ```
69
+
70
+ **Contributing**
71
+
72
+ Feel free to fork the project and send me a pull request!
@@ -0,0 +1,7 @@
1
+ # BindIt is a tool to facilitate the creation of Java bindings in Ruby.
2
+ module BindIt
3
+
4
+ VERSION = '0.2.1'
5
+ require 'bind-it/binding'
6
+
7
+ end
@@ -0,0 +1,123 @@
1
+ module BindIt
2
+
3
+ # This is the module your namespace should extend.
4
+ module Binding
5
+
6
+ VERSION = '0.0.1'
7
+
8
+ if RUBY_PLATFORM =~ /java/
9
+ require 'java'
10
+ # require 'bind-it/jruby_proxy'
11
+ else
12
+ require 'rjb'
13
+ require 'bind-it/rjb_proxy'
14
+ end
15
+
16
+ require 'bind-it/jar_loader'
17
+
18
+
19
+ def self.extended(base)
20
+ super(base)
21
+ # Create configuration options.
22
+ base.module_eval do
23
+ class << self
24
+ # Are the default JARs/classes loaded?
25
+ attr_accessor :bound
26
+ # The default path to look in for JARs.
27
+ attr_accessor :jar_path
28
+ # The flags for starting the JVM machine.
29
+ attr_accessor :jvm_args
30
+ # A file to redirect JVM output to.
31
+ attr_accessor :log_file
32
+ # The default JARs to load.
33
+ attr_accessor :default_jars
34
+ # The default Java namespace to
35
+ # search in for classes.
36
+ attr_accessor :default_namespace
37
+ # The default classes to load.
38
+ attr_accessor :default_classes
39
+ end
40
+ # Set default values.
41
+ self.jar_path = ''
42
+ self.jvm_args = []
43
+ self.log_file = nil
44
+ self.default_namespace = 'java'
45
+ self.default_classes = []
46
+ self.bound = false
47
+ end
48
+ end
49
+
50
+ ######
51
+
52
+ # Load the default JARs and classes.
53
+ def bind
54
+ unless self.bound
55
+ BindIt::JarLoader.log_file = self.log_file
56
+ BindIt::JarLoader.jvm_args = self.jvm_args
57
+ self.load_default_jars
58
+ self.load_default_classes
59
+ end
60
+ self.bound = true
61
+ end
62
+
63
+ # Load a JAR file.
64
+ def load_jar(jar, path = nil)
65
+ BindIt::JarLoader.load(jar, path)
66
+ end
67
+
68
+ # Load the JARs, looking in default path.
69
+ def load_default_jars
70
+ self.default_jars.each do |jar|
71
+ file, path = *jar
72
+ path ||= self.jar_path
73
+ load_jar(jar, path)
74
+ end
75
+ end
76
+
77
+ # Public function to load classes inside
78
+ # the namespace. Makes sure the default
79
+ # JARs are loaded before.
80
+ def load_class(klass, base = nil, rename = nil)
81
+ base ||= self.default_namespace
82
+ self.load unless self.bound
83
+ self.load_klass(klass, base, rename)
84
+ end
85
+
86
+ # Create the Ruby classes corresponding to
87
+ # the StanfordNLP core classes.
88
+ def load_default_classes
89
+ self.default_classes.each do |info|
90
+ klass, base, rename = *info
91
+ self.load_klass(klass, base, rename)
92
+ end
93
+ end
94
+
95
+ protected
96
+
97
+ # Private function to load classes.
98
+ # Doesn't check if initialized.
99
+ def load_klass(klass, base, name=nil)
100
+ base += '.' unless base == ''
101
+ fqcn = "#{base}#{klass}"
102
+ name ||= klass
103
+ if RUBY_PLATFORM =~ /java/
104
+ rb_class = java_import(fqcn)
105
+ if name != klass
106
+ const_set(name.intern, rb_class)
107
+ end
108
+ else
109
+ rb_class = Rjb::import(fqcn)
110
+ const_set(name.intern, rb_class)
111
+ end
112
+ end
113
+
114
+ # Utility function to CamelCase names.
115
+ def camel_case(text)
116
+ text.to_s.gsub(/^[a-z]|_[a-z]/) do |a|
117
+ a.upcase
118
+ end.gsub('_', '')
119
+ end
120
+
121
+ end
122
+
123
+ end
@@ -0,0 +1,68 @@
1
+ module BindIt
2
+
3
+ class JarLoader
4
+
5
+ # Configuration options.
6
+ class << self
7
+ # An array of flags to pass to the JVM machine.
8
+ attr_accessor :jvm_args
9
+ # A log file to send JVM output to.
10
+ attr_accessor :log_file
11
+ end
12
+
13
+ # Default configuration options.
14
+ self.jvm_args = []
15
+ self.log_file = nil
16
+
17
+ # Load a JAR through Jruby/Rjb.
18
+ def self.load(jar, path)
19
+ if !::File.readable?(path + jar)
20
+ raise "Could not find JAR file (looking in #{jar})."
21
+ end
22
+ if RUBY_PLATFORM =~ /java/
23
+ set_java_logging if self.log_file
24
+ load_jar_jruby(jar,path)
25
+ else
26
+ load_jar_rjb(jar,path)
27
+ end
28
+ end
29
+
30
+ # Load a Jruby jar.
31
+ def self.load_jar_jruby(jar, path)
32
+ require path + jar
33
+ end
34
+
35
+ # Laad an Rjb jar.
36
+ def self.load_jar_rjb(jar,path)
37
+ self.init_rjb unless ::Rjb::loaded?
38
+ jar = path + jar
39
+ ::Rjb::add_jar(jar)
40
+ end
41
+
42
+ # Load Rjb and create Java VM.
43
+ def self.init_rjb
44
+ ::Rjb::load(nil, self.jvm_args)
45
+ set_java_logging if self.log_file
46
+ end
47
+
48
+ # Redirect the output of the JVM to log.
49
+ def self.set_java_logging
50
+ system, print_stream, file = nil, nil, nil
51
+ if RUBY_PLATFORM =~ /java/
52
+ system = java.lang.System
53
+ print_stream = java.io.PrintStream
54
+ file = java.io.File
55
+ else
56
+ system = Rjb::import('java.lang.System')
57
+ print_stream = Rjb::import('java.io.PrintStream')
58
+ file = Rjb::import('java.io.File')
59
+ end
60
+ ps = print_stream.new(file.new(self.log_file))
61
+ ps.write(::Time.now.strftime("[%m/%d/%Y at %I:%M%p]\n\n"))
62
+ system.setOut(ps)
63
+ system.setErr(ps)
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,28 @@
1
+ module BindIt::RjbProxy
2
+
3
+ # Modify the Rjb JavaProxy class to add our own
4
+ # methods to every proxied Java object.
5
+ Rjb::Rjb_JavaProxy.class_eval do
6
+
7
+ # Dynamically defined on all proxied Java objects.
8
+ # Shorthand for toString() defined by Java classes.
9
+ def to_s; to_string; end
10
+
11
+ # Dynamically defined on all proxied Java objects.
12
+ # Shorthand for toArray() defined by Java classes.
13
+ def to_a; to_array; end
14
+
15
+ # Dynamically defined on all proxied Java iterators.
16
+ # Provide Ruby-style iterators to wrap Java iterators.
17
+ def each
18
+ if !java_methods.include?('iterator()')
19
+ raise 'This object cannot be iterated.'
20
+ else
21
+ i = self.iterator
22
+ while i.has_next; yield i.next; end
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bind-it
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.2.1
6
+ platform: java
7
+ authors:
8
+ - Louis Mullie
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-12-18 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: " BindIt is a thin wrapper over the Ruby-Java-Bridge (Rjb) to facilitate the creation of Java bindings in Ruby. "
17
+ email:
18
+ - louis.mullie@gmail.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/bind-it.rb
27
+ - lib/bind-it/binding.rb
28
+ - lib/bind-it/jar_loader.rb
29
+ - lib/bind-it/rjb_proxy.rb
30
+ - README.md
31
+ - LICENSE
32
+ homepage: https://github.com/louismullie/bind-it
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options: []
37
+
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ requirements: []
53
+
54
+ rubyforge_project:
55
+ rubygems_version: 1.8.24
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: BindIt is a tool to facilitate the creation of Java bindings in Ruby.
59
+ test_files: []
60
+