puree 1.2.0 → 1.3.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 +4 -4
- data/CHANGELOG.md +5 -1
- data/lib/puree.rb +22 -1
- data/lib/puree/extractor/conference_paper.rb +26 -0
- data/lib/puree/extractor/journal_article.rb +32 -0
- data/lib/puree/extractor/paper.rb +23 -0
- data/lib/puree/extractor/paper_base.rb +28 -0
- data/lib/puree/extractor/publication.rb +4 -0
- data/lib/puree/model/conference_paper.rb +13 -0
- data/lib/puree/model/journal_article.rb +31 -0
- data/lib/puree/model/journal_header.rb +34 -0
- data/lib/puree/model/paper.rb +10 -0
- data/lib/puree/model/paper_base.rb +19 -0
- data/lib/puree/model/publication.rb +12 -0
- data/lib/puree/model/thesis.rb +1 -1
- data/lib/puree/version.rb +1 -1
- data/lib/puree/xml_extractor/conference_paper.rb +15 -0
- data/lib/puree/xml_extractor/journal_article.rb +48 -0
- data/lib/puree/xml_extractor/mixins/page_range_mixin.rb +18 -0
- data/lib/puree/xml_extractor/mixins/peer_reviewed_mixin.rb +20 -0
- data/lib/puree/xml_extractor/paper.rb +14 -0
- data/lib/puree/xml_extractor/paper_base.rb +17 -0
- data/lib/puree/xml_extractor/publication.rb +27 -1
- data/spec/resource/dataset_http_spec.rb +4 -0
- data/spec/resource/publication_http_spec.rb +10 -10
- data/spec/spec_helper.rb +35 -1
- metadata +17 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5aa6af3718ebb33cd7b19ef9142cb73b4a5d0f5c
         | 
| 4 | 
            +
              data.tar.gz: b0c01d0104f64d84b9b28a8fca142d9c6fec9165
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a3772603849fb583fcbcc48b9d2343d06c64d17fc2d239d687556e7579804704e1b498cf568285ac49d3bd96669077644a80df3725fae21ed6a39a9fe2b4d85f
         | 
| 7 | 
            +
              data.tar.gz: f5906459dedcc2ce1693e6d33d862b300196c4bc551c9bfec2e24b946fae4eacd2ac494e7a7ee8f918a3892708e317ab0ff4ee160496d4f5e30915aa21ed573c
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -5,13 +5,17 @@ This project adheres to [Semantic Versioning](http://semver.org/). | |
| 5 5 | 
             
            ## Unreleased
         | 
| 6 6 | 
             
            - Metadata: activity?, clipping?, externalPerson?
         | 
| 7 7 |  | 
| 8 | 
            +
            ## 1.3.0 - 2017-04-03
         | 
| 9 | 
            +
            ### Added
         | 
| 10 | 
            +
            - Publication type - JournalArticle, Paper, ConferencePaper.
         | 
| 11 | 
            +
             | 
| 8 12 | 
             
            ## 1.2.0 - 2017-03-31
         | 
| 9 13 | 
             
            ### Added
         | 
| 10 14 | 
             
            - Publication - language, owner, translated_title, translated_subtitle.
         | 
| 11 15 | 
             
            - Publication types - Doctoral Thesis and Master's Thesis.
         | 
| 12 16 |  | 
| 13 17 | 
             
            ### Changed
         | 
| 14 | 
            -
            - Publication - common  | 
| 18 | 
            +
            - Publication - common attributes established. doi, event, pages become mixins
         | 
| 15 19 | 
             
            for publication types.
         | 
| 16 20 |  | 
| 17 21 | 
             
            ## 1.1.0 - 2017-03-24
         | 
    
        data/lib/puree.rb
    CHANGED
    
    | @@ -17,13 +17,21 @@ require 'puree/xml_extractor/journal' | |
| 17 17 | 
             
            require 'puree/xml_extractor/organisation'
         | 
| 18 18 | 
             
            require 'puree/xml_extractor/person'
         | 
| 19 19 | 
             
            require 'puree/xml_extractor/project'
         | 
| 20 | 
            -
             | 
| 20 | 
            +
             | 
| 21 21 | 
             
            require 'puree/xml_extractor/mixins/doi_mixin'
         | 
| 22 22 | 
             
            require 'puree/xml_extractor/mixins/event_mixin'
         | 
| 23 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 | 
            +
            require 'puree/xml_extractor/publication'
         | 
| 24 27 | 
             
            require 'puree/xml_extractor/thesis'
         | 
| 25 28 | 
             
            require 'puree/xml_extractor/doctoral_thesis'
         | 
| 26 29 | 
             
            require 'puree/xml_extractor/masters_thesis'
         | 
| 30 | 
            +
            require 'puree/xml_extractor/journal_article'
         | 
| 31 | 
            +
            require 'puree/xml_extractor/paper_base'
         | 
| 32 | 
            +
            require 'puree/xml_extractor/conference_paper'
         | 
| 33 | 
            +
            require 'puree/xml_extractor/paper'
         | 
| 34 | 
            +
             | 
| 27 35 | 
             
            require 'puree/xml_extractor/publisher'
         | 
| 28 36 | 
             
            require 'puree/xml_extractor/server'
         | 
| 29 37 |  | 
| @@ -41,14 +49,21 @@ require 'puree/model/download_header' | |
| 41 49 | 
             
            require 'puree/model/event'
         | 
| 42 50 | 
             
            require 'puree/model/event_header'
         | 
| 43 51 | 
             
            require 'puree/model/journal'
         | 
| 52 | 
            +
            require 'puree/model/journal_header'
         | 
| 44 53 | 
             
            require 'puree/model/link'
         | 
| 45 54 | 
             
            require 'puree/model/organisation'
         | 
| 46 55 | 
             
            require 'puree/model/person'
         | 
| 47 56 | 
             
            require 'puree/model/project'
         | 
| 57 | 
            +
             | 
| 48 58 | 
             
            require 'puree/model/publication'
         | 
| 49 59 | 
             
            require 'puree/model/thesis'
         | 
| 50 60 | 
             
            require 'puree/model/doctoral_thesis'
         | 
| 51 61 | 
             
            require 'puree/model/masters_thesis'
         | 
| 62 | 
            +
            require 'puree/model/journal_article'
         | 
| 63 | 
            +
            require 'puree/model/paper_base'
         | 
| 64 | 
            +
            require 'puree/model/conference_paper'
         | 
| 65 | 
            +
            require 'puree/model/paper'
         | 
| 66 | 
            +
             | 
| 52 67 | 
             
            require 'puree/model/publisher'
         | 
| 53 68 | 
             
            require 'puree/model/related_content_header'
         | 
| 54 69 | 
             
            require 'puree/model/spatial_point'
         | 
| @@ -72,10 +87,16 @@ require 'puree/extractor/journal' | |
| 72 87 | 
             
            require 'puree/extractor/organisation'
         | 
| 73 88 | 
             
            require 'puree/extractor/person'
         | 
| 74 89 | 
             
            require 'puree/extractor/project'
         | 
| 90 | 
            +
             | 
| 75 91 | 
             
            require 'puree/extractor/publication'
         | 
| 76 92 | 
             
            require 'puree/extractor/thesis'
         | 
| 77 93 | 
             
            require 'puree/extractor/doctoral_thesis'
         | 
| 78 94 | 
             
            require 'puree/extractor/masters_thesis'
         | 
| 95 | 
            +
            require 'puree/extractor/journal_article'
         | 
| 96 | 
            +
            require 'puree/extractor/paper_base'
         | 
| 97 | 
            +
            require 'puree/extractor/conference_paper'
         | 
| 98 | 
            +
            require 'puree/extractor/paper'
         | 
| 99 | 
            +
             | 
| 79 100 | 
             
            require 'puree/extractor/publisher'
         | 
| 80 101 | 
             
            require 'puree/extractor/collection'
         | 
| 81 102 | 
             
            require 'puree/extractor/download'
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Extractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Conference paper extractor.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class ConferencePaper < Puree::Extractor::PaperBase
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @option (see Puree::Extractor::Resource#initialize)
         | 
| 9 | 
            +
                  def initialize(config)
         | 
| 10 | 
            +
                    set_model_type 'conference_paper'
         | 
| 11 | 
            +
                    super
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def combine_metadata
         | 
| 17 | 
            +
                    super
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    @model.event = @extractor.event
         | 
| 20 | 
            +
                    @model
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Extractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Journal article extractor.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class JournalArticle < Puree::Extractor::Publication
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @option (see Puree::Extractor::Resource#initialize)
         | 
| 9 | 
            +
                  def initialize(config)
         | 
| 10 | 
            +
                    set_model_type 'journal_article'
         | 
| 11 | 
            +
                    super
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def combine_metadata
         | 
| 17 | 
            +
                    super
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    @model.article_number = @extractor.article_number
         | 
| 20 | 
            +
                    @model.issue = @extractor.issue
         | 
| 21 | 
            +
                    @model.journal = @extractor.journal
         | 
| 22 | 
            +
                    @model.pages = @extractor.pages
         | 
| 23 | 
            +
                    @model.page_range = @extractor.page_range
         | 
| 24 | 
            +
                    @model.peer_reviewed = @extractor.peer_reviewed
         | 
| 25 | 
            +
                    @model.volume = @extractor.volume
         | 
| 26 | 
            +
                    @model
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Extractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Paper extractor.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class Paper < Puree::Extractor::PaperBase
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @option (see Puree::Extractor::Resource#initialize)
         | 
| 9 | 
            +
                  def initialize(config)
         | 
| 10 | 
            +
                    set_model_type 'paper'
         | 
| 11 | 
            +
                    super
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def combine_metadata
         | 
| 17 | 
            +
                    super
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Extractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Paper base extractor.
         | 
| 5 | 
            +
                # Do not use directly.
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                class PaperBase < Puree::Extractor::Publication
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  # @option (see Puree::Extractor::Resource#initialize)
         | 
| 10 | 
            +
                  def initialize(config)
         | 
| 11 | 
            +
                    super
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  private
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def combine_metadata
         | 
| 17 | 
            +
                    super
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    @model.pages = @extractor.pages
         | 
| 20 | 
            +
                    @model.page_range = @extractor.page_range
         | 
| 21 | 
            +
                    @model.peer_reviewed = @extractor.peer_reviewed
         | 
| 22 | 
            +
                    @model
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -17,16 +17,20 @@ module Puree | |
| 17 17 | 
             
                  def combine_metadata
         | 
| 18 18 | 
             
                    super
         | 
| 19 19 |  | 
| 20 | 
            +
                    @model.bibliographical_note = @extractor.bibliographical_note
         | 
| 20 21 | 
             
                    @model.category = @extractor.category
         | 
| 21 22 | 
             
                    @model.description = @extractor.description
         | 
| 23 | 
            +
                    @model.dois = @extractor.dois
         | 
| 22 24 | 
             
                    @model.files = @extractor.files
         | 
| 23 25 | 
             
                    @model.keywords = @extractor.keywords
         | 
| 24 26 | 
             
                    @model.language = @extractor.language
         | 
| 27 | 
            +
                    @model.links = @extractor.links
         | 
| 25 28 | 
             
                    @model.organisations = @extractor.organisations
         | 
| 26 29 | 
             
                    @model.owner = @extractor.owner
         | 
| 27 30 | 
             
                    @model.persons_internal = @extractor.persons_internal
         | 
| 28 31 | 
             
                    @model.persons_external = @extractor.persons_external
         | 
| 29 32 | 
             
                    @model.persons_other = @extractor.persons_other
         | 
| 33 | 
            +
                    @model.publication_place = @extractor.publication_place
         | 
| 30 34 | 
             
                    @model.publisher = @extractor.publisher
         | 
| 31 35 | 
             
                    @model.statuses = @extractor.statuses
         | 
| 32 36 | 
             
                    @model.subtitle = @extractor.subtitle
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Model
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # A journal article.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class JournalArticle < Puree::Model::Publication
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @return [Fixnum, nil]
         | 
| 9 | 
            +
                  attr_accessor :article_number
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # @return [Puree::Model::JournalHeader, nil]
         | 
| 12 | 
            +
                  attr_accessor :journal
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @return [Fixnum, nil]
         | 
| 15 | 
            +
                  attr_accessor :issue
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  # @return [Fixnum, nil]
         | 
| 18 | 
            +
                  attr_accessor :pages
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  # @return [String, nil]
         | 
| 21 | 
            +
                  attr_accessor :page_range
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  # @return [Boolean, nil]
         | 
| 24 | 
            +
                  attr_accessor :peer_reviewed
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  # @return [Fixnum, nil]
         | 
| 27 | 
            +
                  attr_accessor :volume
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Model
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # A minimal representation of a journal.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class JournalHeader < Puree::Model::Structure
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @return [String, nil]
         | 
| 9 | 
            +
                  attr_reader :uuid
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # @return [String, nil]
         | 
| 12 | 
            +
                  attr_reader :title
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @return [String, nil]
         | 
| 15 | 
            +
                  attr_reader :type
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  # @param v [String]
         | 
| 18 | 
            +
                  def uuid=(v)
         | 
| 19 | 
            +
                    @uuid = v if v && !v.empty?
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  # @param v [String]
         | 
| 23 | 
            +
                  def title=(v)
         | 
| 24 | 
            +
                    @title = v if v && !v.empty?
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # @param v [String]
         | 
| 28 | 
            +
                  def type=(v)
         | 
| 29 | 
            +
                    @type = v if v && !v.empty?
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module Model
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # A base paper.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class PaperBase < Puree::Model::Publication
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # @return [Fixnum, nil]
         | 
| 9 | 
            +
                  attr_accessor :pages
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # @return [String, nil]
         | 
| 12 | 
            +
                  attr_accessor :page_range
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @return [Boolean, nil]
         | 
| 15 | 
            +
                  attr_accessor :peer_reviewed
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -5,12 +5,18 @@ module Puree | |
| 5 5 | 
             
                #
         | 
| 6 6 | 
             
                class Publication < Resource
         | 
| 7 7 |  | 
| 8 | 
            +
                  # @return [String, nil]
         | 
| 9 | 
            +
                  attr_accessor :bibliographical_note
         | 
| 10 | 
            +
             | 
| 8 11 | 
             
                  # @return [String, nil]
         | 
| 9 12 | 
             
                  attr_accessor :category
         | 
| 10 13 |  | 
| 11 14 | 
             
                  # @return [String, nil]
         | 
| 12 15 | 
             
                  attr_accessor :description
         | 
| 13 16 |  | 
| 17 | 
            +
                  # @return [Array<String>]
         | 
| 18 | 
            +
                  attr_accessor :dois
         | 
| 19 | 
            +
             | 
| 14 20 | 
             
                  # @return [Array<Puree::Model::File>]
         | 
| 15 21 | 
             
                  attr_accessor :files
         | 
| 16 22 |  | 
| @@ -20,6 +26,9 @@ module Puree | |
| 20 26 | 
             
                  # @return [String, nil]
         | 
| 21 27 | 
             
                  attr_accessor :language
         | 
| 22 28 |  | 
| 29 | 
            +
                  # @return [Array<String>]
         | 
| 30 | 
            +
                  attr_accessor :links
         | 
| 31 | 
            +
             | 
| 23 32 | 
             
                  # @return [Array<Puree::Model::OrganisationHeader>]
         | 
| 24 33 | 
             
                  attr_accessor :organisations
         | 
| 25 34 |  | 
| @@ -35,6 +44,9 @@ module Puree | |
| 35 44 | 
             
                  # @return [Array<Puree::Model::EndeavourPerson>]
         | 
| 36 45 | 
             
                  attr_accessor :persons_other
         | 
| 37 46 |  | 
| 47 | 
            +
                  # @return [String, nil]
         | 
| 48 | 
            +
                  attr_accessor :publication_place
         | 
| 49 | 
            +
             | 
| 38 50 | 
             
                  # @return [String, nil]
         | 
| 39 51 | 
             
                  attr_accessor :publisher
         | 
| 40 52 |  | 
    
        data/lib/puree/model/thesis.rb
    CHANGED
    
    
    
        data/lib/puree/version.rb
    CHANGED
    
    
| @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module XMLExtractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Journal article XML extractor.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class JournalArticle < Puree::XMLExtractor::Publication
         | 
| 7 | 
            +
                  include Puree::XMLExtractor::PagesMixin
         | 
| 8 | 
            +
                  include Puree::XMLExtractor::PageRangeMixin
         | 
| 9 | 
            +
                  include Puree::XMLExtractor::PeerReviewedMixin
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def initialize(xml:)
         | 
| 12 | 
            +
                    super
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  # @return [Fixnum, nil]
         | 
| 16 | 
            +
                  def article_number
         | 
| 17 | 
            +
                    xpath_query_for_single_value('/articleNumber')
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  # @return [Fixnum, nil]
         | 
| 21 | 
            +
                  def issue
         | 
| 22 | 
            +
                    xpath_result = xpath_query_for_single_value('/journalNumber')
         | 
| 23 | 
            +
                    xpath_result ? xpath_result.to_i : nil
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  # @return [Puree::Model::JournalHeader, nil]
         | 
| 27 | 
            +
                  def journal
         | 
| 28 | 
            +
                    xpath_result = xpath_query '/journal'
         | 
| 29 | 
            +
                    if !xpath_result.empty?
         | 
| 30 | 
            +
                      header = Puree::Model::JournalHeader.new
         | 
| 31 | 
            +
                      header.title = xpath_result.xpath('title').text.strip
         | 
| 32 | 
            +
                      journal = xpath_result.xpath('journal')
         | 
| 33 | 
            +
                      header.type = journal.xpath('typeClassification/term/localizedString').text.strip
         | 
| 34 | 
            +
                      header.uuid = journal.attr('uuid').text.strip
         | 
| 35 | 
            +
                      return header
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                    nil
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  # @return [Fixnum, nil]
         | 
| 41 | 
            +
                  def volume
         | 
| 42 | 
            +
                    xpath_result = xpath_query_for_single_value('/volume')
         | 
| 43 | 
            +
                    xpath_result ? xpath_result.to_i : nil
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module XMLExtractor
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # Page range mixin.
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                module PageRangeMixin
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  # @return [String, nil]
         | 
| 10 | 
            +
                  def page_range
         | 
| 11 | 
            +
                    xpath_result = xpath_query_for_single_value('/pages')
         | 
| 12 | 
            +
                    xpath_result ? xpath_result : nil
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              module XMLExtractor
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                # Peer reviewed extractor mixin.
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                module PeerReviewedMixin
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  # @return [Boolean, nil]
         | 
| 10 | 
            +
                  def peer_reviewed
         | 
| 11 | 
            +
                    xpath_result = xpath_query_for_single_value('/peerReview/peerReviewed')
         | 
| 12 | 
            +
                    return true if xpath_result === 'true'
         | 
| 13 | 
            +
                    return false if xpath_result === 'false'
         | 
| 14 | 
            +
                    nil
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module Puree
         | 
| 2 | 
            +
              module XMLExtractor
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Paper base XML extractor.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                class PaperBase < Puree::XMLExtractor::Publication
         | 
| 7 | 
            +
                  include Puree::XMLExtractor::PagesMixin
         | 
| 8 | 
            +
                  include Puree::XMLExtractor::PageRangeMixin
         | 
| 9 | 
            +
                  include Puree::XMLExtractor::PeerReviewedMixin
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def initialize(xml:)
         | 
| 12 | 
            +
                    super
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -11,6 +11,11 @@ module Puree | |
| 11 11 | 
             
                    super
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 | 
            +
                  # @return [String, nil]
         | 
| 15 | 
            +
                  def bibliographical_note
         | 
| 16 | 
            +
                    xpath_query_for_single_value('/bibliographicalNote')
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 14 19 | 
             
                  # @return [String, nil]
         | 
| 15 20 | 
             
                  def category
         | 
| 16 21 | 
             
                    xpath_query_for_single_value '/publicationCategory/publicationCategory/term/localizedString'
         | 
| @@ -21,6 +26,11 @@ module Puree | |
| 21 26 | 
             
                    xpath_query_for_single_value '/abstract/localizedString'
         | 
| 22 27 | 
             
                  end
         | 
| 23 28 |  | 
| 29 | 
            +
                  # @return [Array<String>, nil]
         | 
| 30 | 
            +
                  def dois
         | 
| 31 | 
            +
                    xpath_query_for_multi_value '/electronicVersionAssociations/electronicVersionDOIAssociations/electronicVersionDOIAssociation/doi'
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 24 34 | 
             
                  # @return [Array<Puree::Model::File>]
         | 
| 25 35 | 
             
                  def files
         | 
| 26 36 | 
             
                    xpath_result = xpath_query '/electronicVersionAssociations/electronicVersionFileAssociations/electronicVersionFileAssociation'
         | 
| @@ -55,6 +65,11 @@ module Puree | |
| 55 65 | 
             
                    xpath_query_for_single_value '/language/term/localizedString'
         | 
| 56 66 | 
             
                  end
         | 
| 57 67 |  | 
| 68 | 
            +
                  # @return [Array<String>, nil]
         | 
| 69 | 
            +
                  def links
         | 
| 70 | 
            +
                    xpath_query_for_multi_value '/electronicVersionAssociations/electronicVersionLinkAssociations/electronicVersionLinkAssociation/link'
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 58 73 | 
             
                  # @return [Array<Puree::Model::OrganisationHeader>]
         | 
| 59 74 | 
             
                  def organisations
         | 
| 60 75 | 
             
                    xpath_result = xpath_query '/organisations/association/organisation'
         | 
| @@ -82,9 +97,20 @@ module Puree | |
| 82 97 | 
             
                    persons 'other'
         | 
| 83 98 | 
             
                  end
         | 
| 84 99 |  | 
| 100 | 
            +
                  # @return [String, nil]
         | 
| 101 | 
            +
                  def publication_place
         | 
| 102 | 
            +
                    # handles variations in path
         | 
| 103 | 
            +
                    xpath_result = xpath_query_for_single_value '/associatedPublisher/placeOfPublication'
         | 
| 104 | 
            +
                    xpath_result = xpath_query_for_single_value '/associatedPublishers/placeOfPublication' if !xpath_result
         | 
| 105 | 
            +
                    xpath_result
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
             | 
| 85 108 | 
             
                  # @return [String, nil]
         | 
| 86 109 | 
             
                  def publisher
         | 
| 87 | 
            -
                     | 
| 110 | 
            +
                    # handles variations in path
         | 
| 111 | 
            +
                    xpath_result = xpath_query_for_single_value '/associatedPublisher/publisher/name'
         | 
| 112 | 
            +
                    xpath_result = xpath_query_for_single_value '/associatedPublishers/publisher/name' if !xpath_result
         | 
| 113 | 
            +
                    xpath_result
         | 
| 88 114 | 
             
                  end
         | 
| 89 115 |  | 
| 90 116 | 
             
                  # @return [Array<Puree::Model::PublicationStatus>]
         | 
| @@ -55,6 +55,10 @@ describe 'Dataset' do | |
| 55 55 | 
             
                  expect(@p.links).to all( be_a Puree::Model::Link )
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 | 
            +
                it '#owner' do
         | 
| 59 | 
            +
                  expect(@p.owner).to be_a Puree::Model::OrganisationHeader if @p.owner
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 58 62 | 
             
                it '#persons_internal' do
         | 
| 59 63 | 
             
                  expect(@p.persons_internal).to all( be_a Puree::Model::EndeavourPerson )
         | 
| 60 64 | 
             
                end
         | 
| @@ -25,14 +25,6 @@ describe 'Publication' do | |
| 25 25 | 
             
                  expect(@p.description).to be_a String if @p.description
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 | 
            -
                it '#doi' do
         | 
| 29 | 
            -
                  expect(@p.doi).to be_a String if @p.doi
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                it '#event' do
         | 
| 33 | 
            -
                  expect(@p.event).to be_a Puree::Model::EventHeader if @p.event
         | 
| 34 | 
            -
                end
         | 
| 35 | 
            -
             | 
| 36 28 | 
             
                it '#files' do
         | 
| 37 29 | 
             
                  expect(@p.files).to all( be_a Puree::Model::File )
         | 
| 38 30 | 
             
                end
         | 
| @@ -41,8 +33,8 @@ describe 'Publication' do | |
| 41 33 | 
             
                  expect(@p.organisations).to all( be_a Puree::Model::OrganisationHeader )
         | 
| 42 34 | 
             
                end
         | 
| 43 35 |  | 
| 44 | 
            -
                it '# | 
| 45 | 
            -
                  expect(@p. | 
| 36 | 
            +
                it '#owner' do
         | 
| 37 | 
            +
                  expect(@p.owner).to be_a Puree::Model::OrganisationHeader if @p.owner
         | 
| 46 38 | 
             
                end
         | 
| 47 39 |  | 
| 48 40 | 
             
                it '#persons_internal' do
         | 
| @@ -69,6 +61,14 @@ describe 'Publication' do | |
| 69 61 | 
             
                  expect(@p.title).to be_a String if @p.title
         | 
| 70 62 | 
             
                end
         | 
| 71 63 |  | 
| 64 | 
            +
                it '#translated_title' do
         | 
| 65 | 
            +
                  expect(@p.translated_title).to be_a String if @p.translated_title
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                it '#translated_subtitle' do
         | 
| 69 | 
            +
                  expect(@p.translated_subtitle).to be_a String if @p.translated_subtitle
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 72 | 
             
                it '#type' do
         | 
| 73 73 | 
             
                  expect(@p.type).to be_a String if @p.type
         | 
| 74 74 | 
             
                end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -17,7 +17,21 @@ require 'puree/xml_extractor/journal' | |
| 17 17 | 
             
            require 'puree/xml_extractor/organisation'
         | 
| 18 18 | 
             
            require 'puree/xml_extractor/person'
         | 
| 19 19 | 
             
            require 'puree/xml_extractor/project'
         | 
| 20 | 
            +
             | 
| 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'
         | 
| 20 26 | 
             
            require 'puree/xml_extractor/publication'
         | 
| 27 | 
            +
            require 'puree/xml_extractor/thesis'
         | 
| 28 | 
            +
            require 'puree/xml_extractor/doctoral_thesis'
         | 
| 29 | 
            +
            require 'puree/xml_extractor/masters_thesis'
         | 
| 30 | 
            +
            require 'puree/xml_extractor/journal_article'
         | 
| 31 | 
            +
            require 'puree/xml_extractor/paper_base'
         | 
| 32 | 
            +
            require 'puree/xml_extractor/conference_paper'
         | 
| 33 | 
            +
            require 'puree/xml_extractor/paper'
         | 
| 34 | 
            +
             | 
| 21 35 | 
             
            require 'puree/xml_extractor/publisher'
         | 
| 22 36 | 
             
            require 'puree/xml_extractor/server'
         | 
| 23 37 |  | 
| @@ -26,19 +40,30 @@ require 'puree/api/request' | |
| 26 40 | 
             
            require 'puree/api/configuration'
         | 
| 27 41 | 
             
            require 'puree/api/authentication'
         | 
| 28 42 |  | 
| 43 | 
            +
            require 'puree/model/helper/validation'
         | 
| 29 44 | 
             
            require 'puree/model/structure'
         | 
| 30 45 |  | 
| 31 46 | 
             
            require 'puree/model/resource'
         | 
| 32 47 | 
             
            require 'puree/model/dataset'
         | 
| 33 48 | 
             
            require 'puree/model/download_header'
         | 
| 34 49 | 
             
            require 'puree/model/event'
         | 
| 35 | 
            -
            require 'puree/model/ | 
| 50 | 
            +
            require 'puree/model/event_header'
         | 
| 36 51 | 
             
            require 'puree/model/journal'
         | 
| 52 | 
            +
            require 'puree/model/journal_header'
         | 
| 37 53 | 
             
            require 'puree/model/link'
         | 
| 38 54 | 
             
            require 'puree/model/organisation'
         | 
| 39 55 | 
             
            require 'puree/model/person'
         | 
| 40 56 | 
             
            require 'puree/model/project'
         | 
| 57 | 
            +
             | 
| 41 58 | 
             
            require 'puree/model/publication'
         | 
| 59 | 
            +
            require 'puree/model/thesis'
         | 
| 60 | 
            +
            require 'puree/model/doctoral_thesis'
         | 
| 61 | 
            +
            require 'puree/model/masters_thesis'
         | 
| 62 | 
            +
            require 'puree/model/journal_article'
         | 
| 63 | 
            +
            require 'puree/model/paper_base'
         | 
| 64 | 
            +
            require 'puree/model/conference_paper'
         | 
| 65 | 
            +
            require 'puree/model/paper'
         | 
| 66 | 
            +
             | 
| 42 67 | 
             
            require 'puree/model/publisher'
         | 
| 43 68 | 
             
            require 'puree/model/related_content_header'
         | 
| 44 69 | 
             
            require 'puree/model/spatial_point'
         | 
| @@ -62,7 +87,16 @@ require 'puree/extractor/journal' | |
| 62 87 | 
             
            require 'puree/extractor/organisation'
         | 
| 63 88 | 
             
            require 'puree/extractor/person'
         | 
| 64 89 | 
             
            require 'puree/extractor/project'
         | 
| 90 | 
            +
             | 
| 65 91 | 
             
            require 'puree/extractor/publication'
         | 
| 92 | 
            +
            require 'puree/extractor/thesis'
         | 
| 93 | 
            +
            require 'puree/extractor/doctoral_thesis'
         | 
| 94 | 
            +
            require 'puree/extractor/masters_thesis'
         | 
| 95 | 
            +
            require 'puree/extractor/journal_article'
         | 
| 96 | 
            +
            require 'puree/extractor/paper_base'
         | 
| 97 | 
            +
            require 'puree/extractor/conference_paper'
         | 
| 98 | 
            +
            require 'puree/extractor/paper'
         | 
| 99 | 
            +
             | 
| 66 100 | 
             
            require 'puree/extractor/publisher'
         | 
| 67 101 | 
             
            require 'puree/extractor/collection'
         | 
| 68 102 | 
             
            require 'puree/extractor/download'
         | 
    
        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. | 
| 4 | 
            +
              version: 1.3.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- | 
| 11 | 
            +
            date: 2017-04-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: http
         | 
| @@ -72,14 +72,18 @@ files: | |
| 72 72 | 
             
            - lib/puree/api/map.rb
         | 
| 73 73 | 
             
            - lib/puree/api/request.rb
         | 
| 74 74 | 
             
            - lib/puree/extractor/collection.rb
         | 
| 75 | 
            +
            - lib/puree/extractor/conference_paper.rb
         | 
| 75 76 | 
             
            - lib/puree/extractor/dataset.rb
         | 
| 76 77 | 
             
            - lib/puree/extractor/doctoral_thesis.rb
         | 
| 77 78 | 
             
            - lib/puree/extractor/download.rb
         | 
| 78 79 | 
             
            - lib/puree/extractor/event.rb
         | 
| 79 80 | 
             
            - lib/puree/extractor/extractor.rb
         | 
| 80 81 | 
             
            - lib/puree/extractor/journal.rb
         | 
| 82 | 
            +
            - lib/puree/extractor/journal_article.rb
         | 
| 81 83 | 
             
            - lib/puree/extractor/masters_thesis.rb
         | 
| 82 84 | 
             
            - lib/puree/extractor/organisation.rb
         | 
| 85 | 
            +
            - lib/puree/extractor/paper.rb
         | 
| 86 | 
            +
            - lib/puree/extractor/paper_base.rb
         | 
| 83 87 | 
             
            - lib/puree/extractor/person.rb
         | 
| 84 88 | 
             
            - lib/puree/extractor/project.rb
         | 
| 85 89 | 
             
            - lib/puree/extractor/publication.rb
         | 
| @@ -88,6 +92,7 @@ files: | |
| 88 92 | 
             
            - lib/puree/extractor/server.rb
         | 
| 89 93 | 
             
            - lib/puree/extractor/thesis.rb
         | 
| 90 94 | 
             
            - lib/puree/model/address.rb
         | 
| 95 | 
            +
            - lib/puree/model/conference_paper.rb
         | 
| 91 96 | 
             
            - lib/puree/model/copyright_license.rb
         | 
| 92 97 | 
             
            - lib/puree/model/dataset.rb
         | 
| 93 98 | 
             
            - lib/puree/model/doctoral_thesis.rb
         | 
| @@ -98,12 +103,16 @@ files: | |
| 98 103 | 
             
            - lib/puree/model/file.rb
         | 
| 99 104 | 
             
            - lib/puree/model/helper/validation.rb
         | 
| 100 105 | 
             
            - lib/puree/model/journal.rb
         | 
| 106 | 
            +
            - lib/puree/model/journal_article.rb
         | 
| 107 | 
            +
            - lib/puree/model/journal_header.rb
         | 
| 101 108 | 
             
            - lib/puree/model/legal_condition.rb
         | 
| 102 109 | 
             
            - lib/puree/model/link.rb
         | 
| 103 110 | 
             
            - lib/puree/model/masters_thesis.rb
         | 
| 104 111 | 
             
            - lib/puree/model/model.rb
         | 
| 105 112 | 
             
            - lib/puree/model/organisation.rb
         | 
| 106 113 | 
             
            - lib/puree/model/organisation_header.rb
         | 
| 114 | 
            +
            - lib/puree/model/paper.rb
         | 
| 115 | 
            +
            - lib/puree/model/paper_base.rb
         | 
| 107 116 | 
             
            - lib/puree/model/person.rb
         | 
| 108 117 | 
             
            - lib/puree/model/person_name.rb
         | 
| 109 118 | 
             
            - lib/puree/model/project.rb
         | 
| @@ -123,16 +132,22 @@ files: | |
| 123 132 | 
             
            - lib/puree/version.rb
         | 
| 124 133 | 
             
            - lib/puree/xml_extractor/base.rb
         | 
| 125 134 | 
             
            - lib/puree/xml_extractor/collection.rb
         | 
| 135 | 
            +
            - lib/puree/xml_extractor/conference_paper.rb
         | 
| 126 136 | 
             
            - lib/puree/xml_extractor/dataset.rb
         | 
| 127 137 | 
             
            - lib/puree/xml_extractor/doctoral_thesis.rb
         | 
| 128 138 | 
             
            - lib/puree/xml_extractor/download.rb
         | 
| 129 139 | 
             
            - lib/puree/xml_extractor/event.rb
         | 
| 130 140 | 
             
            - lib/puree/xml_extractor/journal.rb
         | 
| 141 | 
            +
            - lib/puree/xml_extractor/journal_article.rb
         | 
| 131 142 | 
             
            - lib/puree/xml_extractor/masters_thesis.rb
         | 
| 132 143 | 
             
            - lib/puree/xml_extractor/mixins/doi_mixin.rb
         | 
| 133 144 | 
             
            - lib/puree/xml_extractor/mixins/event_mixin.rb
         | 
| 145 | 
            +
            - lib/puree/xml_extractor/mixins/page_range_mixin.rb
         | 
| 134 146 | 
             
            - lib/puree/xml_extractor/mixins/pages_mixin.rb
         | 
| 147 | 
            +
            - lib/puree/xml_extractor/mixins/peer_reviewed_mixin.rb
         | 
| 135 148 | 
             
            - lib/puree/xml_extractor/organisation.rb
         | 
| 149 | 
            +
            - lib/puree/xml_extractor/paper.rb
         | 
| 150 | 
            +
            - lib/puree/xml_extractor/paper_base.rb
         | 
| 136 151 | 
             
            - lib/puree/xml_extractor/person.rb
         | 
| 137 152 | 
             
            - lib/puree/xml_extractor/project.rb
         | 
| 138 153 | 
             
            - lib/puree/xml_extractor/publication.rb
         |