puree 1.3.0 → 1.4.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
  SHA1:
3
- metadata.gz: 5aa6af3718ebb33cd7b19ef9142cb73b4a5d0f5c
4
- data.tar.gz: b0c01d0104f64d84b9b28a8fca142d9c6fec9165
3
+ metadata.gz: 3f4b875fcc3fc9d0c03faf62d20332c2be02b8c7
4
+ data.tar.gz: eacdf05a1625cda281f653009389b16dc2d10822
5
5
  SHA512:
6
- metadata.gz: a3772603849fb583fcbcc48b9d2343d06c64d17fc2d239d687556e7579804704e1b498cf568285ac49d3bd96669077644a80df3725fae21ed6a39a9fe2b4d85f
7
- data.tar.gz: f5906459dedcc2ce1693e6d33d862b300196c4bc551c9bfec2e24b946fae4eacd2ac494e7a7ee8f918a3892708e317ab0ff4ee160496d4f5e30915aa21ed573c
6
+ metadata.gz: d644dbf426c9137f442e14b385b9535d9f65e4fd90c5bc24eb1417416d169b867f6aa828d16d44ffb95e7b39e2a49462a95aaff79b322c5385d30ae493afe25c
7
+ data.tar.gz: 9f40cdd393fb7606d55431c9de9ff68db7ee2341234997e48db252ec240a6fc50a55282ffb120820485379c69aa5e3d83f7f35d0c9c50dfc48adfe875250e508
@@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
5
5
  ## Unreleased
6
6
  - Metadata: activity?, clipping?, externalPerson?
7
7
 
8
+ ## 1.4.0 - 2017-09-01
9
+ - Project - external_organisations, funded.
10
+ - Publication - associated, external_organisations.
11
+
8
12
  ## 1.3.0 - 2017-04-03
9
13
  ### Added
10
14
  - Publication type - JournalArticle, Paper, ConferencePaper.
@@ -6,6 +6,14 @@ require 'puree/version'
6
6
  require 'puree/util/date'
7
7
  require 'puree/util/string'
8
8
 
9
+ require 'puree/xml_extractor/mixins/associated_mixin'
10
+ require 'puree/xml_extractor/mixins/doi_mixin'
11
+ require 'puree/xml_extractor/mixins/event_mixin'
12
+ require 'puree/xml_extractor/mixins/external_organisations_mixin'
13
+ require 'puree/xml_extractor/mixins/pages_mixin'
14
+ require 'puree/xml_extractor/mixins/page_range_mixin'
15
+ require 'puree/xml_extractor/mixins/peer_reviewed_mixin'
16
+
9
17
  require 'puree/xml_extractor/shared'
10
18
  require 'puree/xml_extractor/base'
11
19
  require 'puree/xml_extractor/collection'
@@ -18,11 +26,6 @@ require 'puree/xml_extractor/organisation'
18
26
  require 'puree/xml_extractor/person'
19
27
  require 'puree/xml_extractor/project'
20
28
 
21
- require 'puree/xml_extractor/mixins/doi_mixin'
22
- require 'puree/xml_extractor/mixins/event_mixin'
23
- require 'puree/xml_extractor/mixins/pages_mixin'
24
- require 'puree/xml_extractor/mixins/page_range_mixin'
25
- require 'puree/xml_extractor/mixins/peer_reviewed_mixin'
26
29
  require 'puree/xml_extractor/publication'
27
30
  require 'puree/xml_extractor/thesis'
28
31
  require 'puree/xml_extractor/doctoral_thesis'
@@ -71,6 +74,7 @@ require 'puree/model/spatial_point'
71
74
  require 'puree/model/address'
72
75
  require 'puree/model/copyright_license'
73
76
  require 'puree/model/event_header'
77
+ require 'puree/model/external_organisation_header'
74
78
  require 'puree/model/file'
75
79
  require 'puree/model/legal_condition'
76
80
  require 'puree/model/organisation_header'
@@ -9,7 +9,7 @@ module Puree
9
9
  # @option (see Puree::Extractor::Resource#initialize)
10
10
  def initialize(config)
11
11
  super
12
- @latest_api = false # stable API does not return person roles
12
+ @latest_api = false # current API does not return person roles
13
13
  setup :project
14
14
  end
15
15
 
@@ -18,7 +18,10 @@ module Puree
18
18
  def combine_metadata
19
19
  super
20
20
  @model.acronym = @extractor.acronym
21
+ # @model.associated = @extractor.associated # not present in stable API
21
22
  @model.description = @extractor.description
23
+ @model.external_organisations = @extractor.external_organisations
24
+ @model.funded = @extractor.funded?
22
25
  @model.organisations = @extractor.organisations
23
26
  @model.owner = @extractor.owner
24
27
  @model.persons_internal = @extractor.persons_internal
@@ -17,10 +17,12 @@ module Puree
17
17
  def combine_metadata
18
18
  super
19
19
 
20
+ @model.associated = @extractor.associated
20
21
  @model.bibliographical_note = @extractor.bibliographical_note
21
22
  @model.category = @extractor.category
22
23
  @model.description = @extractor.description
23
24
  @model.dois = @extractor.dois
25
+ @model.external_organisations = @extractor.external_organisations
24
26
  @model.files = @extractor.files
25
27
  @model.keywords = @extractor.keywords
26
28
  @model.language = @extractor.language
@@ -0,0 +1,26 @@
1
+ module Puree
2
+ module Model
3
+
4
+ # A minimal representation of an ExternalOrganisation.
5
+ #
6
+ class ExternalOrganisationHeader < Puree::Model::Structure
7
+
8
+ # @return [String, nil]
9
+ attr_reader :uuid
10
+
11
+ # @return [String, nil]
12
+ attr_reader :name
13
+
14
+ # @param v [String]
15
+ def uuid=(v)
16
+ @uuid = v if v && !v.empty?
17
+ end
18
+
19
+ # @param v [String]
20
+ def name=(v)
21
+ @name = v if v && !v.empty?
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -8,9 +8,19 @@ module Puree
8
8
  # @return [String, nil]
9
9
  attr_accessor :acronym
10
10
 
11
+ # not present in stable API
12
+ # @return [Array<Puree::Model::RelatedContentHeader>]
13
+ # attr_accessor :associated
14
+
11
15
  # @return [String, nil]
12
16
  attr_accessor :description
13
17
 
18
+ # @return [Array<Puree::Model::ExternalOrganisationHeader>]
19
+ attr_accessor :external_organisations
20
+
21
+ # @return [Boolean]
22
+ attr_accessor :funded
23
+
14
24
  # @return [Array<Puree::Model::OrganisationHeader>]
15
25
  attr_accessor :organisations
16
26
 
@@ -5,6 +5,9 @@ module Puree
5
5
  #
6
6
  class Publication < Resource
7
7
 
8
+ # @return [Array<Puree::Model::RelatedContentHeader>]
9
+ attr_accessor :associated
10
+
8
11
  # @return [String, nil]
9
12
  attr_accessor :bibliographical_note
10
13
 
@@ -17,6 +20,9 @@ module Puree
17
20
  # @return [Array<String>]
18
21
  attr_accessor :dois
19
22
 
23
+ # @return [Array<Puree::Model::ExternalOrganisationHeader>]
24
+ attr_accessor :external_organisations
25
+
20
26
  # @return [Array<Puree::Model::File>]
21
27
  attr_accessor :files
22
28
 
@@ -1,5 +1,5 @@
1
1
  module Puree
2
2
  # Semantic version number
3
3
  #
4
- VERSION = "1.3.0"
4
+ VERSION = "1.4.0"
5
5
  end
@@ -5,6 +5,7 @@ module Puree
5
5
  # Dataset XML extractor.
6
6
  #
7
7
  class Dataset < Puree::XMLExtractor::Resource
8
+ include Puree::XMLExtractor::AssociatedMixin
8
9
 
9
10
  def initialize(xml:)
10
11
  super
@@ -17,21 +18,6 @@ module Puree
17
18
  xpath_query_for_single_value '/openAccessPermission/term/localizedString'
18
19
  end
19
20
 
20
- # Combines projects and publications
21
- # @return [Array<Puree::Model::RelatedContentHeader>]
22
- def associated
23
- xpath_result = xpath_query '/associatedContent/relatedContent'
24
- data_arr = []
25
- xpath_result.each { |i|
26
- related = Puree::Model::RelatedContentHeader.new
27
- related.type = i.xpath('typeClassification').text.strip
28
- related.title = i.xpath('title').text.strip
29
- related.uuid = i.attr('uuid').strip
30
- data_arr << related
31
- }
32
- data_arr.uniq { |d| d.uuid }
33
- end
34
-
35
21
  # Date made available
36
22
  # @return [Time, nil]
37
23
  def available
@@ -0,0 +1,27 @@
1
+ module Puree
2
+
3
+ module XMLExtractor
4
+
5
+ # Associated extractor mixin.
6
+ #
7
+ module AssociatedMixin
8
+
9
+ # Combines projects and publications
10
+ # @return [Array<Puree::Model::RelatedContentHeader>]
11
+ def associated
12
+ xpath_result = xpath_query '/associatedContent/relatedContent'
13
+ data_arr = []
14
+ xpath_result.each { |i|
15
+ related = Puree::Model::RelatedContentHeader.new
16
+ related.type = i.xpath('typeClassification').text.strip
17
+ related.title = i.xpath('title').text.strip
18
+ related.uuid = i.attr('uuid').strip
19
+ data_arr << related
20
+ }
21
+ data_arr.uniq { |d| d.uuid }
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ module Puree
2
+
3
+ module XMLExtractor
4
+
5
+ # External organisations extractor mixin.
6
+ #
7
+ module ExternalOrganisationsMixin
8
+
9
+ # @return [Array<Puree::Model::ExternalOrganisationHeader>]
10
+ def external_organisations
11
+ xpath_result = xpath_query '/associatedExternalOrganisations/externalOrganisation'
12
+ Puree::XMLExtractor::Shared.external_organisation_multi_header xpath_result
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+ end
@@ -5,6 +5,8 @@ module Puree
5
5
  # Project XML extractor.
6
6
  #
7
7
  class Project < Puree::XMLExtractor::Resource
8
+ # include Puree::XMLExtractor::AssociatedMixin # not present in stable API
9
+ include Puree::XMLExtractor::ExternalOrganisationsMixin
8
10
 
9
11
  def initialize(xml:)
10
12
  super
@@ -21,6 +23,13 @@ module Puree
21
23
  xpath_query_for_single_value '/description/localizedString'
22
24
  end
23
25
 
26
+ # @return [Boolean]
27
+ def funded?
28
+ xpath_result = xpath_query_for_single_value '/type'
29
+ return false if xpath_result.downcase.include? 'nonfunded'
30
+ true
31
+ end
32
+
24
33
  # @return [Array<Puree::Model::OrganisationHeader>]
25
34
  def organisations
26
35
  xpath_result = xpath_query '/organisations/association/organisation'
@@ -5,6 +5,8 @@ module Puree
5
5
  # Publication XML extractor.
6
6
  #
7
7
  class Publication < Puree::XMLExtractor::Resource
8
+ include Puree::XMLExtractor::AssociatedMixin
9
+ include Puree::XMLExtractor::ExternalOrganisationsMixin
8
10
 
9
11
  def initialize(xml:)
10
12
  @resource_type = :publication
@@ -6,6 +6,23 @@ module Puree
6
6
  #
7
7
  module Shared
8
8
 
9
+ # @return [Puree::Model::ExternalOrganisationHeader]
10
+ def self.external_organisation_header(nokogiri_xml_element)
11
+ h = Puree::Model::ExternalOrganisationHeader.new
12
+ h.uuid = nokogiri_xml_element.xpath('@uuid').text.strip
13
+ h.name = nokogiri_xml_element.xpath('name').text.strip
14
+ h
15
+ end
16
+
17
+ # @return [Array<Puree::Model::ExternalOrganisationHeader>]
18
+ def self.external_organisation_multi_header(nokogiri_xml_nodeset)
19
+ data = []
20
+ nokogiri_xml_nodeset.each do |i|
21
+ data << external_organisation_header(i)
22
+ end
23
+ data.uniq { |d| d.uuid }
24
+ end
25
+
9
26
  # @return [Puree::Model::OrganisationHeader]
10
27
  def self.organisation_header(nokogiri_xml_element)
11
28
  h = Puree::Model::OrganisationHeader.new
@@ -23,10 +23,23 @@ describe 'Project' do
23
23
  expect(@p.acronym).to be_a String if @p.acronym
24
24
  end
25
25
 
26
+ # not present in stable API
27
+ # it '#associated' do
28
+ # expect(@p.associated).to all( be_a Puree::Model::RelatedContentHeader )
29
+ # end
30
+
26
31
  it '#description' do
27
32
  expect(@p.description).to be_a String if @p.description
28
33
  end
29
34
 
35
+ it '#external_organisations' do
36
+ expect(@p.external_organisations).to all( be_a Puree::Model::ExternalOrganisationHeader )
37
+ end
38
+
39
+ it '#funded' do
40
+ expect(@p.funded).to be(true).or be(false)
41
+ end
42
+
30
43
  it '#organisations' do
31
44
  expect(@p.organisations).to all( be_a Puree::Model::OrganisationHeader )
32
45
  end
@@ -17,6 +17,14 @@ describe 'Publication' do
17
17
  expect(@p).to be_a Puree::Model::Publication
18
18
  end
19
19
 
20
+ it '#associated' do
21
+ expect(@p.associated).to all( be_a Puree::Model::RelatedContentHeader )
22
+ end
23
+
24
+ it '#bibliographical_note' do
25
+ expect(@p.bibliographical_note).to be_a String if @p.bibliographical_note
26
+ end
27
+
20
28
  it '#category' do
21
29
  expect(@p.category).to be_a String if @p.category
22
30
  end
@@ -25,10 +33,30 @@ describe 'Publication' do
25
33
  expect(@p.description).to be_a String if @p.description
26
34
  end
27
35
 
36
+ it '#dois' do
37
+ expect(@p.dois).to all( be_a String )
38
+ end
39
+
40
+ it '#external_organisations' do
41
+ expect(@p.external_organisations).to all( be_a Puree::Model::ExternalOrganisationHeader )
42
+ end
43
+
28
44
  it '#files' do
29
45
  expect(@p.files).to all( be_a Puree::Model::File )
30
46
  end
31
47
 
48
+ it '#keywords' do
49
+ expect(@p.keywords).to all( be_a String )
50
+ end
51
+
52
+ it '#language' do
53
+ expect(@p.language).to be_a String if @p.language
54
+ end
55
+
56
+ it '#links' do
57
+ expect(@p.links).to all( be_a String )
58
+ end
59
+
32
60
  it '#organisations' do
33
61
  expect(@p.organisations).to all( be_a Puree::Model::OrganisationHeader )
34
62
  end
@@ -49,6 +77,14 @@ describe 'Publication' do
49
77
  expect(@p.persons_other).to all( be_a Puree::Model::EndeavourPerson )
50
78
  end
51
79
 
80
+ it '#publication_place' do
81
+ expect(@p.publication_place).to be_a String if @p.publication_place
82
+ end
83
+
84
+ it '#publisher' do
85
+ expect(@p.publisher).to be_a String if @p.publisher
86
+ end
87
+
52
88
  it '#statuses' do
53
89
  expect(@p.statuses).to all( be_a Puree::Model::PublicationStatus )
54
90
  end
@@ -61,14 +97,14 @@ describe 'Publication' do
61
97
  expect(@p.title).to be_a String if @p.title
62
98
  end
63
99
 
64
- it '#translated_title' do
65
- expect(@p.translated_title).to be_a String if @p.translated_title
66
- end
67
-
68
100
  it '#translated_subtitle' do
69
101
  expect(@p.translated_subtitle).to be_a String if @p.translated_subtitle
70
102
  end
71
103
 
104
+ it '#translated_title' do
105
+ expect(@p.translated_title).to be_a String if @p.translated_title
106
+ end
107
+
72
108
  it '#type' do
73
109
  expect(@p.type).to be_a String if @p.type
74
110
  end
@@ -6,6 +6,14 @@ require 'puree/version'
6
6
  require 'puree/util/date'
7
7
  require 'puree/util/string'
8
8
 
9
+ require 'puree/xml_extractor/mixins/associated_mixin'
10
+ require 'puree/xml_extractor/mixins/doi_mixin'
11
+ require 'puree/xml_extractor/mixins/event_mixin'
12
+ require 'puree/xml_extractor/mixins/external_organisations_mixin'
13
+ require 'puree/xml_extractor/mixins/pages_mixin'
14
+ require 'puree/xml_extractor/mixins/page_range_mixin'
15
+ require 'puree/xml_extractor/mixins/peer_reviewed_mixin'
16
+
9
17
  require 'puree/xml_extractor/shared'
10
18
  require 'puree/xml_extractor/base'
11
19
  require 'puree/xml_extractor/collection'
@@ -18,11 +26,6 @@ require 'puree/xml_extractor/organisation'
18
26
  require 'puree/xml_extractor/person'
19
27
  require 'puree/xml_extractor/project'
20
28
 
21
- require 'puree/xml_extractor/mixins/doi_mixin'
22
- require 'puree/xml_extractor/mixins/event_mixin'
23
- require 'puree/xml_extractor/mixins/pages_mixin'
24
- require 'puree/xml_extractor/mixins/page_range_mixin'
25
- require 'puree/xml_extractor/mixins/peer_reviewed_mixin'
26
29
  require 'puree/xml_extractor/publication'
27
30
  require 'puree/xml_extractor/thesis'
28
31
  require 'puree/xml_extractor/doctoral_thesis'
@@ -71,6 +74,7 @@ require 'puree/model/spatial_point'
71
74
  require 'puree/model/address'
72
75
  require 'puree/model/copyright_license'
73
76
  require 'puree/model/event_header'
77
+ require 'puree/model/external_organisation_header'
74
78
  require 'puree/model/file'
75
79
  require 'puree/model/legal_condition'
76
80
  require 'puree/model/organisation_header'
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: 1.3.0
4
+ version: 1.4.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: 2017-04-06 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -100,6 +100,7 @@ files:
100
100
  - lib/puree/model/endeavour_person.rb
101
101
  - lib/puree/model/event.rb
102
102
  - lib/puree/model/event_header.rb
103
+ - lib/puree/model/external_organisation_header.rb
103
104
  - lib/puree/model/file.rb
104
105
  - lib/puree/model/helper/validation.rb
105
106
  - lib/puree/model/journal.rb
@@ -140,8 +141,10 @@ files:
140
141
  - lib/puree/xml_extractor/journal.rb
141
142
  - lib/puree/xml_extractor/journal_article.rb
142
143
  - lib/puree/xml_extractor/masters_thesis.rb
144
+ - lib/puree/xml_extractor/mixins/associated_mixin.rb
143
145
  - lib/puree/xml_extractor/mixins/doi_mixin.rb
144
146
  - lib/puree/xml_extractor/mixins/event_mixin.rb
147
+ - lib/puree/xml_extractor/mixins/external_organisations_mixin.rb
145
148
  - lib/puree/xml_extractor/mixins/page_range_mixin.rb
146
149
  - lib/puree/xml_extractor/mixins/pages_mixin.rb
147
150
  - lib/puree/xml_extractor/mixins/peer_reviewed_mixin.rb