puree 2.7.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9e2d38e9e15a3b7da9abc9cc7350783a2bb4953b580ebbc4316532e10cff8a0
4
- data.tar.gz: 68549513f64206b24c00fc0624584e27af33d98d95d33022c7af83c08cf7b5c8
3
+ metadata.gz: 0b91d7f85a6432c1233be1361c96669c94d88b17c32d5399bc8fcd0fc55c2c9b
4
+ data.tar.gz: 55eb39c43d50a7cf50e5297099ddcee1cd3471fa3679e3703063bfc6cb3215d1
5
5
  SHA512:
6
- metadata.gz: 47858f41df3685614811f02d9336c2b0c19c8f88d3e14b797bec0a1154f3d1de73dd9ea7e42aeb31f2dfd20105b8bb9f9c120be5081b94ef61ff832449878b5f
7
- data.tar.gz: 56dec4190827a75dc549af1cd7424146090efccbce1488a4996a585c0840e2d57c91196756f56227b598a1b4fa8b1cccee5fcf5c9388311f7643c4eb9d0ce685
6
+ metadata.gz: 91f7b09a0beaf0dc2badaea61ae558703ade237e906ec964a85ccec6bb8af45ed1ede6f8dd3fde74323d34749fbffa9dac7a02e8c1893c56eaacc970394fd377
7
+ data.tar.gz: 3102b9f34b06fa8ec08afd3dc47a1f0b914c0bbb6193fa7ce6f75c258e10f0454bb0cc6ada40fa60871da66f2adbf5f5ecc094b50a544bd9671415759f0a1250
@@ -2,6 +2,13 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## 2.8.0 2019-07-04
6
+ ### Changed
7
+ - For Pure API 514.
8
+
9
+ ### Added
10
+ - Person - other_names.
11
+
5
12
  ## 2.7.0 2019-06-06
6
13
  ### Changed
7
14
  - For Pure API 513.
data/README.md CHANGED
@@ -40,6 +40,7 @@ Purée version | Pure API version
40
40
  &gt;= 2.0, < 2.5 | 59, 510
41
41
  &gt;= 2.5, < 2.7 | 511, 512
42
42
  2.7 | 513
43
+ 2.8 | 514
43
44
 
44
45
  ## Extractor module
45
46
  ```ruby
@@ -26,6 +26,8 @@ module Puree
26
26
  # @return [String, nil]
27
27
  attr_accessor :orcid
28
28
 
29
+ # @return [Array<Model::PersonName>]
30
+ attr_accessor :other_names
29
31
  end
30
32
  end
31
33
  end
@@ -1,5 +1,5 @@
1
1
  module Puree
2
2
  # Semantic version number
3
3
  #
4
- VERSION = "2.7.0"
4
+ VERSION = "2.8.0"
5
5
  end
@@ -14,8 +14,8 @@ module Puree
14
14
  #
15
15
  # @return [String, nil]
16
16
  def xpath_query_for_single_value(path)
17
- xpath_result = xpath_query(path).text.strip
18
- xpath_result.empty? ? nil : xpath_result
17
+ xpath_result = xpath_query(path)
18
+ xpath_result.empty? ? nil : xpath_result.first.text.strip
19
19
  end
20
20
 
21
21
  # XPath search for multiple values, at a given path.
@@ -75,7 +75,7 @@ module Puree
75
75
  # @param xml [String]
76
76
  # @return [Hash{Symbol => Array<Puree::Model::ResearchOutput class/subclass>}]
77
77
  def self.research_outputs(xml)
78
- path_from_root = File.join 'result', '/*'
78
+ path_from_root = File.join 'result/items', '/*'
79
79
  doc = Nokogiri::XML xml
80
80
  doc.remove_namespaces!
81
81
  xpath_result = doc.xpath path_from_root
@@ -86,8 +86,9 @@ module Puree
86
86
  other: []
87
87
  }
88
88
  xpath_result.each do |research_output|
89
- type = research_output.xpath('type').text.strip
90
- unless type.empty?
89
+ xpath_result_type = research_output.xpath('types/type')
90
+ type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
91
+ if type
91
92
  case type
92
93
  when 'Journal article'
93
94
  extractor = Puree::XMLExtractor::JournalArticle.new research_output.to_s
@@ -127,7 +128,7 @@ module Puree
127
128
  def self.models(resource_type, xml, xpath_root)
128
129
  doc = Nokogiri::XML xml
129
130
  doc.remove_namespaces!
130
- path_from_root = File.join 'result', xpath_root
131
+ path_from_root = File.join 'result/items', xpath_root
131
132
  xpath_result = doc.xpath path_from_root
132
133
  data = []
133
134
  xpath_result.each do |i|
@@ -46,8 +46,8 @@ module Puree
46
46
  # doc['createdDate'] = d.xpath('createdDate').text.strip
47
47
  # doc['visibleOnPortalDate'] = d.xpath('visibleOnPortalDate').text.strip
48
48
  # doc['limitedVisibility'] = d.xpath('limitedVisibility').text.strip
49
- document_license = d.xpath('documentLicense')
50
- if !document_license.empty?
49
+ document_license = d.xpath('documentLicenses/documentLicense').first
50
+ if document_license
51
51
  license = Puree::Model::CopyrightLicense.new
52
52
  license.name = document_license.text.strip
53
53
  # license.name = document_license.xpath('term/localizedString').text.strip
@@ -88,7 +88,7 @@ module Puree
88
88
  # @return [Array<String>]
89
89
  def spatial_places
90
90
  # Data from free-form text box
91
- xpath_result = xpath_query '/geographicalCoverage'
91
+ xpath_result = xpath_query '/geographicalCoverages/geographicalCoverage'
92
92
  data = []
93
93
  xpath_result.each do |i|
94
94
  data << i.text.strip
@@ -14,7 +14,7 @@ module Puree
14
14
 
15
15
  # @return [String, nil]
16
16
  def name
17
- xpath_query_for_single_value '/name'
17
+ xpath_query_for_single_value '/names/name'
18
18
  end
19
19
 
20
20
  private
@@ -26,7 +26,8 @@ module Puree
26
26
  header = Puree::Model::JournalHeader.new
27
27
  header.title = xpath_result.xpath('title').text.strip
28
28
  journal = xpath_result.xpath('journal')
29
- header.type = journal.xpath('type').text.strip
29
+ xpath_result_type = journal.xpath('types/type')
30
+ header.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
30
31
  header.uuid = journal.attr('uuid').text.strip
31
32
  header
32
33
  end
@@ -8,7 +8,7 @@ module Puree
8
8
 
9
9
  # @return [String, nil]
10
10
  def description
11
- xpath_query_for_single_value '/abstract'
11
+ xpath_query_for_single_value '/abstracts/abstract'
12
12
  end
13
13
 
14
14
  end
@@ -8,7 +8,7 @@ module Puree
8
8
 
9
9
  # @return [String, nil]
10
10
  def description
11
- xpath_query_for_single_value '/description'
11
+ xpath_query_for_single_value '/descriptions/description'
12
12
  end
13
13
 
14
14
  end
@@ -12,7 +12,8 @@ module Puree
12
12
  if !xpath_result.empty?
13
13
  header = Puree::Model::EventHeader.new
14
14
  header.uuid = xpath_result.xpath('@uuid').text.strip
15
- header.title = xpath_result.xpath('name').text.strip
15
+ xpath_result_name = xpath_result.xpath('names/name')
16
+ header.title = xpath_result_name.first.text.strip unless xpath_result_name.empty?
16
17
  return header if header.data?
17
18
  end
18
19
  nil
@@ -32,7 +32,8 @@ module Puree
32
32
  name.first = i.xpath('name/firstName').text.strip
33
33
  name.last = i.xpath('name/lastName').text.strip
34
34
  person.name = name if name.data?
35
- person.role = i.xpath('personRole').text.strip
35
+ xpath_result_role = i.xpath('personRoles/personRole')
36
+ person.role = xpath_result_role.first.text.strip unless xpath_result_role.empty?
36
37
  arr << person if person.data?
37
38
  end
38
39
  end
@@ -10,13 +10,14 @@ module Puree
10
10
  # @return [Array<Puree::Model::RelatedContentHeader>]
11
11
  def projects
12
12
  xpath_result = xpath_query '/relatedProjects/relatedProject'
13
-
14
13
  data_arr = []
15
14
  xpath_result.each { |i|
16
15
  related = Puree::Model::RelatedContentHeader.new
17
- related.type = i.xpath('type').text.strip
18
- related.title = i.xpath('name').text.strip
19
16
  related.uuid = i.attr('uuid').strip
17
+ xpath_result_name = i.xpath('names/name')
18
+ related.title = xpath_result_name.first.text.strip unless xpath_result_name.empty?
19
+ xpath_result_type = i.xpath('types/type')
20
+ related.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
20
21
  data_arr << related
21
22
  }
22
23
  data_arr.uniq { |d| d.uuid }
@@ -11,8 +11,10 @@ module Puree
11
11
  xpath_result = xpath_query '/publisher'
12
12
  h = Puree::Model::PublisherHeader.new
13
13
  h.uuid = xpath_result.xpath('@uuid').text.strip
14
- h.name = xpath_result.xpath('name').text.strip
15
- h.type = xpath_result.xpath('type').text.strip
14
+ xpath_result_name = xpath_result.xpath('names/name')
15
+ h.name = xpath_result_name.first.text.strip unless xpath_result_name.empty?
16
+ xpath_result_type = xpath_result.xpath('types/type')
17
+ h.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
16
18
  h.data? ? h : nil
17
19
  end
18
20
 
@@ -13,9 +13,11 @@ module Puree
13
13
  data_arr = []
14
14
  xpath_result.each { |i|
15
15
  related = Puree::Model::RelatedContentHeader.new
16
- related.type = i.xpath('type').text.strip
17
- related.title = i.xpath('name').text.strip
18
16
  related.uuid = i.attr('uuid').strip
17
+ xpath_result_name = i.xpath('names/name')
18
+ related.title = xpath_result_name.first.text.strip unless xpath_result_name.empty?
19
+ xpath_result_type = i.xpath('types/type')
20
+ related.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
19
21
  data_arr << related
20
22
  }
21
23
  data_arr.uniq { |d| d.uuid }
@@ -8,7 +8,7 @@ module Puree
8
8
 
9
9
  # @return [String, nil]
10
10
  def title
11
- xpath_query_for_single_value '/title'
11
+ xpath_query_for_single_value '/titles/title'
12
12
  end
13
13
 
14
14
  end
@@ -8,7 +8,7 @@ module Puree
8
8
 
9
9
  # @return [String, nil]
10
10
  def type
11
- xpath_query_for_single_value '/type'
11
+ xpath_query_for_single_value '/types/type'
12
12
  end
13
13
 
14
14
  end
@@ -8,7 +8,7 @@ module Puree
8
8
 
9
9
  # @return [String, nil]
10
10
  def workflow
11
- xpath_query_for_single_value '/workflow'
11
+ xpath_query_for_single_value '/workflows/workflow'
12
12
  end
13
13
 
14
14
  end
@@ -25,8 +25,8 @@ module Puree
25
25
  a.postcode = postcode unless building.empty?
26
26
  city = xpath_result.xpath('city').text.strip
27
27
  a.city = city unless city.empty?
28
- country = xpath_result.xpath('country').text.strip
29
- a.country = country unless country.empty?
28
+ country = xpath_result.xpath('countries/country')
29
+ a.country = country.first.text.strip unless country.empty?
30
30
  a
31
31
  end
32
32
  end
@@ -38,7 +38,7 @@ module Puree
38
38
 
39
39
  # @return [String, nil]
40
40
  def name
41
- xpath_query_for_single_value '/name'
41
+ xpath_query_for_single_value '/names/name'
42
42
  end
43
43
 
44
44
  # First parent
@@ -57,6 +57,21 @@ module Puree
57
57
  xpath_query_for_single_value '/orcid'
58
58
  end
59
59
 
60
+ # @return [Array<Model::PersonName>]
61
+ def other_names
62
+ xpath_result = xpath_query '/nameVariants/nameVariant/name'
63
+ data = []
64
+ xpath_result.each do |d|
65
+ first = xpath_result.xpath('firstName').text.strip
66
+ last = xpath_result.xpath('lastName').text.strip
67
+ model = Puree::Model::PersonName.new
68
+ model.first = first unless first.empty?
69
+ model.last = last unless last.empty?
70
+ data << model
71
+ end
72
+ data.uniq
73
+ end
74
+
60
75
  private
61
76
 
62
77
  def xpath_root
@@ -72,6 +87,7 @@ module Puree
72
87
  @model.keywords = keywords
73
88
  @model.name = name
74
89
  @model.orcid = orcid
90
+ @model.other_names = other_names
75
91
  @model
76
92
  end
77
93
 
@@ -50,7 +50,7 @@ module Puree
50
50
 
51
51
  # @return [String, nil]
52
52
  def status
53
- xpath_query_for_single_value '/status'
53
+ xpath_query_for_single_value '/statuses/status'
54
54
  end
55
55
 
56
56
  # @return [Puree::Model::TemporalRange, nil]
@@ -23,12 +23,12 @@ module Puree
23
23
 
24
24
  # @return [String, nil]
25
25
  def bibliographical_note
26
- xpath_query_for_single_value('/bibliographicalNote')
26
+ xpath_query_for_single_value '/bibliographicalNotes/bibliographicalNote'
27
27
  end
28
28
 
29
29
  # @return [String, nil]
30
30
  def category
31
- xpath_query_for_single_value '/category'
31
+ xpath_query_for_single_value '/categories/category'
32
32
  end
33
33
 
34
34
  # Digital Object Identifier (first one, if many)
@@ -73,7 +73,7 @@ module Puree
73
73
 
74
74
  # @return [String, nil]
75
75
  def language
76
- xpath_query_for_single_value '/language'
76
+ xpath_query_for_single_value '/languages/language'
77
77
  end
78
78
 
79
79
  # @return [Array<String>, nil]
@@ -83,7 +83,7 @@ module Puree
83
83
 
84
84
  # @return [String, nil]
85
85
  def open_access_permission
86
- xpath_query_for_single_value '/openAccessPermission'
86
+ xpath_query_for_single_value '/openAccessPermissions/openAccessPermission'
87
87
  end
88
88
 
89
89
  # @return [Array<Puree::Model::EndeavourPerson>]
@@ -107,7 +107,7 @@ module Puree
107
107
  data = []
108
108
  xpath_result.each do |i|
109
109
  s = Puree::Model::PublicationStatus.new
110
- s.stage = i.xpath('publicationStatus').text.strip
110
+ s.stage = i.xpath('publicationStatuses/publicationStatus').text.strip
111
111
 
112
112
  ymd = {}
113
113
  ymd['year'] = i.xpath('publicationDate/year').text.strip
@@ -156,12 +156,12 @@ module Puree
156
156
 
157
157
  # @return [String, nil]
158
158
  def translated_subtitle
159
- xpath_query_for_single_value '/translatedSubTitle'
159
+ xpath_query_for_single_value '/translatedSubTitles/translatedSubTitle'
160
160
  end
161
161
 
162
162
  # @return [String, nil]
163
163
  def translated_title
164
- xpath_query_for_single_value '/translatedTitle'
164
+ xpath_query_for_single_value '/translatedTitles/translatedTitle'
165
165
  end
166
166
 
167
167
  private
@@ -10,8 +10,10 @@ module Puree
10
10
  def self.external_organisation_header(nokogiri_xml_element)
11
11
  h = Puree::Model::ExternalOrganisationHeader.new
12
12
  h.uuid = nokogiri_xml_element.xpath('@uuid').text.strip
13
- h.name = nokogiri_xml_element.xpath('name').text.strip
14
- h.type = nokogiri_xml_element.xpath('type').text.strip
13
+ xpath_result_name = nokogiri_xml_element.xpath('names/name')
14
+ h.name = xpath_result_name.first.text.strip unless xpath_result_name.empty?
15
+ xpath_result_type = nokogiri_xml_element.xpath('types/type')
16
+ h.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
15
17
  h.data? ? h : nil
16
18
  end
17
19
 
@@ -29,8 +31,10 @@ module Puree
29
31
  def self.organisation_header(nokogiri_xml_element)
30
32
  h = Puree::Model::OrganisationalUnitHeader.new
31
33
  h.uuid = nokogiri_xml_element.xpath('@uuid').text.strip
32
- h.name = nokogiri_xml_element.xpath('name').text.strip
33
- h.type = nokogiri_xml_element.xpath('type').text.strip
34
+ xpath_result_name = nokogiri_xml_element.xpath('names/name')
35
+ h.name = xpath_result_name.first.text.strip unless xpath_result_name.empty?
36
+ xpath_result_type = nokogiri_xml_element.xpath('types/type')
37
+ h.type = xpath_result_type.first.text.strip unless xpath_result_type.empty?
34
38
  h.data? ? h : nil
35
39
  end
36
40
 
@@ -27,7 +27,7 @@ module Puree
27
27
 
28
28
  # @return [String, nil]
29
29
  def qualification
30
- xpath_query_for_single_value '/qualification'
30
+ xpath_query_for_single_value('/qualifications/qualification')
31
31
  end
32
32
 
33
33
  # @return [Array<Puree::Model::ExternalOrganisationHeader>]
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.email = 'a.albin-clark@lancaster.ac.uk'
11
11
  spec.summary = %q{Metadata extraction from the Pure Research Information System.}
12
12
  spec.metadata = {
13
- 'source_code_uri' => 'https://github.com/lulibrary/puree',
14
- "documentation_uri" => "https://www.rubydoc.info/gems/puree/2.7.0",
13
+ 'source_code_uri' => "https://github.com/lulibrary/#{spec.name}",
14
+ "documentation_uri" => "https://www.rubydoc.info/gems/#{spec.name}/#{spec.version}",
15
15
  }
16
16
  spec.license = 'MIT'
17
17
  spec.files = `git ls-files -z`.split("\x0")
@@ -51,6 +51,10 @@ class TestXMLExtractorPerson < Minitest::Test
51
51
 
52
52
  assert_instance_of String, x.orcid
53
53
  refute_empty x.orcid
54
+
55
+ assert_instance_of Array, x.other_names
56
+ assert_instance_of Puree::Model::PersonName, x.other_names.first
57
+ assert x.other_names.first.data?
54
58
  end
55
59
 
56
60
  # def test_scopus_id
@@ -80,6 +84,9 @@ class TestXMLExtractorPerson < Minitest::Test
80
84
  assert_nil x.name
81
85
 
82
86
  assert_nil x.orcid
87
+
88
+ assert_instance_of Array, x.other_names
89
+ assert_empty x.other_names
83
90
  end
84
91
 
85
92
  def test_model
@@ -289,8 +289,12 @@ class TestXMLExtractorResearchOutput < Minitest::Test
289
289
  '<contributionToJournal>
290
290
  <relatedProjects>
291
291
  <relatedProject uuid="fe8aebdf-a926-4e7b-adf1-082425e50330">
292
- <name>The Language Bases of Reading Comprehension</name>
293
- <type uri="/dk/atira/pure/upmproject/upmprojecttypes/upmproject/research">Research</type>
292
+ <names>
293
+ <name>The Language Bases of Reading Comprehension</name>
294
+ </names>
295
+ <types>
296
+ <type uri="/dk/atira/pure/upmproject/upmprojecttypes/upmproject/research">Research</type>
297
+ </types>
294
298
  </relatedProject>
295
299
  </relatedProjects>
296
300
  </contributionToJournal>'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puree
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Albin-Clark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-06 00:00:00.000000000 Z
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -236,7 +236,7 @@ licenses:
236
236
  - MIT
237
237
  metadata:
238
238
  source_code_uri: https://github.com/lulibrary/puree
239
- documentation_uri: https://www.rubydoc.info/gems/puree/2.7.0
239
+ documentation_uri: https://www.rubydoc.info/gems/puree/2.8.0
240
240
  post_install_message:
241
241
  rdoc_options: []
242
242
  require_paths: