bel 0.3.3 → 0.4.0.beta1
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.
- checksums.yaml +4 -4
- data/README.md +53 -8
- data/bel.gemspec +10 -15
- data/bin/bel +63 -4
- data/bin/bel2rdf.rb +1 -1
- data/bin/bel_compare.rb +1 -1
- data/bin/bel_parse.rb +1 -1
- data/bin/bel_rdfschema.rb +1 -1
- data/bin/bel_summarize.rb +1 -1
- data/bin/bel_upgrade.rb +1 -1
- data/lib/bel.rb +8 -10
- data/lib/bel/completion.rb +3 -2
- data/lib/bel/completion/value_match_rule.rb +10 -0
- data/lib/bel/evidence_model/citation.rb +101 -43
- data/lib/bel/evidence_model/evidence.rb +2 -2
- data/lib/bel/evidence_model/experiment_context.rb +1 -0
- data/lib/bel/evidence_model/metadata.rb +15 -2
- data/lib/bel/evidence_model/references.rb +10 -10
- data/lib/bel/json.rb +63 -0
- data/lib/bel/json/adapter/multi_json.rb +36 -0
- data/lib/bel/json/adapter/oj.rb +65 -0
- data/lib/bel/json/adapter/ruby_json.rb +28 -0
- data/lib/bel/json/reader.rb +9 -0
- data/lib/bel/json/writer.rb +9 -0
- data/lib/bel/libbel.rb +1 -4
- data/lib/bel/parser.rb +2 -2
- data/lib/bel/rdf_repository.rb +18 -0
- data/lib/bel/rdf_repository/plugins/memory.rb +28 -0
- data/lib/bel/rdf_repository/plugins/mongo.rb +28 -0
- data/lib/bel/resource.rb +24 -0
- data/lib/bel/resource/namespace.rb +122 -0
- data/lib/bel/resource/namespace_value.rb +69 -0
- data/lib/bel/resource/namespaces.rb +83 -0
- data/lib/bel/resource/search.rb +26 -0
- data/lib/bel/resource/search/api.rb +36 -0
- data/lib/bel/resource/search/search_result.rb +32 -0
- data/lib/bel/translate.rb +108 -0
- data/lib/bel/translator.rb +69 -0
- data/lib/bel/translator/plugins/bel_script.rb +36 -0
- data/lib/bel/translator/plugins/bel_script/bel_yielder.rb +144 -0
- data/lib/bel/translator/plugins/bel_script/evidence_yielder.rb +95 -0
- data/lib/bel/translator/plugins/bel_script/translator.rb +24 -0
- data/lib/bel/translator/plugins/jgf.rb +37 -0
- data/lib/bel/translator/plugins/jgf/translator.rb +160 -0
- data/lib/bel/translator/plugins/json_evidence.rb +38 -0
- data/lib/bel/translator/plugins/json_evidence/translator.rb +90 -0
- data/lib/bel/translator/plugins/rdf.rb +48 -0
- data/lib/bel/translator/plugins/rdf/bel_schema.rb +339 -0
- data/lib/bel/translator/plugins/rdf/monkey_patch.rb +310 -0
- data/lib/bel/translator/plugins/rdf/reader.rb +173 -0
- data/lib/bel/translator/plugins/rdf/translator.rb +40 -0
- data/lib/bel/translator/plugins/rdf/writer.rb +45 -0
- data/lib/bel/translator/plugins/xbel.rb +36 -0
- data/lib/bel/translator/plugins/xbel/evidence_handler.rb +468 -0
- data/lib/bel/translator/plugins/xbel/evidence_yielder.rb +24 -0
- data/lib/bel/translator/plugins/xbel/translator.rb +24 -0
- data/lib/bel/translator/plugins/xbel/xbel_yielder.rb +414 -0
- data/lib/bel/vendor/little-plugger.rb +323 -0
- data/lib/bel/version.rb +1 -1
- metadata +44 -158
- data/lib/bel/extension.rb +0 -37
- data/lib/bel/extension_format.rb +0 -207
- data/lib/bel/extensions/bel.rb +0 -258
- data/lib/bel/extensions/jgf.rb +0 -219
- data/lib/bel/extensions/json/jrjackson.rb +0 -31
- data/lib/bel/extensions/json/json.rb +0 -133
- data/lib/bel/extensions/json/multi_json.rb +0 -29
- data/lib/bel/extensions/json/oj.rb +0 -68
- data/lib/bel/extensions/json/ruby_json.rb +0 -29
- data/lib/bel/extensions/rdf/bel_rdf.rb +0 -338
- data/lib/bel/extensions/rdf/rdf.rb +0 -584
- data/lib/bel/extensions/xbel.rb +0 -923
- data/lib/bel/format.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3ec967adaa542f9d53a44d81b392aedf8e83977
|
4
|
+
data.tar.gz: 57befbff871e8d293eaef7b44b0cb928e38e5f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6598b80261a35fa182cc0e25cd76ff952614e99c7ea6697f09b097e1c1172bd31b30a0907fb31a963d37a8e6f3662247550655752d6835df15961a26644f5ddf
|
7
|
+
data.tar.gz: 1894266854e10a8481b8fe473dd2803dd4fa5d90079d048985236ca27c6466c82af878f7b574c758a273cd42bd56bfbf62d020e2ab3922427b35923fa8da2958
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
bel ruby
|
2
|
-
========
|
1
|
+
# bel ruby
|
3
2
|
|
4
3
|
[](http://badge.fury.io/rb/bel)
|
5
4
|
|
@@ -32,18 +31,65 @@ Install / Build: See [INSTALL](INSTALL.md).
|
|
32
31
|
|
33
32
|
A changelog is maintained at [CHANGELOG][CHANGELOG].
|
34
33
|
|
35
|
-
|
36
|
-
|
34
|
+
## development
|
35
|
+
|
36
|
+
Developing on bel.rb requires a few steps.
|
37
|
+
|
38
|
+
1. [Install Ruby](INSTALL_RUBY.md).
|
39
|
+
2. Clone this repository:
|
40
|
+
|
41
|
+
```
|
42
|
+
git@github.com:OpenBEL/bel.rb.git
|
43
|
+
```
|
44
|
+
|
45
|
+
3. Change to repository directory. Install bel.rb's dependencies (including development dependencies):
|
46
|
+
|
47
|
+
```
|
48
|
+
cd bel.rb; ./scripts/gem-install-devdeps.sh
|
49
|
+
```
|
50
|
+
|
51
|
+
4. Build C extension (i.e. [libbel parser](https://github.com/OpenBEL/libbel)) using Rake:
|
52
|
+
|
53
|
+
```
|
54
|
+
rake compile
|
55
|
+
```
|
56
|
+
|
57
|
+
This will build the C shared library you will need to use the C-based parser.
|
58
|
+
|
59
|
+
Note: Windows users will need to install the [RubyInstaller DevKit](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit) to build the C extension.
|
60
|
+
|
61
|
+
### isolated development
|
62
|
+
|
63
|
+
During development, it is recommended to isolate bel.rb from any existing user
|
64
|
+
or system gems. This will help keep gems used during development entirely
|
65
|
+
separate from all others.
|
66
|
+
|
67
|
+
To accomplish this, set ``BR_ISOLATE`` to ``"yes"`` in ``env.sh.custom``, at
|
68
|
+
the root of the bel.rb tree:
|
69
|
+
|
70
|
+
```bash
|
71
|
+
export BR_ISOLATE="yes"
|
72
|
+
```
|
73
|
+
|
74
|
+
|
75
|
+
## branches
|
37
76
|
|
38
77
|
- master branch
|
78
|
+
- Contains stable code. Releases are created from this branch using a tag (e.g. 0.3.3).
|
39
79
|
- [](https://travis-ci.org/OpenBEL/bel.rb)
|
40
80
|
|
41
81
|
- next branch
|
82
|
+
- Contains unstable code. Commits should be merged into master after it stabilizes.
|
42
83
|
- [](https://travis-ci.org/OpenBEL/bel.rb)
|
43
84
|
|
85
|
+
## contributors
|
86
|
+
|
87
|
+
- [@abargnesi](https://github.com/abargnesi) (Maintainer)
|
88
|
+
- [@nbargnesi](https://github.com/nbargnesi) (Maintainer)
|
89
|
+
- [@ncatlett](https://github.com/ncatlett) (Contributor)
|
90
|
+
- [@wshayes](https://github.com/wshayes) (Contributor)
|
44
91
|
|
45
|
-
executable commands
|
46
|
-
-------------------
|
92
|
+
## executable commands
|
47
93
|
|
48
94
|
**bel**: A single executable command with subcommands.
|
49
95
|
|
@@ -154,8 +200,7 @@ executable commands
|
|
154
200
|
```
|
155
201
|
|
156
202
|
|
157
|
-
api examples
|
158
|
-
------------
|
203
|
+
## api examples
|
159
204
|
|
160
205
|
**Use OpenBEL namespaces from the latest release.**
|
161
206
|
|
data/bel.gemspec
CHANGED
@@ -55,22 +55,17 @@ Gem::Specification.new do |spec|
|
|
55
55
|
spec.extensions << 'ext/mri/extconf.rb'
|
56
56
|
spec.required_ruby_version = '>= 2.0.0'
|
57
57
|
|
58
|
-
|
59
|
-
spec.add_dependency 'ffi', '1.9.8'
|
58
|
+
spec.add_runtime_dependency 'ffi', '1.9.8'
|
60
59
|
|
61
|
-
#
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
spec.
|
66
|
-
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
spec.add_development_dependency 'rake-compiler', '~> 0.9'
|
71
|
-
spec.add_development_dependency 'rdoc', '~> 4.2'
|
72
|
-
spec.add_development_dependency 'rspec', '~> 3.2'
|
73
|
-
spec.add_development_dependency 'yard', '~> 0.8'
|
60
|
+
# Example post-install message.
|
61
|
+
#
|
62
|
+
# These aren't real BEL-related gems, but if we can sneak the names passed
|
63
|
+
# abargnesi, maybe one day... ;)
|
64
|
+
# spec.post_install_message = %q(
|
65
|
+
# -- bel.rb notice --
|
66
|
+
# Install any of these additional gems for more functionality:
|
67
|
+
# bel-rdf, clapper, carillon, peal, ...
|
68
|
+
# )
|
74
69
|
end
|
75
70
|
# vim: ts=2 sw=2:
|
76
71
|
# encoding: utf-8
|
data/bin/bel
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
3
3
|
require 'erb'
|
4
4
|
require 'bel'
|
5
5
|
require 'bel/vendor/trollop'
|
@@ -260,7 +260,7 @@ Subcommands:
|
|
260
260
|
|
261
261
|
from_format, to_format = ARGV
|
262
262
|
|
263
|
-
from = BEL
|
263
|
+
from = BEL.translator(from_format)
|
264
264
|
unless from
|
265
265
|
$stderr.puts(
|
266
266
|
from_format ?
|
@@ -271,7 +271,7 @@ Subcommands:
|
|
271
271
|
Trollop::educate
|
272
272
|
end
|
273
273
|
|
274
|
-
to = BEL
|
274
|
+
to = BEL.translator(to_format)
|
275
275
|
unless to
|
276
276
|
$stderr.puts(
|
277
277
|
to_format ?
|
@@ -283,7 +283,7 @@ Subcommands:
|
|
283
283
|
end
|
284
284
|
|
285
285
|
begin
|
286
|
-
BEL
|
286
|
+
BEL.translate(input_io, from_format, to_format, $stdout)
|
287
287
|
ensure
|
288
288
|
$stdout.close
|
289
289
|
end
|
@@ -326,6 +326,65 @@ Subcommands:
|
|
326
326
|
require_relative 'bel_upgrade'
|
327
327
|
end
|
328
328
|
end
|
329
|
+
|
330
|
+
class PluginsCommand
|
331
|
+
|
332
|
+
def initialize(global_options)
|
333
|
+
@global_options = global_options
|
334
|
+
end
|
335
|
+
|
336
|
+
def run
|
337
|
+
options = Trollop::options do
|
338
|
+
synopsis "Interact with available plugins."
|
339
|
+
usage "[OPTIONS]... plugins [OPTIONS]"
|
340
|
+
opt :list, 'Lists available plugins',
|
341
|
+
:long => :list,
|
342
|
+
:short => :l,
|
343
|
+
:default => true
|
344
|
+
end
|
345
|
+
|
346
|
+
if options[:list]
|
347
|
+
$stdout.puts "RDF Repository plugins"
|
348
|
+
$stdout.puts "----------------------"
|
349
|
+
$stdout.puts
|
350
|
+
BEL::RdfRepository.plugins.
|
351
|
+
values.
|
352
|
+
sort_by { |plugin| plugin.name}.
|
353
|
+
each do |plugin|
|
354
|
+
$stdout.puts %Q{
|
355
|
+
Name: #{plugin.name}
|
356
|
+
Description: #{plugin.description}
|
357
|
+
}.gsub(%r{^\s+}, ' ')
|
358
|
+
end
|
359
|
+
|
360
|
+
$stdout.puts "Resource Search plugins"
|
361
|
+
$stdout.puts "-----------------------"
|
362
|
+
$stdout.puts
|
363
|
+
BEL::Resource::Search.plugins.
|
364
|
+
values.
|
365
|
+
sort_by { |plugin| plugin.name}.
|
366
|
+
each do |plugin|
|
367
|
+
$stdout.puts %Q{
|
368
|
+
Name: #{plugin.name}
|
369
|
+
Description: #{plugin.description}
|
370
|
+
}.gsub(%r{^\s+}, ' ')
|
371
|
+
end
|
372
|
+
|
373
|
+
$stdout.puts "Translator plugins"
|
374
|
+
$stdout.puts "------------------"
|
375
|
+
$stdout.puts
|
376
|
+
BEL::Translator.plugins.
|
377
|
+
values.
|
378
|
+
sort_by { |plugin| plugin.name}.
|
379
|
+
each do |plugin|
|
380
|
+
$stdout.puts %Q{
|
381
|
+
Name: #{plugin.name}
|
382
|
+
Description: #{plugin.description}
|
383
|
+
}.gsub(%r{^\s+}, ' ')
|
384
|
+
end
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
329
388
|
end
|
330
389
|
end
|
331
390
|
|
data/bin/bel2rdf.rb
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
# Format option
|
14
14
|
# usage: bel2rdf --bel [FILE] --format [ntriples | nquads | turtle]
|
15
15
|
|
16
|
-
|
16
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
17
17
|
require 'bel'
|
18
18
|
require 'optparse'
|
19
19
|
require 'set'
|
data/bin/bel_compare.rb
CHANGED
data/bin/bel_parse.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# From standard in
|
8
8
|
# usage: echo "<BEL DOCUMENT STRING>" | bel_parse
|
9
9
|
|
10
|
-
|
10
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
11
11
|
require 'bel'
|
12
12
|
require 'optparse'
|
13
13
|
|
data/bin/bel_rdfschema.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# bel_rdfschema: Dump RDF schema for BEL.
|
3
3
|
# usage: bel_rdfschema --format [ntriples | nquads | turtle]
|
4
4
|
|
5
|
-
|
5
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
6
6
|
require 'bel'
|
7
7
|
require 'optparse'
|
8
8
|
require 'set'
|
data/bin/bel_summarize.rb
CHANGED
data/bin/bel_upgrade.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# From standard in
|
8
8
|
# usage: echo "<BEL DOCUMENT STRING>" | bel_upgrade -c file.json
|
9
9
|
|
10
|
-
|
10
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
|
11
11
|
require 'bel'
|
12
12
|
require 'json'
|
13
13
|
require 'optparse'
|
data/lib/bel.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require_relative 'bel/version'
|
2
|
+
require_relative 'bel/vendor/little-plugger'
|
2
3
|
require_relative 'bel/language'
|
3
4
|
require_relative 'bel/namespace'
|
4
5
|
require_relative 'bel/util'
|
5
6
|
|
6
|
-
require_relative 'bel/extension'
|
7
|
-
require_relative 'bel/extension_format'
|
8
7
|
require_relative 'bel/evidence_model'
|
9
|
-
require_relative 'bel/
|
8
|
+
require_relative 'bel/translator'
|
9
|
+
require_relative 'bel/translate'
|
10
|
+
|
11
|
+
require_relative 'bel/rdf_repository'
|
12
|
+
require_relative 'bel/resource'
|
10
13
|
|
11
14
|
require_relative 'bel/script'
|
12
15
|
|
@@ -17,13 +20,8 @@ require_relative 'bel/completion'
|
|
17
20
|
include BEL::Language
|
18
21
|
include BEL::Namespace
|
19
22
|
|
20
|
-
BEL
|
21
|
-
|
22
|
-
begin
|
23
|
-
BEL::Extension.load_extension('rdf/rdf')
|
24
|
-
rescue LoadError => e
|
25
|
-
# No RDF support.
|
26
|
-
# TODO Report extension load failure.
|
23
|
+
module BEL
|
24
|
+
extend BEL::Translate::ClassMethods
|
27
25
|
end
|
28
26
|
# vim: ts=2 sw=2:
|
29
27
|
# encoding: utf-8
|
data/lib/bel/completion.rb
CHANGED
@@ -13,7 +13,8 @@ module BEL
|
|
13
13
|
# return all BEL functions as possible completions.
|
14
14
|
#
|
15
15
|
# If +search+ is +nil+ then namespace values will not be provided as
|
16
|
-
# completion. +search+ is expected to
|
16
|
+
# completion. +search+ is expected to provide +#search+ and
|
17
|
+
# +#search_namespace+ methods.
|
17
18
|
#
|
18
19
|
# If +position+ is +nil+ then its assumed to be the last index of
|
19
20
|
# +bel_expression+ otherwise the +to_i+ method is called.
|
@@ -23,7 +24,7 @@ module BEL
|
|
23
24
|
#
|
24
25
|
# @param bel_expression [responds to #to_s] the bel expression to
|
25
26
|
# complete on
|
26
|
-
# @param search [
|
27
|
+
# @param search [#search_namespace, #search] the search object used to
|
27
28
|
# provide namespace value completions
|
28
29
|
# @param position [responds to #to_i] the position to complete from
|
29
30
|
# @return [Array<Completion>]
|
@@ -1,46 +1,40 @@
|
|
1
1
|
module BEL
|
2
2
|
module Model
|
3
3
|
|
4
|
-
# A Citation
|
5
|
-
# {Evidence} information. The fields are defined as:
|
4
|
+
# A Citation describes a cited reference which {Evidence} is derived from.
|
6
5
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# @attr [String]
|
13
|
-
#
|
14
|
-
# @attr [String]
|
15
|
-
|
16
|
-
# +"PubMed"+ type the identifier is the PMID (i.e. 12102192)
|
17
|
-
# @attr [String] date the date when the article was published
|
18
|
-
# @attr [String] authors the authors of the article
|
19
|
-
# @attr [String] comment a comment on the citation
|
20
|
-
class Citation < Struct.new(
|
21
|
-
:type,
|
22
|
-
:name,
|
23
|
-
:id,
|
24
|
-
:date,
|
25
|
-
:authors,
|
26
|
-
:comment
|
27
|
-
)
|
6
|
+
# @attr [String] type the type of resource the cited material appears in
|
7
|
+
# (e.g. PubMed, Journal, Book, Online Resource, etc...)
|
8
|
+
# @attr [String] name the name of the cited resource
|
9
|
+
# @attr [String] id the unique identifier for the cited resource. For
|
10
|
+
# example, a +"PubMed"+ type should have a PMID (i.e. 12102192).
|
11
|
+
# @attr [String] date the date the resource was published
|
12
|
+
# @attr [String] authors the authors of the resource
|
13
|
+
# @attr [String] comment an additional comment related to this resource
|
14
|
+
class Citation
|
28
15
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
16
|
+
MEMBER_ORDER = %i(type name id date authors comment)
|
17
|
+
|
18
|
+
attr_accessor(*MEMBER_ORDER)
|
19
|
+
|
20
|
+
# Creates a {Citation} object from variable arguments.
|
21
|
+
#
|
22
|
+
# @param [Array<Object>] args Argument array of Object; If the array
|
23
|
+
# contains a single value then it is expected to either respond
|
24
|
+
# to +:each+ (according to #MEMBER_ORDER) or +:each_pair+
|
25
|
+
# (keys matching that of #MEMBER_ORDER). If the array has
|
26
|
+
# multiple values then they are set sequentially according to
|
27
|
+
# #MEMBER_ORDER.
|
28
|
+
# @example Create an empty {Citation}.
|
29
|
+
# Citation.new
|
30
|
+
# @example Create a minimal {Citation} by positional members.
|
31
|
+
# Citation.new('PubMed', 'Biocompatibility study of...', '12102192')
|
32
|
+
# @example Create a minimal {Citation} by positional members in array.
|
33
|
+
# Citation.new(
|
34
|
+
# ['PubMed', 'Biocompatibility study of...', '12102192']
|
41
35
|
# )
|
42
|
-
# @example Create a full {Citation}.
|
43
|
-
# Citation.
|
36
|
+
# @example Create a full {Citation} by hash using keys for members.
|
37
|
+
# Citation.new(
|
44
38
|
# {
|
45
39
|
# :type => 'PubMed',
|
46
40
|
# :name => 'Biocompatibility study of biological tissues fixed
|
@@ -52,17 +46,81 @@ module BEL
|
|
52
46
|
# :comment => 'This article is primary research.'
|
53
47
|
# }
|
54
48
|
# )
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
49
|
+
def initialize(*args)
|
50
|
+
return if !args || args.empty?
|
51
|
+
|
52
|
+
if args.length == 1
|
53
|
+
enumerable = args.first
|
54
|
+
if enumerable.respond_to? :each_pair
|
55
|
+
(MEMBER_ORDER & enumerable.keys).each do |member|
|
56
|
+
self.send(:"#{member}=", enumerable[member])
|
57
|
+
end
|
58
|
+
elsif enumerable.respond_to? :each
|
59
|
+
MEMBER_ORDER.zip(enumerable.each).each do |member, value|
|
60
|
+
self.send(:"#{member}=", value)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
(MEMBER_ORDER & args).each do |member|
|
65
|
+
self.send(:"#{member}=", hash[member])
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns the +Array+ of +String+ authors.
|
71
|
+
#
|
72
|
+
# @return [Array<String>] array of authors
|
73
|
+
def authors
|
74
|
+
@authors
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sets the authors value.
|
78
|
+
#
|
79
|
+
# @param [#each, #each_pair, #to_s] authors an authors value
|
80
|
+
def authors=(authors)
|
81
|
+
@authors = convert_authors(authors)
|
61
82
|
end
|
62
83
|
|
84
|
+
# Returns whether the citation has enough pertinent information to be
|
85
|
+
# considered valid.
|
86
|
+
#
|
87
|
+
# @return [true, false] whether the citation is valid
|
63
88
|
def valid?
|
64
89
|
type != nil && id != nil && name != nil
|
65
90
|
end
|
91
|
+
|
92
|
+
# Returns a +Hash+ of the citation members accoring to #MEMBER_ORDER.
|
93
|
+
#
|
94
|
+
# @return [Hash] citation +Hash+
|
95
|
+
def to_h
|
96
|
+
MEMBER_ORDER.reduce({}) { |hash, member|
|
97
|
+
hash[member] = self.send(member)
|
98
|
+
hash
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_a
|
103
|
+
MEMBER_ORDER.reduce([]) { |array, member|
|
104
|
+
array << self.send(member)
|
105
|
+
array
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def convert_authors(authors)
|
112
|
+
return nil unless authors
|
113
|
+
|
114
|
+
if authors.respond_to? :to_a
|
115
|
+
authors.to_a.map(&:to_s)
|
116
|
+
elsif authors.respond_to? :each
|
117
|
+
@authors = authors.each.to_a.map(&:to_s)
|
118
|
+
elsif authors.respond_to? :to_s
|
119
|
+
authors.to_s.split('|').map(&:strip)
|
120
|
+
else
|
121
|
+
raise ArgumentError.new("authors must be a string-like or iterable")
|
122
|
+
end
|
123
|
+
end
|
66
124
|
end
|
67
125
|
end
|
68
126
|
end
|