hydra-ezid 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +46 -0
- data/.gitmodules +4 -0
- data/.travis.yml +17 -0
- data/CONTRIBUTING.md +111 -0
- data/CONTRIBUTORS.md +3 -0
- data/Gemfile +17 -0
- data/History.md +5 -0
- data/LICENSE +191 -0
- data/README.md +72 -0
- data/Rakefile +16 -0
- data/app/assets/images/hydra_ezid/.keep +0 -0
- data/app/assets/javascripts/hydra_ezid/.keep +0 -0
- data/app/assets/stylesheets/hydra_ezid/.keep +0 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/ezid_controller.rb +3 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/ezid_helper.rb +3 -0
- data/app/mailers/.keep +0 -0
- data/app/models/.keep +0 -0
- data/app/views/.keep +0 -0
- data/app/views/ezid/_button_to_mint_ezid.html.erb +1 -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/gemfiles/rails3.gemfile +6 -0
- data/gemfiles/rails4.gemfile +6 -0
- data/hydra-ezid.gemspec +29 -0
- data/lib/hydra-ezid.rb +6 -0
- data/lib/hydra/ezid.rb +11 -0
- data/lib/hydra/ezid/controller_behavior.rb +27 -0
- data/lib/hydra/ezid/model_methods.rb +10 -0
- data/lib/hydra/ezid/version.rb +5 -0
- data/solr_conf/conf/schema.xml +372 -0
- data/solr_conf/conf/solrconfig.xml +164 -0
- data/solr_conf/solr.xml +35 -0
- data/spec/controllers/ezid_controller_spec.rb +4 -0
- data/spec/factories.rb +3 -0
- data/spec/factories/.keep +0 -0
- data/spec/helpers/ezid_helper_spec.rb +6 -0
- data/spec/models/ezid_spec.rb +4 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/app/models/sample.rb +36 -0
- data/spec/support/app/views/catalog/_sort_and_per_page.html.erb +10 -0
- data/spec/support/db/migrate/20111101221803_create_searches.rb +16 -0
- data/spec/support/lib/generators/test_app_generator.rb +56 -0
- data/spec/support/lib/tasks/rspec.rake +8 -0
- data/tasks/hydra-ezid-dev.rake +68 -0
- data/tasks/jetty.rake +40 -0
- metadata +207 -0
@@ -0,0 +1,164 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<config>
|
3
|
+
<!-- NOTE: various comments and unused configuration possibilities have been purged
|
4
|
+
from this file. Please refer to http://wiki.apache.org/solr/SolrConfigXml,
|
5
|
+
as well as the default solrconfig file included with Solr -->
|
6
|
+
|
7
|
+
<abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
|
8
|
+
|
9
|
+
<luceneMatchVersion>LUCENE_40</luceneMatchVersion>
|
10
|
+
|
11
|
+
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
|
12
|
+
|
13
|
+
<!-- solr lib dirs -->
|
14
|
+
<lib dir="../lib/contrib/analysis-extras/lib" />
|
15
|
+
<lib dir="../lib/contrib/analysis-extras/lucene-libs" />
|
16
|
+
|
17
|
+
<dataDir>${solr.data.dir:}</dataDir>
|
18
|
+
|
19
|
+
<requestHandler name="search" class="solr.SearchHandler" default="true">
|
20
|
+
<!-- default values for query parameters can be specified, these
|
21
|
+
will be overridden by parameters in the request
|
22
|
+
-->
|
23
|
+
<lst name="defaults">
|
24
|
+
<str name="defType">edismax</str>
|
25
|
+
<str name="echoParams">explicit</str>
|
26
|
+
<str name="q.alt">*:*</str>
|
27
|
+
<str name="mm">2<-1 5<-2 6<90%</str>
|
28
|
+
<int name="qs">1</int>
|
29
|
+
<int name="ps">2</int>
|
30
|
+
<float name="tie">0.01</float>
|
31
|
+
<!-- this qf and pf are used by default, if not otherwise specified by
|
32
|
+
client. The default blacklight_config will use these for the
|
33
|
+
"keywords" search. See the author_qf/author_pf, title_qf, etc
|
34
|
+
below, which the default blacklight_config will specify for
|
35
|
+
those searches. You may also be interested in:
|
36
|
+
http://wiki.apache.org/solr/LocalParams
|
37
|
+
-->
|
38
|
+
<str name="qf">
|
39
|
+
id
|
40
|
+
all_text_timv
|
41
|
+
active_fedora_model_ssi
|
42
|
+
object_type_si
|
43
|
+
label_tesim
|
44
|
+
</str>
|
45
|
+
<str name="pf">
|
46
|
+
all_text_timv^10
|
47
|
+
</str>
|
48
|
+
|
49
|
+
<str name="author_qf">
|
50
|
+
</str>
|
51
|
+
<str name="author_pf">
|
52
|
+
</str>
|
53
|
+
<str name="title_qf">
|
54
|
+
</str>
|
55
|
+
<str name="title_pf">
|
56
|
+
</str>
|
57
|
+
<str name="subject_qf">
|
58
|
+
</str>
|
59
|
+
<str name="subject_pf">
|
60
|
+
</str>
|
61
|
+
|
62
|
+
<str name="fl">
|
63
|
+
*,
|
64
|
+
score
|
65
|
+
</str>
|
66
|
+
|
67
|
+
<str name="facet">true</str>
|
68
|
+
<str name="facet.mincount">1</str>
|
69
|
+
<str name="facet.limit">10</str>
|
70
|
+
<str name="facet.field">active_fedora_model_ssi</str>
|
71
|
+
<str name="facet.field">object_type_si</str>
|
72
|
+
|
73
|
+
<str name="spellcheck">true</str>
|
74
|
+
<str name="spellcheck.dictionary">default</str>
|
75
|
+
<str name="spellcheck.onlyMorePopular">true</str>
|
76
|
+
<str name="spellcheck.extendedResults">true</str>
|
77
|
+
<str name="spellcheck.collate">false</str>
|
78
|
+
<str name="spellcheck.count">5</str>
|
79
|
+
|
80
|
+
</lst>
|
81
|
+
<arr name="last-components">
|
82
|
+
<str>spellcheck</str>
|
83
|
+
</arr>
|
84
|
+
</requestHandler>
|
85
|
+
|
86
|
+
<requestHandler name="permissions" class="solr.SearchHandler" >
|
87
|
+
<lst name="defaults">
|
88
|
+
<str name="facet">off</str>
|
89
|
+
<str name="echoParams">all</str>
|
90
|
+
<str name="rows">1</str>
|
91
|
+
<str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
|
92
|
+
<str name="fl">
|
93
|
+
id,
|
94
|
+
access_ssim,
|
95
|
+
discover_access_group_ssim,discover_access_person_ssim,
|
96
|
+
read_access_group_ssim,read_access_person_ssim,
|
97
|
+
edit_access_group_ssim,edit_access_person_ssim,
|
98
|
+
depositor_ti,
|
99
|
+
embargo_release_date_dtsi
|
100
|
+
inheritable_access_ssim,
|
101
|
+
inheritable_discover_access_group_ssim,inheritable_discover_access_person_ssim,
|
102
|
+
inheritable_read_access_group_ssim,inheritable_read_access_person_ssim,
|
103
|
+
inheritable_edit_access_group_ssim,inheritable_edit_access_person_ssim,
|
104
|
+
inheritable_embargo_release_date_dtsi
|
105
|
+
</str>
|
106
|
+
</lst>
|
107
|
+
</requestHandler>
|
108
|
+
|
109
|
+
<requestHandler name="standard" class="solr.SearchHandler">
|
110
|
+
<lst name="defaults">
|
111
|
+
<str name="echoParams">explicit</str>
|
112
|
+
<str name="defType">lucene</str>
|
113
|
+
</lst>
|
114
|
+
</requestHandler>
|
115
|
+
|
116
|
+
<!-- for requests to get a single document; use id=666 instead of q=id:666 -->
|
117
|
+
<requestHandler name="document" class="solr.SearchHandler" >
|
118
|
+
<lst name="defaults">
|
119
|
+
<str name="echoParams">all</str>
|
120
|
+
<str name="fl">*</str>
|
121
|
+
<str name="rows">1</str>
|
122
|
+
<str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
|
123
|
+
</lst>
|
124
|
+
</requestHandler>
|
125
|
+
|
126
|
+
|
127
|
+
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
|
128
|
+
<str name="queryAnalyzerFieldType">textSpell</str>
|
129
|
+
<!-- Multiple "Spell Checkers" can be declared and used by this component
|
130
|
+
(e.g. for title_spell field)
|
131
|
+
-->
|
132
|
+
<lst name="spellchecker">
|
133
|
+
<str name="name">default</str>
|
134
|
+
<str name="field">spell</str>
|
135
|
+
<str name="spellcheckIndexDir">./spell</str>
|
136
|
+
<str name="buildOnOptimize">true</str>
|
137
|
+
</lst>
|
138
|
+
</searchComponent>
|
139
|
+
|
140
|
+
<requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
|
141
|
+
|
142
|
+
<requestDispatcher handleSelect="true" >
|
143
|
+
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
|
144
|
+
</requestDispatcher>
|
145
|
+
|
146
|
+
<requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
|
147
|
+
<requestHandler name="/update" class="solr.UpdateRequestHandler" />
|
148
|
+
<requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
|
149
|
+
|
150
|
+
<requestHandler name="/admin/ping" class="solr.PingRequestHandler">
|
151
|
+
<lst name="invariants">
|
152
|
+
<str name="q">solrpingquery</str>
|
153
|
+
</lst>
|
154
|
+
<lst name="defaults">
|
155
|
+
<str name="echoParams">all</str>
|
156
|
+
</lst>
|
157
|
+
</requestHandler>
|
158
|
+
|
159
|
+
<!-- config for the admin interface -->
|
160
|
+
<admin>
|
161
|
+
<defaultQuery>search</defaultQuery>
|
162
|
+
</admin>
|
163
|
+
|
164
|
+
</config>
|
data/solr_conf/solr.xml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<!--
|
3
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
4
|
+
contributor license agreements. See the NOTICE file distributed with
|
5
|
+
this work for additional information regarding copyright ownership.
|
6
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
7
|
+
(the "License"); you may not use this file except in compliance with
|
8
|
+
the License. You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
-->
|
18
|
+
|
19
|
+
<!--
|
20
|
+
All (relative) paths are relative to the installation path
|
21
|
+
|
22
|
+
persistent: Save changes made via the API to this file
|
23
|
+
sharedLib: path to a lib directory that will be shared across all cores
|
24
|
+
-->
|
25
|
+
<solr persistent="false" sharedLib="lib">
|
26
|
+
|
27
|
+
<!--
|
28
|
+
adminPath: RequestHandler path to manage cores.
|
29
|
+
If 'null' (or absent), cores will not be manageable via REST
|
30
|
+
-->
|
31
|
+
<cores adminPath="/admin/cores" defaultCoreName="development">
|
32
|
+
<core name="development" instanceDir="development-core" />
|
33
|
+
<core name="test" instanceDir="test-core" />
|
34
|
+
</cores>
|
35
|
+
</solr>
|
data/spec/factories.rb
ADDED
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
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-ezid'
|
8
|
+
|
9
|
+
FactoryGirl.definition_file_paths = [File.expand_path("../factories", __FILE__)]
|
10
|
+
FactoryGirl.find_definitions
|
11
|
+
|
12
|
+
module EngineRoutes
|
13
|
+
def self.included(base)
|
14
|
+
base.routes { Hydra::Ezid::Engine.routes }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.use_transactional_fixtures = true
|
20
|
+
config.include Devise::TestHelpers, :type => :controller
|
21
|
+
config.before(:each, :type=>"controller") { @routes = Hydra::Ezid::Engine.routes }
|
22
|
+
config.include EngineRoutes, :type => :controller
|
23
|
+
end
|
24
|
+
|
25
|
+
module FactoryGirl
|
26
|
+
def self.find_or_create(handle, by=:email)
|
27
|
+
tmpl = FactoryGirl.build(handle)
|
28
|
+
tmpl.class.send("find_by_#{by}".to_sym, tmpl.send(by)) || FactoryGirl.create(handle)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
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
|
+
self.class.send :attr_accessor, k
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.find(pid)
|
26
|
+
objects[pid]
|
27
|
+
end
|
28
|
+
|
29
|
+
def pid
|
30
|
+
@pid
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy
|
34
|
+
self.class.objects.delete(@pid)
|
35
|
+
end
|
36
|
+
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,56 @@
|
|
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::Ezid.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::Ezid::Engine => '/'"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy_rspec_rake_task
|
31
|
+
copy_file "lib/tasks/rspec.rake"
|
32
|
+
end
|
33
|
+
|
34
|
+
def delete_generated_noise
|
35
|
+
remove_file("public/index.html")
|
36
|
+
remove_file("spec/models/user_spec.rb")
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy_view_overrides
|
40
|
+
directory("app/views/catalog")
|
41
|
+
end
|
42
|
+
|
43
|
+
# Inject javascript into application.js
|
44
|
+
def inject_javascript
|
45
|
+
insert_into_file "app/assets/javascripts/application.js", :after => '//= require_tree .' do
|
46
|
+
"\n //include javascript for ezid\n//= require hydra_ezid"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Inject javascript into application.js
|
51
|
+
def inject_css
|
52
|
+
insert_into_file "app/assets/stylesheets/application.css", :after => '*= require_tree .' do
|
53
|
+
"\n *= require hydra_ezid"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
desc "run the hydra-ezid 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
|
@@ -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
|
+
Bundler.with_clean_env do
|
23
|
+
within_test_app do
|
24
|
+
system "rake myspec#{focused_spec}"
|
25
|
+
abort "Error running hydra-ezid" unless $?.success?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Create the test rails app"
|
31
|
+
task :generate do
|
32
|
+
unless File.exists?('spec/internal/Rakefile')
|
33
|
+
puts "Generating rails app"
|
34
|
+
`rails new spec/internal`
|
35
|
+
puts "Updating gemfile"
|
36
|
+
|
37
|
+
`echo "gem 'hydra-ezid', :path=>'../../../hydra-ezid'
|
38
|
+
gem 'factory_girl_rails'
|
39
|
+
" >> spec/internal/Gemfile`
|
40
|
+
puts "Copying generator"
|
41
|
+
`cp -r spec/support/lib/generators spec/internal/lib`
|
42
|
+
Bundler.with_clean_env do
|
43
|
+
within_test_app do
|
44
|
+
puts "Bundle install"
|
45
|
+
`bundle install`
|
46
|
+
puts "running test_app_generator"
|
47
|
+
system "rails generate test_app"
|
48
|
+
# These factories are autogenerated and conflict with our factories
|
49
|
+
system 'rm test/factories/users.rb'
|
50
|
+
puts "running migrations"
|
51
|
+
puts `rake db:migrate db:test:prepare`
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
puts "Done generating test app"
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "Clean out the test rails app"
|
59
|
+
task :clean do
|
60
|
+
puts "Removing sample rails app"
|
61
|
+
`rm -rf spec/internal`
|
62
|
+
end
|
63
|
+
|
64
|
+
def within_test_app
|
65
|
+
FileUtils.cd('spec/internal')
|
66
|
+
yield
|
67
|
+
FileUtils.cd('../..')
|
68
|
+
end
|