citero-jruby 1.0.1
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/Gemfile +4 -0
- data/README.md +45 -0
- data/Rakefile +58 -0
- data/lib/citero-jruby.rb +1 -0
- data/lib/citero-jruby/CSF.rb +56 -0
- data/lib/citero-jruby/base.rb +148 -0
- data/lib/citero-jruby/citero.jar +0 -0
- data/lib/citero-jruby/version.rb +4 -0
- metadata +190 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
citero-jruby
|
2
|
+
======================
|
3
|
+
[](http://jenkins1.bobst.nyu.edu/view/Citation/job/citero-jruby/)
|
4
|
+
[](http://travis-ci.org/NYULibraries/citero-jruby)
|
5
|
+
[](https://gemnasium.com/NYULibraries/citero-jruby)
|
6
|
+
[](https://codeclimate.com/github/NYULibraries/citero-jruby)
|
7
|
+
[](http://badge.fury.io/rb/citero-jruby)
|
8
|
+
[](https://coveralls.io/r/NYULibraries/citero-jruby)
|
9
|
+
|
10
|
+
|
11
|
+
A JRuby wrapper for the Citero, enables use of the Citero in JRuby. See [Citero](https://github.com/NYULibraries/citero).
|
12
|
+
|
13
|
+
Usage Details
|
14
|
+
==============
|
15
|
+
|
16
|
+
To use Citero simply pass in your data into the Citero module via the map method. Then call the method that specifies the from format and
|
17
|
+
the method that specifies what format you want to translate to.
|
18
|
+
|
19
|
+
|
20
|
+
Citero.map("itemType: book").from\_csf.to_ris # Returns a string with the value TY - BOOK\n\nER -\n\n
|
21
|
+
|
22
|
+
|
23
|
+
You can find available formats via:
|
24
|
+
|
25
|
+
Citero.from_formats # List of from formats (Array)
|
26
|
+
# pnx, xerxes_xml, ris, openurl, bibtex, csf*
|
27
|
+
Citero.to_formats # List of to formats (Array)
|
28
|
+
# ris, openurl, bibtex, easybib, csf*
|
29
|
+
*CSF is Citero Standard Form, it's an internal mapping DSL.
|
30
|
+
|
31
|
+
To call a method, simply append the format name after either from\_ or to\_.
|
32
|
+
Note, you must call from\_ before to\_ and map before anything else.
|
33
|
+
|
34
|
+
csf = Citero.map("itemType: book").from_csf
|
35
|
+
csf.to_ris # -> TY - BOOK\n\nER -\n\n
|
36
|
+
csf.to_openurl # -> rft.ulr_ver=Z39.88-2004&rft.ctx_ver=Z39.88-2004&rft.rfr_id=info:sid/libraries.nyu.edu:citero&rft_val_fmlt=info:ofi/fmt:kev:mtx:book&rft.genre=book
|
37
|
+
csf.to_easybib # -> {"source":"book","book":{"title":null},"pubtype":{"main":"pubnonperiodical"},"pubnonperiodical":{},"contributors":[{}]}
|
38
|
+
csf.to_bibtex # -> @book{????}
|
39
|
+
|
40
|
+
Finally, this gem allows you to interact with the CSF object, you can call the _csf_ method.
|
41
|
+
|
42
|
+
rec = Citero.map("itemType: book").from_csf
|
43
|
+
csf = rec.csf
|
44
|
+
p csf.itemType # => Prints ['book']
|
45
|
+
p csf.keys # => Prints ['itemType']
|
data/Rakefile
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
require 'git'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler/setup'
|
7
|
+
require "bundler/gem_tasks"
|
8
|
+
rescue LoadError
|
9
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
require 'rdoc/task'
|
14
|
+
rescue LoadError
|
15
|
+
require 'rdoc/rdoc'
|
16
|
+
require 'rake/rdoctask'
|
17
|
+
RDoc::Task = Rake::RDocTask
|
18
|
+
end
|
19
|
+
|
20
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
21
|
+
rdoc.rdoc_dir = 'doc'
|
22
|
+
rdoc.title = 'citero-jruby'
|
23
|
+
rdoc.options << '--line-numbers'
|
24
|
+
rdoc.options << '--markup markdown'
|
25
|
+
rdoc.rdoc_files.include('README.md')
|
26
|
+
rdoc.rdoc_files.include('app/**/*.rb')
|
27
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
28
|
+
end
|
29
|
+
|
30
|
+
Rake::TestTask.new do |t|
|
31
|
+
t.libs << 'test'
|
32
|
+
t.test_files = FileList['test/*.rb']
|
33
|
+
t.verbose = true
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "Push latest rdoc and rdocs to gh-pages"
|
37
|
+
task :ghpages do
|
38
|
+
g = Git.open(Dir.pwd)
|
39
|
+
FileUtils.mv("coverage/", "coverage.bak/", :force => true)
|
40
|
+
FileUtils.mv("doc/", "doc.bak/", :force => true)
|
41
|
+
g.checkout(g.branch('gh-pages'))
|
42
|
+
g.pull("origin", "gh-pages")
|
43
|
+
FileUtils.rm_r("coverage", :force => true)
|
44
|
+
FileUtils.mv("coverage.bak/", "coverage/", :force => true)
|
45
|
+
FileUtils.rm_r("doc", :force => true)
|
46
|
+
FileUtils.mv("doc.bak/", "doc/", :force => true)
|
47
|
+
g.add(".")
|
48
|
+
g.commit_all("Update coverage and rdocs.")
|
49
|
+
g.push("origin", "gh-pages")
|
50
|
+
FileUtils.cp_r("coverage/", "coverage.bak/")
|
51
|
+
FileUtils.cp_r("doc/", "doc.bak/")
|
52
|
+
g.checkout(g.branch('devel'))
|
53
|
+
FileUtils.mv("coverage.bak/", "coverage/", :force => true)
|
54
|
+
FileUtils.mv("doc.bak/", "doc/", :force => true)
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Run tests"
|
58
|
+
task :default => :test
|
data/lib/citero-jruby.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'citero-jruby/base'
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Citero
|
2
|
+
|
3
|
+
# Java is required in this module.
|
4
|
+
require 'java'
|
5
|
+
require 'citero-jruby/citero.jar'
|
6
|
+
|
7
|
+
#CSF class, used to interact directly with available metadata.
|
8
|
+
class CSF
|
9
|
+
# CSF object from Citero that is to be used
|
10
|
+
CSF = Java::EduNyuLibraryCitero::CSF
|
11
|
+
|
12
|
+
# Initialize the CSF object with data
|
13
|
+
def initialize data
|
14
|
+
@csf = CSF::new(data)
|
15
|
+
end
|
16
|
+
|
17
|
+
# The method_missing override checks to see if the called method
|
18
|
+
# can be evaluated to a key, then stores it and calls it if it can.
|
19
|
+
# For example, .itemType or .authors.
|
20
|
+
def method_missing(meth, *args, &block)
|
21
|
+
# Check to see if it can be evaluated
|
22
|
+
if(matches? meth)
|
23
|
+
#Defines the method and caches it to the class
|
24
|
+
self.class.send(:define_method, meth) do
|
25
|
+
# Splits the method and parameter. See formatize and directionize
|
26
|
+
@csf::config()::getStringArray(meth.to_s).to_a
|
27
|
+
end
|
28
|
+
# calls the method
|
29
|
+
send meth, *args, &block
|
30
|
+
else
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns true if the method can be evaluated to a key
|
36
|
+
def respond_to? meth, include_private=false
|
37
|
+
if(matches? meth)
|
38
|
+
return true
|
39
|
+
else
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Private method. Checks to see if the method name is a valid key
|
45
|
+
# for the configuration file.
|
46
|
+
def matches? meth
|
47
|
+
@csf::config()::containsKey(meth.to_s)
|
48
|
+
end
|
49
|
+
private :matches?
|
50
|
+
|
51
|
+
# A list of keys that is available in this properties configuration
|
52
|
+
def keys
|
53
|
+
@keys ||= Array.new(@csf::config()::getKeys.collect {|key| key})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'citero-jruby/CSF'
|
2
|
+
# Citero class, used in builder form as Citero.map("some data").from_format.to_format
|
3
|
+
module Citero
|
4
|
+
|
5
|
+
# Import of an important java enum type
|
6
|
+
java_import Java::EduNyuLibraryCitero::Formats
|
7
|
+
|
8
|
+
# Calling the map method creates a new instance of the Base class, with splatter operator passed in
|
9
|
+
def self.map *args
|
10
|
+
Base.new *args
|
11
|
+
end
|
12
|
+
|
13
|
+
# List of available formats Citero exports to as a module class method for quick checks.
|
14
|
+
def self.to_formats
|
15
|
+
@to_formats ||= formats :isDestinationFormat
|
16
|
+
end
|
17
|
+
|
18
|
+
# List of available formats Citero exports from as a module class method for quick checks.
|
19
|
+
def self.from_formats
|
20
|
+
@from_formats ||= formats :isSourceFormat
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def self.formats meth
|
25
|
+
Formats::values.select {|format| format.send(meth) }.collect {|format| format.name.downcase}
|
26
|
+
end
|
27
|
+
|
28
|
+
# The Base class is the true wrapper for citation
|
29
|
+
class Base
|
30
|
+
|
31
|
+
# Import of important java files.
|
32
|
+
JavaCitero = Java::EduNyuLibraryCitero::Citero
|
33
|
+
|
34
|
+
|
35
|
+
# The constructor, takes input data taken from the parent module
|
36
|
+
# and creates an instance of the Citero java object.
|
37
|
+
# Returns itself for builder patttern.
|
38
|
+
def initialize data
|
39
|
+
@citero = JavaCitero::map(data)
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
# The from method is private, it takes in a format and gets
|
44
|
+
# the appropriate Format java class and then calls
|
45
|
+
# the from method in the Citero java object and stores its
|
46
|
+
# return value in an instance variable.
|
47
|
+
# Returns itself.
|
48
|
+
def from format
|
49
|
+
#Formats are enums in java, so they are all uppercase
|
50
|
+
@citero = @citero::from(Formats::valueOf(format.upcase))
|
51
|
+
self
|
52
|
+
#rescue any exceptions, if the error is not caught in JAR, most likely a
|
53
|
+
#problem with the data
|
54
|
+
rescue Exception => e
|
55
|
+
raise TypeError, "Mismatched data for #{format}"
|
56
|
+
end
|
57
|
+
private :from
|
58
|
+
|
59
|
+
# The to method is private, it takes in a format and gets
|
60
|
+
# the appropriate Format java class and then calls
|
61
|
+
# the to method in the Citero java object and returns the
|
62
|
+
# return value as a string.
|
63
|
+
def to format
|
64
|
+
#Formats are enums in java, so they are all uppercase
|
65
|
+
@citero::to(Formats::valueOf(format.upcase))
|
66
|
+
#rescue any exceptions, if the error is not caught in JAR, most likely a
|
67
|
+
#problem with the source format
|
68
|
+
rescue Exception => e
|
69
|
+
raise ArgumentError, "Missing a source format. Use from_[format] first."
|
70
|
+
end
|
71
|
+
private :to
|
72
|
+
|
73
|
+
# Returns a CSF object
|
74
|
+
def csf
|
75
|
+
CSF::new(self.to_csf)
|
76
|
+
# Rescue all exceptions, but mostly likeley a problem with the source format.
|
77
|
+
rescue Exception => e
|
78
|
+
raise ArgumentError, "Missing a source format. Use from_[format] first."
|
79
|
+
end
|
80
|
+
|
81
|
+
# The method_missing override checks to see if the called method
|
82
|
+
# can be evaluated to a method name and parameter, then stores it
|
83
|
+
# and calls it if it can.
|
84
|
+
# For example, to_csf or from_pnx. pnx_to will not work.
|
85
|
+
def method_missing(meth, *args, &block)
|
86
|
+
# Check to see if it can be evaluated
|
87
|
+
if(matches? meth)
|
88
|
+
#Defines the method and caches it to the class
|
89
|
+
self.class.send(:define_method, meth) do
|
90
|
+
# Splits the method and parameter. See formatize and directionize
|
91
|
+
send directionize(meth).to_sym, formatize(meth)
|
92
|
+
end
|
93
|
+
# calls the method
|
94
|
+
send meth, *args, &block
|
95
|
+
else
|
96
|
+
super
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns true if the method can be evaluated to a method name
|
101
|
+
# and parameter.
|
102
|
+
def respond_to? meth, include_private=false
|
103
|
+
if(matches? meth)
|
104
|
+
return true
|
105
|
+
else
|
106
|
+
super
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Private method. Checks to see if the method name is in the list of methods
|
111
|
+
# that can accept the formats, and checks to see if the formats are in a list
|
112
|
+
# of formats as defined by the Java enum Format.
|
113
|
+
def matches? meth
|
114
|
+
directions.include? directionize(meth) and method("#{directionize(meth)}_formats").call.include? formatize(meth)
|
115
|
+
end
|
116
|
+
private :matches?
|
117
|
+
|
118
|
+
# Splits the method to get its direction, or method ie to and from.
|
119
|
+
def directionize meth, delimiter="_"
|
120
|
+
meth.to_s.split(delimiter, 2).first
|
121
|
+
end
|
122
|
+
private :directionize
|
123
|
+
|
124
|
+
# Splits the method to get its format, or parameter ie csf or ris.
|
125
|
+
def formatize meth, delimiter="_"
|
126
|
+
meth.to_s.split(delimiter, 2).last
|
127
|
+
end
|
128
|
+
private :formatize
|
129
|
+
|
130
|
+
# List of available directions or methods.
|
131
|
+
def directions
|
132
|
+
@directions ||= ["to", "from"]
|
133
|
+
end
|
134
|
+
private :directions
|
135
|
+
|
136
|
+
# List of available formats Citero exports to.
|
137
|
+
def to_formats
|
138
|
+
@to_formats ||= Citero.to_formats
|
139
|
+
end
|
140
|
+
private :to_formats
|
141
|
+
|
142
|
+
# List of available formats Citero exports from.
|
143
|
+
def from_formats
|
144
|
+
@from_formats ||= Citero.from_formats
|
145
|
+
end
|
146
|
+
private :from_formats
|
147
|
+
end
|
148
|
+
end
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: citero-jruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- hab278
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '10.0'
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10.0'
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :development
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: test-unit
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '2.5'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.5'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: simplecov
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0.7'
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0.7'
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: simplecov-rcov
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.2'
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.2'
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: git
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '1.2'
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.2'
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: json
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '1.7'
|
101
|
+
none: false
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.7'
|
107
|
+
none: false
|
108
|
+
prerelease: false
|
109
|
+
type: :development
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: bundler
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '1.2'
|
117
|
+
none: false
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '1.2'
|
123
|
+
none: false
|
124
|
+
prerelease: false
|
125
|
+
type: :development
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: coveralls
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: !binary |-
|
133
|
+
MA==
|
134
|
+
none: false
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: !binary |-
|
140
|
+
MA==
|
141
|
+
none: false
|
142
|
+
prerelease: false
|
143
|
+
type: :development
|
144
|
+
description: Leverages a Maven and a custom JAR and wraps it with JRuby
|
145
|
+
email: hab278@nyu.edu
|
146
|
+
executables: []
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- lib/citero-jruby.rb
|
151
|
+
- lib/citero-jruby/base.rb
|
152
|
+
- lib/citero-jruby/citero.jar
|
153
|
+
- lib/citero-jruby/CSF.rb
|
154
|
+
- lib/citero-jruby/version.rb
|
155
|
+
- Rakefile
|
156
|
+
- Gemfile
|
157
|
+
- README.md
|
158
|
+
homepage:
|
159
|
+
licenses: []
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
segments:
|
169
|
+
- 0
|
170
|
+
hash: 2
|
171
|
+
version: !binary |-
|
172
|
+
MA==
|
173
|
+
none: false
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
segments:
|
179
|
+
- 0
|
180
|
+
hash: 2
|
181
|
+
version: !binary |-
|
182
|
+
MA==
|
183
|
+
none: false
|
184
|
+
requirements: []
|
185
|
+
rubyforge_project:
|
186
|
+
rubygems_version: 1.8.24
|
187
|
+
signing_key:
|
188
|
+
specification_version: 3
|
189
|
+
summary: Tool to translate between bibliographic formats.
|
190
|
+
test_files: []
|