purl_fetcher-client 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0fbb1d4ee923c8a04d013b372637f82b18c9a2fa433cf40792aec85152062f1
4
- data.tar.gz: 01dad44de5ded0fd3206d7adb7be24d89103ce8cbafb3cf1aaa9abee51f8add8
3
+ metadata.gz: 97df63e9b1a234a5c89c948ca110180d6d9a620042e5280b036c15259a79d8ea
4
+ data.tar.gz: 50fd0e88ef00cc1da27d75c71fedffaac1a8beaf5d930280255bc878321e4c7e
5
5
  SHA512:
6
- metadata.gz: 6c7daf20c0d96b891998a9a622d5ca05b319b2a1ff60da84a6200f536fd778ca91ed41b396aa688a7b5d4b4c40d62a56e5bf49366596539968fa4cf1dcb40e13
7
- data.tar.gz: 5352c32604756a40e6d807e3c93b05321aeb4c67d1222fb6fe8b03b60e20ba15dffb16e40631b05ba15c1c1824749be9f0ec10d3f757623ff575e1da214a0417
6
+ metadata.gz: c72ac95809823377fa72cbb2f5b52fb11a4c3f69de2a17c250491a54b2b74549ddc1563cc0d5aa7170b07824a57c53afb348c4d29c03f771442dab64a7a87443
7
+ data.tar.gz: 41b9ef57041248734ff4f31e0bdd262e01018a618a4231f9f0b3c6b11dd65e8caa443a54b0ba48458b44fc7d17fba128d726f0d7e85935067021303ee85d4509
@@ -0,0 +1,27 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ tests:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 3.0
18
+ - uses: actions/cache@v2
19
+ with:
20
+ path: vendor/bundle
21
+ key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
22
+ restore-keys: |
23
+ ${{ runner.os }}-gems-
24
+ - name: Bundle install
25
+ run: bundle install
26
+ - name: Run tests
27
+ run: bundle exec rake
@@ -1,15 +1,28 @@
1
1
  require 'nokogiri'
2
2
  require 'stanford-mods'
3
+ require 'mods_display'
4
+ require 'dor/rights_auth'
3
5
 
4
6
  module PurlFetcher::Client
5
7
  class PublicXmlRecord
8
+ include ModsDisplay::ModelExtension
9
+ include ModsDisplay::ControllerExtension
10
+
11
+ mods_xml_source do |model|
12
+ model.mods.to_s
13
+ end
14
+ configure_mods_display do
15
+ end
16
+
6
17
  attr_reader :druid, :options
7
18
 
8
19
  def self.fetch(url)
9
- if defined?(Manticore)
10
- Manticore.get(url).body
20
+ if defined?(JRUBY_VERSION)
21
+ response = Manticore.get(url)
22
+ response.body if response.code == 200
11
23
  else
12
- HTTP.get(url).body
24
+ response = HTTP.get(url)
25
+ response.body if response.status.ok?
13
26
  end
14
27
  end
15
28
 
@@ -42,10 +55,18 @@ module PurlFetcher::Client
42
55
  end
43
56
  end
44
57
 
58
+ def mods_display
59
+ @mods_display ||= render_mods_display(self)
60
+ end
61
+
45
62
  def public_xml
46
63
  @public_xml ||= self.class.fetch(purl_base_url + "/#{druid}.xml")
47
64
  end
48
65
 
66
+ def public_xml?
67
+ !!public_xml
68
+ end
69
+
49
70
  def public_xml_doc
50
71
  @public_xml_doc ||= Nokogiri::XML(public_xml)
51
72
  end
@@ -54,7 +75,7 @@ module PurlFetcher::Client
54
75
  @mods ||= if public_xml_doc.xpath('/publicObject/mods:mods', mods: 'http://www.loc.gov/mods/v3').any?
55
76
  public_xml_doc.xpath('/publicObject/mods:mods', mods: 'http://www.loc.gov/mods/v3').first
56
77
  else
57
- self.class.fetch(purl_base_url + "#{druid}.mods")
78
+ self.class.fetch(purl_base_url + "/#{druid}.mods")
58
79
  end
59
80
  end
60
81
 
@@ -111,16 +132,22 @@ module PurlFetcher::Client
111
132
 
112
133
  def collections
113
134
  @collections ||= predicate_druids('isMemberOfCollection').map do |druid|
114
- PublicXmlRecord.new(druid, settings)
135
+ PublicXmlRecord.new(druid, options)
115
136
  end
116
137
  end
117
138
 
118
139
  def constituents
119
140
  @constituents ||= predicate_druids('isConstituentOf').map do |druid|
120
- PublicXmlRecord.new(druid, settings)
141
+ PublicXmlRecord.new(druid, options)
121
142
  end
122
143
  end
123
144
 
145
+ def items(&block)
146
+ return [] unless is_collection
147
+
148
+ purl_fetcher_client.collection_members(druid, &block)
149
+ end
150
+
124
151
  # the thumbnail in publicXML properly URI encoded, including the slash separator
125
152
  # @return [String] thumb filename with druid prepended, e.g. oo000oo0001%2Ffilename%20withspace.jp2
126
153
  def encoded_thumb
@@ -128,7 +155,7 @@ module PurlFetcher::Client
128
155
  return unless thumb
129
156
  thumb_druid=thumb.split('/').first # the druid (before the first slash)
130
157
  thumb_filename=thumb.split(/[a-zA-Z]{2}[0-9]{3}[a-zA-Z]{2}[0-9]{4}[\/]/).last # everything after the druid
131
- "#{thumb_druid}%2F#{URI.escape(thumb_filename)}"
158
+ "#{thumb_druid}%2F#{ERB::Util.url_encode(thumb_filename)}"
132
159
  end
133
160
 
134
161
  # get the druids from predicate relationships in rels-ext from public_xml
@@ -142,8 +169,39 @@ module PurlFetcher::Client
142
169
  end
143
170
  end
144
171
 
172
+ def druid_tree
173
+ druid.match(/(..)(...)(..)(....)/).captures.join('/')
174
+ end
175
+
176
+ def rights_xml
177
+ @rights_xml ||= public_xml_doc.xpath('//rightsMetadata').to_s
178
+ end
179
+
180
+ def rights
181
+ @rights ||= ::Dor::RightsAuth.parse(rights_xml)
182
+ end
183
+
184
+ def public?
185
+ rights.world_unrestricted?
186
+ end
187
+
188
+ def stanford_only?
189
+ rights.stanford_only_unrestricted?
190
+ end
191
+
145
192
  def purl_base_url
146
- options[:purl_url] || 'https://purl.stanford.edu'
193
+ options[:purl_url]&.sub(%r{/$}, '') || 'https://purl.stanford.edu'
194
+ end
195
+
196
+ def purl_fetcher_api_endpoint
197
+ options[:purl_fetcher_url] || 'https://purl-fetcher.stanford.edu'
198
+ end
199
+
200
+ def purl_fetcher_client
201
+ @purl_fetcher_client ||= PurlFetcher::Client::Reader.new(
202
+ nil,
203
+ 'purl_fetcher.api_endpoint' => purl_fetcher_api_endpoint
204
+ )
147
205
  end
148
206
  end
149
207
  end
@@ -20,6 +20,14 @@ class PurlFetcher::Client::Reader
20
20
  end
21
21
  end
22
22
 
23
+ def collection_members(druid)
24
+ return to_enum(:collection_members, druid) unless block_given?
25
+
26
+ paginated_get("/collections/druid:#{druid.sub(/^druid:/, '')}/purls", 'purls').each do |obj, _meta|
27
+ yield PurlFetcher::Client::PublicXmlRecord.new(obj['druid'].sub('druid:', ''), settings), obj, self
28
+ end
29
+ end
30
+
23
31
  private
24
32
 
25
33
  def first_modified
@@ -1,5 +1,5 @@
1
1
  module PurlFetcher
2
2
  module Client
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -23,8 +23,10 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'http'
24
24
  spec.add_dependency 'nokogiri'
25
25
  spec.add_dependency 'stanford-mods'
26
+ spec.add_dependency 'dor-rights-auth'
27
+ spec.add_dependency 'mods_display'
26
28
 
27
29
  spec.add_development_dependency "bundler"
28
- spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "rake"
29
31
  spec.add_development_dependency "rspec", "~> 3.0"
30
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purl_fetcher-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-30 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: dor-rights-auth
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mods_display
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +98,16 @@ dependencies:
70
98
  name: rake
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - "~>"
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '10.0'
103
+ version: '0'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - "~>"
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '10.0'
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rspec
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -94,16 +122,16 @@ dependencies:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
124
  version: '3.0'
97
- description:
125
+ description:
98
126
  email:
99
127
  - cabeer@stanford.edu
100
128
  executables: []
101
129
  extensions: []
102
130
  extra_rdoc_files: []
103
131
  files:
132
+ - ".github/workflows/ruby.yml"
104
133
  - ".gitignore"
105
134
  - ".rspec"
106
- - ".travis.yml"
107
135
  - CODE_OF_CONDUCT.md
108
136
  - Gemfile
109
137
  - README.md
@@ -116,10 +144,10 @@ files:
116
144
  - lib/purl_fetcher/client/reader.rb
117
145
  - lib/purl_fetcher/client/version.rb
118
146
  - purl_fetcher-client.gemspec
119
- homepage:
147
+ homepage:
120
148
  licenses: []
121
149
  metadata: {}
122
- post_install_message:
150
+ post_install_message:
123
151
  rdoc_options: []
124
152
  require_paths:
125
153
  - lib
@@ -134,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
162
  - !ruby/object:Gem::Version
135
163
  version: '0'
136
164
  requirements: []
137
- rubygems_version: 3.0.3
138
- signing_key:
165
+ rubygems_version: 3.2.3
166
+ signing_key:
139
167
  specification_version: 4
140
168
  summary: Traject-compatible reader implementation for streaming data from purl-fetcher
141
169
  test_files: []
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.4.1
7
- before_install: gem install bundler -v 1.16.3