hydra-collections 0.0.1 → 0.0.2
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/Gemfile +2 -0
- data/app/assets/javascripts/hydra/batch_select.js +2 -1
- data/app/assets/javascripts/hydra_collections.js +1 -0
- data/app/assets/stylesheets/hydra_collections.css.scss +4 -0
- data/app/helpers/collections_helper.rb +28 -3
- data/app/models/solr_document.rb +13 -0
- data/app/views/collections/_button_create_collection.html.erb +1 -1
- data/app/views/collections/_button_for_delete_collection.html.erb +4 -0
- data/app/views/collections/_button_for_update_collection.html.erb +4 -0
- data/app/views/collections/_button_remove_from_collection.html.erb +6 -0
- data/app/views/collections/_document_header.html.erb +12 -0
- data/app/views/collections/_document_list.html.erb +1 -0
- data/app/views/collections/_form_for_select_collection.html.erb +20 -10
- data/app/views/collections/_single_item_action_fields.html.erb +6 -0
- data/app/views/collections/show.html.erb +1 -6
- data/lib/hydra-collections.rb +1 -0
- data/lib/hydra/collection.rb +5 -4
- data/lib/hydra/collections.rb +2 -0
- data/lib/hydra/collections/selects_collections.rb +49 -0
- data/lib/hydra/collections/solr_document_behavior.rb +33 -0
- data/lib/hydra/collections/version.rb +1 -1
- data/lib/hydra/collections_controller_behavior.rb +86 -18
- data/spec/controllers/catalog_controller_spec.rb +44 -0
- data/spec/controllers/collections_controller_spec.rb +34 -1
- data/spec/controllers/selects_collections_spec.rb +102 -0
- data/spec/helpers/collections_helper_spec.rb +25 -6
- data/spec/support/app/views/catalog/_index_collection.html.erb +1 -0
- data/spec/support/app/views/catalog/_sort_and_per_page.html.erb +1 -8
- data/spec/support/lib/generators/test_app_generator.rb +24 -3
- metadata +18 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d9f1837b7839dd05eb2e4491c0880601f1e9085d
|
|
4
|
+
data.tar.gz: 0ae0566206139f10230859c5eac19a9056ee8f70
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1798220406600445cf05d2e8fcaf94a3fa68fcc6eea05afebc31f79caddd1c85be19b2c1b81e0a3c1a72b997a98d242199d9ae548b4881900522210b22f1a06e
|
|
7
|
+
data.tar.gz: 3a5c84107f842c2dea9b4ca6cfbd1efee7f7704d35854c6d3bf0b47653e28df81c3402b9f93ac8de82e6fd5026ebf7cdc331d98c070910fa8dff9681ed381660
|
data/Gemfile
CHANGED
|
@@ -3,6 +3,8 @@ source 'https://rubygems.org'
|
|
|
3
3
|
# Specify your gem's dependencies in hydra-collections.gemspec
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
|
+
gem 'blacklight', github:'projectblacklight/blacklight' ,ref:'2eb87e73ee81ee701982ca32e5eca37429e3c199'
|
|
7
|
+
|
|
6
8
|
group :development, :test do
|
|
7
9
|
gem 'sqlite3'
|
|
8
10
|
gem "factory_girl_rails", "~> 4.1.0"
|
|
@@ -32,7 +32,8 @@ $(function () {
|
|
|
32
32
|
var form = $(this).closest("form");
|
|
33
33
|
$.map( $(".batch_document_selector:checked"), function(document, i) {
|
|
34
34
|
var id = document.id.substring("batch_document_".length);
|
|
35
|
-
|
|
35
|
+
if (form.children("input[value='"+id+"']").length == 0)
|
|
36
|
+
form.append('<input type="hidden" multiple="multiple" name="batch_document_ids[]" value="'+id+'" />');
|
|
36
37
|
});
|
|
37
38
|
|
|
38
39
|
|
|
@@ -6,6 +6,7 @@ $(function () {
|
|
|
6
6
|
var form = $(this).closest("form");
|
|
7
7
|
var collection_id = $(".collection-selector:checked")[0].value;
|
|
8
8
|
form[0].action = form[0].action.replace("collection_replace_id",collection_id);
|
|
9
|
+
form.append('<input type="hidden" value="add" name="collection[members]"></input>');
|
|
9
10
|
|
|
10
11
|
});
|
|
11
12
|
|
|
@@ -4,11 +4,36 @@ module CollectionsHelper
|
|
|
4
4
|
|
|
5
5
|
# Displays the Collections create collection button. Put this in your search result page template. We recommend putting it in catalog/_sort_and_per_page.html.erb
|
|
6
6
|
def button_for_create_collection(label = 'Create Collection')
|
|
7
|
-
render :
|
|
7
|
+
render partial:'/collections/button_create_collection', locals:{label:label}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Displays the Collections update collection button. Put this in your search result page template. We recommend putting it in catalog/_sort_and_per_page.html.erb
|
|
11
|
+
def button_for_update_collection(label = 'Update Collection', collection_id = 'collection_replace_id' )
|
|
12
|
+
render partial:'/collections/button_for_update_collection', locals:{label:label, collection_id:collection_id}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Displays the Collections delete collection button. Put this in your search result page for each collection found.
|
|
16
|
+
def button_for_delete_collection(collection, label = 'Delete Collection', confirm = 'Are you sure?')
|
|
17
|
+
render partial:'/collections/button_for_delete_collection', locals:{collection:collection,label:label, confirm:confirm}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def button_for_remove_from_collection(document, label = 'Remove From Collection')
|
|
21
|
+
render partial:'/collections/button_remove_from_collection', locals:{label:label, document:document}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# add hidden fields to a form for removing a single document from a collection
|
|
25
|
+
def single_item_action_remove_form_fields(form, document)
|
|
26
|
+
single_item_action_form_fields(form, document, "remove")
|
|
8
27
|
end
|
|
9
28
|
|
|
10
|
-
|
|
11
|
-
|
|
29
|
+
# add hidden fields to a form for adding a single document to a collection
|
|
30
|
+
def single_item_action_add_form_fields(form, document)
|
|
31
|
+
single_item_action_form_fields(form, document, "add")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# add hidden fields to a form for performing an action on a single document on a collection
|
|
35
|
+
def single_item_action_form_fields(form, document, action)
|
|
36
|
+
render partial:'/collections/single_item_action_fields', locals:{form:form, document:document, action: action}
|
|
12
37
|
end
|
|
13
38
|
|
|
14
39
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
|
2
|
+
class SolrDocument
|
|
3
|
+
# Add Blacklight behaviors to the SolrDocument
|
|
4
|
+
include Blacklight::Solr::Document
|
|
5
|
+
# Adds Collection behaviors to the SolrDocument.
|
|
6
|
+
include Hydra::Collections::SolrDocumentBehavior
|
|
7
|
+
|
|
8
|
+
# Method to return the ActiveFedora model
|
|
9
|
+
def hydra_model
|
|
10
|
+
Array(self[Solrizer.solr_name('active_fedora_model', Solrizer::Descriptor.new(:string, :stored, :indexed))]).first
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<%= button_to label, collections.new_collection_path, :method=>:get, :class=>"btn btn-primary collection-add", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-add' %>
|
|
1
|
+
<%= button_to label, collections.new_collection_path, :method=>:get, :class=>"btn btn-primary collection-add submits-batches", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-add' %>
|
|
2
2
|
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<%# button for deleting a collections %>
|
|
2
|
+
<%# collection -- collection to be deleted %>
|
|
3
|
+
<%= button_to label, collections.collection_path(collection.id), :confirm => confirm, :method=>:delete, :class=>"btn btn-primary collection-delete", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-add' %>
|
|
4
|
+
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<%# button for updating a collections %>
|
|
2
|
+
<%# collection_id -- collection to be updated (use 'collection_replace_id' if you wish the form to be updated by a form value) %>
|
|
3
|
+
<%# label -- button label %>
|
|
4
|
+
<%= button_to label, collections.collection_path(collection_id), :method=>:put, :class=>"btn btn-primary updates-collection submits-batches collection-update", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-update' %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%#= button_to label, , :class=>"btn btn-primary collection-remove", 'data-behavior'=>'hydra-collections-remove', members:"delete", batch_document_ids:[document.id] %>
|
|
2
|
+
|
|
3
|
+
<%= form_for @collection, url:collections.collection_path(@collection.id), :method=>:put do |f| %>
|
|
4
|
+
<%= single_item_action_remove_form_fields(f,document) %>
|
|
5
|
+
<%= f.submit label, :class => "btn btn-primary collection-remove" %>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
<% # header bar for doc items in index view -%>
|
|
3
|
+
<div class="documentHeader clearfix">
|
|
4
|
+
|
|
5
|
+
<% # main title container for doc partial view -%>
|
|
6
|
+
<h5 class="index_title"><%= t('blacklight.search.documents.counter', :counter => (document_counter + 1 + @response.params[:start].to_i)) %><%= link_to_document document, :label=>document_show_link_field(document), :counter => (document_counter + 1 + @response.params[:start].to_i) %></h5>
|
|
7
|
+
|
|
8
|
+
<div class="documentFunctions span2">
|
|
9
|
+
<%= button_for_remove_from_collection(document) %>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= render partial:'catalog/document_list', locals:{documents: documents} %>
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
Please Select your colection to add you files to:
|
|
2
1
|
<% thing = Collection.new %>
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
<% if user_collections.nil?%>
|
|
3
|
+
<b> Make sure you have included Hydra::Collections::SelectsCollections in your controller for this page and
|
|
4
|
+
added a before filter with one of the find_collections variations depending on your access level: find_collections, find_collections_with_read_access, find_collections_with_edit_access
|
|
5
|
+
</b>
|
|
6
|
+
<% elsif user_collections.blank? %>
|
|
7
|
+
<b> You do not have access to any existing collections please create a collection. </b>
|
|
8
|
+
<% else %>
|
|
9
|
+
Please Select your collection to add you files to:
|
|
10
|
+
<%= form_tag(collections.collection_path('collection_replace_id'), :method => "put") do %>
|
|
11
|
+
<%#= form_for thing, :url => , :html => {:multipart => true, :class => 'form-horizontal'}, :method => :put do |f| %>
|
|
12
|
+
<input type="hidden" name="test" value="val" />
|
|
13
|
+
<%= hash_as_hidden_fields({:collection =>{members:"add"}}) %>
|
|
14
|
+
<div class="collection-list">
|
|
15
|
+
<ul>
|
|
16
|
+
<% user_collections.each do |collection| %>
|
|
17
|
+
<li> <%= radio_button_tag(:id, collection.id, false, :class => "collection-selector") %><%= label_tag(:collection, collection.title) %> </li>
|
|
18
|
+
<% end %>
|
|
19
|
+
</ul>
|
|
20
|
+
</div>
|
|
21
|
+
<%= button_to "Update Collection", collections.collections_path, :method=>:put, :class=>"btn btn-primary collection-update submits-batches", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-add' %>
|
|
10
22
|
<% end %>
|
|
11
|
-
</ul>
|
|
12
|
-
<%= button_to "Update Collection", collections.collections_path, :method=>:put, :class=>"btn btn-primary collection-update submits-batches", 'data-behavior'=>'hydra-collections', :id=>'hydra-collection-add' %>
|
|
13
23
|
<% end %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%# this includes the fields in a form necissary for manipulating a single item in a collection %>
|
|
2
|
+
<%# form - form these fields will reside in %>
|
|
3
|
+
<%# action - collection action: add or remove %>
|
|
4
|
+
<%# document - current document %>
|
|
5
|
+
<%= form.hidden_field :members, :value => action %>
|
|
6
|
+
<%= hidden_field :batch_document_ids, '',{value:document.id, multiple:true} %>
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
<h1><%=@collection.title%><h1>
|
|
2
2
|
<h3><%=@collection.description%> </h3>
|
|
3
3
|
<h3> <u>Contained Files </u></h3>
|
|
4
|
-
|
|
5
|
-
<tr> <th> File id </th> </tr>
|
|
6
|
-
<% @collection.members.each_with_index do |document,counter| %>
|
|
7
|
-
<tr><td><%=document.pid%></tr>
|
|
8
|
-
<% end %>
|
|
9
|
-
</table>
|
|
4
|
+
<%= render partial:'document_list', locals:{documents: @member_docs} %>
|
data/lib/hydra-collections.rb
CHANGED
data/lib/hydra/collection.rb
CHANGED
|
@@ -6,9 +6,10 @@ module Hydra
|
|
|
6
6
|
extend ActiveSupport::Concern
|
|
7
7
|
extend ActiveSupport::Autoload
|
|
8
8
|
autoload :Permissions
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
include Hydra::ModelMethods # for access to apply_depositor_metadata
|
|
10
|
+
include Hydra::ModelMixins::RightsMetadata
|
|
11
|
+
|
|
12
|
+
included do
|
|
12
13
|
has_metadata :name => "descMetadata", :type => CollectionRdfDatastream
|
|
13
14
|
has_metadata :name => "properties", :type => Hydra::Datastream::Properties
|
|
14
15
|
has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
|
@@ -16,7 +17,7 @@ module Hydra
|
|
|
16
17
|
has_and_belongs_to_many :members, :property => :has_collection_member, :class_name => "ActiveFedora::Base"
|
|
17
18
|
|
|
18
19
|
delegate_to :properties, [:depositor], :unique => true
|
|
19
|
-
delegate_to :descMetadata, [:date_uploaded, :date_modified,
|
|
20
|
+
delegate_to :descMetadata, [:date_uploaded, :date_modified,
|
|
20
21
|
:title, :description], :unique => true
|
|
21
22
|
|
|
22
23
|
before_create :set_date_uploaded
|
data/lib/hydra/collections.rb
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'blacklight/catalog'
|
|
2
|
+
|
|
3
|
+
module Hydra::Collections::SelectsCollections
|
|
4
|
+
|
|
5
|
+
extend ActiveSupport::Autoload
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
def access_levels
|
|
9
|
+
{read:[:read,:edit],edit:[:edit]}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# add one of the following methods as a before filter on any page that shows the form_for_select_collection
|
|
13
|
+
def find_collections_with_read_access
|
|
14
|
+
find_collections(:read)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def find_collections_with_edit_access
|
|
18
|
+
find_collections(:edit)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def find_collections (access_level='')
|
|
22
|
+
# need to know the user if there is an access level applied otherwise we are just doing public collections
|
|
23
|
+
authenticate_user! unless access_level.blank?
|
|
24
|
+
|
|
25
|
+
# update the permission filters for the query of need be
|
|
26
|
+
original_permissions = discovery_permissions
|
|
27
|
+
self.class.send(:define_method, "discovery_permissions") { access_levels[access_level] } unless access_level.blank?
|
|
28
|
+
|
|
29
|
+
# add the collection filter to the solr logic for this query
|
|
30
|
+
orig_solr_search_params_logic = self.class.solr_search_params_logic
|
|
31
|
+
self.class.solr_search_params_logic += [:add_collection_filter]
|
|
32
|
+
|
|
33
|
+
# run the solr query to find the collections
|
|
34
|
+
(resp, doc_list) = get_search_results(:q => '', :rows=>100)
|
|
35
|
+
|
|
36
|
+
#reset to original solr logic
|
|
37
|
+
self.class.send(:define_method, "discovery_permissions") { original_permissions } unless access_level.blank?
|
|
38
|
+
self.class.solr_search_params_logic = orig_solr_search_params_logic
|
|
39
|
+
|
|
40
|
+
# return the user's collections (or public collections if no access_level is applied)
|
|
41
|
+
@user_collections = doc_list
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def add_collection_filter(solr_parameters, user_parameters)
|
|
45
|
+
solr_parameters[:fq] ||= []
|
|
46
|
+
solr_parameters[:fq] << "#{Solrizer.solr_name("has_model", :symbol)}:\"info:fedora/afmodel:Collection\""
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright © 2012 The Pennsylvania State University
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# -*- encoding : utf-8 -*-
|
|
16
|
+
module Hydra
|
|
17
|
+
module Collections
|
|
18
|
+
module SolrDocumentBehavior
|
|
19
|
+
def title_or_label
|
|
20
|
+
title || label
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def title
|
|
24
|
+
Array(self[Solrizer.solr_name('desc_metadata__title')]).first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def description
|
|
28
|
+
Array(self[Solrizer.solr_name('desc_metadata__description')]).first
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'blacklight'
|
|
2
|
+
|
|
1
3
|
# -*- coding: utf-8 -*-
|
|
2
4
|
# Copyright © 2012 The Pennsylvania State University
|
|
3
5
|
#
|
|
@@ -12,6 +14,7 @@
|
|
|
12
14
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
15
|
# See the License for the specific language governing permissions and
|
|
14
16
|
# limitations under the License.
|
|
17
|
+
include Blacklight::SolrHelper
|
|
15
18
|
|
|
16
19
|
module Hydra
|
|
17
20
|
module CollectionsControllerBehavior
|
|
@@ -20,6 +23,7 @@ module Hydra
|
|
|
20
23
|
included do
|
|
21
24
|
include Hydra::Controller::ControllerBehavior
|
|
22
25
|
include Blacklight::Configurable # comply with BL 3.7
|
|
26
|
+
include Blacklight::Controller
|
|
23
27
|
include Hydra::Collections::AcceptsBatches
|
|
24
28
|
|
|
25
29
|
# This is needed as of BL 3.7
|
|
@@ -28,7 +32,7 @@ module Hydra
|
|
|
28
32
|
# Catch permission errors
|
|
29
33
|
rescue_from Hydra::AccessDenied, CanCan::AccessDenied do |exception|
|
|
30
34
|
if (exception.action == :edit)
|
|
31
|
-
redirect_to(
|
|
35
|
+
redirect_to(collections.url_for({:action=>'show'}), :alert => "You do not have sufficient privileges to edit this document")
|
|
32
36
|
elsif current_user and current_user.persisted?
|
|
33
37
|
redirect_to root_url, :alert => exception.message
|
|
34
38
|
else
|
|
@@ -45,24 +49,64 @@ module Hydra
|
|
|
45
49
|
def new
|
|
46
50
|
#@collection = ::Collection.new
|
|
47
51
|
end
|
|
48
|
-
|
|
52
|
+
|
|
53
|
+
def show
|
|
54
|
+
logger.warn "Got to show"
|
|
55
|
+
|
|
56
|
+
if @collection.member_ids.length > 0
|
|
57
|
+
query = @collection.member_ids.join " OR "
|
|
58
|
+
|
|
59
|
+
# run the solr query to find the collections
|
|
60
|
+
(@response, @member_docs) = get_search_results(:q => query, :rows=>100)
|
|
61
|
+
else
|
|
62
|
+
#pretend we ran a solr query to get the colelctions since we do not need to really do it since there should be no results
|
|
63
|
+
@member_docs = []
|
|
64
|
+
@response = Blacklight::SolrResponse.new({'responseHeader'=>{'status'=>0,'QTime'=>5,'params'=>{'wt'=>'ruby','q'=>'xxzxas'}},'response'=>{'numFound'=>0,'start'=>0,'maxScore'=>0.0,'docs'=>[]},'facet_counts'=>{'facet_queries'=>{},'facet_fields'=>{'active_fedora_model_ssi'=>[],'object_type_si'=>[]},'facet_dates'=>{},'facet_ranges'=>{}},'spellcheck'=>{'suggestions'=>['correctlySpelled',false]}},"")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
49
69
|
def edit
|
|
50
70
|
end
|
|
71
|
+
|
|
72
|
+
def after_create
|
|
73
|
+
respond_to do |format|
|
|
74
|
+
format.html { redirect_to collections.collection_path(@collection), notice: 'Collection was successfully created.' }
|
|
75
|
+
format.json { render json: @collection, status: :created, location: @collection }
|
|
76
|
+
end
|
|
77
|
+
end
|
|
51
78
|
|
|
79
|
+
def after_create_error
|
|
80
|
+
respond_to do |format|
|
|
81
|
+
format.html { render action: "new" }
|
|
82
|
+
format.json { render json: @collection.errors, status: :unprocessable_entity }
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
52
86
|
def create
|
|
53
87
|
@collection.apply_depositor_metadata(current_user.user_key)
|
|
54
88
|
unless batch.empty?
|
|
55
89
|
params[:collection][:members]="add"
|
|
56
90
|
process_member_changes
|
|
57
91
|
end
|
|
92
|
+
if @collection.save
|
|
93
|
+
after_create
|
|
94
|
+
else
|
|
95
|
+
after_create_error
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def after_update
|
|
58
100
|
respond_to do |format|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
101
|
+
format.html { redirect_to collections.collection_path(@collection), notice: 'Collection was successfully updated.' }
|
|
102
|
+
format.json { render json: @collection, status: :updated, location: @collection }
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def after_update_error
|
|
107
|
+
respond_to do |format|
|
|
108
|
+
format.html { render action: collections.edit_collection_path(@collection) }
|
|
109
|
+
format.json { render json: @collection.errors, status: :unprocessable_entity }
|
|
66
110
|
end
|
|
67
111
|
end
|
|
68
112
|
|
|
@@ -70,17 +114,37 @@ module Hydra
|
|
|
70
114
|
@collection = ::Collection.find(params[:id])
|
|
71
115
|
process_member_changes
|
|
72
116
|
@collection.update_attributes(params[:collection].except(:members))
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
else
|
|
78
|
-
format.html { render action: collections.edit_collection_path(@collection) }
|
|
79
|
-
format.json { render json: @collection.errors, status: :unprocessable_entity }
|
|
80
|
-
end
|
|
117
|
+
if @collection.save
|
|
118
|
+
after_update
|
|
119
|
+
else
|
|
120
|
+
after_update_error
|
|
81
121
|
end
|
|
82
122
|
end
|
|
83
123
|
|
|
124
|
+
|
|
125
|
+
def after_destroy (id)
|
|
126
|
+
respond_to do |format|
|
|
127
|
+
format.html { redirect_to catalog_index_path, notice: 'Collection was successfully deleted.' }
|
|
128
|
+
format.json { render json: {id:id}, status: :destroyed, location: @collection }
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def after_destroy_error (id)
|
|
133
|
+
respond_to do |format|
|
|
134
|
+
format.html { redirect_to catalog_index_path, notice: 'Collection could not be deleted.' }
|
|
135
|
+
format.json { render json: {id:id}, status: :destroy_error, location: @collection }
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def destroy
|
|
140
|
+
@collection = ::Collection.find(params[:id])
|
|
141
|
+
if @collection.destroy
|
|
142
|
+
after_destroy(params[:id])
|
|
143
|
+
else
|
|
144
|
+
after_destroy_error(params[:id])
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
84
148
|
protected
|
|
85
149
|
|
|
86
150
|
def process_member_changes
|
|
@@ -103,6 +167,10 @@ module Hydra
|
|
|
103
167
|
end
|
|
104
168
|
end
|
|
105
169
|
|
|
106
|
-
|
|
170
|
+
# this is only needed until the version of balcklight that we are using this include it in it's solr helper
|
|
171
|
+
def blacklight_solr
|
|
172
|
+
Blacklight.solr
|
|
173
|
+
end
|
|
174
|
+
|
|
107
175
|
end # module CollectionsControllerBehavior
|
|
108
176
|
end # module Hydra
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright © 2012 The Pennsylvania State University
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'spec_helper'
|
|
16
|
+
|
|
17
|
+
include Rails.application.routes.url_helpers
|
|
18
|
+
|
|
19
|
+
describe CatalogController do
|
|
20
|
+
before do
|
|
21
|
+
controller.stub(:has_access?).and_return(true)
|
|
22
|
+
@user = FactoryGirl.find_or_create(:user)
|
|
23
|
+
@collection = Collection.new title:"Test"
|
|
24
|
+
@collection.apply_depositor_metadata(@user.user_key)
|
|
25
|
+
@collection.read_groups = ["public"]
|
|
26
|
+
@collection.save
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
after do
|
|
30
|
+
@user.delete
|
|
31
|
+
@collection.delete
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
describe '#index' do
|
|
36
|
+
it 'should assign @user_collections' do
|
|
37
|
+
@routes = Rails.application.routes
|
|
38
|
+
get :index
|
|
39
|
+
expect(assigns(:user_collections)).to be_kind_of(Array)
|
|
40
|
+
assigns(:user_collections).index{|d| d.id == @collection.id}.should_not be_nil
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -52,6 +52,10 @@ describe CollectionsController do
|
|
|
52
52
|
post :create, batch_document_ids: [@asset1, @asset2], collection: {title: "My Secong Collection ", description: "The Description\r\n\r\nand more"}
|
|
53
53
|
assigns[:collection].members.should == [@asset1, @asset2]
|
|
54
54
|
end
|
|
55
|
+
it "should call after_create" do
|
|
56
|
+
controller.should_receive(:after_create).and_call_original
|
|
57
|
+
post :create, collection: {title: "My First Collection ", description: "The Description\r\n\r\nand more"}
|
|
58
|
+
end
|
|
55
59
|
end
|
|
56
60
|
|
|
57
61
|
describe "#update" do
|
|
@@ -70,12 +74,17 @@ describe CollectionsController do
|
|
|
70
74
|
assigns[:collection].title.should == "New Title"
|
|
71
75
|
assigns[:collection].description.should == "New Description"
|
|
72
76
|
end
|
|
77
|
+
|
|
78
|
+
it "should call after_update" do
|
|
79
|
+
controller.should_receive(:after_update).and_call_original
|
|
80
|
+
put :update, id: @collection.id, collection: {title: "New Title", description: "New Description"}
|
|
81
|
+
end
|
|
73
82
|
it "should support adding batches of members" do
|
|
74
83
|
@collection.members << @asset1
|
|
75
84
|
@collection.save
|
|
76
85
|
put :update, id: @collection.id, collection: {members:"add"}, batch_document_ids:[@asset2, @asset3]
|
|
77
86
|
response.should redirect_to Hydra::Collections::Engine.routes.url_helpers.collection_path(@collection.id)
|
|
78
|
-
assigns[:collection].members.should == [@asset2, @asset3, @asset1]
|
|
87
|
+
assigns[:collection].members.sort! { |a,b| a.pid <=> b.pid }.should == [@asset2, @asset3, @asset1].sort! { |a,b| a.pid <=> b.pid }
|
|
79
88
|
end
|
|
80
89
|
it "should support removing batches of members" do
|
|
81
90
|
@collection.members = [@asset1, @asset2, @asset3]
|
|
@@ -90,4 +99,28 @@ describe CollectionsController do
|
|
|
90
99
|
assigns[:collection].members.should == [@asset1,@asset2, @asset3]
|
|
91
100
|
end
|
|
92
101
|
end
|
|
102
|
+
|
|
103
|
+
describe "#destroy" do
|
|
104
|
+
describe "valid collection" do
|
|
105
|
+
before do
|
|
106
|
+
@collection = Collection.new
|
|
107
|
+
@collection.apply_depositor_metadata(@user.user_key)
|
|
108
|
+
@collection.save
|
|
109
|
+
controller.should_receive(:authorize!).and_return(true)
|
|
110
|
+
end
|
|
111
|
+
it "should delete collection" do
|
|
112
|
+
delete :destroy, id: @collection.id
|
|
113
|
+
response.should redirect_to Rails.application.routes.url_helpers.catalog_index_path
|
|
114
|
+
flash[:notice].should == "Collection was successfully deleted."
|
|
115
|
+
end
|
|
116
|
+
it "should call after_destroy" do
|
|
117
|
+
controller.should_receive(:after_destroy).and_call_original
|
|
118
|
+
delete :destroy, id: @collection.id
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
it "should not delete an invalid collection" do
|
|
122
|
+
expect {delete :destroy, id: 'zz:-1'}.to raise_error
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
93
126
|
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
class SelectsCollectionsController < ApplicationController
|
|
4
|
+
include Blacklight::Catalog
|
|
5
|
+
include Hydra::Controller::ControllerBehavior
|
|
6
|
+
include Hydra::Collections::SelectsCollections
|
|
7
|
+
|
|
8
|
+
SelectsCollectionsController.solr_search_params_logic += [:add_access_controls_to_solr_params]
|
|
9
|
+
# This filters out objects that you want to exclude from search results, like FileAssets
|
|
10
|
+
SelectsCollectionsController.solr_search_params_logic += [:exclude_unwanted_models]
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe SelectsCollectionsController do
|
|
16
|
+
|
|
17
|
+
describe "Select Collections" do
|
|
18
|
+
before (:all) do
|
|
19
|
+
@user = FactoryGirl.find_or_create(:user)
|
|
20
|
+
@collection = Collection.new title:"Test Public"
|
|
21
|
+
@collection.apply_depositor_metadata(@user.user_key)
|
|
22
|
+
@collection.read_groups = ["public"]
|
|
23
|
+
@collection.save
|
|
24
|
+
@collection2 = Collection.new title:"Test Read"
|
|
25
|
+
@collection2.apply_depositor_metadata('abc123@test.com')
|
|
26
|
+
@collection2.read_users = [@user.user_key]
|
|
27
|
+
@collection2.save
|
|
28
|
+
@collection3 = Collection.new title:"Test Edit"
|
|
29
|
+
@collection3.apply_depositor_metadata('abc123@test.com')
|
|
30
|
+
@collection3.edit_users = [@user.user_key]
|
|
31
|
+
@collection3.save
|
|
32
|
+
@collection4 = Collection.new title:"Test No Access"
|
|
33
|
+
@collection4.apply_depositor_metadata('abc123@test.com')
|
|
34
|
+
@collection4.save
|
|
35
|
+
end
|
|
36
|
+
after (:all) do
|
|
37
|
+
Collection.find(:all).map(&:delete)
|
|
38
|
+
end
|
|
39
|
+
describe "Public Access" do
|
|
40
|
+
before (:each) do
|
|
41
|
+
subject.find_collections
|
|
42
|
+
@user_collections = subject.instance_variable_get (:@user_collections)
|
|
43
|
+
expect(@user_collections).to be_kind_of(Array)
|
|
44
|
+
end
|
|
45
|
+
it "should return public collections" do
|
|
46
|
+
@user_collections.index{|d| d.id == @collection.id}.should_not be_nil
|
|
47
|
+
end
|
|
48
|
+
it "should not return non public collections" do
|
|
49
|
+
@user_collections.index{|d| d.id == @collection2.id}.should be_nil
|
|
50
|
+
@user_collections.index{|d| d.id == @collection3.id}.should be_nil
|
|
51
|
+
@user_collections.index{|d| d.id == @collection4.id}.should be_nil
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
describe "Read Access" do
|
|
55
|
+
describe "not signed in" do
|
|
56
|
+
it "should error if the user is not signed in" do
|
|
57
|
+
expect { subject.find_collections_with_read_access }.to raise_error
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
describe "signed in" do
|
|
61
|
+
before (:each) do
|
|
62
|
+
sign_in @user
|
|
63
|
+
subject.find_collections_with_read_access
|
|
64
|
+
@user_collections = subject.instance_variable_get (:@user_collections)
|
|
65
|
+
expect(@user_collections).to be_kind_of(Array)
|
|
66
|
+
end
|
|
67
|
+
it "should return public and read access (edit access implies read) collections" do
|
|
68
|
+
@user_collections.index{|d| d.id == @collection.id}.should_not be_nil
|
|
69
|
+
@user_collections.index{|d| d.id == @collection2.id}.should_not be_nil
|
|
70
|
+
@user_collections.index{|d| d.id == @collection3.id}.should_not be_nil
|
|
71
|
+
end
|
|
72
|
+
it "should not return non public collections" do
|
|
73
|
+
@user_collections.index{|d| d.id == @collection4.id}.should be_nil
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
describe "Edit Access" do
|
|
78
|
+
describe "not signed in" do
|
|
79
|
+
it "should error if the user is not signed in" do
|
|
80
|
+
expect { subject.find_collections_with_edit_access }.to raise_error
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
describe "signed in" do
|
|
84
|
+
before (:each) do
|
|
85
|
+
sign_in @user
|
|
86
|
+
subject.find_collections_with_edit_access
|
|
87
|
+
@user_collections = subject.instance_variable_get (:@user_collections)
|
|
88
|
+
expect(@user_collections).to be_kind_of(Array)
|
|
89
|
+
end
|
|
90
|
+
it "should return public or editable collections" do
|
|
91
|
+
@user_collections.index{|d| d.id == @collection.id}.should_not be_nil
|
|
92
|
+
@user_collections.index{|d| d.id == @collection3.id}.should_not be_nil
|
|
93
|
+
end
|
|
94
|
+
it "should not return non public or editable collections" do
|
|
95
|
+
@user_collections.index{|d| d.id == @collection2.id}.should be_nil
|
|
96
|
+
@user_collections.index{|d| d.id == @collection4.id}.should be_nil
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
@@ -17,13 +17,32 @@ require 'spec_helper'
|
|
|
17
17
|
include Hydra::Collections::Engine.routes.url_helpers
|
|
18
18
|
|
|
19
19
|
describe CollectionsHelper do
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
describe "button_for_create_collection" do
|
|
21
|
+
it " should create a button to the collections new path" do
|
|
22
|
+
html = button_for_create_collection
|
|
23
|
+
html.should have_selector("form[action='#{collections.new_collection_path}']")
|
|
24
|
+
html.should have_selector("input[type='submit']")
|
|
25
|
+
end
|
|
26
|
+
it "should create a button with my text" do
|
|
27
|
+
html = button_for_create_collection "Create My Button"
|
|
28
|
+
html.should have_selector("input[value='Create My Button']")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
describe "button_for_delete_collection" do
|
|
32
|
+
before (:all) do
|
|
33
|
+
@collection = Collection.create title:"Test Public"
|
|
34
|
+
end
|
|
35
|
+
after (:all) do
|
|
36
|
+
@collection.delete
|
|
37
|
+
end
|
|
38
|
+
it " should create a button to the collections delete path" do
|
|
39
|
+
html = button_for_delete_collection @collection
|
|
40
|
+
html.should have_selector("form[action='#{collections.collection_path(@collection.pid)}']")
|
|
23
41
|
html.should have_selector("input[type='submit']")
|
|
24
42
|
end
|
|
25
|
-
it "
|
|
26
|
-
html =
|
|
27
|
-
html.should have_selector("input[value='
|
|
43
|
+
it "should create a button with my text" do
|
|
44
|
+
html = button_for_delete_collection @collection, "Delete My Button"
|
|
45
|
+
html.should have_selector("input[value='Delete My Button']")
|
|
28
46
|
end
|
|
29
47
|
end
|
|
48
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= button_for_delete_collection(document, "Delete") %>
|
|
@@ -8,13 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
<%= button_for_create_collection %>
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
<% c1 = Collection.new(title:"title1") %>
|
|
13
|
-
<% c1.apply_depositor_metadata("cam156@psu.edu") %>
|
|
14
|
-
<% c1.save %>
|
|
15
|
-
<% c2 = Collection.new(title:"title2") %>
|
|
16
|
-
<% c2.apply_depositor_metadata("cam156@psu.edu") %>
|
|
17
|
-
<% c2.save %>
|
|
18
|
-
<%= render partial: 'collections/form_for_select_collection', locals: {user_collections: [c1,c2]} %>
|
|
11
|
+
<%= render partial: 'collections/form_for_select_collection', locals: {user_collections: @user_collections} %>
|
|
19
12
|
|
|
20
13
|
</div>
|
|
@@ -44,10 +44,31 @@ class TestAppGenerator < Rails::Generators::Base
|
|
|
44
44
|
directory("app/views/catalog")
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
# Inject
|
|
47
|
+
# Inject javascript into application.js
|
|
48
48
|
def inject_javascript
|
|
49
|
-
insert_into_file "app/assets/javascripts/application.js", :after => '
|
|
50
|
-
"\n
|
|
49
|
+
insert_into_file "app/assets/javascripts/application.js", :after => '//= require_tree .' do
|
|
50
|
+
"\n //include javascript for batches and collections\n//= require hydra/batch_select\n//= require hydra_collections"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Inject javascript into application.js
|
|
55
|
+
def inject_css
|
|
56
|
+
insert_into_file "app/assets/stylesheets/application.css", :after => '*= require_tree .' do
|
|
57
|
+
"\n *= require hydra_collections"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Inject collections call into balacklight catalog
|
|
62
|
+
def inject_collections
|
|
63
|
+
insert_into_file "app/controllers/catalog_controller.rb", :after => 'Hydra::Controller::ControllerBehavior' do
|
|
64
|
+
"\n include Hydra::Collections::SelectsCollections\n before_filter :find_collections, :only=>:index"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Inject collections SolrDocumentBehavior into balacklight SolrDocument
|
|
69
|
+
def inject_solr_doc
|
|
70
|
+
insert_into_file "app/models/solr_document.rb", :after => 'include Blacklight::Solr::Document' do
|
|
71
|
+
"\n # Adds Collection behaviors to the SolrDocument.\n include Hydra::Collections::SolrDocumentBehavior"
|
|
51
72
|
end
|
|
52
73
|
end
|
|
53
74
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hydra-collections
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Carolyn Cole
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-05-
|
|
11
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: blacklight
|
|
@@ -98,16 +98,24 @@ files:
|
|
|
98
98
|
- Rakefile
|
|
99
99
|
- app/assets/javascripts/hydra/batch_select.js
|
|
100
100
|
- app/assets/javascripts/hydra_collections.js
|
|
101
|
+
- app/assets/stylesheets/hydra_collections.css.scss
|
|
101
102
|
- app/controllers/collections_controller.rb
|
|
102
103
|
- app/helpers/batch_select_helper.rb
|
|
103
104
|
- app/helpers/collections_helper.rb
|
|
104
105
|
- app/models/collection.rb
|
|
106
|
+
- app/models/solr_document.rb
|
|
105
107
|
- app/views/batch_select/_add_button.html.erb
|
|
106
108
|
- app/views/batch_select/_check_all.html.erb
|
|
107
109
|
- app/views/batch_select/_tools.html.erb
|
|
108
110
|
- app/views/collections/_button_create_collection.html.erb
|
|
111
|
+
- app/views/collections/_button_for_delete_collection.html.erb
|
|
112
|
+
- app/views/collections/_button_for_update_collection.html.erb
|
|
113
|
+
- app/views/collections/_button_remove_from_collection.html.erb
|
|
114
|
+
- app/views/collections/_document_header.html.erb
|
|
115
|
+
- app/views/collections/_document_list.html.erb
|
|
109
116
|
- app/views/collections/_form.html.erb
|
|
110
117
|
- app/views/collections/_form_for_select_collection.html.erb
|
|
118
|
+
- app/views/collections/_single_item_action_fields.html.erb
|
|
111
119
|
- app/views/collections/new.html.erb
|
|
112
120
|
- app/views/collections/show.html.erb
|
|
113
121
|
- config/jetty.yml
|
|
@@ -121,6 +129,8 @@ files:
|
|
|
121
129
|
- lib/hydra/collections/accepts_batches.rb
|
|
122
130
|
- lib/hydra/collections/collectible.rb
|
|
123
131
|
- lib/hydra/collections/search_service.rb
|
|
132
|
+
- lib/hydra/collections/selects_collections.rb
|
|
133
|
+
- lib/hydra/collections/solr_document_behavior.rb
|
|
124
134
|
- lib/hydra/collections/version.rb
|
|
125
135
|
- lib/hydra/collections_controller_behavior.rb
|
|
126
136
|
- lib/hydra/datastreams/collection_rdf_datastream.rb
|
|
@@ -128,7 +138,9 @@ files:
|
|
|
128
138
|
- solr_conf/conf/solrconfig.xml
|
|
129
139
|
- solr_conf/solr.xml
|
|
130
140
|
- spec/controllers/accepts_batches_spec.rb
|
|
141
|
+
- spec/controllers/catalog_controller_spec.rb
|
|
131
142
|
- spec/controllers/collections_controller_spec.rb
|
|
143
|
+
- spec/controllers/selects_collections_spec.rb
|
|
132
144
|
- spec/factories.rb
|
|
133
145
|
- spec/factories/.gitkeep
|
|
134
146
|
- spec/factories/users.rb
|
|
@@ -141,6 +153,7 @@ files:
|
|
|
141
153
|
- spec/support/app/models/sample.rb
|
|
142
154
|
- spec/support/app/models/solr_document.rb
|
|
143
155
|
- spec/support/app/views/catalog/_document_header.html.erb
|
|
156
|
+
- spec/support/app/views/catalog/_index_collection.html.erb
|
|
144
157
|
- spec/support/app/views/catalog/_sort_and_per_page.html.erb
|
|
145
158
|
- spec/support/config/initializers/hydra_config.rb
|
|
146
159
|
- spec/support/db/migrate/20111101221803_create_searches.rb
|
|
@@ -174,7 +187,9 @@ specification_version: 4
|
|
|
174
187
|
summary: A rails engine for managing Hydra Collections
|
|
175
188
|
test_files:
|
|
176
189
|
- spec/controllers/accepts_batches_spec.rb
|
|
190
|
+
- spec/controllers/catalog_controller_spec.rb
|
|
177
191
|
- spec/controllers/collections_controller_spec.rb
|
|
192
|
+
- spec/controllers/selects_collections_spec.rb
|
|
178
193
|
- spec/factories.rb
|
|
179
194
|
- spec/factories/.gitkeep
|
|
180
195
|
- spec/factories/users.rb
|
|
@@ -187,6 +202,7 @@ test_files:
|
|
|
187
202
|
- spec/support/app/models/sample.rb
|
|
188
203
|
- spec/support/app/models/solr_document.rb
|
|
189
204
|
- spec/support/app/views/catalog/_document_header.html.erb
|
|
205
|
+
- spec/support/app/views/catalog/_index_collection.html.erb
|
|
190
206
|
- spec/support/app/views/catalog/_sort_and_per_page.html.erb
|
|
191
207
|
- spec/support/config/initializers/hydra_config.rb
|
|
192
208
|
- spec/support/db/migrate/20111101221803_create_searches.rb
|