curation_concerns 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +6 -0
  4. data/Gemfile +1 -2
  5. data/RELEASING.md +3 -2
  6. data/Rakefile +15 -14
  7. data/VERSION +1 -1
  8. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +1 -1
  9. data/app/controllers/concerns/curation_concerns/parent_container.rb +1 -1
  10. data/app/renderers/curation_concerns/attribute_renderer.rb +1 -1
  11. data/curation_concerns.gemspec +2 -0
  12. data/lib/curation_concerns/rails/routes.rb +19 -7
  13. data/lib/curation_concerns/version.rb +1 -1
  14. data/solr/config/_rest_managed.json +3 -0
  15. data/solr/config/admin-extra.html +31 -0
  16. data/solr/config/elevate.xml +36 -0
  17. data/solr/config/mapping-ISOLatin1Accent.txt +246 -0
  18. data/solr/config/protwords.txt +21 -0
  19. data/solr/config/schema.xml +372 -0
  20. data/solr/config/scripts.conf +24 -0
  21. data/solr/config/solrconfig.xml +300 -0
  22. data/solr/config/spellings.txt +2 -0
  23. data/solr/config/stopwords.txt +58 -0
  24. data/solr/config/stopwords_en.txt +58 -0
  25. data/solr/config/synonyms.txt +31 -0
  26. data/solr/config/xslt/example.xsl +132 -0
  27. data/solr/config/xslt/example_atom.xsl +67 -0
  28. data/solr/config/xslt/example_rss.xsl +66 -0
  29. data/solr/config/xslt/luke.xsl +337 -0
  30. data/spec/actors/curation_concerns/work_actor_spec.rb +1 -1
  31. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +23 -0
  32. data/spec/models/curation_concerns/collection_behavior_spec.rb +2 -0
  33. data/spec/models/file_set_spec.rb +1 -1
  34. data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +12 -0
  35. data/spec/test_app_templates/Gemfile.extra +0 -3
  36. data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +1 -1
  37. metadata +48 -6
  38. data/config/jetty.yml +0 -5
  39. data/tasks/jetty.rake +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e77165da47c309d90805ddb6981da218c262545
4
- data.tar.gz: 5b4967ede0c3c0a0eafc7bb60d4db47950519044
3
+ metadata.gz: 7af44881c5c91d837ca80398c54f3e52fd686b01
4
+ data.tar.gz: d4186500d7ca262837a72912a0e681b83fac149f
5
5
  SHA512:
6
- metadata.gz: 295594240997309f48717675eca0bd6e4104e2e13c468fb9f9cdb67496853a6b2380456281e913a453e0d341fa86407d4769eb6366462ee7795b52f7cbbef048
7
- data.tar.gz: 0a874acf3320fca7cac2ebd597baa353ff0fbfdc5211b32afa24eab97662297713bad2ef749253426f959a16170865292c4b4e59f7fe04771388e99b93710fe2
6
+ metadata.gz: fa316af1763c1a5fd5fe369fd1d88c33b42ff7a5b4f14e8b63191de19862707bc82c3f3f0420c93d0ca9e9c26a9a4406fd400f866559e6201969f1c55dd7a56a
7
+ data.tar.gz: 243f21c6b7cea9a5fa6b18de63a373a7a40461fda1d3551490b1a4c17051dcc112e550e109ef4d55d802dc48dde368db8b0b2279eb4a1594eec4b0cee4eb671b
data/.gitignore CHANGED
@@ -8,7 +8,7 @@ jetty
8
8
  /.ruby-version
9
9
  /.ruby-gemset
10
10
  solr_conf/
11
- spec/internal
12
11
  .internal_test_app
13
12
  .byebug_history
14
13
  spec/mock_upload_directory
14
+ fcrepo4-data
data/.rubocop.yml CHANGED
@@ -21,6 +21,9 @@ Performance/RedundantBlockCall:
21
21
  Exclude:
22
22
  - 'curation_concerns-models/lib/curation_concerns/null_logger.rb'
23
23
 
24
+ Performance/RedundantMerge:
25
+ Enabled: false
26
+
24
27
  Lint/AssignmentInCondition:
25
28
  Exclude:
26
29
  - 'curation_concerns-models/app/services/curation_concerns/persist_derivatives.rb'
@@ -66,6 +69,9 @@ Metrics/ModuleLength:
66
69
  - 'app/helpers/curation_concerns/curation_concerns_helper_behavior.rb'
67
70
  - 'curation_concerns-models/app/models/concerns/curation_concerns/solr_document_behavior.rb'
68
71
 
72
+ Style/ZeroLengthPredicate:
73
+ Enabled: false
74
+
69
75
  Style/BlockDelimiters:
70
76
  Exclude:
71
77
  - 'spec/**/*'
data/Gemfile CHANGED
@@ -15,13 +15,12 @@ group :development, :test do
15
15
  gem 'pry-byebug' unless ENV['CI']
16
16
  end
17
17
 
18
-
19
18
  # BEGIN ENGINE_CART BLOCK
20
19
  # engine_cart: 0.8.0
21
20
  # engine_cart stanza: 0.8.0
22
21
  # the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
23
22
  file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path(".internal_test_app", File.dirname(__FILE__)))
24
- if File.exists?(file)
23
+ if File.exist?(file)
25
24
  begin
26
25
  eval_gemfile file
27
26
  rescue Bundler::GemfileError => e
data/RELEASING.md CHANGED
@@ -1,2 +1,3 @@
1
- * Bump version number in VERSION
2
- * Release the gem to rubygems.org: rake all:release
1
+ * Bump version number in `VERSION`
2
+ * Release the gem to rubygems.org: `rake all:release`
3
+ * `git push`
data/Rakefile CHANGED
@@ -1,17 +1,13 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'bundler/setup'
3
3
  require 'rspec/core/rake_task'
4
- require 'jettywrapper'
5
4
  require 'engine_cart/rake_task'
6
5
  require 'rubocop/rake_task'
6
+ require 'solr_wrapper'
7
+ require 'fcrepo_wrapper'
7
8
 
8
9
  Dir.glob('tasks/*.rake').each { |r| import r }
9
10
 
10
- # This makes it possible to run curation_concerns:jetty:config from here.
11
- import 'curation_concerns-models/lib/tasks/curation_concerns-models_tasks.rake'
12
-
13
- Jettywrapper.hydra_jetty_version = 'v8.6.0'
14
-
15
11
  desc 'Run style checker'
16
12
  RuboCop::RakeTask.new(:rubocop) do |task|
17
13
  task.requires << 'rubocop-rspec'
@@ -23,15 +19,20 @@ task spec: :rubocop do
23
19
  RSpec::Core::RakeTask.new(:spec)
24
20
  end
25
21
 
26
- task ci: ['engine_cart:generate', 'jetty:clean', 'jetty:config'] do
27
- puts 'running continuous integration'
28
- jetty_params = Jettywrapper.load_config
29
- jetty_params[:startup_wait] = 90
30
-
31
- error = Jettywrapper.wrap(jetty_params) do
32
- Rake::Task['spec'].invoke
22
+ desc 'Spin up Solr & Fedora and run the test suite'
23
+ task ci: ['engine_cart:generate'] do
24
+ # TODO: set port to nil (random port)
25
+ solr_params = { port: '8985', verbose: true, managed: true }
26
+ fcrepo_params = { port: '8986', verbose: true, managed: true }
27
+ SolrWrapper.wrap(solr_params) do |solr|
28
+ ENV['SOLR_TEST_PORT'] = solr.port
29
+ solr.with_collection(name: 'hydra-test', dir: File.join(File.expand_path('.', File.dirname(__FILE__)), 'solr', 'config')) do
30
+ FcrepoWrapper.wrap(fcrepo_params) do |fcrepo|
31
+ ENV['FCREPO_TEST_PORT'] = fcrepo.port
32
+ Rake::Task['spec'].invoke
33
+ end
34
+ end
33
35
  end
34
- fail "test failures: #{error}" if error
35
36
  end
36
37
 
37
38
  task clean: 'engine_cart:clean'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
@@ -4,7 +4,7 @@ module CurationConcerns::CurationConcernController
4
4
  include Blacklight::AccessControls::Catalog
5
5
 
6
6
  included do
7
- copy_blacklight_config_from(CatalogController)
7
+ copy_blacklight_config_from(::CatalogController)
8
8
  include CurationConcerns::ThemedLayoutController
9
9
  with_themed_layout '1_column'
10
10
  helper CurationConcerns::AbilityHelper
@@ -22,7 +22,7 @@ module CurationConcerns::ParentContainer
22
22
  end
23
23
 
24
24
  def parent_id
25
- @parent_id ||= new_or_create? ? params[:parent_id] : curation_concern.generic_works.in_objects.first.id
25
+ @parent_id ||= new_or_create? ? params[:parent_id] : lookup_parent_from_child.id
26
26
  end
27
27
 
28
28
  protected
@@ -70,7 +70,7 @@ module CurationConcerns
70
70
  if options[:catalog_search_link]
71
71
  link_to(ERB::Util.h(value), search_path(value))
72
72
  else
73
- auto_link(value)
73
+ auto_link(ERB::Util.h(value))
74
74
  end
75
75
  end
76
76
 
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency 'blacklight_advanced_search', '~> 6.0'
27
27
  spec.add_dependency 'rails_autolink'
28
28
 
29
+ spec.add_development_dependency 'solr_wrapper', '~> 0.4'
30
+ spec.add_development_dependency 'fcrepo_wrapper', '~> 0.1'
29
31
  spec.add_development_dependency "devise", "~> 3.0"
30
32
  spec.add_development_dependency "bundler", "~> 1.6"
31
33
  spec.add_development_dependency "rake"
@@ -1,12 +1,17 @@
1
1
  module ActionDispatch::Routing
2
2
  class Mapper
3
- def curation_concerns_basic_routes
3
+ # @yield If a block is passed it is yielded for each curation_concern
4
+ # @example
5
+ # curation_concerns_basic_routes do
6
+ # concerns :exportable
7
+ # end
8
+ def curation_concerns_basic_routes(&block)
4
9
  resources :downloads, only: :show
5
10
  resources :upload_sets, only: [:edit, :update]
6
11
 
7
12
  namespace :curation_concerns, path: :concern do
8
- CurationConcerns.config.registered_curation_concern_types.map(&:tableize).each do |curation_concern_name|
9
- namespaced_resources curation_concern_name, except: [:index]
13
+ concerns_to_route.each do |curation_concern_name|
14
+ namespaced_resources curation_concern_name, except: [:index], &block
10
15
  end
11
16
 
12
17
  resources :permissions, only: [] do
@@ -63,20 +68,27 @@ module ActionDispatch::Routing
63
68
  ROUTE_OPTIONS = { 'curation_concerns' => { path: :concern } }.freeze
64
69
 
65
70
  # Namespaces routes appropriately
66
- # @example route_namespaced_target("curation_concerns/generic_work") is equivalent to
71
+ # @example namespaced_resources("curation_concerns/generic_work") is equivalent to
67
72
  # namespace "curation_concerns", path: :concern do
68
73
  # resources "generic_work", except: [:index]
69
74
  # end
70
- def namespaced_resources(target, opts = {})
75
+ def namespaced_resources(target, opts = {}, &block)
71
76
  if target.include?('/')
72
77
  the_namespace = target[0..target.index('/') - 1]
73
78
  new_target = target[target.index('/') + 1..-1]
74
79
  namespace the_namespace, ROUTE_OPTIONS.fetch(the_namespace, nil) do
75
- namespaced_resources(new_target, opts)
80
+ namespaced_resources(new_target, opts, &block)
76
81
  end
77
82
  else
78
- resources target, opts
83
+ resources target, opts do
84
+ yield if block_given?
85
+ end
79
86
  end
80
87
  end
88
+
89
+ # @return [Array<String>] the list of works to build routes for
90
+ def concerns_to_route
91
+ CurationConcerns.config.registered_curation_concern_types.map(&:tableize)
92
+ end
81
93
  end
82
94
  end
@@ -1,3 +1,3 @@
1
1
  module CurationConcerns
2
- VERSION = "0.6.0".freeze
2
+ VERSION = "0.7.0".freeze
3
3
  end
@@ -0,0 +1,3 @@
1
+ {
2
+ "initArgs":{},
3
+ "managedList":[]}
@@ -0,0 +1,31 @@
1
+ <!--
2
+ Licensed to the Apache Software Foundation (ASF) under one or more
3
+ contributor license agreements. See the NOTICE file distributed with
4
+ this work for additional information regarding copyright ownership.
5
+ The ASF licenses this file to You under the Apache License, Version 2.0
6
+ (the "License"); you may not use this file except in compliance with
7
+ the License. You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ -->
17
+
18
+ <!-- The content of this page will be statically included into the top
19
+ of the admin page. Uncomment this as an example to see there the content
20
+ will show up.
21
+
22
+ <hr>
23
+ <i>This line will appear before the first table</i>
24
+ <tr>
25
+ <td colspan="2">
26
+ This row will be appended to the end of the first table
27
+ </td>
28
+ </tr>
29
+ <hr>
30
+
31
+ -->
@@ -0,0 +1,36 @@
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
+ <!-- If this file is found in the config directory, it will only be
20
+ loaded once at startup. If it is found in Solr's data
21
+ directory, it will be re-loaded every commit.
22
+ -->
23
+
24
+ <elevate>
25
+ <query text="foo bar">
26
+ <doc id="1" />
27
+ <doc id="2" />
28
+ <doc id="3" />
29
+ </query>
30
+
31
+ <query text="ipod">
32
+ <doc id="MA147LL/A" /> <!-- put the actual ipod at the top -->
33
+ <doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
34
+ </query>
35
+
36
+ </elevate>
@@ -0,0 +1,246 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ # Syntax:
14
+ # "source" => "target"
15
+ # "source".length() > 0 (source cannot be empty.)
16
+ # "target".length() >= 0 (target can be empty.)
17
+
18
+ # example:
19
+ # "??" => "A"
20
+ # "\u00C0" => "A"
21
+ # "\u00C0" => "\u0041"
22
+ # "??" => "ss"
23
+ # "\t" => " "
24
+ # "\n" => ""
25
+
26
+ # ?? => A
27
+ "\u00C0" => "A"
28
+
29
+ # ?? => A
30
+ "\u00C1" => "A"
31
+
32
+ # ?? => A
33
+ "\u00C2" => "A"
34
+
35
+ # ?? => A
36
+ "\u00C3" => "A"
37
+
38
+ # ?? => A
39
+ "\u00C4" => "A"
40
+
41
+ # ?? => A
42
+ "\u00C5" => "A"
43
+
44
+ # ?? => AE
45
+ "\u00C6" => "AE"
46
+
47
+ # ?? => C
48
+ "\u00C7" => "C"
49
+
50
+ # ?? => E
51
+ "\u00C8" => "E"
52
+
53
+ # ?? => E
54
+ "\u00C9" => "E"
55
+
56
+ # ?? => E
57
+ "\u00CA" => "E"
58
+
59
+ # ?? => E
60
+ "\u00CB" => "E"
61
+
62
+ # ?? => I
63
+ "\u00CC" => "I"
64
+
65
+ # ?? => I
66
+ "\u00CD" => "I"
67
+
68
+ # ?? => I
69
+ "\u00CE" => "I"
70
+
71
+ # ?? => I
72
+ "\u00CF" => "I"
73
+
74
+ # ?? => IJ
75
+ "\u0132" => "IJ"
76
+
77
+ # ?? => D
78
+ "\u00D0" => "D"
79
+
80
+ # ?? => N
81
+ "\u00D1" => "N"
82
+
83
+ # ?? => O
84
+ "\u00D2" => "O"
85
+
86
+ # ?? => O
87
+ "\u00D3" => "O"
88
+
89
+ # ?? => O
90
+ "\u00D4" => "O"
91
+
92
+ # ?? => O
93
+ "\u00D5" => "O"
94
+
95
+ # ?? => O
96
+ "\u00D6" => "O"
97
+
98
+ # ?? => O
99
+ "\u00D8" => "O"
100
+
101
+ # ?? => OE
102
+ "\u0152" => "OE"
103
+
104
+ # ??
105
+ "\u00DE" => "TH"
106
+
107
+ # ?? => U
108
+ "\u00D9" => "U"
109
+
110
+ # ?? => U
111
+ "\u00DA" => "U"
112
+
113
+ # ?? => U
114
+ "\u00DB" => "U"
115
+
116
+ # ?? => U
117
+ "\u00DC" => "U"
118
+
119
+ # ?? => Y
120
+ "\u00DD" => "Y"
121
+
122
+ # ?? => Y
123
+ "\u0178" => "Y"
124
+
125
+ # ?? => a
126
+ "\u00E0" => "a"
127
+
128
+ # ?? => a
129
+ "\u00E1" => "a"
130
+
131
+ # ?? => a
132
+ "\u00E2" => "a"
133
+
134
+ # ?? => a
135
+ "\u00E3" => "a"
136
+
137
+ # ?? => a
138
+ "\u00E4" => "a"
139
+
140
+ # ?? => a
141
+ "\u00E5" => "a"
142
+
143
+ # ?? => ae
144
+ "\u00E6" => "ae"
145
+
146
+ # ?? => c
147
+ "\u00E7" => "c"
148
+
149
+ # ?? => e
150
+ "\u00E8" => "e"
151
+
152
+ # ?? => e
153
+ "\u00E9" => "e"
154
+
155
+ # ?? => e
156
+ "\u00EA" => "e"
157
+
158
+ # ?? => e
159
+ "\u00EB" => "e"
160
+
161
+ # ?? => i
162
+ "\u00EC" => "i"
163
+
164
+ # ?? => i
165
+ "\u00ED" => "i"
166
+
167
+ # ?? => i
168
+ "\u00EE" => "i"
169
+
170
+ # ?? => i
171
+ "\u00EF" => "i"
172
+
173
+ # ?? => ij
174
+ "\u0133" => "ij"
175
+
176
+ # ?? => d
177
+ "\u00F0" => "d"
178
+
179
+ # ?? => n
180
+ "\u00F1" => "n"
181
+
182
+ # ?? => o
183
+ "\u00F2" => "o"
184
+
185
+ # ?? => o
186
+ "\u00F3" => "o"
187
+
188
+ # ?? => o
189
+ "\u00F4" => "o"
190
+
191
+ # ?? => o
192
+ "\u00F5" => "o"
193
+
194
+ # ?? => o
195
+ "\u00F6" => "o"
196
+
197
+ # ?? => o
198
+ "\u00F8" => "o"
199
+
200
+ # ?? => oe
201
+ "\u0153" => "oe"
202
+
203
+ # ?? => ss
204
+ "\u00DF" => "ss"
205
+
206
+ # ?? => th
207
+ "\u00FE" => "th"
208
+
209
+ # ?? => u
210
+ "\u00F9" => "u"
211
+
212
+ # ?? => u
213
+ "\u00FA" => "u"
214
+
215
+ # ?? => u
216
+ "\u00FB" => "u"
217
+
218
+ # ?? => u
219
+ "\u00FC" => "u"
220
+
221
+ # ?? => y
222
+ "\u00FD" => "y"
223
+
224
+ # ?? => y
225
+ "\u00FF" => "y"
226
+
227
+ # ??? => ff
228
+ "\uFB00" => "ff"
229
+
230
+ # ??? => fi
231
+ "\uFB01" => "fi"
232
+
233
+ # ??? => fl
234
+ "\uFB02" => "fl"
235
+
236
+ # ??? => ffi
237
+ "\uFB03" => "ffi"
238
+
239
+ # ??? => ffl
240
+ "\uFB04" => "ffl"
241
+
242
+ # ??? => ft
243
+ "\uFB05" => "ft"
244
+
245
+ # ??? => st
246
+ "\uFB06" => "st"
@@ -0,0 +1,21 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ #-----------------------------------------------------------------------
14
+ # Use a protected word file to protect against the stemmer reducing two
15
+ # unrelated words to the same base word.
16
+
17
+ # Some non-words that normally won't be encountered,
18
+ # just to test that they won't be stemmed.
19
+ dontstems
20
+ zwhacky
21
+