adiwg-mdtranslator 2.0.0rc10 → 2.0.0rc11

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
  SHA1:
3
- metadata.gz: '0934464b5cb7ffa7244aa794417a3bb7ff01c082'
4
- data.tar.gz: dd47220a7cb46d796d611ea7adc23e9ecb77b976
3
+ metadata.gz: bbce410a9f43321f9019509cb844144ff5ca950b
4
+ data.tar.gz: b9576143da46802dda31de1d03b0f56c6049c3b1
5
5
  SHA512:
6
- metadata.gz: 4b6e2d96171f64e284fb9810bf8e030eafb2c41dc424b743b3aebc22f25cbefb7d5a6d87be8923cdbdf15a8162bdf2af78aaa887af93ce4a6ad3b1457e395802
7
- data.tar.gz: de8f49629d78349c068eb6ad4744d3c008ba94600e7d8d953f21dbdd8bf63d865aaf6dcefded23de666a5da9e9d155e57fe2f23863221eea2019e381e8f470d1
6
+ metadata.gz: c9c62887d1941434a579619e3bed5a691c77652e87280e7e667d2683ae6d6a0cdab75caba2af26e824c50e1ab906e89b3625ee089e2ec75858ea300dddd5ac5e
7
+ data.tar.gz: aeb48e161931209ec8a077d1509ea8072eebd0e95727dd2f0ab3a45be0a9f67626563428983135f05732937453e838f712b1be5d0dbbabd8a339e92d7a1e87a5
@@ -1,6 +1,8 @@
1
1
  # adiwg mdTranslator
2
2
 
3
3
  # version 2 history
4
+ # 2.0.0rc11 2017-06-08 apply changes to sbJson writer after second review session
5
+ # 2.0.0rc10 2017-06-05 apply changes to sbJson writer after review
4
6
  # 2.0.0rc9 2017-05-26 allow choice of which dictionary to translate
5
7
  # ... fix bug when no dictionary is provided in mdJson
6
8
  # ... add sbJson writer
@@ -16,7 +18,7 @@
16
18
  module ADIWG
17
19
  module Mdtranslator
18
20
  # current mdtranslator version
19
- VERSION = "2.0.0rc10"
21
+ VERSION = "2.0.0rc11"
20
22
  end
21
23
  end
22
24
 
@@ -33,7 +33,9 @@ module ADIWG
33
33
  budget[:fundingSources] = fundingSources
34
34
  end
35
35
 
36
- # year only
36
+ # give priority to ending dateTime
37
+ # write year only
38
+ # use fiscal year beginning October 1
37
39
  unless hFunding[:timePeriod].empty?
38
40
  unless hFunding[:timePeriod][:startDateTime].empty?
39
41
  startDateTime = hFunding[:timePeriod][:startDateTime][:dateTime]
@@ -41,9 +43,13 @@ module ADIWG
41
43
  unless hFunding[:timePeriod][:endDateTime].empty?
42
44
  endDateTime = hFunding[:timePeriod][:endDateTime][:dateTime]
43
45
  end
44
- dateTime = startDateTime.nil? ? endDateTime : startDateTime
46
+ dateTime = endDateTime.nil? ? startDateTime : endDateTime
45
47
  unless dateTime.nil?
46
- budget[:year] = AdiwgDateTimeFun.stringDateFromDateTime(dateTime, 'Y')
48
+ year = AdiwgDateTimeFun.stringDateFromDateTime(dateTime, 'Y')
49
+ if dateTime.month > 9
50
+ year.succ!
51
+ end
52
+ budget[:year] = year
47
53
  end
48
54
  end
49
55
 
@@ -94,22 +94,38 @@ module ADIWG
94
94
  ]
95
95
 
96
96
  @iso_sb_date = [
97
- {iso: 'creation', sb: 'Creation'},
97
+ {iso: 'creation', sb: 'creation'},
98
98
  {iso: 'publication', sb: 'Publication'},
99
- {iso: 'revision', sb: 'Revision'},
99
+ {iso: 'revision', sb: 'revision'},
100
100
  {iso: 'expiry', sb: nil},
101
101
  {iso: 'lastUpdate', sb: 'lastUpdate'},
102
102
  {iso: 'lastRevision', sb: 'lastRevision'},
103
103
  {iso: 'nextUpdate', sb: 'nextUpdate'},
104
104
  {iso: 'unavailable', sb: 'unavailable'},
105
105
  {iso: 'inForce', sb: 'inForce'},
106
- {iso: 'adopted', sb: 'adopted'},
106
+ {iso: 'adopted', sb: 'Adopted'},
107
107
  {iso: 'deprecated', sb: 'deprecated'},
108
108
  {iso: 'suspended', sb: 'suspended'},
109
109
  {iso: 'validityBegins', sb: 'validityBegins'},
110
110
  {iso: 'validityExpires', sb: 'validityExpires'},
111
111
  {iso: 'released', sb: 'Release'},
112
- {iso: 'distribution', sb: 'date identifiers when an instance of the resource was distributed'}
112
+ {iso: 'distribution', sb: 'distribution'},
113
+ {iso: 'acquisition', sb: 'Acquisition'},
114
+ {iso: 'assessment', sb: 'AssessmentDate'},
115
+ {iso: 'award', sb: 'Award'},
116
+ {iso: nil, sb: 'beginPosition'},
117
+ {iso: 'collected', sb: 'Collected'},
118
+ {iso: 'deprecated', sb: 'deprecated'},
119
+ {iso: 'due', sb: 'Due'},
120
+ {iso: 'end', sb: 'End'},
121
+ {iso: nil, sb: 'endPosition'},
122
+ {iso: nil, sb: 'Info'},
123
+ {iso: 'received', sb: 'Received'},
124
+ {iso: 'reported', sb: 'Reported'},
125
+ {iso: nil, sb: 'Repository Created'},
126
+ {iso: nil, sb: 'Repository Updated'},
127
+ {iso: 'start', sb: 'Start'},
128
+ {iso: 'transmitted', sb: 'Transmitted'}
113
129
  ]
114
130
 
115
131
  @iso_sb_progress = [
@@ -12,16 +12,48 @@ module ADIWG
12
12
 
13
13
  module Date
14
14
 
15
- def self.build(hCitation)
15
+ def self.build(hResource)
16
16
 
17
17
  aDates = []
18
+ hCitation = hResource[:citation]
18
19
 
19
- hCitation[:dates].each do |hDate|
20
- sbDate = {}
21
- sbDate[:type] = Codelists.codelist_iso_to_sb('iso_sb_date', :isoCode => hDate[:dateType])
22
- sbDate[:dateString] = AdiwgDateTimeFun.stringFromDateObject(hDate)
23
- sbDate[:label] = hDate[:description] unless hDate[:description].nil?
24
- aDates << sbDate unless sbDate[:type].nil?
20
+ # add citation dates to sbJson dates
21
+ unless hCitation.empty?
22
+ hCitation[:dates].each do |hDate|
23
+ sbDate = {}
24
+ dateType = Codelists.codelist_iso_to_sb('iso_sb_date', :isoCode => hDate[:dateType])
25
+
26
+ # if iso date codes does not map to scienceBase use type = 'Info'
27
+ if dateType.nil?
28
+ sbDate[:type] = 'Info'
29
+ sbDate[:dateString] = AdiwgDateTimeFun.stringFromDateObject(hDate)
30
+ sbDate[:label] = hDate[:dateType]
31
+ else
32
+ sbDate[:type] = dateType
33
+ sbDate[:dateString] = AdiwgDateTimeFun.stringFromDateObject(hDate)
34
+ sbDate[:label] = hDate[:description] unless hDate[:description].nil?
35
+ end
36
+
37
+ aDates << sbDate
38
+ end
39
+ end
40
+
41
+ # add resource timePeriod dates to sbJson dates
42
+ unless hResource[:timePeriod].empty?
43
+ unless hResource[:timePeriod][:startDateTime].empty?
44
+ sbDate = {}
45
+ sbDate[:type] = 'Start'
46
+ sbDate[:dateString] = AdiwgDateTimeFun.stringFromDateObject(hResource[:timePeriod][:startDateTime])
47
+ sbDate[:label] = hResource[:timePeriod][:description] unless hResource[:timePeriod][:description].nil?
48
+ aDates << sbDate
49
+ end
50
+ unless hResource[:timePeriod][:endDateTime].empty?
51
+ sbDate = {}
52
+ sbDate[:type] = 'End'
53
+ sbDate[:dateString] = AdiwgDateTimeFun.stringFromDateObject(hResource[:timePeriod][:endDateTime])
54
+ sbDate[:label] = hResource[:timePeriod][:description] unless hResource[:timePeriod][:description].nil?
55
+ aDates << sbDate
56
+ end
25
57
  end
26
58
 
27
59
  if aDates.empty?
@@ -10,18 +10,63 @@ module ADIWG
10
10
 
11
11
  module GeographicExtent
12
12
 
13
+ def self.new_collection
14
+ {
15
+ 'type' => 'FeatureCollection',
16
+ 'features' => []
17
+ }
18
+ end
19
+
20
+ def self.new_feature
21
+ {
22
+ 'type' => 'Feature',
23
+ 'geometry' => {}
24
+ }
25
+ end
26
+
13
27
  def self.build(aExtents)
14
28
 
15
- aGeoExtents = []
29
+ aFeatureCollection = []
16
30
 
17
31
  # gather geographicExtents geoJson blocks
18
32
  aExtents.each do |hExtent|
19
33
  hExtent[:geographicExtents].each do |hGeoExtent|
20
- aGeoExtents << hGeoExtent[:nativeGeoJson]
34
+
35
+ collection = new_collection()
36
+ hGeoExtent[:nativeGeoJson].each do |hGeoObj|
37
+
38
+ case hGeoObj['type']
39
+ when 'Point', 'LineString', 'Polygon', 'MultiPoint', 'MultiLineString', 'MultiPolygon'
40
+ feature = new_feature()
41
+ feature['geometry'] = hGeoObj
42
+ collection['features'] << feature
43
+
44
+ when 'GeometryCollection'
45
+ geoCollection = new_collection()
46
+ hGeoObj['geometries'].each do |hGeometry|
47
+ feature = new_feature()
48
+ feature['geometry'] = hGeometry
49
+ geoCollection['features'] << feature
50
+ end
51
+ aFeatureCollection << geoCollection
52
+
53
+ when 'Feature'
54
+ collection['features'] << hGeoObj
55
+
56
+ when 'FeatureCollection'
57
+ aFeatureCollection << hGeoObj
58
+ end
59
+
60
+ end
61
+
62
+ unless collection['features'].empty?
63
+ aFeatureCollection << collection
64
+ end
65
+
21
66
  end
22
67
  end
23
68
 
24
- aGeoExtents
69
+ aFeatureCollection
25
70
 
26
71
  end
27
72
 
@@ -17,8 +17,9 @@ module ADIWG
17
17
  aRepositories.each do |hRepo|
18
18
  if hRepo[:repository] == 'data.gov'
19
19
  repository[:repository] = hRepo[:repository]
20
- repository[:title] = 'Data.gov'
20
+ repository[:title] = 'Data.gov' # default
21
21
  unless hRepo[:citation].empty?
22
+ repository[:title] = hRepo[:citation][:title] unless hRepo[:citation][:title].nil?
22
23
  unless hRepo[:citation][:identifiers].empty?
23
24
  repository[:identifier] = hRepo[:citation][:identifiers][0][:identifier]
24
25
  end
@@ -33,6 +33,13 @@ module ADIWG
33
33
  series = hCitation[:series]
34
34
  hPublication[:journal] = series[:seriesName] unless series[:seriesName].nil?
35
35
  hPublication[:edition] = series[:seriesIssue] unless series[:seriesIssue].nil?
36
+ unless series[:issuePage].nil?
37
+ hPublication[:parts] = []
38
+ part = {}
39
+ part[:type] = 'Page Number'
40
+ part[:value] = series[:issuePage]
41
+ hPublication[:parts] << part
42
+ end
36
43
  end
37
44
  end
38
45
  unless hResource[:defaultResourceLocale].empty?
@@ -55,7 +55,7 @@ module ADIWG
55
55
  json.webLinks WebLink.build(intObj[:metadata])
56
56
  json.browseCategories BrowseCategory.build(resourceInfo[:resourceTypes])
57
57
  json.tags Tag.build(resourceInfo)
58
- json.dates Date.build(hCitation) unless hCitation.empty?
58
+ json.dates Date.build(resourceInfo) unless resourceInfo.empty?
59
59
  json.spatial Spatial.build(resourceInfo[:extents]) unless resourceInfo[:extents].empty?
60
60
  json.facets Facet.build(intObj[:metadata])
61
61
  json.metadataRepository Repository.build(intObj[:metadataRepositories]) unless intObj[:metadataRepositories].empty?
@@ -12,30 +12,48 @@ module ADIWG
12
12
 
13
13
  def self.build(aExtents)
14
14
 
15
- spatial = {}
16
15
  aBoxObjects = []
17
16
 
18
17
  aExtents.each do |hExtent|
19
18
  hExtent[:geographicExtents].each do |hGeoExtent|
20
- hBbox = hGeoExtent[:computedBbox]
21
- sw = [ hBbox[:westLongitude], hBbox[:southLatitude] ]
22
- nw = [ hBbox[:westLongitude], hBbox[:northLatitude] ]
23
- ne = [ hBbox[:eastLongitude], hBbox[:northLatitude] ]
24
- se = [ hBbox[:eastLongitude], hBbox[:southLatitude] ]
25
- aPoly = [ sw, nw, ne, se ]
26
- geoJson = {
27
- type: 'Polygon',
28
- coordinates: [
29
- aPoly
30
- ]
31
- }
32
- aBoxObjects << geoJson
19
+ # use computedBbox if exists
20
+ # ... this is always exists if geographic extent has objects
21
+ # otherwise use user provided boundingBox
22
+ hBbox = {}
23
+ if hGeoExtent[:computedBbox].empty?
24
+ unless hGeoExtent[:boundingBox].empty?
25
+ hBbox = hGeoExtent[:boundingBox]
26
+ end
27
+ else
28
+ hBbox = hGeoExtent[:computedBbox]
29
+ end
30
+
31
+ # turn the box into a polygon
32
+ unless hBbox.empty?
33
+ sw = [ hBbox[:westLongitude], hBbox[:southLatitude] ]
34
+ nw = [ hBbox[:westLongitude], hBbox[:northLatitude] ]
35
+ ne = [ hBbox[:eastLongitude], hBbox[:northLatitude] ]
36
+ se = [ hBbox[:eastLongitude], hBbox[:southLatitude] ]
37
+ aPoly = [ sw, nw, ne, se ]
38
+ geoJson = {
39
+ type: 'Polygon',
40
+ coordinates: [
41
+ aPoly
42
+ ]
43
+ }
44
+ aBoxObjects << geoJson
45
+ end
46
+
33
47
  end
34
48
  end
35
49
 
50
+ spatial = {}
51
+
36
52
  unless aBoxObjects.empty?
37
53
  hBox = AdiwgCoordinates.computeBbox(aBoxObjects)
38
54
  sbBox = {}
55
+
56
+ # transform to sbJson bbox format
39
57
  sbBox[:maxY] = hBox[:northLatitude]
40
58
  sbBox[:minY] = hBox[:southLatitude]
41
59
  sbBox[:maxX] = hBox[:eastLongitude]
@@ -43,7 +61,7 @@ module ADIWG
43
61
  spatial[:boundingBox] = sbBox
44
62
  end
45
63
 
46
- # representational point is not computed
64
+ # sbJson representational point is not provided
47
65
 
48
66
  spatial
49
67
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adiwg-mdtranslator
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0rc10
4
+ version: 2.0.0rc11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-07 00:00:00.000000000 Z
12
+ date: 2017-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -624,7 +624,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
624
624
  version: 1.3.1
625
625
  requirements: []
626
626
  rubyforge_project:
627
- rubygems_version: 2.5.2
627
+ rubygems_version: 2.6.8
628
628
  signing_key:
629
629
  specification_version: 4
630
630
  summary: The mdtranslator (metadata translator) is a tool for translating metadata