hydra-collections 0.0.1
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 +7 -0
- data/.gitignore +20 -0
- data/.gitmodules +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +16 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +22 -0
- data/README.md +133 -0
- data/Rakefile +12 -0
- data/app/assets/javascripts/hydra/batch_select.js +41 -0
- data/app/assets/javascripts/hydra_collections.js +12 -0
- data/app/controllers/collections_controller.rb +18 -0
- data/app/helpers/batch_select_helper.rb +25 -0
- data/app/helpers/collections_helper.rb +14 -0
- data/app/models/collection.rb +16 -0
- data/app/views/batch_select/_add_button.html.erb +3 -0
- data/app/views/batch_select/_check_all.html.erb +4 -0
- data/app/views/batch_select/_tools.html.erb +10 -0
- data/app/views/collections/_button_create_collection.html.erb +2 -0
- data/app/views/collections/_form.html.erb +36 -0
- data/app/views/collections/_form_for_select_collection.html.erb +13 -0
- data/app/views/collections/new.html.erb +3 -0
- data/app/views/collections/show.html.erb +9 -0
- data/config/jetty.yml +6 -0
- data/config/routes.rb +3 -0
- data/fedora_conf/conf/development/fedora.fcfg +946 -0
- data/fedora_conf/conf/test/fedora.fcfg +946 -0
- data/hydra-collections.gemspec +27 -0
- data/lib/hydra-collections.rb +7 -0
- data/lib/hydra/collection.rb +52 -0
- data/lib/hydra/collections.rb +12 -0
- data/lib/hydra/collections/accepts_batches.rb +55 -0
- data/lib/hydra/collections/collectible.rb +24 -0
- data/lib/hydra/collections/search_service.rb +58 -0
- data/lib/hydra/collections/version.rb +5 -0
- data/lib/hydra/collections_controller_behavior.rb +108 -0
- data/lib/hydra/datastreams/collection_rdf_datastream.rb +36 -0
- data/solr_conf/conf/schema.xml +372 -0
- data/solr_conf/conf/solrconfig.xml +163 -0
- data/solr_conf/solr.xml +35 -0
- data/spec/controllers/accepts_batches_spec.rb +72 -0
- data/spec/controllers/collections_controller_spec.rb +93 -0
- data/spec/factories.rb +18 -0
- data/spec/factories/.gitkeep +0 -0
- data/spec/factories/users.rb +31 -0
- data/spec/helpers/collections_helper_spec.rb +29 -0
- data/spec/lib/collectible_spec.rb +31 -0
- data/spec/lib/search_service_spec.rb +41 -0
- data/spec/models/collection_spec.rb +100 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/Gemfile +19 -0
- data/spec/support/app/models/sample.rb +37 -0
- data/spec/support/app/models/solr_document.rb +5 -0
- data/spec/support/app/views/catalog/_document_header.html.erb +11 -0
- data/spec/support/app/views/catalog/_sort_and_per_page.html.erb +20 -0
- data/spec/support/config/initializers/hydra_config.rb +28 -0
- data/spec/support/db/migrate/20111101221803_create_searches.rb +16 -0
- data/spec/support/lib/generators/test_app_generator.rb +54 -0
- data/spec/support/lib/tasks/rspec.rake +9 -0
- data/tasks/hydra-collections-dev.rake +68 -0
- data/tasks/jetty.rake +40 -0
- metadata +194 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
class CollectibleThing < ActiveFedora::Base
|
3
|
+
include Hydra::Collections::Collectible
|
4
|
+
end
|
5
|
+
|
6
|
+
describe Hydra::Collections::Collectible do
|
7
|
+
before do
|
8
|
+
@collection1 = FactoryGirl.create(:collection)
|
9
|
+
@collection2 = FactoryGirl.create(:collection)
|
10
|
+
@collectible = CollectibleThing.new
|
11
|
+
end
|
12
|
+
describe "collections associations" do
|
13
|
+
it "should allow adding and removing" do
|
14
|
+
@collectible.save
|
15
|
+
@collection1.members << @collectible
|
16
|
+
@collection1.save
|
17
|
+
@collectible.collections << @collection2
|
18
|
+
reloaded = CollectibleThing.find(@collectible.pid)
|
19
|
+
@collection2.members.should == [@collectible]
|
20
|
+
reloaded.collections.should == [@collection1, @collection2]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
describe "index_collection_pids" do
|
24
|
+
it "should add pids for all associated collections" do
|
25
|
+
@collectible.save
|
26
|
+
@collectible.collections << @collection1
|
27
|
+
@collectible.collections << @collection2
|
28
|
+
@collectible.index_collection_pids["collection_sim"].should == [@collection1.pid, @collection2.pid]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hydra::Collections::SearchService do
|
4
|
+
before do
|
5
|
+
@login = 'vanessa'
|
6
|
+
@session = {:history => [17, 14, 12, 9]}
|
7
|
+
@service = Hydra::Collections::SearchService.new(@session, @login)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should get the documents for the first history entry" do
|
11
|
+
Search.should_receive(:find).with(17).and_return(Search.new(:query_params=>{:q=>"World Peace"}))
|
12
|
+
@service.should_receive(:get_search_results).and_return([:one, [:doc1, :doc2]])
|
13
|
+
@service.last_search_documents.should == [:doc1, :doc2]
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'apply_gated_search' do
|
17
|
+
before(:each) do
|
18
|
+
RoleMapper.stub(:roles).with(@login).and_return(['umg/test.group.1'])
|
19
|
+
params = @service.apply_gated_search({}, {})
|
20
|
+
@group_query = params[:fq].first.split(' OR ')[1]
|
21
|
+
end
|
22
|
+
it "should escape slashes in groups" do
|
23
|
+
@group_query.should == 'edit_access_group_ssim:umg\/test.group.1'
|
24
|
+
end
|
25
|
+
it "should allow overriding Solr's access control suffix" do
|
26
|
+
module Hydra
|
27
|
+
module Collections
|
28
|
+
class SearchService
|
29
|
+
def solr_access_control_suffix(key)
|
30
|
+
"edit_#{key}_customfield"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@service = Hydra::Collections::SearchService.new({}, '')
|
36
|
+
params = @service.apply_gated_search({}, {})
|
37
|
+
@public_query = params[:fq].first.split(' OR ')[0]
|
38
|
+
@public_query.should == 'edit_group_customfield:public'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# Copyright © 2013 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
|
+
describe Collection do
|
18
|
+
before(:all) do
|
19
|
+
@user = FactoryGirl.find_or_create(:user)
|
20
|
+
class GenericFile < ActiveFedora::Base
|
21
|
+
end
|
22
|
+
end
|
23
|
+
after(:all) do
|
24
|
+
@user.destroy
|
25
|
+
Object.send(:remove_const, :GenericFile)
|
26
|
+
end
|
27
|
+
before(:each) do
|
28
|
+
@collection = Collection.new
|
29
|
+
@collection.apply_depositor_metadata(@user.user_key)
|
30
|
+
@collection.save
|
31
|
+
@gf1 = GenericFile.create
|
32
|
+
@gf2 = GenericFile.create
|
33
|
+
end
|
34
|
+
after(:each) do
|
35
|
+
@collection.destroy rescue
|
36
|
+
@gf1.destroy
|
37
|
+
@gf2.destroy
|
38
|
+
end
|
39
|
+
it "should have a depositor" do
|
40
|
+
@collection.depositor.should == @user.user_key
|
41
|
+
end
|
42
|
+
it "should allow the depositor to edit and read" do
|
43
|
+
ability = Ability.new(@user)
|
44
|
+
ability.can?(:read, @collection).should == true
|
45
|
+
ability.can?(:edit, @collection).should == true
|
46
|
+
end
|
47
|
+
it "should be empty by default" do
|
48
|
+
@collection.members.should be_empty
|
49
|
+
end
|
50
|
+
it "should have many files" do
|
51
|
+
@collection.members = [@gf1, @gf2]
|
52
|
+
@collection.save
|
53
|
+
Collection.find(@collection.pid).members.should == [@gf1, @gf2]
|
54
|
+
end
|
55
|
+
it "should allow new files to be added" do
|
56
|
+
@collection.members = [@gf1]
|
57
|
+
@collection.save
|
58
|
+
@collection = Collection.find(@collection.pid)
|
59
|
+
@collection.members << @gf2
|
60
|
+
@collection.save
|
61
|
+
Collection.find(@collection.pid).members.should == [@gf1, @gf2]
|
62
|
+
end
|
63
|
+
it "should set the date uploaded on create" do
|
64
|
+
@collection.save
|
65
|
+
@collection.date_uploaded.should be_kind_of(Date)
|
66
|
+
end
|
67
|
+
it "should update the date modified on update" do
|
68
|
+
uploaded_date = Date.today
|
69
|
+
modified_date = Date.tomorrow
|
70
|
+
Date.stub(:today).and_return(uploaded_date, modified_date)
|
71
|
+
@collection.save
|
72
|
+
@collection.date_modified.should == uploaded_date
|
73
|
+
@collection.members = [@gf1]
|
74
|
+
@collection.save
|
75
|
+
@collection.date_modified.should == modified_date
|
76
|
+
end
|
77
|
+
it "should have a title" do
|
78
|
+
@collection.title = "title"
|
79
|
+
@collection.save
|
80
|
+
Collection.find(@collection.pid).title.should == @collection.title
|
81
|
+
end
|
82
|
+
it "should have a description" do
|
83
|
+
@collection.description = "description"
|
84
|
+
@collection.save
|
85
|
+
Collection.find(@collection.pid).description.should == @collection.description
|
86
|
+
end
|
87
|
+
it "should have the expected display terms" do
|
88
|
+
@collection.terms_for_display.should == [:title, :description, :date_uploaded, :date_modified]
|
89
|
+
end
|
90
|
+
it "should have the expected edit terms" do
|
91
|
+
@collection.terms_for_editing.should == [:title,:description]
|
92
|
+
end
|
93
|
+
it "should not delete member files when deleted" do
|
94
|
+
@collection.members = [@gf1, @gf2]
|
95
|
+
@collection.save
|
96
|
+
@collection.destroy
|
97
|
+
lambda {GenericFile.find(@gf1.pid)}.should_not raise_error ActiveFedora::ObjectNotFoundError
|
98
|
+
lambda {GenericFile.find(@gf2.pid)}.should_not raise_error ActiveFedora::ObjectNotFoundError
|
99
|
+
end
|
100
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
ENV["RAILS_ENV"] ||= 'test'
|
4
|
+
|
5
|
+
require File.expand_path("config/environment", ENV['RAILS_ROOT'] || File.expand_path("../internal", __FILE__))
|
6
|
+
require 'rspec/rails'
|
7
|
+
require 'hydra-collections'
|
8
|
+
|
9
|
+
FactoryGirl.definition_file_paths = [File.expand_path("../factories", __FILE__)]
|
10
|
+
FactoryGirl.find_definitions
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.use_transactional_fixtures = true
|
14
|
+
config.include Devise::TestHelpers, :type => :controller
|
15
|
+
config.before(:each, :type=>"controller") { @routes = Hydra::Collections::Engine.routes }
|
16
|
+
end
|
17
|
+
|
18
|
+
module FactoryGirl
|
19
|
+
def self.find_or_create(handle, by=:email)
|
20
|
+
tmpl = FactoryGirl.build(handle)
|
21
|
+
tmpl.class.send("find_by_#{by}".to_sym, tmpl.send(by)) || FactoryGirl.create(handle)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'rails'
|
4
|
+
gem 'sqlite3'
|
5
|
+
gem 'devise'
|
6
|
+
gem 'hydra-head'
|
7
|
+
gem 'hydra-collections', :path=>'../../'
|
8
|
+
|
9
|
+
gem 'rspec-rails'
|
10
|
+
gem 'factory_girl'
|
11
|
+
|
12
|
+
# Gems used only for assets and not required
|
13
|
+
# in production environments by default.
|
14
|
+
group :assets do
|
15
|
+
gem 'sass-rails', '~> 3.2.3'
|
16
|
+
gem 'coffee-rails', '~> 3.2.1'
|
17
|
+
gem 'jquery-rails'
|
18
|
+
gem 'uglifier', '>= 1.0.3'
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Sample
|
2
|
+
# This is a stub model for testing.
|
3
|
+
|
4
|
+
cattr_accessor :objects
|
5
|
+
self.objects = {}
|
6
|
+
|
7
|
+
def self.create(params={})
|
8
|
+
obj = Sample.new
|
9
|
+
obj.save
|
10
|
+
obj
|
11
|
+
end
|
12
|
+
|
13
|
+
def save()
|
14
|
+
@pid ||= "sample:#{(rand * 1000).to_i}"
|
15
|
+
self.class.objects[@pid] = self
|
16
|
+
end
|
17
|
+
|
18
|
+
def update_attributes(attributes)
|
19
|
+
attributes.each do |k, v|
|
20
|
+
instance_variable_set "@#{k.to_s}".to_sym, v
|
21
|
+
|
22
|
+
self.class.send :attr_accessor, k
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.find(pid)
|
27
|
+
objects[pid]
|
28
|
+
end
|
29
|
+
|
30
|
+
def pid
|
31
|
+
@pid
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
self.class.objects.delete(@pid)
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
<% # header bar for doc items in index view -%>
|
3
|
+
<div class="documentHeader clearfix">
|
4
|
+
<%= button_for_add_to_batch(document) %>
|
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
|
+
|
9
|
+
<% # bookmark functions for items/docs -%>
|
10
|
+
<%= render_index_doc_actions document, :wrapping_class => "documentFunctions span2" %>
|
11
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div id="sortAndPerPage">
|
2
|
+
<div class="page_links">
|
3
|
+
<%= render :partial => "paginate_compact" %>
|
4
|
+
</div>
|
5
|
+
<%= render :partial => 'sort_widget' %>
|
6
|
+
|
7
|
+
<%= render :partial => 'per_page_widget' %>
|
8
|
+
|
9
|
+
<%= button_for_create_collection %>
|
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]} %>
|
19
|
+
|
20
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# The following lines determine which user attributes your hydrangea app will use
|
2
|
+
# This configuration allows you to use the out of the box ActiveRecord associations between users and user_attributes
|
3
|
+
# It also allows you to specify your own user attributes
|
4
|
+
# The easiest way to override these methods would be to create your own module to include in User
|
5
|
+
# For example you could create a module for your local LDAP instance called MyLocalLDAPUserAttributes:
|
6
|
+
# User.send(:include, MyLocalLDAPAttributes)
|
7
|
+
# As long as your module includes methods for full_name, affiliation, and photo the personalization_helper should function correctly
|
8
|
+
#
|
9
|
+
|
10
|
+
# windows doesn't properly require hydra-head (from the gemfile), so we need to require it explicitly here:
|
11
|
+
require 'hydra/head' unless defined? Hydra
|
12
|
+
|
13
|
+
if Hydra.respond_to?(:configure)
|
14
|
+
Hydra.configure(:shared) do |config|
|
15
|
+
# This specifies the solr field names of permissions-related fields.
|
16
|
+
# You only need to change these values if you've indexed permissions by some means other than the Hydra's built-in tooling.
|
17
|
+
# If you change these, you must also update the permissions request handler in your solrconfig.xml to return those values
|
18
|
+
indexer = Solrizer::Descriptor.new(:string, :stored, :indexed, :multivalued)
|
19
|
+
config[:permissions] = {
|
20
|
+
:discover => {:group =>ActiveFedora::SolrService.solr_name("discover_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("discover_access_person", indexer)},
|
21
|
+
:read => {:group =>ActiveFedora::SolrService.solr_name("read_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("read_access_person", indexer)},
|
22
|
+
:edit => {:group =>ActiveFedora::SolrService.solr_name("edit_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("edit_access_person", indexer)},
|
23
|
+
:owner => ActiveFedora::SolrService.solr_name("depositor", indexer),
|
24
|
+
:embargo_release_date => ActiveFedora::SolrService.solr_name("embargo_release_date", Solrizer::Descriptor.new(:date, :stored, :indexed))
|
25
|
+
}
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class CreateSearches < ActiveRecord::Migration
|
3
|
+
def self.up
|
4
|
+
create_table :searches do |t|
|
5
|
+
t.text :query_params
|
6
|
+
t.integer :user_id
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :searches, :user_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :searches
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
class TestAppGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path("../../../../support", __FILE__)
|
5
|
+
|
6
|
+
def run_blacklight_generator
|
7
|
+
say_status("warning", "GENERATING BL", :yellow)
|
8
|
+
|
9
|
+
generate 'blacklight', '--devise'
|
10
|
+
end
|
11
|
+
|
12
|
+
def run_hydra_head_generator
|
13
|
+
say_status("warning", "GENERATING HH", :yellow)
|
14
|
+
|
15
|
+
generate 'hydra:head', '-f'
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_migrations
|
19
|
+
rake("db:migrate")
|
20
|
+
end
|
21
|
+
|
22
|
+
# Inject call to Hydra::Collections.add_routes in config/routes.rb
|
23
|
+
def inject_routes
|
24
|
+
insert_into_file "config/routes.rb", :after => '.draw do' do
|
25
|
+
"\n # Add Collections routes."
|
26
|
+
"\n mount Hydra::Collections::Engine => '/'"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy_rspec_rake_task
|
31
|
+
copy_file "lib/tasks/rspec.rake"
|
32
|
+
end
|
33
|
+
|
34
|
+
def copy_hydra_config
|
35
|
+
copy_file "config/initializers/hydra_config.rb"
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete_generated_noise
|
39
|
+
remove_file("public/index.html")
|
40
|
+
remove_file("spec/models/user_spec.rb")
|
41
|
+
end
|
42
|
+
|
43
|
+
def copy_view_overrides
|
44
|
+
directory("app/views/catalog")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Inject call to Hydra::Collections.add_routes in config/routes.rb
|
48
|
+
def inject_javascript
|
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
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
desc "run the hydra-collections gem spec"
|
3
|
+
gem_home = File.expand_path('../../../../..', __FILE__)
|
4
|
+
RSpec::Core::RakeTask.new(:myspec) do |t|
|
5
|
+
t.pattern = gem_home + '/spec/**/*_spec.rb'
|
6
|
+
t.rspec_opts = "--colour"
|
7
|
+
t.ruby_opts = "-I#{gem_home}/spec"
|
8
|
+
end
|
9
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rspec/core'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
APP_ROOT="." # for jettywrapper
|
4
|
+
require 'jettywrapper'
|
5
|
+
ENV["RAILS_ROOT"] ||= 'spec/internal'
|
6
|
+
|
7
|
+
desc 'Spin up hydra-jetty and run specs'
|
8
|
+
task :ci => ['jetty:config'] do
|
9
|
+
puts 'running continuous integration'
|
10
|
+
jetty_params = Jettywrapper.load_config
|
11
|
+
error = Jettywrapper.wrap(jetty_params) do
|
12
|
+
Rake::Task['spec'].invoke
|
13
|
+
end
|
14
|
+
raise "test failures: #{error}" if error
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run specs"
|
18
|
+
# Note: this is _not_ an RSpec::Core::RakeTask.
|
19
|
+
# It's a regular rake task that calls the RSpec RakeTask that's defined in spec/support/lib/tasks/rspec.rake
|
20
|
+
task :spec => [:generate] do |t|
|
21
|
+
focused_spec = ENV['SPEC'] ? " SPEC=#{File.join(GEM_ROOT, ENV['SPEC'])}" : ''
|
22
|
+
within_test_app do
|
23
|
+
system "rake myspec#{focused_spec}"
|
24
|
+
abort "Error running hydra-collections" unless $?.success?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Create the test rails app"
|
29
|
+
task :generate do
|
30
|
+
unless File.exists?('spec/internal/Rakefile')
|
31
|
+
puts "Generating rails app"
|
32
|
+
`rails new spec/internal`
|
33
|
+
puts "Copying gemfile"
|
34
|
+
`cp spec/support/Gemfile spec/internal`
|
35
|
+
puts "Copying generator"
|
36
|
+
`cp -r spec/support/lib/generators spec/internal/lib`
|
37
|
+
Bundler.with_clean_env do
|
38
|
+
within_test_app do
|
39
|
+
puts "Bundle install"
|
40
|
+
`bundle install`
|
41
|
+
puts "running test_app_generator"
|
42
|
+
system "rails generate test_app"
|
43
|
+
|
44
|
+
puts "running migrations"
|
45
|
+
puts `rake db:migrate db:test:prepare`
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
puts "Done generating test app"
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Clean out the test rails app"
|
53
|
+
task :clean do
|
54
|
+
puts "Removing sample rails app"
|
55
|
+
`rm -rf spec/internal`
|
56
|
+
end
|
57
|
+
|
58
|
+
def within_test_app
|
59
|
+
FileUtils.cd('spec/internal')
|
60
|
+
yield
|
61
|
+
FileUtils.cd('../..')
|
62
|
+
end
|
63
|
+
|
64
|
+
namespace :meme do
|
65
|
+
desc "configure jetty to generate checksums"
|
66
|
+
task :config do
|
67
|
+
end
|
68
|
+
end
|