relaton-bib 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/grammars/reqt.rng CHANGED
@@ -30,15 +30,34 @@
30
30
  <data type="boolean"/>
31
31
  </attribute>
32
32
  </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
33
36
  <optional>
34
37
  <attribute name="subsequence"/>
35
38
  </optional>
39
+ <optional>
40
+ <attribute name="keep-with-next">
41
+ <data type="boolean"/>
42
+ </attribute>
43
+ </optional>
44
+ <optional>
45
+ <attribute name="keep-lines-together">
46
+ <data type="boolean"/>
47
+ </attribute>
48
+ </optional>
36
49
  <attribute name="id">
37
50
  <data type="ID"/>
38
51
  </attribute>
39
52
  <optional>
40
53
  <attribute name="filename"/>
41
54
  </optional>
55
+ <optional>
56
+ <attribute name="model"/>
57
+ </optional>
58
+ <optional>
59
+ <attribute name="type"/>
60
+ </optional>
42
61
  <optional>
43
62
  <ref name="reqtitle"/>
44
63
  </optional>
@@ -48,9 +67,9 @@
48
67
  <optional>
49
68
  <ref name="subject"/>
50
69
  </optional>
51
- <optional>
70
+ <zeroOrMore>
52
71
  <ref name="reqinherit"/>
53
- </optional>
72
+ </zeroOrMore>
54
73
  <zeroOrMore>
55
74
  <ref name="classification"/>
56
75
  </zeroOrMore>
@@ -135,6 +154,16 @@
135
154
  <data type="boolean"/>
136
155
  </attribute>
137
156
  </optional>
157
+ <optional>
158
+ <attribute name="keep-with-next">
159
+ <data type="boolean"/>
160
+ </attribute>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-lines-together">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
138
167
  <oneOrMore>
139
168
  <ref name="BasicBlock"/>
140
169
  </oneOrMore>
@@ -44,7 +44,7 @@ module RelatonBib
44
44
  # @param count [Integeg] number of localities
45
45
  # @return [String]
46
46
  def to_asciibib(prefix = "", count = 1)
47
- pref = prefix.empty? ? prefix : prefix + "."
47
+ pref = prefix.empty? ? prefix : "#{prefix}."
48
48
  out = count > 1 ? "#{prefix}::\n" : ""
49
49
  out += "#{pref}type:: #{type}\n"
50
50
  out += "#{pref}reference_from:: #{reference_from}\n"
@@ -197,23 +197,23 @@ module RelatonBib
197
197
  @title = TypedTitleStringCollection.new(args[:title])
198
198
 
199
199
  @date = (args[:date] || []).map do |d|
200
- d.is_a?(Hash) ? BibliographicDate.new(d) : d
200
+ d.is_a?(Hash) ? BibliographicDate.new(**d) : d
201
201
  end
202
202
 
203
203
  @contributor = (args[:contributor] || []).map do |c|
204
204
  if c.is_a? Hash
205
- e = c[:entity].is_a?(Hash) ? Organization.new(c[:entity]) : c[:entity]
205
+ e = c[:entity].is_a?(Hash) ? Organization.new(**c[:entity]) : c[:entity]
206
206
  ContributionInfo.new(entity: e, role: c[:role])
207
207
  else c
208
208
  end
209
209
  end
210
210
 
211
211
  @abstract = (args[:abstract] || []).map do |a|
212
- a.is_a?(Hash) ? FormattedString.new(a) : a
212
+ a.is_a?(Hash) ? FormattedString.new(**a) : a
213
213
  end
214
214
 
215
215
  @copyright = args.fetch(:copyright, []).map do |c|
216
- c.is_a?(Hash) ? CopyrightAssociation.new(c) : c
216
+ c.is_a?(Hash) ? CopyrightAssociation.new(**c) : c
217
217
  end
218
218
 
219
219
  @docidentifier = args[:docid] || []
@@ -229,7 +229,7 @@ module RelatonBib
229
229
  @status = args[:docstatus]
230
230
  @relation = DocRelationCollection.new(args[:relation] || [])
231
231
  @link = args.fetch(:link, []).map do |s|
232
- if s.is_a?(Hash) then TypedUri.new(s)
232
+ if s.is_a?(Hash) then TypedUri.new(**s)
233
233
  elsif s.is_a?(String) then TypedUri.new(content: s)
234
234
  else s
235
235
  end
@@ -257,6 +257,13 @@ module RelatonBib
257
257
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
258
258
  # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
259
259
 
260
+ # @param hash [Hash]
261
+ # @return [RelatonBipm::BipmBibliographicItem]
262
+ def self.from_hash(hash)
263
+ item_hash = ::RelatonBib::HashConverter.hash_to_bib(hash)
264
+ new **item_hash
265
+ end
266
+
260
267
  # @param lang [String] language code Iso639
261
268
  # @return [RelatonBib::FormattedString, Array<RelatonBib::FormattedString>]
262
269
  def abstract(lang: nil)
@@ -101,14 +101,14 @@ module RelatonBib
101
101
  if bibtex["organization"]
102
102
  contributor << {
103
103
  entity: { name: bibtex.organization.to_s },
104
- role: [{ type: "distributor", description: ["sponsor"] }]
104
+ role: [{ type: "distributor", description: ["sponsor"] }],
105
105
  }
106
106
  end
107
107
 
108
108
  if bibtex["school"]
109
109
  contributor << {
110
110
  entity: { name: bibtex.school.to_s },
111
- role: [{ type: "distributor", description: ["sponsor"] }]
111
+ role: [{ type: "distributor", description: ["sponsor"] }],
112
112
  }
113
113
  end
114
114
  contributor
@@ -30,7 +30,7 @@ module RelatonBib
30
30
  end
31
31
 
32
32
  @owner = owner.map do |o|
33
- o.is_a?(Hash) ? ContributionInfo.new(entity: Organization.new(o)) : o
33
+ o.is_a?(Hash) ? ContributionInfo.new(entity: Organization.new(**o)) : o
34
34
  end
35
35
 
36
36
  @from = Date.strptime(from.to_s, "%Y") if from.to_s.match? /\d{4}/
@@ -13,7 +13,7 @@ module RelatonBib
13
13
  derives describes describedBy catalogues cataloguedBy hasSuccessor
14
14
  successorOf adaptedFrom hasAdaptation adoptedFrom adoptedAs reviewOf
15
15
  hasReview commentaryOf hasCommentary related complements complementOf
16
- obsoletes obsoletedBy cited isCitedIn
16
+ obsoletes obsoletedBy cites isCitedIn
17
17
  ].freeze
18
18
 
19
19
  # @return [String]
@@ -18,7 +18,7 @@ module RelatonBib
18
18
  # RelatonBib::SourceLocalityStack>] :source_locality
19
19
  # @option relation [RelatonBib::BibliographicItem, NillClass] :bibitem (nil)
20
20
  def initialize(relation)
21
- @array = relation.map { |r| r.is_a?(Hash) ? DocumentRelation.new(r) : r }
21
+ @array = relation.map { |r| r.is_a?(Hash) ? DocumentRelation.new(**r) : r }
22
22
  end
23
23
 
24
24
  # @todo We don't have replace type anymore. Suppose we should update this
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module RelatonBib
3
4
  # Document status.
4
5
  class DocumentStatus
@@ -54,7 +55,7 @@ module RelatonBib
54
55
  # @return [RelatonBib::DocumentStatus::Stage]
55
56
  def stage_new(stg)
56
57
  if stg.is_a?(Stage) then stg
57
- elsif stg.is_a?(Hash) then Stage.new(stg)
58
+ elsif stg.is_a?(Hash) then Stage.new(**stg)
58
59
  elsif stg.is_a?(String) then Stage.new(value: stg)
59
60
  end
60
61
  end
@@ -7,7 +7,7 @@ module RelatonBib
7
7
  class FormattedString < LocalizedString
8
8
  FORMATS = %w[text/plain text/html application/docbook+xml
9
9
  application/tei+xml text/x-asciidoc text/markdown
10
- application/x-isodoc+xml].freeze
10
+ application/x-metanorma+xml].freeze
11
11
 
12
12
  # @return [String]
13
13
  attr_reader :format
@@ -97,7 +97,7 @@ module RelatonBib
97
97
  return unless ret[:place]
98
98
 
99
99
  ret[:place] = array(ret[:place]).map do |pl|
100
- pl.is_a?(String) ? Place.new(name: pl) : Place.new(pl)
100
+ pl.is_a?(String) ? Place.new(name: pl) : Place.new(**pl)
101
101
  end
102
102
  end
103
103
 
@@ -146,7 +146,7 @@ module RelatonBib
146
146
  ret[:biblionote] = array(ret[:biblionote])
147
147
  .reduce(BiblioNoteCollection.new([])) do |mem, n|
148
148
  mem << if n.is_a?(String) then BiblioNote.new content: n
149
- else BiblioNote.new(n)
149
+ else BiblioNote.new(**n)
150
150
  end
151
151
  end
152
152
  end
@@ -247,10 +247,10 @@ module RelatonBib
247
247
  script: d[:script], format: d[:format] }
248
248
  else { content: d }
249
249
  end
250
- FormattedString.new cnt
250
+ FormattedString.new **cnt
251
251
  end
252
252
  Affiliation.new(
253
- organization: Organization.new(org_hash_to_bib(a[:organization])),
253
+ organization: Organization.new(**org_hash_to_bib(a[:organization])),
254
254
  description: a[:description]
255
255
  )
256
256
  end
@@ -288,7 +288,7 @@ module RelatonBib
288
288
  ret[:relation] = array(ret[:relation])
289
289
  ret[:relation]&.each do |r|
290
290
  if r[:description]
291
- r[:description] = FormattedString.new r[:description]
291
+ r[:description] = FormattedString.new **r[:description]
292
292
  end
293
293
  relation_bibitem_hash_to_bib(r)
294
294
  relation_locality_hash_to_bib(r)
@@ -309,7 +309,7 @@ module RelatonBib
309
309
  # @param item_hash [Hash]
310
310
  # @return [RelatonBib::BibliographicItem]
311
311
  def bib_item(item_hash)
312
- BibliographicItem.new item_hash
312
+ BibliographicItem.new **item_hash
313
313
  end
314
314
 
315
315
  # @param rel [Hash] relation
@@ -356,26 +356,26 @@ module RelatonBib
356
356
  end
357
357
  s[:abbreviation] &&
358
358
  s[:abbreviation] = localizedstring(s[:abbreviation])
359
- Series.new(s)
359
+ Series.new(**s)
360
360
  end
361
361
  end
362
362
 
363
363
  # @param title [Hash]
364
364
  # @return [RelatonBib::TypedTitleString]
365
365
  def typed_title_strig(title)
366
- TypedTitleString.new title
366
+ TypedTitleString.new **title
367
367
  end
368
368
 
369
369
  # @param ret [Hash]
370
370
  def medium_hash_to_bib(ret)
371
- ret[:medium] = Medium.new(ret[:medium]) if ret[:medium]
371
+ ret[:medium] = Medium.new(**ret[:medium]) if ret[:medium]
372
372
  end
373
373
 
374
374
  # @param ret [Hash]
375
375
  def classification_hash_to_bib(ret)
376
376
  if ret[:classification]
377
377
  ret[:classification] = array(ret[:classification]).map do |cls|
378
- Classification.new cls
378
+ Classification.new **cls
379
379
  end
380
380
  end
381
381
  end
@@ -409,7 +409,7 @@ module RelatonBib
409
409
  return unless ret[:editorialgroup]
410
410
 
411
411
  technical_committee = array(ret[:editorialgroup]).map do |wg|
412
- TechnicalCommittee.new WorkGroup.new(wg)
412
+ TechnicalCommittee.new WorkGroup.new(**wg)
413
413
  end
414
414
  ret[:editorialgroup] = EditorialGroup.new technical_committee
415
415
  end
@@ -418,7 +418,7 @@ module RelatonBib
418
418
  def ics_hash_to_bib(ret)
419
419
  return unless ret[:ics]
420
420
 
421
- ret[:ics] = array(ret[:ics]).map { |ics| ICS.new ics }
421
+ ret[:ics] = array(ret[:ics]).map { |ics| ICS.new **ics }
422
422
  end
423
423
 
424
424
  # @param ret [Hash]
@@ -427,7 +427,7 @@ module RelatonBib
427
427
 
428
428
  sids = array(ret[:structuredidentifier]).map do |si|
429
429
  si[:agency] = array si[:agency]
430
- StructuredIdentifier.new si
430
+ StructuredIdentifier.new **si
431
431
  end
432
432
  ret[:structuredidentifier] = StructuredIdentifierCollection.new sids
433
433
  end
@@ -485,7 +485,7 @@ module RelatonBib
485
485
  # @return [RelatonBib::FormattedRef]
486
486
  def formattedref(frf)
487
487
  if frf.is_a?(Hash)
488
- RelatonBib::FormattedRef.new(frf)
488
+ RelatonBib::FormattedRef.new(**frf)
489
489
  else
490
490
  RelatonBib::FormattedRef.new(content: frf)
491
491
  end
@@ -1,11 +1,14 @@
1
1
  module RelatonBib
2
2
  class ICS
3
3
  # @return [String]
4
- attr_reader :code, :text
4
+ attr_reader :code
5
+
6
+ # @return [String, nil]
7
+ attr_reader :text
5
8
 
6
9
  # @param code [String]
7
- # @param text [String]
8
- def initialize(code:, text:)
10
+ # @param text [String, nil]
11
+ def initialize(code:, text: nil)
9
12
  @code = code
10
13
  @text = text
11
14
  end
@@ -14,23 +17,25 @@ module RelatonBib
14
17
  def to_xml(builder)
15
18
  builder.ics do |b|
16
19
  b.code code
17
- b.text_ text
20
+ b.text_ text if text
18
21
  end
19
22
  end
20
23
 
21
24
  # @return [Hash]
22
25
  def to_hash
23
- { "code" => code, "text" => text }
26
+ hash = { "code" => code }
27
+ hash["text"] = text if text
28
+ hash
24
29
  end
25
30
 
26
31
  # @param prefix [String]
27
32
  # @param count [Integer] number of ics
28
33
  # @return [String]
29
34
  def to_asciibib(prefix = "", count = 1)
30
- pref = prefix.empty? ? "ics" : prefix + ".ics"
35
+ pref = prefix.empty? ? "ics" : "#{prefix}.ics"
31
36
  out = count > 1 ? "#{pref}::\n" : ""
32
37
  out += "#{pref}.code:: #{code}\n"
33
- out += "#{pref}.text:: #{text}\n"
38
+ out += "#{pref}.text:: #{text}\n" if text
34
39
  out
35
40
  end
36
41
  end
@@ -5,8 +5,8 @@ require "relaton_bib/contributor"
5
5
  module RelatonBib
6
6
  # Organization identifier.
7
7
  class OrgIdentifier
8
- ORCID = "orcid"
9
- URI = "uri"
8
+ # ORCID = "orcid"
9
+ # URI = "uri"
10
10
 
11
11
  # @return [String]
12
12
  attr_reader :type
@@ -14,12 +14,12 @@ module RelatonBib
14
14
  # @return [String]
15
15
  attr_reader :value
16
16
 
17
- # @param type [String] "orcid" or "uri"
17
+ # @param type [String]
18
18
  # @param value [String]
19
19
  def initialize(type, value)
20
- unless [ORCID, URI].include? type
21
- raise ArgumentError, 'Invalid type. It should be "orsid" or "uri".'
22
- end
20
+ # unless [ORCID, URI].include? type
21
+ # raise ArgumentError, 'Invalid type. It should be "orsid" or "uri".'
22
+ # end
23
23
 
24
24
  @type = type
25
25
  @value = value
@@ -82,7 +82,7 @@ module RelatonBib
82
82
  @subdivision = (args[:subdivision] || []).map do |sd|
83
83
  localized_string sd
84
84
  end
85
- @identifier = args.fetch(:identifier, [])
85
+ @identifier = args.fetch(:identifier, [])
86
86
  end
87
87
 
88
88
  # @param opts [Hash]
@@ -102,15 +102,17 @@ module RelatonBib
102
102
 
103
103
  # Person identifier type.
104
104
  module PersonIdentifierType
105
- ISNI = "isni"
106
- URI = "uri"
105
+ ISNI = "isni"
106
+ ORCID = "orcid"
107
+ URI = "uri"
107
108
 
108
109
  # Checks type.
109
110
  # @param type [String]
110
111
  # @raise [ArgumentError] if type isn't "isni" or "uri"
111
112
  def self.check(type)
112
- unless [ISNI, URI].include? type
113
- raise ArgumentError, 'Invalid type. It should be "isni" or "uri".'
113
+ unless [ISNI, ORCID, URI].include? type
114
+ raise ArgumentError, 'Invalid type. It should be "isni", "orcid", "\
115
+ "or "uri".'
114
116
  end
115
117
  end
116
118
  end
@@ -118,6 +120,7 @@ module RelatonBib
118
120
  # Person identifier.
119
121
  class PersonIdentifier
120
122
  # @return [RelatonBib::PersonIdentifierType::ISNI,
123
+ # RelatonBib::PersonIdentifierType::ORCID,
121
124
  # RelatonBib::PersonIdentifierType::URI]
122
125
  attr_accessor :type
123
126
 
@@ -125,6 +128,7 @@ module RelatonBib
125
128
  attr_accessor :value
126
129
 
127
130
  # @param type [RelatonBib::PersonIdentifierType::ISNI,
131
+ # RelatonBib::PersonIdentifierType::ORCID,
128
132
  # RelatonBib::PersonIdentifierType::URI]
129
133
  # @param value [String]
130
134
  def initialize(type, value)
@@ -5,7 +5,7 @@ module RelatonBib
5
5
  # Series class.
6
6
  #
7
7
  class Series
8
- TYPES = %w[main alt].freeze
8
+ # TYPES = %w[main alt].freeze
9
9
 
10
10
  # @return [String, NilClass] allowed values: "main" or "alt"
11
11
  attr_reader :type
@@ -56,9 +56,9 @@ module RelatonBib
56
56
  raise ArgumentError, "argument `title` or `formattedref` should present"
57
57
  end
58
58
 
59
- if args[:type] && !TYPES.include?(args[:type])
60
- warn "[relaton-bib] Series type is invalid: #{args[:type]}"
61
- end
59
+ # if args[:type] && !TYPES.include?(args[:type])
60
+ # warn "[relaton-bib] Series type is invalid: #{args[:type]}"
61
+ # end
62
62
 
63
63
  @type = args[:type] # if %w[main alt].include? args[:type]
64
64
  @title = args[:title]