hydra-collections 3.0.0.beta3 → 4.0.0.beta1

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: 89c0019427e673f40b0abd3a2293d9bf74bd19cc
4
- data.tar.gz: d2f4fb9c57d32e5b3a392afb27174a62666f4021
3
+ metadata.gz: 1c7e16cee43a7fdaf1ef7f112ae42f8eb1ddb684
4
+ data.tar.gz: d99f69ce5988cf2023a811344fa461bf3b859e2f
5
5
  SHA512:
6
- metadata.gz: c09ea609b5bfa9befba296dc44dbb2349d3d52f289f68549feceaefd8afbe07d6d6973e77ed1c9dbd95e5623a779f4c8ce71ff6a2380fda548aa9d04e4cc4124
7
- data.tar.gz: eaf736cb88e9690b7b93d09deb2ba3aada36ca27c9d649753592885e88dbfd7d1db0a8e5a8353b4b7e6a8b0c1e6a456494c55e7d3e9436a427d057a5bb0680e4
6
+ metadata.gz: fe6f6ae745110afbf7fa17e8139a075124421e9f39796b79eb6ede511e80cfdd75238469262be83dd929b941f6d43f66f03e1af5dc23096ce9d53b7e9a2cc533
7
+ data.tar.gz: b1a372ad7bfa3419d0fddc0350e11b6966b41dac9a30e53e996b05f494164af66e79afc06fc2325181889aa1477ed5945938b8d6976a2ad976e0d6e8c1939af6
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/README.md CHANGED
@@ -35,7 +35,7 @@ Or install it yourself as:
35
35
 
36
36
  ### Make your Models Collectible
37
37
 
38
- Add `include Hydra::Collections::Collectible` to the models for anything that you want to be able to add to collections (ie. GenericFile, Book, Article, etc.), then add `index_collection_pids` to the solrization logic (ie. put it in to_solr)
38
+ Add `include Hydra::Collections::Collectible` to the models for anything that you want to be able to add to collections (ie. GenericFile, Book, Article, etc.), then add `index_collection_ids` to the solrization logic (ie. put it in to_solr)
39
39
 
40
40
  Example:
41
41
  ```ruby
@@ -44,13 +44,13 @@ class GenericFile < ActiveFedora::Base
44
44
  ...
45
45
  def to_solr(solr_doc={}, opts={})
46
46
  super(solr_doc, opts)
47
- index_collection_pids(solr_doc)
47
+ index_collection_ids(solr_doc)
48
48
  return solr_doc
49
49
  end
50
50
  end
51
51
  ```
52
52
 
53
- Any items that include the `Hydra::Collections::Collectible` module can look up which collections they belong to via `.collections`. The `index_collection_pids` puts the pids of all associated collections into the `collection` facet.
53
+ Any items that include the `Hydra::Collections::Collectible` module can look up which collections they belong to via `.collections`. The `index_collection_ids` puts the ids of all associated collections into the `collection` facet.
54
54
 
55
55
  ### Make the Collection show as a facet in your CatalogController
56
56
 
@@ -1,12 +1,8 @@
1
- require 'blacklight/catalog'
2
-
3
1
  module Hydra::Collections::SelectsCollections
4
-
5
- extend ActiveSupport::Autoload
6
2
  extend ActiveSupport::Concern
7
3
 
8
4
  def access_levels
9
- {read:[:read,:edit],edit:[:edit]}
5
+ { read: [:read, :edit], edit: [:edit] }
10
6
  end
11
7
 
12
8
  # add one of the following methods as a before filter on any page that shows the form_for_select_collection
@@ -32,11 +28,10 @@ module Hydra::Collections::SelectsCollections
32
28
 
33
29
  # temporarily set solr_search_params_logic to collection_search_params_logic
34
30
  orig_solr_search_params_logic = self.class.solr_search_params_logic
35
- # self.class.solr_search_params_logic += [:add_collection_filter]
36
31
  self.class.solr_search_params_logic = collection_search_params_logic
37
32
  logger.debug "Collection Search logic: "+ self.class.solr_search_params_logic.inspect
38
33
  # run the solr query to find the collections
39
- (resp, doc_list) = get_search_results({:q => ''}, {:rows=>100})
34
+ (resp, doc_list) = get_search_results({q: ''}, {rows: 100})
40
35
 
41
36
  #reset to original solr logic
42
37
  self.class.send(:define_method, "discovery_permissions") { original_permissions } unless access_level.blank?
@@ -48,7 +43,7 @@ module Hydra::Collections::SelectsCollections
48
43
 
49
44
  def add_collection_filter(solr_parameters, user_parameters)
50
45
  solr_parameters[:fq] ||= []
51
- solr_parameters[:fq] << "#{Solrizer.solr_name("has_model", :symbol)}:\"info:fedora/afmodel:Collection\""
46
+ solr_parameters[:fq] << "#{Solrizer.solr_name("has_model", :symbol)}:Collection"
52
47
  end
53
48
 
54
49
  # Defines which solr_search_params_logic should be used when searching for Collections
@@ -14,7 +14,7 @@ module Hydra
14
14
 
15
15
  # Catch permission errors
16
16
  rescue_from Hydra::AccessDenied, CanCan::AccessDenied do |exception|
17
- if (exception.action == :edit)
17
+ if exception.action == :edit
18
18
  redirect_to(collections.url_for({:action=>'show'}), :alert => "You do not have sufficient privileges to edit this document")
19
19
  elsif current_user and current_user.persisted?
20
20
  redirect_to root_url, :alert => exception.message
@@ -46,18 +46,19 @@ module Hydra
46
46
 
47
47
  def after_create
48
48
  respond_to do |format|
49
+ ActiveFedora::SolrService.instance.conn.commit
49
50
  format.html { redirect_to collections.collection_path(@collection), notice: 'Collection was successfully created.' }
50
51
  format.json { render json: @collection, status: :created, location: @collection }
51
52
  end
52
53
  end
53
-
54
+
54
55
  def after_create_error
55
56
  respond_to do |format|
56
57
  format.html { render action: "new" }
57
58
  format.json { render json: @collection.errors, status: :unprocessable_entity }
58
59
  end
59
60
  end
60
-
61
+
61
62
  def create
62
63
  @collection.apply_depositor_metadata(current_user.user_key)
63
64
  add_members_to_collection unless batch.empty?
@@ -67,8 +68,8 @@ module Hydra
67
68
  after_create_error
68
69
  end
69
70
  end
70
-
71
- def after_update
71
+
72
+ def after_update
72
73
  if flash[:notice].nil?
73
74
  flash[:notice] = 'Collection was successfully updated.'
74
75
  end
@@ -77,14 +78,14 @@ module Hydra
77
78
  format.json { render json: @collection, status: :updated, location: @collection }
78
79
  end
79
80
  end
80
-
81
+
81
82
  def after_update_error
82
83
  respond_to do |format|
83
84
  format.html { render action: collections.edit_collection_path(@collection) }
84
85
  format.json { render json: @collection.errors, status: :unprocessable_entity }
85
86
  end
86
87
  end
87
-
88
+
88
89
  def update
89
90
  process_member_changes
90
91
  @collection.update_attributes(params[:collection].except(:members))
@@ -94,21 +95,21 @@ module Hydra
94
95
  after_update_error
95
96
  end
96
97
  end
97
-
98
+
98
99
  def after_destroy (id)
99
100
  respond_to do |format|
100
101
  format.html { redirect_to catalog_index_path, notice: 'Collection was successfully deleted.' }
101
102
  format.json { render json: {id:id}, status: :destroyed, location: @collection }
102
- end
103
+ end
103
104
  end
104
105
 
105
106
  def after_destroy_error (id)
106
107
  respond_to do |format|
107
108
  format.html { redirect_to catalog_index_path, notice: 'Collection could not be deleted.' }
108
109
  format.json { render json: {id:id}, status: :destroy_error, location: @collection }
109
- end
110
+ end
110
111
  end
111
-
112
+
112
113
  def destroy
113
114
  if @collection.destroy
114
115
  after_destroy(params[:id])
@@ -116,16 +117,16 @@ module Hydra
116
117
  after_destroy_error(params[:id])
117
118
  end
118
119
  end
119
-
120
+
120
121
  protected
121
122
 
122
- # Queries Solr for members of the collection.
123
+ # Queries Solr for members of the collection.
123
124
  # Populates @response and @member_docs similar to Blacklight Catalog#index populating @response and @documents
124
125
  def query_collection_members
125
126
  query = params[:cq]
126
127
 
127
128
  #default the rows to 100 if not specified then merge in the user parameters and the attach the collection query
128
- solr_params = {rows:100}.merge(params.symbolize_keys).merge({:q => query})
129
+ solr_params = { rows: 100 }.merge(params.symbolize_keys).merge(q: query)
129
130
 
130
131
  # run the solr query to find the collections
131
132
  (@response, @member_docs) = get_search_results(solr_params)
@@ -142,17 +143,15 @@ module Hydra
142
143
 
143
144
  def add_members_to_collection collection = nil
144
145
  collection ||= @collection
145
- collection.members(true)
146
146
  collection.member_ids = batch.concat(collection.member_ids)
147
147
  end
148
148
 
149
149
  def remove_members_from_collection
150
- @collection.members(true)
151
- @collection.member_ids = (@collection.member_ids - batch)
150
+ @collection.members.delete(batch.map { |pid| ActiveFedora::Base.find(pid) })
152
151
  end
153
152
 
154
153
  def assign_batch_to_collection
155
- @collection.members(true)
154
+ @collection.members(true) #Force the members to get cached before (maybe) removing some of them
156
155
  @collection.member_ids = batch
157
156
  end
158
157
 
@@ -166,11 +165,11 @@ module Hydra
166
165
  flash[:error] = "An error occured. Files were not moved to #{destination_collection.title} Collection."
167
166
  end
168
167
  end
169
-
168
+
170
169
  # include filters into the query to only include the collection memebers
171
170
  def include_collection_ids(solr_parameters, user_parameters)
172
171
  solr_parameters[:fq] ||= []
173
- solr_parameters[:fq] << Solrizer.solr_name(:collection)+':"'+@collection.id+'"'
172
+ solr_parameters[:fq] << Solrizer.solr_name(:collection, :facetable)+':"'+@collection.id+'"'
174
173
  end
175
174
  end # module CollectionsControllerBehavior
176
175
  end # module Hydra
@@ -4,7 +4,8 @@ module CollectionsSearchHelper
4
4
  # @param [String] collection_pid the pid of a collection
5
5
  # @return [String] the title of the collection if available, otherwise its pid
6
6
  def collection_name(collection_pid)
7
- Collection.load_instance_from_solr(collection_pid).title || collection_pid
7
+ #TODO this can be loaded from solr
8
+ Collection.find(collection_pid).title || collection_pid
8
9
  end
9
10
 
10
11
  end
@@ -7,26 +7,87 @@ module Hydra
7
7
  include Hydra::Collections::Collectible
8
8
 
9
9
  included do
10
- has_metadata "descMetadata", type: Hydra::CollectionRdfDatastream
11
- has_metadata "properties", type: Hydra::Datastream::Properties
12
-
13
- has_and_belongs_to_many :members, property: :has_collection_member, class_name: "ActiveFedora::Base" , after_remove: :update_member
14
-
15
- has_attributes :depositor, datastream: :properties, multiple: false
16
-
17
- has_attributes :title, :date_uploaded, :date_modified, :description,
18
- datastream: :descMetadata, multiple: false
19
- has_attributes :creator, :contributor, :based_near, :part_of, :publisher,
20
- :date_created, :subject,:resource_type, :rights,
21
- :identifier, :language, :tag, :related_url,
22
- datastream: :descMetadata, multiple: true
10
+ has_and_belongs_to_many :members, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, class_name: "ActiveFedora::Base" , after_remove: :update_member
11
+
12
+ property :depositor, predicate: RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt")
13
+
14
+ property :part_of, predicate: RDF::DC.isPartOf
15
+ property :contributor, predicate: RDF::DC.contributor do |index|
16
+ index.as :stored_searchable, :facetable
17
+ end
18
+ property :creator, predicate: RDF::DC.creator do |index|
19
+ index.as :stored_searchable, :facetable
20
+ end
21
+ property :title, predicate: RDF::DC.title do |index|
22
+ index.as :stored_searchable
23
+ end
24
+ property :description, predicate: RDF::DC.description do |index|
25
+ index.type :text
26
+ index.as :stored_searchable
27
+ end
28
+ property :publisher, predicate: RDF::DC.publisher do |index|
29
+ index.as :stored_searchable, :facetable
30
+ end
31
+ property :date_created, predicate: RDF::DC.created do |index|
32
+ index.as :stored_searchable
33
+ end
34
+ property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
35
+ index.type :date
36
+ index.as :stored_sortable
37
+ end
38
+ property :date_modified, predicate: RDF::DC.modified do |index|
39
+ index.type :date
40
+ index.as :stored_sortable
41
+ end
42
+ property :subject, predicate: RDF::DC.subject do |index|
43
+ index.as :stored_searchable, :facetable
44
+ end
45
+ property :language, predicate: RDF::DC.language do |index|
46
+ index.as :stored_searchable, :facetable
47
+ end
48
+ property :rights, predicate: RDF::DC.rights do |index|
49
+ index.as :stored_searchable
50
+ end
51
+ property :resource_type, predicate: RDF::DC.type do |index|
52
+ index.as :stored_searchable, :facetable
53
+ end
54
+ property :identifier, predicate: RDF::DC.identifier do |index|
55
+ index.as :stored_searchable
56
+ end
57
+ property :based_near, predicate: RDF::FOAF.based_near do |index|
58
+ index.as :stored_searchable, :facetable
59
+ end
60
+ property :tag, predicate: RDF::DC.relation do |index|
61
+ index.as :stored_searchable, :facetable
62
+ end
63
+ property :related_url, predicate: RDF::RDFS.seeAlso
64
+
65
+ # Single-valued properties
66
+ def depositor
67
+ super.first
68
+ end
69
+
70
+ def title
71
+ super.first
72
+ end
73
+
74
+ def date_uploaded
75
+ super.first
76
+ end
77
+
78
+ def date_modified
79
+ super.first
80
+ end
81
+
82
+ def description
83
+ super.first
84
+ end
23
85
 
24
86
  before_create :set_date_uploaded
25
87
  before_save :set_date_modified
88
+ before_destroy :update_all_members
26
89
 
27
90
  after_save :update_all_members
28
-
29
- before_destroy :update_all_members
30
91
  end
31
92
 
32
93
  def terms_for_editing
@@ -34,7 +95,11 @@ module Hydra
34
95
  end
35
96
 
36
97
  def terms_for_display
37
- self.descMetadata.class.properties.keys.map{|v| v.to_sym}
98
+ [
99
+ :part_of, :contributor, :creator, :title, :description, :publisher,
100
+ :date_created, :date_uploaded, :date_modified, :subject, :language, :rights,
101
+ :resource_type, :identifier, :based_near, :tag, :related_url
102
+ ]
38
103
  end
39
104
 
40
105
  def update_all_members
@@ -58,6 +123,5 @@ module Hydra
58
123
  self.date_modified = Date.today
59
124
  end
60
125
 
61
- end
62
-
126
+ end
63
127
  end
@@ -1,19 +1,3 @@
1
- <%#
2
- Copyright © 2012 The Pennsylvania State University
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- %>
16
-
17
1
  <div style="float: right;" >
18
2
  <%= form_for([collections, @collection] , :method => :get, :class => "well form-search") do |f| %>
19
3
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["cam156@psu.edu"]
11
11
  spec.description = "A rails engine for managing Hydra Collections"
12
12
  spec.summary = "A rails engine for managing Hydra Collections"
13
- spec.homepage = "https://github.com/psu-stewardship/hydra-collections"
13
+ spec.homepage = "https://github.com/projecthydra-labs/hydra-collections"
14
14
  spec.license = "APACHE2"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "blacklight"
22
- spec.add_dependency "hydra-head", "~> 8.0.0.beta1"
22
+ spec.add_dependency "hydra-head", "~> 9.0.0.beta1"
23
+ spec.add_dependency 'deprecation'
23
24
 
24
25
  spec.add_development_dependency "engine_cart"
25
26
  spec.add_development_dependency "rspec-rails"
@@ -18,12 +18,12 @@ module Hydra
18
18
  protected
19
19
 
20
20
  def batch_ids_from_params
21
- if params["batch_document_ids"].nil? || params["batch_document_ids"].empty?
22
- return []
21
+ if params["batch_document_ids"].blank?
22
+ []
23
23
  elsif params["batch_document_ids"] == "all"
24
- return Hydra::Collections::SearchService.new(session, current_user.user_key).last_search_documents.map(&:id)
24
+ Hydra::Collections::SearchService.new(session, current_user.user_key).last_search_documents.map(&:id)
25
25
  else
26
- return params["batch_document_ids"]
26
+ params["batch_document_ids"]
27
27
  end
28
28
  end
29
29
 
@@ -52,4 +52,4 @@ module Hydra
52
52
 
53
53
  end
54
54
  end
55
- end
55
+ end
@@ -1,25 +1,32 @@
1
1
  # This module adds a `has_many :collections` association to any models that you mix it into, using the :has_collection_member property
2
2
  # It also provides methods to help you index the information as a facet
3
+ require 'deprecation'
3
4
  module Hydra::Collections::Collectible
4
- extend ActiveSupport::Autoload
5
5
  extend ActiveSupport::Concern
6
-
6
+ extend Deprecation
7
+ self.deprecation_horizon = "hydra-collections 4.0"
8
+
7
9
  included do
8
- #after_solrize << :index_collection_pids
9
- has_many :collections, property: :has_collection_member, :class_name => "ActiveFedora::Base"
10
+ has_many :collections, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, class_name: "ActiveFedora::Base"
10
11
  end
11
12
 
12
- # Add this method to your solrization logic (ie. in to_solr) in order to populate the 'collection' facet
13
+ # Add this method to your solrization logic (ie. in to_solr) in order to populate the 'collection' facet
13
14
  # with the pids of any collections that contain the current object.
14
15
  # @example
15
16
  # def to_solr(solr_doc={}, opts={})
16
17
  # super(solr_doc, opts)
17
- # index_collection_pids(solr_doc)
18
+ # index_collection_ids(solr_doc)
18
19
  # return solr_doc
19
20
  # end
20
- def index_collection_pids(solr_doc={})
21
+ def index_collection_ids(solr_doc={})
21
22
  solr_doc[Solrizer.solr_name(:collection, :facetable)] = self.collection_ids
22
23
  solr_doc[Solrizer.solr_name(:collection)] = self.collection_ids
23
24
  solr_doc
24
25
  end
25
- end
26
+
27
+ def index_collection_pids(solr_doc={})
28
+ index_collection_ids(solr_doc)
29
+ end
30
+ deprecation_deprecate :index_collection_pids
31
+
32
+ end