relaton-bib 1.4.0 → 2.1.7
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/.github/workflows/integration-tests.yml +54 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +3 -1
- data/CLAUDE.md +108 -0
- data/Gemfile +11 -0
- data/README.adoc +229 -314
- data/bin/console +1 -1
- data/docs/hash.adoc +132 -83
- data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
- data/lib/relaton/bib/converter/asciibib.rb +13 -0
- data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
- data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
- data/lib/relaton/bib/converter/bibtex.rb +23 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
- data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
- data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
- data/lib/relaton/bib/converter/bibxml.rb +51 -0
- data/lib/relaton/bib/hash_parser_v1.rb +767 -0
- data/lib/relaton/bib/item_data.rb +229 -0
- data/lib/relaton/bib/model/abstract.rb +16 -0
- data/lib/relaton/bib/model/address.rb +22 -0
- data/lib/relaton/bib/model/affiliation.rb +16 -0
- data/lib/relaton/bib/model/bibdata.rb +9 -0
- data/lib/relaton/bib/model/bibdata_shared.rb +10 -0
- data/lib/relaton/bib/model/bibitem.rb +9 -0
- data/lib/relaton/bib/model/bibitem_shared.rb +10 -0
- data/lib/relaton/bib/model/contact.rb +14 -0
- data/lib/relaton/bib/model/contribution_info.rb +16 -0
- data/lib/relaton/bib/model/contributor.rb +29 -0
- data/lib/relaton/bib/model/copyright.rb +27 -0
- data/lib/relaton/bib/model/date.rb +29 -0
- data/lib/relaton/bib/model/depiction.rb +16 -0
- data/lib/relaton/bib/model/docidentifier.rb +34 -0
- data/lib/relaton/bib/model/doctype.rb +14 -0
- data/lib/relaton/bib/model/edition.rb +14 -0
- data/lib/relaton/bib/model/ext.rb +35 -0
- data/lib/relaton/bib/model/extent.rb +16 -0
- data/lib/relaton/bib/model/formattedref.rb +43 -0
- data/lib/relaton/bib/model/full_name_type.rb +64 -0
- data/lib/relaton/bib/model/fullname.rb +11 -0
- data/lib/relaton/bib/model/ics.rb +49 -0
- data/lib/relaton/bib/model/image.rb +28 -0
- data/lib/relaton/bib/model/item.rb +44 -0
- data/lib/relaton/bib/model/item_base.rb +20 -0
- data/lib/relaton/bib/model/item_shared.rb +88 -0
- data/lib/relaton/bib/model/keyword.rb +30 -0
- data/lib/relaton/bib/model/locality.rb +18 -0
- data/lib/relaton/bib/model/locality_stack.rb +14 -0
- data/lib/relaton/bib/model/localized_string.rb +48 -0
- data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
- data/lib/relaton/bib/model/logo.rb +14 -0
- data/lib/relaton/bib/model/medium.rb +22 -0
- data/lib/relaton/bib/model/note.rb +16 -0
- data/lib/relaton/bib/model/organization.rb +11 -0
- data/lib/relaton/bib/model/organization_type.rb +40 -0
- data/lib/relaton/bib/model/person.rb +36 -0
- data/lib/relaton/bib/model/phone.rb +14 -0
- data/lib/relaton/bib/model/place.rb +33 -0
- data/lib/relaton/bib/model/price.rb +14 -0
- data/lib/relaton/bib/model/relation.rb +41 -0
- data/lib/relaton/bib/model/series.rb +32 -0
- data/lib/relaton/bib/model/size.rb +23 -0
- data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
- data/lib/relaton/bib/model/status.rb +27 -0
- data/lib/relaton/bib/model/structured_identifier.rb +48 -0
- data/lib/relaton/bib/model/subdivision.rb +16 -0
- data/lib/relaton/bib/model/title.rb +56 -0
- data/lib/relaton/bib/model/type/plain_date.rb +16 -0
- data/lib/relaton/bib/model/type/string_date.rb +48 -0
- data/lib/relaton/bib/model/uri.rb +18 -0
- data/lib/relaton/bib/model/validity.rb +16 -0
- data/lib/relaton/bib/model/version.rb +43 -0
- data/lib/relaton/bib/model_autoload.rb +85 -0
- data/lib/relaton/bib/namespace_helper.rb +21 -0
- data/lib/relaton/bib/sanitizer.rb +74 -0
- data/lib/relaton/bib/util.rb +18 -0
- data/lib/relaton/bib/version.rb +5 -0
- data/lib/relaton/bib/versions.json +35 -0
- data/lib/relaton/bib.rb +41 -0
- data/relaton-bib.gemspec +12 -16
- metadata +118 -129
- data/.github/workflows/macos.yml +0 -38
- data/.github/workflows/ubuntu.yml +0 -39
- data/.github/workflows/windows.yml +0 -41
- data/grammars/basicdoc.rng +0 -986
- data/grammars/biblio.rng +0 -1237
- data/grammars/isodoc.rng +0 -1613
- data/grammars/reqt.rng +0 -165
- data/lib/relaton_bib/bib_item_locality.rb +0 -107
- data/lib/relaton_bib/biblio_note.rb +0 -44
- data/lib/relaton_bib/biblio_version.rb +0 -49
- data/lib/relaton_bib/bibliographic_date.rb +0 -90
- data/lib/relaton_bib/bibliographic_item.rb +0 -726
- data/lib/relaton_bib/bibtex_parser.rb +0 -245
- data/lib/relaton_bib/classification.rb +0 -40
- data/lib/relaton_bib/contribution_info.rb +0 -109
- data/lib/relaton_bib/contributor.rb +0 -215
- data/lib/relaton_bib/copyright_association.rb +0 -77
- data/lib/relaton_bib/deep_dup.rb +0 -30
- data/lib/relaton_bib/document_identifier.rb +0 -95
- data/lib/relaton_bib/document_relation.rb +0 -94
- data/lib/relaton_bib/document_relation_collection.rb +0 -46
- data/lib/relaton_bib/document_status.rb +0 -93
- data/lib/relaton_bib/editorial_group.rb +0 -41
- data/lib/relaton_bib/formatted_ref.rb +0 -17
- data/lib/relaton_bib/formatted_string.rb +0 -55
- data/lib/relaton_bib/hash_converter.rb +0 -497
- data/lib/relaton_bib/hit.rb +0 -46
- data/lib/relaton_bib/hit_collection.rb +0 -73
- data/lib/relaton_bib/ics.rb +0 -37
- data/lib/relaton_bib/localized_string.rb +0 -93
- data/lib/relaton_bib/medium.rb +0 -44
- data/lib/relaton_bib/organization.rb +0 -135
- data/lib/relaton_bib/person.rb +0 -206
- data/lib/relaton_bib/place.rb +0 -49
- data/lib/relaton_bib/series.rb +0 -134
- data/lib/relaton_bib/structured_identifier.rb +0 -171
- data/lib/relaton_bib/technical_committee.rb +0 -36
- data/lib/relaton_bib/typed_title_string.rb +0 -96
- data/lib/relaton_bib/typed_uri.rb +0 -47
- data/lib/relaton_bib/validity.rb +0 -52
- data/lib/relaton_bib/version.rb +0 -3
- data/lib/relaton_bib/workers_pool.rb +0 -43
- data/lib/relaton_bib/workgroup.rb +0 -46
- data/lib/relaton_bib/xml_parser.rb +0 -463
- data/lib/relaton_bib.rb +0 -44
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
class StructuredIdentifierCollection
|
|
3
|
-
include RelatonBib
|
|
4
|
-
extend Forwardable
|
|
5
|
-
|
|
6
|
-
def_delegators :@collection, :any?, :size, :[], :detect
|
|
7
|
-
|
|
8
|
-
# @param collection [Array<RelatonBib::StructuredIdentifier>]
|
|
9
|
-
def initialize(collection)
|
|
10
|
-
@collection = collection
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
14
|
-
def to_xml(builder)
|
|
15
|
-
@collection.each { |si| si.to_xml builder }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @return [Array<Hash>]
|
|
19
|
-
def to_hash
|
|
20
|
-
single_element_array @collection
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @param prefix [String]
|
|
24
|
-
# @return [String]
|
|
25
|
-
def to_asciibib(prefix = "")
|
|
26
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
27
|
-
pref += "structured_identifier"
|
|
28
|
-
@collection.reduce("") do |out, si|
|
|
29
|
-
out += "#{pref}::\n" if @collection.size > 1
|
|
30
|
-
out + si.to_asciibib(pref)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# remoe year from docnumber
|
|
35
|
-
def remove_date
|
|
36
|
-
@collection.each &:remove_date
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def remove_part
|
|
40
|
-
@collection.each &:remove_part
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def all_parts
|
|
44
|
-
@collection.each &:all_parts
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def presence?
|
|
48
|
-
any?
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# @return [RelatonBib::StructuredIdentifierCollection]
|
|
52
|
-
# def map(&block)
|
|
53
|
-
# StructuredIdentifierCollection.new @collection.map &block
|
|
54
|
-
# end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class StructuredIdentifier
|
|
58
|
-
include RelatonBib
|
|
59
|
-
|
|
60
|
-
# @return [String]
|
|
61
|
-
attr_reader :docnumber
|
|
62
|
-
|
|
63
|
-
# @return [Array<String>]
|
|
64
|
-
attr_reader :agency
|
|
65
|
-
|
|
66
|
-
# @return [String, NilClass]
|
|
67
|
-
attr_reader :type, :klass, :partnumber, :edition, :version, :supplementtype,
|
|
68
|
-
:supplementnumber, :language, :year
|
|
69
|
-
|
|
70
|
-
# rubocop:disable Metrics/MethodLength
|
|
71
|
-
|
|
72
|
-
# @param type [String, NilClass]
|
|
73
|
-
# @param agency [Array<String>]
|
|
74
|
-
# @parma class [Stirng, NilClass]
|
|
75
|
-
# @parma docnumber [String]
|
|
76
|
-
# @param partnumber [String, NilClass]
|
|
77
|
-
# @param edition [String, NilClass]
|
|
78
|
-
# @param version [String, NilClass]
|
|
79
|
-
# @param supplementtype [String, NilClass]
|
|
80
|
-
# @param supplementnumber [String, NilClass]
|
|
81
|
-
# @param language [String, NilClass]
|
|
82
|
-
# @param year [String, NilClass]
|
|
83
|
-
def initialize(docnumber:, **args)
|
|
84
|
-
@type = args[:type]
|
|
85
|
-
@agency = args[:agency]
|
|
86
|
-
@klass = args[:class]
|
|
87
|
-
@docnumber = docnumber
|
|
88
|
-
@partnumber = args[:partnumber]
|
|
89
|
-
@edition = args[:edition]
|
|
90
|
-
@version = args[:version]
|
|
91
|
-
@supplementtype = args[:supplementtype]
|
|
92
|
-
@supplementnumber = args[:supplementnumber]
|
|
93
|
-
@language = args[:language]
|
|
94
|
-
@year = args[:year]
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
98
|
-
|
|
99
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
100
|
-
def to_xml(builder)
|
|
101
|
-
xml = builder.structuredidentifier do |b|
|
|
102
|
-
agency&.each { |a| b.agency a }
|
|
103
|
-
b.class_ klass if klass
|
|
104
|
-
b.docnumber docnumber
|
|
105
|
-
b.partnumber partnumber if partnumber
|
|
106
|
-
b.edition edition if edition
|
|
107
|
-
b.version version if version
|
|
108
|
-
b.supplementtype supplementtype if supplementtype
|
|
109
|
-
b.supplementnumber supplementnumber if supplementnumber
|
|
110
|
-
b.language language if language
|
|
111
|
-
b.year year if year
|
|
112
|
-
end
|
|
113
|
-
xml[:type] = type if type
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# @return [Hash]
|
|
117
|
-
def to_hash
|
|
118
|
-
hash = { "docnumber" => docnumber }
|
|
119
|
-
hash["type"] = type if type
|
|
120
|
-
hash["agency"] = single_element_array agency if agency&.any?
|
|
121
|
-
hash["class"] = klass if klass
|
|
122
|
-
hash["partnumber"] = partnumber if partnumber
|
|
123
|
-
hash["edition"] = edition if edition
|
|
124
|
-
hash["version"] = version if version
|
|
125
|
-
hash["supplementtype"] = supplementtype if supplementtype
|
|
126
|
-
hash["supplementnumber"] = supplementnumber if supplementnumber
|
|
127
|
-
hash["language"] = language if language
|
|
128
|
-
hash["year"] = year if year
|
|
129
|
-
hash
|
|
130
|
-
end
|
|
131
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
132
|
-
|
|
133
|
-
# @param prefix [String]
|
|
134
|
-
# @return [String]
|
|
135
|
-
def to_asciibib(prefix) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength,Metrics/PerceivedComplexity
|
|
136
|
-
out = "#{prefix}.docnumber:: #{docnumber}\n"
|
|
137
|
-
agency.each { |a| out += "#{prefix}.agency:: #{a}\n" }
|
|
138
|
-
out += "#{prefix}.type:: #{type}\n" if type
|
|
139
|
-
out += "#{prefix}.class:: #{klass}\n" if klass
|
|
140
|
-
out += "#{prefix}.partnumber:: #{partnumber}\n" if partnumber
|
|
141
|
-
out += "#{prefix}.edition:: #{edition}\n" if edition
|
|
142
|
-
out += "#{prefix}.version:: #{version}\n" if version
|
|
143
|
-
out += "#{prefix}.supplementtype:: #{supplementtype}\n" if supplementtype
|
|
144
|
-
if supplementnumber
|
|
145
|
-
out += "#{prefix}.supplementnumber:: #{supplementnumber}\n"
|
|
146
|
-
end
|
|
147
|
-
out += "#{prefix}.language:: #{language}\n" if language
|
|
148
|
-
out += "#{prefix}.year:: #{year}\n" if year
|
|
149
|
-
out
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def remove_date
|
|
153
|
-
if @type == "Chinese Standard"
|
|
154
|
-
@docnumber.sub!(/-[12]\d\d\d/, "")
|
|
155
|
-
else
|
|
156
|
-
@docnumber.sub!(/:[12]\d\d\d/, "")
|
|
157
|
-
end
|
|
158
|
-
@year = nil
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
# in docid manipulations, assume ISO as the default: id-part:year
|
|
162
|
-
def remove_part
|
|
163
|
-
@partnumber = nil
|
|
164
|
-
@docnumber = @docnumber.sub(/-\d+/, "")
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def all_parts
|
|
168
|
-
@docnumber = @docnumber + " (all parts)"
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require "relaton_bib/workgroup"
|
|
2
|
-
|
|
3
|
-
module RelatonBib
|
|
4
|
-
class TechnicalCommittee
|
|
5
|
-
# @return [RelatonBib::WorkGroup]
|
|
6
|
-
attr_reader :workgroup
|
|
7
|
-
|
|
8
|
-
# @param workgroup [RelatonBib::WorkGroup]
|
|
9
|
-
def initialize(workgroup)
|
|
10
|
-
@workgroup = workgroup
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
14
|
-
def to_xml(builder)
|
|
15
|
-
builder.send "technical-committee" do |b|
|
|
16
|
-
workgroup.to_xml b
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @return [Hash]
|
|
21
|
-
def to_hash
|
|
22
|
-
workgroup.to_hash
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @param prefix [String]
|
|
26
|
-
# @param count [Integer] number of technical committees
|
|
27
|
-
# @return [String]
|
|
28
|
-
def to_asciibib(prefix = "", count = 1)
|
|
29
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
30
|
-
pref += "technical_committee"
|
|
31
|
-
out = count > 1 ? "#{pref}::\n" : ""
|
|
32
|
-
out += workgroup.to_asciibib pref
|
|
33
|
-
out
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
class TypedTitleString
|
|
3
|
-
# @return [String]
|
|
4
|
-
attr_reader :type
|
|
5
|
-
|
|
6
|
-
# @return [RelatonBib::FormattedString]
|
|
7
|
-
attr_reader :title
|
|
8
|
-
|
|
9
|
-
# @param type [String]
|
|
10
|
-
# @param title [RelatonBib::FormattedString, Hash]
|
|
11
|
-
# @param content [String]
|
|
12
|
-
# @param language [String]
|
|
13
|
-
# @param script [String]
|
|
14
|
-
def initialize(**args) # rubocop:disable Metrics/MethodLength
|
|
15
|
-
unless args[:title] || args[:content]
|
|
16
|
-
raise ArgumentError, %{Keyword "title" or "content" should be passed.}
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
@type = args[:type]
|
|
20
|
-
|
|
21
|
-
if args[:title]
|
|
22
|
-
@title = args[:title]
|
|
23
|
-
else
|
|
24
|
-
fsargs = args.select do |k, _v|
|
|
25
|
-
%i[content language script format].include? k
|
|
26
|
-
end
|
|
27
|
-
@title = FormattedString.new(fsargs)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @param title [String]
|
|
32
|
-
# @return [Array<self>]
|
|
33
|
-
def self.from_string(title, lang = nil, script = nil)
|
|
34
|
-
types = %w[title-intro title-main title-part]
|
|
35
|
-
ttls = split_title(title)
|
|
36
|
-
tts = ttls.map.with_index do |p, i|
|
|
37
|
-
new type: types[i], content: p, language: lang, script: script if p
|
|
38
|
-
end.compact
|
|
39
|
-
tts << new(type: "main", content: ttls.compact.join(" - "),
|
|
40
|
-
language: lang, script: script)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @param title [String]
|
|
44
|
-
# @return [Array<String, nil>]
|
|
45
|
-
def self.split_title(title)
|
|
46
|
-
ttls = title.sub(/\w\.Imp\s?\d+\u00A0:\u00A0/, "").split " - "
|
|
47
|
-
case ttls.size
|
|
48
|
-
when 0, 1 then [nil, ttls.first.to_s, nil]
|
|
49
|
-
else intro_or_part ttls
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# @param ttls [Array<String>]
|
|
54
|
-
# @return [Array<Strin, nil>]
|
|
55
|
-
def self.intro_or_part(ttls)
|
|
56
|
-
if /^(Part|Partie) \d+:/.match? ttls[1]
|
|
57
|
-
[nil, ttls[0], ttls[1..-1].join(" -- ")]
|
|
58
|
-
else
|
|
59
|
-
parts = ttls.slice(2..-1)
|
|
60
|
-
part = parts.join " -- " if parts.any?
|
|
61
|
-
[ttls[0], ttls[1], part]
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
66
|
-
def to_xml(builder)
|
|
67
|
-
builder.parent[:type] = type if type
|
|
68
|
-
title.to_xml builder
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# @return [Hash]
|
|
72
|
-
def to_hash
|
|
73
|
-
th = title.to_hash
|
|
74
|
-
return th unless type
|
|
75
|
-
|
|
76
|
-
hash = { "type" => type }
|
|
77
|
-
if th.is_a? String
|
|
78
|
-
hash["content"] = th
|
|
79
|
-
else
|
|
80
|
-
hash.merge! th
|
|
81
|
-
end
|
|
82
|
-
hash
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @param prefix [String]
|
|
86
|
-
# @param count [Integer] number of titles
|
|
87
|
-
# @return [String]
|
|
88
|
-
def to_asciibib(prefix = "", count = 1) # rubocop:disable Metrics/AbcSize
|
|
89
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
90
|
-
out = count > 1 ? "#{pref}title::\n" : ""
|
|
91
|
-
out += "#{pref}title.type:: #{type}\n" if type
|
|
92
|
-
out += title.to_asciibib "#{pref}title"
|
|
93
|
-
out
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
require "addressable"
|
|
2
|
-
|
|
3
|
-
module RelatonBib
|
|
4
|
-
# Typed URI
|
|
5
|
-
class TypedUri
|
|
6
|
-
# @return [Symbol] :src/:obp/:rss
|
|
7
|
-
attr_reader :type
|
|
8
|
-
# @retutn [URI]
|
|
9
|
-
attr_reader :content
|
|
10
|
-
|
|
11
|
-
# @param type [String, NilClass] src/obp/rss
|
|
12
|
-
# @param content [String]
|
|
13
|
-
def initialize(type: nil, content:)
|
|
14
|
-
@type = type
|
|
15
|
-
@content = Addressable::URI.parse content if content
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @parma url [String]
|
|
19
|
-
def content=(url)
|
|
20
|
-
@content = Addressable::URI.parse url
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
24
|
-
def to_xml(builder)
|
|
25
|
-
doc = builder.uri content.to_s
|
|
26
|
-
doc[:type] = type if type
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# @return [Hash]
|
|
30
|
-
def to_hash
|
|
31
|
-
hash = { "content" => content.to_s }
|
|
32
|
-
hash["type"] = type.to_s if type
|
|
33
|
-
hash
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @param prefix [String]
|
|
37
|
-
# @param count [Integer] number of links
|
|
38
|
-
# @return [String]
|
|
39
|
-
def to_asciibib(prefix = "", count = 1)
|
|
40
|
-
pref = prefix.empty? ? "link" : prefix + ".link"
|
|
41
|
-
out = count > 1 ? "#{pref}::\n" : ""
|
|
42
|
-
out += "#{pref}.type:: #{type}\n" if type
|
|
43
|
-
out += "#{pref}.content:: #{content}\n"
|
|
44
|
-
out
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
data/lib/relaton_bib/validity.rb
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
class Validity
|
|
3
|
-
FORMAT = "%Y-%m-%d %H:%M"
|
|
4
|
-
|
|
5
|
-
# @return [Time, NilClass]
|
|
6
|
-
attr_reader :begins
|
|
7
|
-
|
|
8
|
-
# @return [Time, NilClass]
|
|
9
|
-
attr_reader :ends
|
|
10
|
-
|
|
11
|
-
# @return [Time, NilClass]
|
|
12
|
-
attr_reader :revision
|
|
13
|
-
|
|
14
|
-
# @param begins [Time, NilClass]
|
|
15
|
-
# @param ends [Time, NilClass]
|
|
16
|
-
# @param revision [Time, NilClass]
|
|
17
|
-
def initialize(begins: nil, ends: nil, revision: nil)
|
|
18
|
-
@begins = begins
|
|
19
|
-
@ends = ends
|
|
20
|
-
@revision = revision
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @param [Nokogiri::XML::Builder]
|
|
24
|
-
def to_xml(builder)
|
|
25
|
-
builder.validity do
|
|
26
|
-
builder.validityBegins begins.strftime(FORMAT) if begins
|
|
27
|
-
builder.validityEnds ends.strftime(FORMAT) if ends
|
|
28
|
-
builder.revision revision.strftime(FORMAT) if revision
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# @return [Hash]
|
|
33
|
-
def to_hash
|
|
34
|
-
hash = {}
|
|
35
|
-
hash["begins"] = begins.strftime(FORMAT) if begins
|
|
36
|
-
hash["ends"] = ends.strftime(FORMAT) if ends
|
|
37
|
-
hash["revision"] = revision.strftime(FORMAT) if revision
|
|
38
|
-
hash
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# @param prefix [String]
|
|
42
|
-
# @return [String]
|
|
43
|
-
def to_asciibib(prefix = "")
|
|
44
|
-
pref = prefix.empty? ? "validity." : prefix + ".validity."
|
|
45
|
-
out = ""
|
|
46
|
-
out += "#{pref}begins:: #{begins.strftime(FORMAT)}\n" if begins
|
|
47
|
-
out += "#{pref}ends:: #{ends.strftime(FORMAT)}\n" if ends
|
|
48
|
-
out += "#{pref}revision:: #{revision.strftime(FORMAT)}\n" if revision
|
|
49
|
-
out
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
data/lib/relaton_bib/version.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RelatonBib
|
|
4
|
-
# Workers poll.
|
|
5
|
-
class WorkersPool
|
|
6
|
-
attr_accessor :nb_hits
|
|
7
|
-
|
|
8
|
-
def initialize(num_workers = 2)
|
|
9
|
-
@num_workers = num_workers < 2 ? 2 : num_workers
|
|
10
|
-
@queue = SizedQueue.new(num_workers * 2)
|
|
11
|
-
@result = []
|
|
12
|
-
@nb_hits = 0
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def worker(&block)
|
|
16
|
-
@threads = Array.new @num_workers do
|
|
17
|
-
Thread.new do
|
|
18
|
-
until (item = @queue.pop) == :END
|
|
19
|
-
@result << yield(item) if block
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def result
|
|
26
|
-
@threads.each(&:join)
|
|
27
|
-
@result
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def <<(item)
|
|
31
|
-
@queue << item
|
|
32
|
-
self
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def end
|
|
36
|
-
@num_workers.times { @queue << :END }
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def size
|
|
40
|
-
@result.size
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
module RelatonBib
|
|
2
|
-
class WorkGroup
|
|
3
|
-
# @return [String]
|
|
4
|
-
attr_reader :content
|
|
5
|
-
|
|
6
|
-
# @return [Integer, nil]
|
|
7
|
-
attr_reader :number
|
|
8
|
-
|
|
9
|
-
# @return [String, nil]
|
|
10
|
-
attr_reader :type
|
|
11
|
-
|
|
12
|
-
# @param content [String]
|
|
13
|
-
# @param number [Integer, nil]
|
|
14
|
-
# @param type [String, nil]
|
|
15
|
-
def initialize(content:, number: nil, type: nil)
|
|
16
|
-
@content = content
|
|
17
|
-
@number = number
|
|
18
|
-
@type = type
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @param builder [Nokogiri::XML::Builder]
|
|
22
|
-
def to_xml(builder)
|
|
23
|
-
builder.text content
|
|
24
|
-
builder.parent[:number] = number if number
|
|
25
|
-
builder.parent[:type] = type if type
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# @return [Hash]
|
|
29
|
-
def to_hash
|
|
30
|
-
hash = { "content" => content }
|
|
31
|
-
hash["number"] = number if number
|
|
32
|
-
hash["type"] = type if type
|
|
33
|
-
hash
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# @param prefix [String]
|
|
37
|
-
# @return [String]
|
|
38
|
-
def to_asciibib(prefix = "")
|
|
39
|
-
pref = prefix.empty? ? prefix : prefix + "."
|
|
40
|
-
out = "#{pref}content:: #{content}\n"
|
|
41
|
-
out += "#{pref}number:: #{number}\n" if number
|
|
42
|
-
out += "#{pref}type:: #{type}\n" if type
|
|
43
|
-
out
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|