hydra-batch-edit 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/Rakefile +24 -11
- data/lib/hydra/batch_edit/search_service.rb +23 -15
- data/lib/hydra/batch_edit/version.rb +1 -1
- data/spec/controllers/batch_edits_controller_spec.rb +0 -5
- data/spec/lib/search_service_spec.rb +27 -3
- data/spec/support/Gemfile +2 -1
- data/spec/support/config/initializers/hydra_config.rb +28 -0
- data/spec/support/lib/generators/test_app_generator.rb +8 -0
- data/spec/support/lib/tasks/rspec.rake +9 -0
- metadata +7 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 041fb6c8cbceea532367e5b77b7283243abb98f2
|
|
4
|
+
data.tar.gz: 21100df59111000878aee65687e56d9bd6bde753
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ab5feb6defd561b0e8224d98253ce8a15c62bb05a8a586294515215195a484a70dff7df0082435ca88b381964259e07cb613e3ba5873d8432c6fbdf840090b96
|
|
7
|
+
data.tar.gz: ffe4e1e1e4689578978802ddc210675e1c3492df589d2e9f54f524e6c0a613b89f904d82d740f70a5e1b1b78343ebee98e0ae3fdfdea12bc0089e6cc4fdadefa
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
|
@@ -7,12 +7,17 @@ ENV["RAILS_ROOT"] ||= 'spec/internal'
|
|
|
7
7
|
desc 'Default: run specs.'
|
|
8
8
|
task :default => :spec
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
|
|
11
|
+
task :spec => [:generate] do |t|
|
|
12
|
+
focused_spec = ENV['SPEC'] ? " SPEC=#{File.join(GEM_ROOT, ENV['SPEC'])}" : ''
|
|
13
|
+
within_test_app do
|
|
14
|
+
system "rake myspec#{focused_spec}"
|
|
15
|
+
abort "Error running hydra-batch-edit" unless $?.success?
|
|
16
|
+
end
|
|
13
17
|
end
|
|
14
18
|
|
|
15
19
|
|
|
20
|
+
|
|
16
21
|
desc "Create the test rails app"
|
|
17
22
|
task :generate do
|
|
18
23
|
unless File.exists?('spec/internal/Rakefile')
|
|
@@ -23,15 +28,15 @@ task :generate do
|
|
|
23
28
|
puts "Copying generator"
|
|
24
29
|
`cp -r spec/support/lib/generators spec/internal/lib`
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
within_test_app do
|
|
32
|
+
puts "Bundle install"
|
|
33
|
+
puts `bundle install`
|
|
34
|
+
puts "running generator"
|
|
35
|
+
puts `rails generate test_app`
|
|
31
36
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
puts "running migrations"
|
|
38
|
+
puts `rake db:migrate db:test:prepare`
|
|
39
|
+
end
|
|
35
40
|
end
|
|
36
41
|
puts "Running specs"
|
|
37
42
|
end
|
|
@@ -41,3 +46,11 @@ task :clean do
|
|
|
41
46
|
puts "Removing sample rails app"
|
|
42
47
|
`rm -rf spec/internal`
|
|
43
48
|
end
|
|
49
|
+
|
|
50
|
+
def within_test_app
|
|
51
|
+
FileUtils.cd('spec/internal')
|
|
52
|
+
Bundler.with_clean_env do
|
|
53
|
+
yield
|
|
54
|
+
end
|
|
55
|
+
FileUtils.cd('../..')
|
|
56
|
+
end
|
|
@@ -4,7 +4,6 @@ module Hydra
|
|
|
4
4
|
include Blacklight::Configurable
|
|
5
5
|
include Blacklight::SolrHelper
|
|
6
6
|
|
|
7
|
-
|
|
8
7
|
def initialize(session, user_key)
|
|
9
8
|
@session = session
|
|
10
9
|
@user_key = user_key
|
|
@@ -13,37 +12,46 @@ module Hydra
|
|
|
13
12
|
|
|
14
13
|
solr_search_params_logic << :apply_gated_search
|
|
15
14
|
|
|
16
|
-
def last_search_documents
|
|
15
|
+
def last_search_documents
|
|
17
16
|
return [] if @session[:history].blank?
|
|
18
17
|
last_search_id = @session[:history].first
|
|
19
|
-
search = Search.find(last_search_id)
|
|
20
|
-
|
|
18
|
+
search = Search.find(last_search_id)
|
|
19
|
+
_, document_list = get_search_results(search.query_params, :fl=>'id', :rows=>1000)
|
|
21
20
|
document_list
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
# filter that sets up access-controlled lucene query in order to provide gated search behavior
|
|
25
24
|
# @param solr_parameters the current solr parameters
|
|
26
|
-
# @param user_parameters the current user-
|
|
25
|
+
# @param user_parameters the current user-submitted parameters
|
|
27
26
|
def apply_gated_search(solr_parameters, user_parameters)
|
|
28
27
|
solr_parameters[:fq] ||= []
|
|
28
|
+
|
|
29
29
|
# Grant access to public content
|
|
30
30
|
user_access_filters = []
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
user_access_filters << "#{solr_access_control_suffix(:group)}:public"
|
|
32
|
+
|
|
34
33
|
# Grant access based on user id & role
|
|
35
|
-
unless @user_key.
|
|
34
|
+
unless @user_key.blank?
|
|
36
35
|
# for roles
|
|
37
|
-
::RoleMapper.roles(@user_key).
|
|
38
|
-
user_access_filters << "
|
|
36
|
+
::RoleMapper.roles(@user_key).each do |role|
|
|
37
|
+
user_access_filters << "#{solr_access_control_suffix(:group)}:#{escape_slashes(role)}"
|
|
39
38
|
end
|
|
40
39
|
# for individual person access
|
|
41
|
-
user_access_filters << "
|
|
40
|
+
user_access_filters << "#{solr_access_control_suffix(:individual)}:#{escape_slashes(@user_key)}"
|
|
42
41
|
end
|
|
43
|
-
solr_parameters[:fq] << user_access_filters.join(
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
solr_parameters[:fq] << user_access_filters.join(' OR ')
|
|
43
|
+
solr_parameters
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def escape_slashes(value)
|
|
47
|
+
value.gsub('/', '\/')
|
|
48
|
+
end
|
|
46
49
|
|
|
50
|
+
# @param [Symbol] key The permission type to return. Must be `:group` or `:individual`
|
|
51
|
+
def solr_access_control_suffix(key)
|
|
52
|
+
raise ArgumentError, "you must provide :group or :individual" unless [:group, :individual].include?(key)
|
|
53
|
+
Hydra.config[:permissions][:edit][key]
|
|
54
|
+
end
|
|
47
55
|
end
|
|
48
56
|
end
|
|
49
57
|
end
|
|
@@ -1,17 +1,41 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Hydra::BatchEdit::SearchService do
|
|
4
|
-
|
|
5
4
|
before do
|
|
5
|
+
@login = 'vanessa'
|
|
6
6
|
@session = {:history => [17, 14, 12, 9]}
|
|
7
|
-
@service = Hydra::BatchEdit::SearchService.new(@session,
|
|
7
|
+
@service = Hydra::BatchEdit::SearchService.new(@session, @login)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
it "should get the documents for the first history entry" do
|
|
11
11
|
Search.should_receive(:find).with(17).and_return(Search.new(:query_params=>{:q=>"World Peace"}))
|
|
12
12
|
@service.should_receive(:get_search_results).and_return([:one, [:doc1, :doc2]])
|
|
13
13
|
@service.last_search_documents.should == [:doc1, :doc2]
|
|
14
|
-
|
|
15
14
|
end
|
|
16
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 BatchEdit
|
|
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::BatchEdit::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
|
|
17
41
|
end
|
data/spec/support/Gemfile
CHANGED
|
@@ -6,6 +6,7 @@ gem 'rails'
|
|
|
6
6
|
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
|
7
7
|
|
|
8
8
|
gem 'sqlite3'
|
|
9
|
+
gem 'hydra-head'
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
# Gems used only for assets and not required
|
|
@@ -15,7 +16,7 @@ group :assets do
|
|
|
15
16
|
gem 'coffee-rails', '~> 3.2.1'
|
|
16
17
|
|
|
17
18
|
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
|
18
|
-
gem 'therubyracer', :platforms => :ruby
|
|
19
|
+
#gem 'therubyracer', :platforms => :ruby
|
|
19
20
|
|
|
20
21
|
gem 'uglifier', '>= 1.0.3'
|
|
21
22
|
end
|
|
@@ -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
|
|
@@ -16,4 +16,12 @@ class TestAppGenerator < Rails::Generators::Base
|
|
|
16
16
|
copy_file "app/models/solr_document.rb"
|
|
17
17
|
copy_file "db/migrate/20111101221803_create_searches.rb"
|
|
18
18
|
end
|
|
19
|
+
|
|
20
|
+
def copy_rspec_rake_task
|
|
21
|
+
copy_file "lib/tasks/rspec.rake"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def copy_hydra_config
|
|
25
|
+
copy_file "config/initializers/hydra_config.rb"
|
|
26
|
+
end
|
|
19
27
|
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'rspec/core/rake_task'
|
|
2
|
+
desc "run the hydra-batch-edit 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
|
+
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hydra-batch-edit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Justin Coyne
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-04-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: blacklight
|
|
@@ -107,8 +107,10 @@ files:
|
|
|
107
107
|
- spec/support/Gemfile
|
|
108
108
|
- spec/support/app/models/sample.rb
|
|
109
109
|
- spec/support/app/models/solr_document.rb
|
|
110
|
+
- spec/support/config/initializers/hydra_config.rb
|
|
110
111
|
- spec/support/db/migrate/20111101221803_create_searches.rb
|
|
111
112
|
- spec/support/lib/generators/test_app_generator.rb
|
|
113
|
+
- spec/support/lib/tasks/rspec.rake
|
|
112
114
|
homepage: https://github.com/projecthydra/hydra-batch-edit
|
|
113
115
|
licenses: []
|
|
114
116
|
metadata: {}
|
|
@@ -128,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
128
130
|
version: '0'
|
|
129
131
|
requirements: []
|
|
130
132
|
rubyforge_project:
|
|
131
|
-
rubygems_version: 2.0.
|
|
133
|
+
rubygems_version: 2.0.3
|
|
132
134
|
signing_key:
|
|
133
135
|
specification_version: 4
|
|
134
136
|
summary: Rails engine to do batch editing with hydra-head
|
|
@@ -142,6 +144,7 @@ test_files:
|
|
|
142
144
|
- spec/support/Gemfile
|
|
143
145
|
- spec/support/app/models/sample.rb
|
|
144
146
|
- spec/support/app/models/solr_document.rb
|
|
147
|
+
- spec/support/config/initializers/hydra_config.rb
|
|
145
148
|
- spec/support/db/migrate/20111101221803_create_searches.rb
|
|
146
149
|
- spec/support/lib/generators/test_app_generator.rb
|
|
147
|
-
|
|
150
|
+
- spec/support/lib/tasks/rspec.rake
|