cul_scv_hydra 0.13.3 → 0.14.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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjA3NTcxODBmNDg0YTgyNDk2MjU5OWM1OGVhZmRhZWM5NjUwZDQ4Zg==
4
+ YzFmMmEyZjBlOGY1OWZhOGE5MWJlMGFkYzc4NTJlMWRlYTQyY2M1NA==
5
5
  data.tar.gz: !binary |-
6
- MDlmN2UxNTg5YzM2ODZkYWU5MzI1ZGZlZTAxN2Y4MDNmMzM4ZjFmNQ==
6
+ M2QwNzhmZWY5YmU5NmE5NjRkZmNmNDE3NjdiYzJhMDk4NjBlNDczYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Y2EwYzI1MzQ2NzgxMWRiYzQ4ZWI3MWE4ZGEwMjBlMjcxNmU3MjkwYzE0NWNi
10
- MTBmZWMyNmQ1NzMwODAyYmM3NmUwYTY3NjFlNzJmZDU2MTg4ZTE2ZDMwOTU3
11
- NDRkNDVlZmY0OTBlMDQ0YTk2NWQyODg3ZWRhN2MwYjE3YmYxMTQ=
9
+ ODcyYmRjODI2Mzk5OGU3YzY0YThiYTYyMzI4YTRhYmVlY2RhNmZmZjUwNDg5
10
+ OWYxMjU2YmZjNWI2NWRkNTlkMzhhYzEyN2YzNjViZGU3NWFkNzVlYjNjYzNk
11
+ NDRkYzE4ZTUzNjU0NTM2OGY5MDg5ZTk1NzBjZWY5ZDJlZDYyNGE=
12
12
  data.tar.gz: !binary |-
13
- MGM3NGQxZDgxZjJkMjEzZWUzZjg3OGZlYWQ5NzM0MWUyOTAzOWRlNjlkMDRh
14
- Y2NmM2VjOWRiYzU4ZTA4MzYxYmY0ZGJlM2M5Y2QzMGEyNjgyYTRmNGIxMDFh
15
- N2YyNjYxZWFjMDUyMjk1Njg0ODVmNWMwNDk2Njc3YmYyNmFhYTg=
13
+ ZDA0ZTM2YTE0NDQ3NGVjZThiMTljNGE0NjA0YmNlMDE3NTFmZTA0Nzk0OTMw
14
+ NWNiYTg1ZjNiYWJkM2U1YmNlMDQzYjBjMDE5NjA4YTM3MGMyY2ZmNTNiOTI4
15
+ NTgyZTEyZjhiMWU2MjA5NjM4YzhiZTg4NTZmZTc2MzU1ZTRlNjY=
@@ -0,0 +1,22 @@
1
+ module Cul::Scv::Hydra::Controller
2
+
3
+ def asset_path_from_config(asset)
4
+ Rails.configuration.assets.paths.each do |dir|
5
+ result = "#{dir}/#{asset}"
6
+ return result if File.exists?(result)
7
+ end
8
+ return nil
9
+ end
10
+
11
+ def asset_url(source)
12
+ URI.join(root_url, ActionController::Base.helpers.asset_path(source))
13
+ end
14
+
15
+ def http_client
16
+ unless @http_client
17
+ @http_client ||= HTTPClient.new
18
+ end
19
+ @http_client
20
+ end
21
+
22
+ end
@@ -0,0 +1,69 @@
1
+ require 'blacklight'
2
+ require 'active-fedora'
3
+ module Cul::Scv::Hydra::Resolver
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ # Whenever an action raises SolrHelper::InvalidSolrID, this block gets executed.
8
+ # Hint: the SolrHelper #get_solr_response_for_doc_id method raises this error,
9
+ # which is used in the #show action here.
10
+ self.rescue_from Blacklight::Exceptions::InvalidSolrID, :with => :invalid_solr_id_error
11
+ # When RSolr::RequestError is raised, the rsolr_request_error method is executed.
12
+ # The index action will more than likely throw this one.
13
+ # Example, when the standard query parser is used, and a user submits a "bad" query.
14
+ self.rescue_from RSolr::Error::Http, :with => :rsolr_request_error
15
+ end
16
+
17
+ def get_solr_response_for_app_id(id=nil, extra_controller_params={})
18
+ id ||= params[:id]
19
+ solr_params = blacklight_config.default_document_solr_params.merge!(extra_controller_params)
20
+ solr_params[:fq] = "identifier_ssim:#{(id)}"
21
+ solr_response = find((blacklight_config.document_solr_request_handler || blacklight_config.qt), solr_params)
22
+ raise Blacklight::Exceptions::InvalidSolrID.new if solr_response.docs.empty?
23
+ document = SolrDocument.new(solr_response.docs.first, solr_response)
24
+ @response, @document = [solr_response, document]
25
+ end
26
+
27
+ def get
28
+ get_solr_response_for_app_id
29
+ action = params.delete(:action)
30
+ action.sub!(/s$/,'')
31
+ method_name = action + '_url'
32
+ url = send method_name.to_sym, @document[:id]
33
+ redirect_to url
34
+ end
35
+
36
+ # when solr (RSolr) throws an error (RSolr::RequestError), this method is executed.
37
+ def rsolr_request_error(exception)
38
+ if Rails.env == "development"
39
+ raise exception # Rails own code will catch and give usual Rails error page with stack trace
40
+ else
41
+ flash_notice = I18n.t('blacklight.search.errors.request_error')
42
+ # Set the notice flag if the flash[:notice] is already set to the error that we are setting.
43
+ # This is intended to stop the redirect loop error
44
+ notice = flash[:notice] if flash[:notice] == flash_notice
45
+ logger.error exception
46
+ unless notice
47
+ flash[:notice] = flash_notice
48
+ redirect_to root_path, :status => 500
49
+ else
50
+ render :file => "#{Rails.root}/public/500.html", :status => 500
51
+ end
52
+ end
53
+ end
54
+
55
+ # when a request for /resolve/:action/BAD_SOLR_ID is made, this method is executed...
56
+ def invalid_solr_id_error
57
+ id = params.delete(:id)
58
+ flash[:notice] = I18n.t('blacklight.search.errors.invalid_solr_id') + " (#{id})"
59
+ redirect_to(root_path)
60
+ end
61
+
62
+ def blacklight_solr
63
+ @solr ||= RSolr.connect(blacklight_solr_config)
64
+ end
65
+
66
+ def blacklight_solr_config
67
+ Blacklight.solr_config
68
+ end
69
+ end
@@ -1,3 +1,4 @@
1
+ require 'httpclient'
1
2
  module Cul::Scv::Hydra::Thumbnails
2
3
  # some thumbnail urls
3
4
  NO_THUMB = "cul_scv_hydra/crystal/file.png"
@@ -22,26 +23,32 @@ module Cul::Scv::Hydra::Thumbnails
22
23
  if r_obj.respond_to? :thumbnail_info
23
24
  url = r_obj.thumbnail_info
24
25
  else
25
- url = {:url=>image_url(COLLECTION_THUMB),:mime=>'image/png'}
26
+ url = {:asset=>(COLLECTION_THUMB),:mime=>'image/png'}
26
27
  end
27
28
  if url[:asset]
28
- url[:url] = asset_path_from_config(url[:asset])
29
+ #url = {:url=>asset_url(COLLECTION_THUMB),:mime=>'image/png'}
30
+ #redirect_to asset_url(url[:asset]).to_s, status: 302
31
+ #return
29
32
  end
30
- puts "#{url[:url]} #{url[:mime]}"
33
+ Rails.logger.debug "thumbnail #{url[:url] || url[:asset]} #{url[:mime]}"
31
34
  filename = pid + '.' + url[:mime].split('/')[1].downcase
32
35
  h_cd = "filename=""#{CGI.escapeHTML(filename)}"""
33
36
  headers.delete "Cache-Control"
34
37
  headers["Content-Disposition"] = h_cd
35
38
  headers["Content-Type"] = url[:mime]
36
39
 
37
- if url[:url].to_s =~ /^https?:/
40
+ if url[:asset]
41
+ full_path = Rails.application.assets.resolve(url[:asset]).to_path
42
+ render :status => 200, :text => File.read(full_path)
43
+ return
44
+ elsif url[:url].to_s =~ /^https?:/
38
45
  cl = http_client
39
46
  render :status => 200, :text => cl.get_content(url[:url])
40
47
  return
41
48
  else
42
49
  render :status => 200, :text => File.read(url[:url])
43
50
  return
44
- end
51
+ end
45
52
  end
46
53
 
47
54
  def jp2_thumbnail(pid)
@@ -52,16 +59,4 @@ module Cul::Scv::Hydra::Thumbnails
52
59
  return uri.sub(/info:fedora\//,'')
53
60
  end
54
61
 
55
- def asset_path_from_config(asset)
56
- Rails.configuration.assets.paths.each do |dir|
57
- result = "#{dir}/#{asset}"
58
- return result if File.exists?(result)
59
- end
60
- return nil
61
- end
62
-
63
- def image_asset_url(source)
64
- URI.join(root_url, ActionController::Base.helpers.asset_path(source))
65
- end
66
-
67
62
  end
@@ -31,42 +31,24 @@ module Cul::Scv::Hydra::Models::Aggregator
31
31
 
32
32
  def solr_members(opts={})
33
33
  opts = {:rows=>25,:response_format=>:solr}.merge(opts)
34
- self.parts(opts)
35
- #opts = {:rows=>25,:response_format=>:solr}.merge(opts)
36
- #query = self.class.inbound_relationship_query(self.pid, "parts")
37
- #solr_result = ::ActiveFedora::SolrService.instance.conn.query(query, :rows=>opts[:rows])
38
- #if opts[:response_format] == :solr
39
- # return solr_result
40
- #else
41
- # if opts[:response_format] == :id_array
42
- # id_array = []
43
- # solr_result.hits.each do |hit|
44
- # id_array << hit[SOLR_DOCUMENT_ID]
45
- # end
46
- # return id_array
47
- # elsif opts[:response_format] == :load_from_solr || self.load_from_solr
48
- # return ::ActiveFedora::SolrService.reify_solr_results(solr_result,{:load_from_solr=>true})
49
- # else
50
- # return ::ActiveFedora::SolrService.reify_solr_results(solr_result)
51
- # end
52
- #end
34
+ r = self.parts(opts)
35
+ members = []
36
+ r.collect {|hit| members << SolrDocument.new(hit) } unless r.blank?
37
+ members
53
38
  end
54
39
 
55
40
  def members(opts={})
56
- solr_members(opts)
41
+ parts(opts)
57
42
  end
58
43
 
59
44
  def member_ids(opts={})
60
- opts = opts.merge({:response_format=>:id_array})
61
- solr_members(opts)
45
+ solr_members(opts).collect {|hit| hit.id}
62
46
  end
63
47
 
64
48
  def thumbnail_info
65
- r = self.parts.reader(:response_format => :solr)
66
- members = []
67
- r.collect {|hit| members << SolrDocument.new(hit) } unless r.blank?
49
+ members = solr_members
68
50
  if members.length == 0
69
- return {:url=>image_url("cul_scv_hydra/crystal/file.png"),:mime=>'image/png'}
51
+ thumb = {:asset=>"cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
70
52
  else
71
53
  thumb = nil
72
54
  unless datastreams['structMetadata'].new?
@@ -75,20 +57,22 @@ module Cul::Scv::Hydra::Models::Aggregator
75
57
  thumb = thumb_from_members(members)
76
58
  end
77
59
  end
78
- return thumb || {:url=>image_url("cul_scv_hydra/crystal/file.png"),:mime=>'image/png'}
60
+ return thumb || {:asset=>"cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
79
61
  end
80
62
 
81
63
  private
82
64
  def thumb_from_struct(members)
65
+ puts "thumb thumb_from_struct"
83
66
  sm = datastreams['structMetadata']
84
67
  first = sm.divs_with_attribute(false,'ORDER','1').first
85
68
  if first
86
69
  members.each do |member|
70
+ puts "looking for #{first["CONTENTIDS"]} in #{member["identifier_ssim"].inspect}"
87
71
  if member["identifier_ssim"].include? first["CONTENTIDS"]
88
72
  return thumb_from_solr_doc(member)
89
73
  end
90
74
  end
91
- return nil
75
+ return thumb_from_solr_doc(members.first) if members.first
92
76
  else
93
77
  return nil
94
78
  end
@@ -114,8 +98,7 @@ module Cul::Scv::Hydra::Models::Aggregator
114
98
 
115
99
  def thumb_from_solr_doc(solr_doc)
116
100
  if solr_doc and (member = ActiveFedora::Base.find(solr_doc.id, :cast=>true)).respond_to? :thumbnail_info
117
- puts "thumb: " + (thumb = member.thumbnail_info).inspect
118
- thumb
101
+ member.thumbnail_info
119
102
  else
120
103
  return nil
121
104
  end
@@ -142,7 +142,7 @@ module Cul::Scv::Hydra::Models::Common
142
142
  end
143
143
 
144
144
  def thumbnail_info
145
- {:url=>image_url("cul_scv_hydra/crystal/kmultiple.png"),:mime_type=>"image/png"}
145
+ {:asset=>("cul_scv_hydra/crystal/kmultiple.png"),:mime_type=>"image/png"}
146
146
  end
147
147
 
148
148
  private
@@ -72,7 +72,7 @@ module Cul::Scv::Hydra::Models::ImageResource
72
72
  url = "#{DJATOKA_BASE_URL}?#{options.map { |key, value| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"}.join("&") }"
73
73
  {:url => url, :mime => t_parms["svc.format"]}
74
74
  else
75
- return {:url=>image_url("cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
75
+ return {:asset=>"cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
76
76
  end
77
77
  end
78
78
  end
@@ -1,17 +1,3 @@
1
1
  class ContentAggregator < GenericAggregator
2
-
3
- def thumbnail_info
4
- _members = member_ids()
5
- if _members.length > 1
6
- return {:url=>image_url("cul_scv_hydra/crystal/kmultiple.png"),:mime=>'image/png'}
7
- elsif _members.length == 0
8
- return {:url=>image_url("cul_scv_hydra/crystal/file.png"),:mime=>'image/png'}
9
- else
10
- member = ActiveFedora::Base.find(_members[0], :cast=>true)
11
- if member.respond_to? :thumbnail_info
12
- return member.thumbnail_info
13
- end
14
- end
15
- return {:url=>image_url("cul_scv_hydra/crystal/file.png"),:mime=>'image/png'}
16
- end
2
+
17
3
  end
@@ -79,7 +79,7 @@ class GenericResource < ::ActiveFedora::Base
79
79
  url = "#{DJATOKA_BASE_URL}?#{options.map { |key, value| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}"}.join("&") }"
80
80
  {:url => url, :mime => t_parms["svc.format"]}
81
81
  else
82
- return {:url => image_url("cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
82
+ return {:asset => "cul_scv_hydra/crystal/file.png",:mime=>'image/png'}
83
83
  end
84
84
  end
85
85
 
@@ -1,7 +1,7 @@
1
1
  module Cul
2
2
  module Scv
3
3
  module Hydra
4
- VERSION = '0.13.3'
4
+ VERSION = '0.14.0'
5
5
  def self.version
6
6
  VERSION
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cul_scv_hydra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.3
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Armintor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-02 00:00:00.000000000 Z
11
+ date: 2014-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blacklight
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httpclient
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: active-fedora
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +212,8 @@ files:
198
212
  - app/assets/images/cul_scv_hydra/crystal/mp3.png
199
213
  - app/assets/images/cul_scv_hydra/crystal/multimedia2.png
200
214
  - app/assets/images/cul_scv_hydra/crystal/video.png
215
+ - app/controllers/concerns/cul/scv/hydra/controller.rb
216
+ - app/controllers/concerns/cul/scv/hydra/resolver.rb
201
217
  - app/controllers/concerns/cul/scv/hydra/thumbnails.rb
202
218
  - app/models/bag_aggregator.rb
203
219
  - app/models/concerns/cul/scv/hydra/models.rb