relaton-ccsds 1.14.0 → 1.16.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de41538113c775736c47d2c576b11e087fd965706cc356d14c29ec9b9ec49294
4
- data.tar.gz: 211bd83661e30589ae435885afc1fac89a9b336c2e9b0abfa4bae75dfcf9722f
3
+ metadata.gz: f0602ceadb233363fed871dd43d456cb6405f815dc2785be2f80b6a67aa703b1
4
+ data.tar.gz: 0a84d458511b7cd6348a6703d8ce577edf33fd81e10586d1e10a41f5dea1a1fe
5
5
  SHA512:
6
- metadata.gz: 602946077b688c1fbf035073d632a1d1abf2b1459261a40b72550b9b3bba7cdcd79bd9a3cbcff3188073ea5afeabee97396822c3b56fa3d1d1f47e4747fe3489
7
- data.tar.gz: 450a9e0b4fa07ebcd2bdd75637423fda646ae5dd3899b9ef5fb4063eb6e42fa861997938bb0f9829e076c71616bc6a0249241684838dcbd214fd60093dff011a
6
+ metadata.gz: 567d1816a6697be3b12fca33d370de62db7610dde78c2c0dca565c50b9f8702fd2c1cf4d9e2f05774caa4f94bd926707901c3891e89c72742da288f026489cbf
7
+ data.tar.gz: 3ea91fc332082907c86e00b162a2f30024084a5e17926d23bdb0534607dea7ff68ad9970a3b7a5ff4b7781e75dce52ac3509d0ab1f8a5c8f0a827181021e8ade
data/README.adoc CHANGED
@@ -43,7 +43,7 @@ item = hits[0].fetch
43
43
  [source,ruby]
44
44
  ----
45
45
  item.to_xml
46
- => "<bibitem id="CCSDS230.2-G-1" schema-version="v1.2.3">
46
+ => "<bibitem id="CCSDS230.2-G-1" schema-version="v1.2.4">
47
47
  <fetched>2023-08-25</fetched>
48
48
  <title format="text/plain" language="en" script="Latn">Next Generation Uplink</title>
49
49
  <uri type="pdf">https://public.ccsds.org/Pubs/230x2g1.pdf</uri>
@@ -55,7 +55,7 @@ With argument `bibdata: true` it outputs XML wrapped by `bibdata` element and ad
55
55
  [source,ruby]
56
56
  ----
57
57
  item.to_xml bibdata: true
58
- => "<bibdata schema-version="v1.2.3">
58
+ => "<bibdata schema-version="v1.2.4">
59
59
  <fetched>2023-08-25</fetched>
60
60
  <title format="text/plain" language="en" script="Latn">Next Generation Uplink</title>
61
61
  <uri type="pdf">https://public.ccsds.org/Pubs/230x2g1.pdf</uri>
@@ -120,7 +120,7 @@ RelatonCcsds::XMLParser.from_xml File.read('spec/fixtures/ccsds_230_2-g-1.xml')
120
120
  [source,ruby]
121
121
  ----
122
122
  hash = YAML.load_file 'spec/fixtures/ccsds_230_2-g-1.yaml'
123
- => {"schema-version"=>"v1.2.3",
123
+ => {"schema-version"=>"v1.2.4",
124
124
  "id"=>"CCSDS230.2-G-1",
125
125
  ...
126
126
 
data/grammars/biblio.rng CHANGED
@@ -1283,7 +1283,7 @@
1283
1283
  <value>mergedInto</value>
1284
1284
  <value>splits</value>
1285
1285
  <value>splitInto</value>
1286
- <value>instance</value>
1286
+ <value>instanceOf</value>
1287
1287
  <value>hasInstance</value>
1288
1288
  <value>exemplarOf</value>
1289
1289
  <value>hasExemplar</value>
@@ -37,7 +37,7 @@ module RelatonCcsds
37
37
  end
38
38
 
39
39
  # @return [Hash]
40
- def to_hash
40
+ def to_hash(embedded: false)
41
41
  hash = super
42
42
  if technology_area
43
43
  hash["ext"] ||= {}
@@ -15,6 +15,8 @@ module RelatonCcsds
15
15
  FileRef,ISO_x0020_Number,Patents,Extra_x0020_Link,Area,calHtmlColorCode&$filter=Book_x0020_Type%20eq%20%27Silver%20Book%27
16
16
  URL
17
17
 
18
+ TRRGX = /\s-\s\w+\sTranslated$/.freeze
19
+
18
20
  def initialize(output, format)
19
21
  @output = output
20
22
  @format = format
@@ -68,18 +70,64 @@ module RelatonCcsds
68
70
  end
69
71
 
70
72
  def save_bib(bib)
73
+ search_translation bib
71
74
  id = bib.docidentifier.first.id
72
- file = File.join @output, "#{id.gsub(/[.\s]+/, '-')}.#{@ext}"
73
- if @files.include? file
75
+ file = File.join @output, "#{id.gsub(/[.\s-]+/, '-')}.#{@ext}"
76
+ if @files.include?(file)
74
77
  puts "(#{file}) file already exists. Trying to merge links ..."
75
78
  merge_links bib, file
76
- else
77
- @files << file
79
+ else @files << file
78
80
  end
79
81
  File.write file, content(bib), encoding: "UTF-8"
80
82
  index.add_or_update id, file
81
83
  end
82
84
 
85
+ def search_translation(bib) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
86
+ bibid = bib.docidentifier.first.id.dup
87
+ if bibid.sub!(TRRGX, "")
88
+ index.search do |row|
89
+ id = row[:id].sub(TRRGX, "")
90
+ next if id != bibid || row[:id] == bib.docidentifier.first.id
91
+
92
+ create_translation_relation bib, row[:file]
93
+ end
94
+ else
95
+ index.search do |row|
96
+ next unless row[:id].match?(/^#{bibid}#{TRRGX}/)
97
+
98
+ create_instance_relation bib, row[:file]
99
+ end
100
+ end
101
+ end
102
+
103
+ def create_translation_relation(bib, file) # rubocop:disable Metrics/MethodLength
104
+ hash = YAML.load_file file
105
+ inst = BibliographicItem.from_hash hash
106
+ if inst.docidentifier.first.id.match?(TRRGX)
107
+ type1 = type2 = "hasTranslation"
108
+ else
109
+ type1 = "instanceOf"
110
+ type2 = "hasInstance"
111
+ end
112
+ create_relation(bib, inst, type1)
113
+ create_relation(inst, bib, type2)
114
+ File.write file, content(inst), encoding: "UTF-8"
115
+ end
116
+
117
+ def create_instance_relation(bib, file)
118
+ hash = YAML.load_file file
119
+ inst = BibliographicItem.from_hash hash
120
+ create_relation bib, inst, "hasInstance"
121
+ create_relation inst, bib, "instanceOf"
122
+ File.write file, content(inst), encoding: "UTF-8"
123
+ end
124
+
125
+ def create_relation(bib1, bib2, type)
126
+ fref = RelatonBib::FormattedRef.new content: bib2.docidentifier.first.id
127
+ rel = BibliographicItem.new docid: bib2.docidentifier, formattedref: fref
128
+ bib1.relation << RelatonBib::DocumentRelation.new(type: type, bibitem: rel)
129
+ end
130
+
83
131
  def merge_links(bib, file) # rubocop:disable Metrics/AbcSize
84
132
  hash = YAML.load_file file
85
133
  bib2 = BibliographicItem.from_hash hash
@@ -76,13 +76,13 @@ module RelatonCcsds
76
76
  end
77
77
 
78
78
  def parse_edition
79
- @doc["Issue_x0020_Number"]
79
+ @doc["Issue_x0020_Number"].match(/^\d+/)&.to_s
80
80
  end
81
81
 
82
82
  def parse_relation
83
83
  @docs.each_with_object(successor + adopted) do |d, a|
84
84
  id = docidentifier d["Document_x0020_Number"].strip
85
- type = relaton_type id
85
+ type = relation_type id
86
86
  next unless type
87
87
 
88
88
  a << create_relation(type, id)
@@ -104,12 +104,14 @@ module RelatonCcsds
104
104
  [create_relation("hasSuccessor", @successor.docidentifier[0].id)]
105
105
  end
106
106
 
107
- def relaton_type(rel_id)
108
- same = rel_id == docidentifier
109
- if rel_id.include?(docidentifier) && !same
110
- "hasEdition"
111
- elsif docidentifier.include?(rel_id) && !same
112
- "editionOf"
107
+ def relation_type(rel_id)
108
+ return if rel_id == docidentifier ||
109
+ rel_id.match(DataFetcher::TRRGX).to_s != docidentifier.match(DataFetcher::TRRGX).to_s
110
+
111
+ if rel_id.include?(docidentifier.sub(DataFetcher::TRRGX, ""))
112
+ "updatedBy"
113
+ elsif docidentifier.include?(rel_id.sub(DataFetcher::TRRGX, ""))
114
+ "updates"
113
115
  end
114
116
  end
115
117
 
@@ -54,7 +54,7 @@ module RelatonCcsds
54
54
  # Remove index file
55
55
  #
56
56
  def remove_index_file
57
- Relaton::Index.find_or_create(:CC, url: true, file: HitCollection::INDEX_FILE).remove_file
57
+ Relaton::Index.find_or_create(:ccsds, url: true, file: HitCollection::INDEX_FILE).remove_file
58
58
  end
59
59
  end
60
60
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonCcsds
4
- VERSION = "1.14.0"
4
+ VERSION = "1.16.0"
5
5
  end
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  # Uncomment to register a new dependency of your gem
27
27
  spec.add_dependency "mechanize", "~> 2.7"
28
- spec.add_dependency "relaton-bib", "~> 1.14.13"
28
+ spec.add_dependency "relaton-bib", "~> 1.16.0"
29
29
  spec.add_dependency "relaton-index", "~> 0.2.0"
30
30
 
31
31
  # For more information and examples about making a new gem, check out our
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-ccsds
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-26 00:00:00.000000000 Z
11
+ date: 2023-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.14.13
33
+ version: 1.16.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.14.13
40
+ version: 1.16.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: relaton-index
43
43
  requirement: !ruby/object:Gem::Requirement