spotlight-resources-iiif 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 161fa9063aec3b247187e03c374fb0f7356a5a53
4
- data.tar.gz: 44b7cb182cae000c07f1b082d6408fa6dfeacd10
3
+ metadata.gz: 0a2b95680bb9651d8b35a91ab2b3033c364e6d76
4
+ data.tar.gz: 200c1bb77a16153ccfc99450550500769d54f124
5
5
  SHA512:
6
- metadata.gz: 4f1fcfe6b43b7207d1ec79121cff229235f0ff91585cf456b553e007c2cb17e53462990eb085503224d0ed6dcc7cd93d8010336ebc9bb14e0a336c851cf25992
7
- data.tar.gz: 8fb693cda9b050a66d06b9afcdcfe3b043ce5052224fceacb7a9ccda3652fa00497c2f7a709e6d1c2bd22909480864aa9ddb373b10e97afd0d279ceaace4b9f9
6
+ metadata.gz: e64dbe2c42cbccdaa946a3e608916132b1192e8c5036c562ae042cfa9321142c5b4b685b4e880a3a1f456e27076fb673d213e92a69227f4a4d22ab1e1d5963cd
7
+ data.tar.gz: 0b5cd3086783d8254389951e66b1a990d622cef9665686189e5c41e5d29651ec7595bf345f69af67050875e107afcbe20c64c49cb8464daa3a4ac62b27badd91
@@ -0,0 +1,5 @@
1
+ # Place any default configuration for solr_wrapper here
2
+ # port: 8983
3
+ collection:
4
+ dir: solr/conf/
5
+ name: blacklight-core
@@ -2,7 +2,7 @@ notifications:
2
2
  email: false
3
3
 
4
4
  rvm:
5
- - 2.2.3
5
+ - 2.3.1
6
6
 
7
7
  env:
8
8
  global:
@@ -13,3 +13,5 @@ language: ruby
13
13
 
14
14
  script:
15
15
  - bundle exec rake
16
+
17
+ jdk: oraclejdk8
data/Gemfile CHANGED
@@ -4,10 +4,10 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  # BEGIN ENGINE_CART BLOCK
7
- # engine_cart: 0.8.0
8
- # engine_cart stanza: 0.8.0
7
+ # engine_cart: 0.10.0
8
+ # engine_cart stanza: 0.10.0
9
9
  # the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
10
- file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path(".internal_test_app", File.dirname(__FILE__)))
10
+ file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path('.internal_test_app', File.dirname(__FILE__)))
11
11
  if File.exist?(file)
12
12
  begin
13
13
  eval_gemfile file
@@ -18,13 +18,24 @@ if File.exist?(file)
18
18
  else
19
19
  Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in #{file}, using placeholder dependencies"
20
20
 
21
- gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
21
+ if ENV['RAILS_VERSION']
22
+ if ENV['RAILS_VERSION'] == 'edge'
23
+ gem 'rails', github: 'rails/rails'
24
+ ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
25
+ else
26
+ gem 'rails', ENV['RAILS_VERSION']
27
+ end
28
+ end
22
29
 
23
- if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
24
- gem 'responders', "~> 2.0"
25
- gem 'sass-rails', ">= 5.0"
26
- else
27
- gem 'sass-rails', "< 5.0"
30
+ case ENV['RAILS_VERSION']
31
+ when /^4.2/
32
+ gem 'responders', '~> 2.0'
33
+ gem 'sass-rails', '>= 5.0'
34
+ gem 'coffee-rails', '~> 4.1.0'
35
+ when /^4.[01]/
36
+ gem 'sass-rails', '< 5.0'
28
37
  end
29
38
  end
30
39
  # END ENGINE_CART BLOCK
40
+
41
+ gem 'blacklight-spotlight', github: 'projectblacklight/spotlight'
data/README.md CHANGED
@@ -20,6 +20,10 @@ Or install it yourself as:
20
20
 
21
21
  $ gem install spotlight-resources-iiif
22
22
 
23
+ Then run the engine's generator:
24
+
25
+ $ bundle exec rails generate spotlight:resources:iiif:install
26
+
23
27
  ## Usage
24
28
 
25
29
  This is a Rails engine gem to be used along with blacklight-spotlight, another Rails engine gem used to build exhibits sites while leveraging the blacklight Rails engine gem.
data/Rakefile CHANGED
@@ -17,23 +17,18 @@ RuboCop::RakeTask.new(:rubocop) do |task|
17
17
  task.options = ['-l'] # run lint cops only
18
18
  end
19
19
 
20
- ZIP_URL = "https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.4.zip"
21
- require 'jettywrapper'
22
-
23
20
  require 'engine_cart/rake_task'
24
21
  EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
25
22
 
26
- require 'exhibits_solr_conf'
27
-
28
- desc 'Run tests in generated test Rails app with generated Solr instance running'
29
- task ci: ['engine_cart:generate', 'jetty:clean', 'exhibits:configure_solr'] do
23
+ task ci: ['engine_cart:generate'] do
24
+ require 'solr_wrapper'
30
25
  ENV['environment'] = 'test'
31
- jetty_params = Jettywrapper.load_config
32
- jetty_params[:startup_wait] = 60
33
26
 
34
- Jettywrapper.wrap(jetty_params) do
35
- # run the tests
36
- Rake::Task['spec'].invoke
27
+ SolrWrapper.wrap(port: '8983') do |solr|
28
+ solr.with_collection(name: 'blacklight-core', dir: File.join(File.expand_path(File.dirname(__FILE__)), 'solr', 'conf')) do
29
+ # run the tests
30
+ Rake::Task['spec'].invoke
31
+ end
37
32
  end
38
33
  end
39
34
 
@@ -42,18 +37,13 @@ task default: [:ci, :rubocop]
42
37
  desc 'Run generated test Rails app with generated Solr instance running'
43
38
  task :server do
44
39
  Rake::Task['engine_cart:generate'].invoke
40
+ require 'solr_wrapper'
45
41
 
46
- unless File.exist? 'jetty'
47
- Rake::Task['jetty:clean'].invoke
48
- Rake::Task['exhibits:configure_solr'].invoke
49
- end
50
-
51
- jetty_params = Jettywrapper.load_config
52
- jetty_params[:startup_wait]= 30
53
-
54
- Jettywrapper.wrap(jetty_params) do
55
- within_test_app do
56
- system "bundle exec rails s"
42
+ SolrWrapper.wrap(port: '8983') do |solr|
43
+ solr.with_collection(name: 'blacklight-core', dir: File.join(File.expand_path(File.dirname(__FILE__)), 'solr', 'conf')) do
44
+ within_test_app do
45
+ system 'bundle exec rails s'
46
+ end
57
47
  end
58
48
  end
59
49
  end
@@ -67,7 +57,7 @@ begin
67
57
  YARD::Rake::YardocTask.new(:doc) do |yt|
68
58
  yt.files = Dir.glob(File.join(project_root, 'lib', '**', '*.rb')) +
69
59
  [File.join(project_root, 'README.md')]
70
- yt.options = ['--output-dir', doc_dest_dir, '--readme', 'README.md', '--title', 'Stanford-Mods Documentation']
60
+ yt.options = ['--output-dir', doc_dest_dir, '--readme', 'README.md', '--title', 'Spotlight IIIF Resource Harvester Documentation']
71
61
  end
72
62
  rescue LoadError
73
63
  desc "Generate YARD Documentation"
@@ -1,31 +1,8 @@
1
1
  module Spotlight
2
2
  module Resources
3
- class IiifHarvesterController < Spotlight::ApplicationController
4
- before_action :authenticate_user!
5
-
6
- load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
7
- before_action :build_resource
8
-
9
- def create
10
- if @resource.save_and_index
11
- redirect_to spotlight.admin_exhibit_catalog_index_path(current_exhibit, sort: :timestamp)
12
- else
13
- flash[:error] = @resource.errors.values.join(', ') if @resource.errors.present?
14
- redirect_to spotlight.new_exhibit_resource_path(current_exhibit)
15
- end
16
- end
17
-
18
- private
19
-
20
- def resource_params
21
- params.require(:resources_iiif_harvester).permit(:url)
22
- end
23
-
24
- def build_resource
25
- @resource ||= Spotlight::Resources::IiifHarvester.create(
26
- url: resource_params[:url],
27
- exhibit: current_exhibit
28
- )
3
+ class IiifHarvesterController < Spotlight::ResourcesController
4
+ def resource_class
5
+ Spotlight::Resources::IiifHarvester
29
6
  end
30
7
  end
31
8
  end
@@ -5,27 +5,17 @@ module Spotlight
5
5
  # harvest Images from IIIF Manifest and turn them into a Spotlight::Resource
6
6
  # Note: IIIF API : http://iiif.io/api/presentation/2.0
7
7
  class IiifHarvester < Spotlight::Resource
8
+ self.document_builder_class = Spotlight::Resources::IiifBuilder
8
9
  self.weight = -5000
9
10
 
10
11
  validate :valid_url?
11
12
 
12
- def to_solr
13
- return to_enum(:to_solr) { 0 } unless block_given?
14
-
15
- base_doc = super
16
- iiif_manifests.each do |manifest|
17
- manifest.with_exhibit(exhibit)
18
- manifest_solr = manifest.to_solr
19
- yield base_doc.merge(manifest_solr) if manifest_solr.present?
20
- end
21
- end
22
-
23
- private
24
-
25
13
  def iiif_manifests
26
14
  @iiif_manifests ||= IiifService.parse(url)
27
15
  end
28
16
 
17
+ private
18
+
29
19
  def valid_url?
30
20
  errors.add(:url, 'Invalid IIIF URL') unless url_is_iiif?(url)
31
21
  end
@@ -3,9 +3,11 @@ module Spotlight
3
3
  ##
4
4
  # A PORO to construct a solr hash for a given IiifManifest
5
5
  class IiifManifest
6
+ attr_reader :collection
6
7
  def initialize(attrs = {})
7
8
  @url = attrs[:url]
8
9
  @manifest = attrs[:manifest]
10
+ @collection = attrs[:collection]
9
11
  @solr_hash = {}
10
12
  end
11
13
 
@@ -13,9 +15,11 @@ module Spotlight
13
15
  add_document_id
14
16
  add_label
15
17
  add_thumbnail_url
18
+ add_full_image_urls
16
19
  add_manifest_url
17
20
  add_image_urls
18
21
  add_metadata
22
+ add_collection_id
19
23
  solr_hash
20
24
  end
21
25
 
@@ -23,19 +27,29 @@ module Spotlight
23
27
  @exhibit = e
24
28
  end
25
29
 
30
+ def compound_id
31
+ Digest::MD5.hexdigest("#{exhibit.id}-#{url}")
32
+ end
33
+
26
34
  private
27
35
 
28
36
  attr_reader :url, :manifest, :exhibit, :solr_hash
29
37
  delegate :blacklight_config, to: :exhibit
30
38
 
31
- def compound_id
32
- Digest::MD5.hexdigest("#{exhibit.id}-#{url}")
33
- end
34
-
35
39
  def add_document_id
36
40
  solr_hash[exhibit.blacklight_config.document_model.unique_key.to_sym] = compound_id
37
41
  end
38
42
 
43
+ def add_collection_id
44
+ if collection
45
+ solr_hash[collection_id_field] = [collection.compound_id]
46
+ end
47
+ end
48
+
49
+ def collection_id_field
50
+ Spotlight::Resources::Iiif::Engine.config.collection_id_field
51
+ end
52
+
39
53
  def add_manifest_url
40
54
  solr_hash[Spotlight::Resources::Iiif::Engine.config.iiif_manifest_field] = url
41
55
  end
@@ -45,6 +59,11 @@ module Spotlight
45
59
  solr_hash[thumbnail_field] = manifest['thumbnail']['@id']
46
60
  end
47
61
 
62
+ def add_full_image_urls
63
+ return unless full_image_field && full_image_url
64
+ solr_hash[full_image_field] = full_image_url
65
+ end
66
+
48
67
  def add_label
49
68
  return unless title_field && manifest.try(:label)
50
69
  solr_hash[title_field] = manifest.label
@@ -72,7 +91,7 @@ module Spotlight
72
91
 
73
92
  def create_sidecars_for(*keys)
74
93
  missing_keys(keys).each do |k|
75
- exhibit.custom_fields.create! label: k
94
+ exhibit.custom_fields.create! label: k, readonly_field: true
76
95
  end
77
96
  @exhibit_custom_fields = nil
78
97
  end
@@ -99,6 +118,10 @@ module Spotlight
99
118
  end
100
119
  end
101
120
 
121
+ def full_image_url
122
+ resources.first.try(:[], '@id')
123
+ end
124
+
102
125
  def resources
103
126
  @resources ||= sequences
104
127
  .flat_map(&:canvases)
@@ -114,6 +137,10 @@ module Spotlight
114
137
  blacklight_config.index.try(:thumbnail_field)
115
138
  end
116
139
 
140
+ def full_image_field
141
+ Spotlight::Engine.config.full_image_field
142
+ end
143
+
117
144
  def tile_source_field
118
145
  blacklight_config.show.try(:tile_source_field)
119
146
  end
@@ -20,10 +20,13 @@ module Spotlight
20
20
  [create_iiif_manifest(object)]
21
21
  else
22
22
  things = []
23
- things << create_iiif_manifest(object) if collection?
23
+ if collection?
24
+ self_manifest = create_iiif_manifest(object)
25
+ things << self_manifest
26
+ end
24
27
  (object.try(:manifests) || []).each do |manifest|
25
28
  things << create_iiif_manifest(
26
- self.class.new(manifest['@id']).object
29
+ self.class.new(manifest['@id']).object, self_manifest
27
30
  )
28
31
  end
29
32
  things
@@ -65,8 +68,8 @@ module Spotlight
65
68
  end
66
69
  end
67
70
 
68
- def create_iiif_manifest(manifest)
69
- IiifManifest.new(url: manifest['@id'], manifest: manifest)
71
+ def create_iiif_manifest(manifest, collection = nil)
72
+ IiifManifest.new(url: manifest['@id'], manifest: manifest, collection: collection)
70
73
  end
71
74
 
72
75
  def manifest?
@@ -0,0 +1,17 @@
1
+ module Spotlight
2
+ module Resources
3
+ # transforms a IiifHarvester into solr documents
4
+ class IiifBuilder < Spotlight::SolrDocumentBuilder
5
+ def to_solr
6
+ return to_enum(:to_solr) { 0 } unless block_given?
7
+
8
+ base_doc = super
9
+ resource.iiif_manifests.each do |manifest|
10
+ manifest.with_exhibit(exhibit)
11
+ manifest_solr = manifest.to_solr
12
+ yield base_doc.merge(manifest_solr) if manifest_solr.present?
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
- <%= bootstrap_form_for([spotlight_resources_iiif_engine, current_exhibit, Spotlight::Resources::IiifHarvester.new], layout: :horizontal, label_col: 'col-md-2', control_col: 'col-sm-6 col-md-6' ) do |f| %>
1
+ <%= bootstrap_form_for([spotlight_resources_iiif_engine, current_exhibit, @resource.becomes(Spotlight::Resources::IiifHarvester)], as: :resource, layout: :horizontal, label_col: 'col-md-2', control_col: 'col-sm-6 col-md-6' ) do |f| %>
2
2
  <%= f.text_field :url, help: t('.url-field.help'), label: t('.manifest') %>
3
3
  <div class="form-actions">
4
4
  <div class="primary-actions">
@@ -1,5 +1,5 @@
1
1
  Spotlight::Resources::Iiif::Engine.routes.draw do
2
2
  resources :exhibits, only: [] do
3
- resource :iiif_harvester, controller: :"spotlight/resources/iiif_harvester", only: :create, as: :resources_iiif_harvesters
3
+ resources :iiif_harvesters, controller: :"spotlight/resources/iiif_harvester", only: :create, as: 'resources_iiif_harvesters'
4
4
  end
5
5
  end
@@ -5,6 +5,7 @@ module Spotlight::Resources::Iiif
5
5
  Spotlight::Resources::Iiif::Engine.config.resource_partial = 'spotlight/resources/iiif/form'
6
6
  Spotlight::Resources::Iiif::Engine.config.metadata_class = -> { Spotlight::Resources::IiifManifest::Metadata }
7
7
  Spotlight::Resources::Iiif::Engine.config.iiif_manifest_field = :content_metadata_iiif_manifest_ssm
8
+ Spotlight::Resources::Iiif::Engine.config.collection_id_field = :collection_id_ssim
8
9
 
9
10
 
10
11
  initializer 'spotlight.resources.iiif.initialize' do
@@ -1,7 +1,7 @@
1
1
  module Spotlight
2
2
  module Resources
3
3
  module Iiif
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,347 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <schema name="Hydra" version="1.5">
3
+ <!-- NOTE: various comments and unused configuration possibilities have been purged
4
+ from this file. Please refer to http://wiki.apache.org/solr/SchemaXml,
5
+ as well as the default schema file included with Solr -->
6
+
7
+ <uniqueKey>id</uniqueKey>
8
+
9
+ <fields>
10
+ <field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>
11
+ <field name="_version_" type="long" indexed="true" stored="true"/>
12
+ <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
13
+
14
+ <field name="lat" type="tdouble" stored="true" indexed="true" multiValued="false"/>
15
+ <field name="lng" type="tdouble" stored="true" indexed="true" multiValued="false"/>
16
+ <field name="original_pid_tesim" type="pid_text" stored="true" indexed="true" multiValued="true"/>
17
+
18
+ <field name="full_title_ng" type="text_en_ng" stored="false" indexed="true" multiValued="true"/>
19
+ <field name="id_ng" type="text_en_ng" stored="false" indexed="true" multiValued="false"/>
20
+
21
+ <dynamicField name="*_bbox" type="location_rpt" stored="true" indexed="true"/>
22
+ <!-- NOTE: not all possible Solr field types are represented in the dynamic fields -->
23
+
24
+ <!-- text (_t...) -->
25
+ <!--
26
+ <dynamicField name="*_ti" type="text" stored="false" indexed="true" multiValued="false"/>
27
+ <dynamicField name="*_tim" type="text" stored="false" indexed="true" multiValued="true"/>
28
+ -->
29
+ <dynamicField name="*_ts" type="text" stored="true" indexed="false" multiValued="false"/>
30
+ <dynamicField name="*_tsm" type="text" stored="true" indexed="false" multiValued="true"/>
31
+ <dynamicField name="*_tsi" type="text" stored="true" indexed="true" multiValued="false"/>
32
+ <dynamicField name="*_tsim" type="text" stored="true" indexed="true" multiValued="true"/>
33
+ <!--
34
+ <dynamicField name="*_tiv" type="text" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
35
+ <dynamicField name="*_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
36
+ -->
37
+ <dynamicField name="*_tsiv" type="text" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
38
+ <dynamicField name="*_tsimv" type="text" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
39
+
40
+ <!-- English text (_te...) -->
41
+ <!--
42
+ <dynamicField name="*_tei" type="text_en" stored="false" indexed="true" multiValued="false"/>
43
+ <dynamicField name="*_teim" type="text_en" stored="false" indexed="true" multiValued="true"/>
44
+ -->
45
+ <dynamicField name="*_tes" type="text_en" stored="true" indexed="false" multiValued="false"/>
46
+ <dynamicField name="*_tesm" type="text_en" stored="true" indexed="false" multiValued="true"/>
47
+ <dynamicField name="*_tesi" type="text_en" stored="true" indexed="true" multiValued="false"/>
48
+ <dynamicField name="*_tesim" type="text_en" stored="true" indexed="true" multiValued="true"/>
49
+ <!--
50
+ <dynamicField name="*_teiv" type="text_en" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
51
+ <dynamicField name="*_teimv" type="text_en" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
52
+ -->
53
+ <dynamicField name="*_tesiv" type="text_en" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
54
+ <dynamicField name="*_tesimv" type="text_en" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
55
+
56
+ <!-- string (_s...) -->
57
+ <!--
58
+ <dynamicField name="*_si" type="string" stored="false" indexed="true" multiValued="false"/>
59
+ <dynamicField name="*_sim" type="string" stored="false" indexed="true" multiValued="true"/>
60
+ -->
61
+ <dynamicField name="*_ss" type="string" stored="true" indexed="false" multiValued="false"/>
62
+ <dynamicField name="*_ssm" type="string" stored="true" indexed="false" multiValued="true"/>
63
+ <dynamicField name="*_ssi" type="string" stored="true" indexed="true" multiValued="false"/>
64
+ <dynamicField name="*_ssim" type="string" stored="true" indexed="true" multiValued="true"/>
65
+ <!--
66
+ <dynamicField name="*_ssort" type="alphaSort" stored="false" indexed="true" multiValued="false"/>
67
+ -->
68
+
69
+ <!-- integer (_i...) -->
70
+ <!--
71
+ <dynamicField name="*_ii" type="int" stored="false" indexed="true" multiValued="false"/>
72
+ <dynamicField name="*_iim" type="int" stored="false" indexed="true" multiValued="true"/>
73
+ -->
74
+ <dynamicField name="*_is" type="int" stored="true" indexed="false" multiValued="false"/>
75
+ <dynamicField name="*_ism" type="int" stored="true" indexed="false" multiValued="true"/>
76
+ <dynamicField name="*_isi" type="int" stored="true" indexed="true" multiValued="false"/>
77
+ <dynamicField name="*_isim" type="int" stored="true" indexed="true" multiValued="true"/>
78
+
79
+ <!-- trie integer (_it...) (for faster range queries) -->
80
+ <!--
81
+ <dynamicField name="*_iti" type="tint" stored="false" indexed="true" multiValued="false"/>
82
+ <dynamicField name="*_itim" type="tint" stored="false" indexed="true" multiValued="true"/>
83
+ -->
84
+ <dynamicField name="*_its" type="tint" stored="true" indexed="false" multiValued="false"/>
85
+ <dynamicField name="*_itsm" type="tint" stored="true" indexed="false" multiValued="true"/>
86
+ <dynamicField name="*_itsi" type="tint" stored="true" indexed="true" multiValued="false"/>
87
+ <dynamicField name="*_itsim" type="tint" stored="true" indexed="true" multiValued="true"/>
88
+
89
+ <!-- date (_dt...) -->
90
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
91
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z -->
92
+ <!--
93
+ <dynamicField name="*_dti" type="date" stored="false" indexed="true" multiValued="false"/>
94
+ <dynamicField name="*_dtim" type="date" stored="false" indexed="true" multiValued="true"/>
95
+ -->
96
+ <dynamicField name="*_dts" type="date" stored="true" indexed="false" multiValued="false"/>
97
+ <dynamicField name="*_dtsm" type="date" stored="true" indexed="false" multiValued="true"/>
98
+ <dynamicField name="*_dtsi" type="date" stored="true" indexed="true" multiValued="false"/>
99
+ <dynamicField name="*_dtsim" type="date" stored="true" indexed="true" multiValued="true"/>
100
+
101
+ <!-- trie date (_dtt...) (for faster range queries) -->
102
+ <!--
103
+ <dynamicField name="*_dtti" type="tdate" stored="false" indexed="true" multiValued="false"/>
104
+ <dynamicField name="*_dttim" type="tdate" stored="false" indexed="true" multiValued="true"/>
105
+ -->
106
+ <dynamicField name="*_dtts" type="tdate" stored="true" indexed="false" multiValued="false"/>
107
+ <dynamicField name="*_dttsm" type="tdate" stored="true" indexed="false" multiValued="true"/>
108
+ <dynamicField name="*_dttsi" type="tdate" stored="true" indexed="true" multiValued="false"/>
109
+ <dynamicField name="*_dttsim" type="tdate" stored="true" indexed="true" multiValued="true"/>
110
+
111
+ <!-- long (_l...) -->
112
+ <!--
113
+ <dynamicField name="*_li" type="long" stored="false" indexed="true" multiValued="false"/>
114
+ <dynamicField name="*_lim" type="long" stored="false" indexed="true" multiValued="true"/>
115
+ -->
116
+ <dynamicField name="*_ls" type="long" stored="true" indexed="false" multiValued="false"/>
117
+ <dynamicField name="*_lsm" type="long" stored="true" indexed="false" multiValued="true"/>
118
+ <dynamicField name="*_lsi" type="long" stored="true" indexed="true" multiValued="false"/>
119
+ <dynamicField name="*_lsim" type="long" stored="true" indexed="true" multiValued="true"/>
120
+
121
+ <!-- trie long (_lt...) (for faster range queries) -->
122
+ <!--
123
+ <dynamicField name="*_lti" type="tlong" stored="false" indexed="true" multiValued="false"/>
124
+ <dynamicField name="*_ltim" type="tlong" stored="false" indexed="true" multiValued="true"/>
125
+ -->
126
+ <dynamicField name="*_lts" type="tlong" stored="true" indexed="false" multiValued="false"/>
127
+ <dynamicField name="*_ltsm" type="tlong" stored="true" indexed="false" multiValued="true"/>
128
+ <dynamicField name="*_ltsi" type="tlong" stored="true" indexed="true" multiValued="false"/>
129
+ <dynamicField name="*_ltsim" type="tlong" stored="true" indexed="true" multiValued="true"/>
130
+
131
+ <!-- double (_db...) -->
132
+ <!--
133
+ <dynamicField name="*_dbi" type="double" stored="false" indexed="true" multiValued="false"/>
134
+ <dynamicField name="*_dbim" type="double" stored="false" indexed="true" multiValued="true"/>
135
+ -->
136
+ <dynamicField name="*_dbs" type="double" stored="true" indexed="false" multiValued="false"/>
137
+ <dynamicField name="*_dbsm" type="double" stored="true" indexed="false" multiValued="true"/>
138
+ <dynamicField name="*_dbsi" type="double" stored="true" indexed="true" multiValued="false"/>
139
+ <dynamicField name="*_dbsim" type="double" stored="true" indexed="true" multiValued="true"/>
140
+
141
+ <!-- trie double (_dbt...) (for faster range queries) -->
142
+ <!--
143
+ <dynamicField name="*_dbti" type="tdouble" stored="false" indexed="true" multiValued="false"/>
144
+ <dynamicField name="*_dbtim" type="tdouble" stored="false" indexed="true" multiValued="true"/>
145
+ -->
146
+ <dynamicField name="*_dbts" type="tdouble" stored="true" indexed="false" multiValued="false"/>
147
+ <dynamicField name="*_dbtsm" type="tdouble" stored="true" indexed="false" multiValued="true"/>
148
+ <dynamicField name="*_dbtsi" type="tdouble" stored="true" indexed="true" multiValued="false"/>
149
+ <dynamicField name="*_dbtsim" type="tdouble" stored="true" indexed="true" multiValued="true"/>
150
+
151
+ <!-- float (_f...) -->
152
+ <!--
153
+ <dynamicField name="*_fi" type="float" stored="false" indexed="true" multiValued="false"/>
154
+ <dynamicField name="*_fim" type="float" stored="false" indexed="true" multiValued="true"/>
155
+ -->
156
+ <dynamicField name="*_fs" type="float" stored="true" indexed="false" multiValued="false"/>
157
+ <dynamicField name="*_fsm" type="float" stored="true" indexed="false" multiValued="true"/>
158
+ <dynamicField name="*_fsi" type="float" stored="true" indexed="true" multiValued="false"/>
159
+ <dynamicField name="*_fsim" type="float" stored="true" indexed="true" multiValued="true"/>
160
+
161
+ <!-- trie float (_ft...) (for faster range queries) -->
162
+ <!--
163
+ <dynamicField name="*_fti" type="tfloat" stored="false" indexed="true" multiValued="false"/>
164
+ <dynamicField name="*_ftim" type="tfloat" stored="false" indexed="true" multiValued="true"/>
165
+ -->
166
+ <dynamicField name="*_fts" type="tfloat" stored="true" indexed="false" multiValued="false"/>
167
+ <dynamicField name="*_ftsm" type="tfloat" stored="true" indexed="false" multiValued="true"/>
168
+ <dynamicField name="*_ftsi" type="tfloat" stored="true" indexed="true" multiValued="false"/>
169
+ <dynamicField name="*_ftsim" type="tfloat" stored="true" indexed="true" multiValued="true"/>
170
+
171
+ <!-- boolean (_b...) -->
172
+ <!--
173
+ <dynamicField name="*_bi" type="boolean" stored="false" indexed="true" multiValued="false"/>
174
+ -->
175
+ <dynamicField name="*_bs" type="boolean" stored="true" indexed="false" multiValued="false"/>
176
+ <dynamicField name="*_bsi" type="boolean" stored="true" indexed="true" multiValued="false"/>
177
+
178
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
179
+ <!--
180
+ <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" />
181
+ -->
182
+
183
+ <!-- location (_ll...) -->
184
+ <!--
185
+ <dynamicField name="*_lli" type="location" stored="false" indexed="true" multiValued="false"/>
186
+ <dynamicField name="*_llim" type="location" stored="false" indexed="true" multiValued="true"/>
187
+ -->
188
+ <dynamicField name="*_lls" type="location" stored="true" indexed="false" multiValued="false"/>
189
+ <dynamicField name="*_llsm" type="location" stored="true" indexed="false" multiValued="true"/>
190
+ <dynamicField name="*_llsi" type="location" stored="true" indexed="true" multiValued="false"/>
191
+ <dynamicField name="*_llsim" type="location" stored="true" indexed="true" multiValued="true"/>
192
+
193
+ <!-- you must define copyField source and dest fields explicity or schemaBrowser doesn't work -->
194
+ <field name="all_text_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
195
+
196
+
197
+ </fields>
198
+
199
+
200
+ <!-- Above, multiple source fields are copied to the [text] field.
201
+ Another way to map multiple source fields to the same
202
+ destination field is to use the dynamic field syntax.
203
+ copyField also supports a maxChars to copy setting. -->
204
+
205
+ <copyField source="id" dest="id_ng" maxChars="3000"/>
206
+ <copyField source="full_title_tesim" dest="full_title_ng" maxChars="3000"/>
207
+ <copyField source="*_tesim" dest="all_text_timv" maxChars="3000"/>
208
+
209
+ <types>
210
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
211
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
212
+ <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
213
+
214
+ <!-- Default numeric field types. -->
215
+ <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
216
+ <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
217
+ <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
218
+ <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
219
+
220
+ <!-- trie numeric field types for faster range queries -->
221
+ <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
222
+ <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
223
+ <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
224
+ <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
225
+
226
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
227
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
228
+ -->
229
+ <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
230
+ <!-- A Trie based date field for faster date range queries and date faceting. -->
231
+ <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
232
+
233
+
234
+ <!-- This point type indexes the coordinates as separate fields (subFields)
235
+ If subFieldType is defined, it references a type, and a dynamic field
236
+ definition is created matching *___<typename>. Alternately, if
237
+ subFieldSuffix is defined, that is used to create the subFields.
238
+ Example: if subFieldType="double", then the coordinates would be
239
+ indexed in fields myloc_0___double,myloc_1___double.
240
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
241
+ in fields myloc_0_d,myloc_1_d
242
+ The subFields are an implementation detail of the fieldType, and end
243
+ users normally should not need to know about them.
244
+ -->
245
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
246
+
247
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
248
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
249
+
250
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
251
+ For more information about this and other Spatial fields new to Solr 4, see:
252
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
253
+ -->
254
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
255
+ geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" />
256
+
257
+ <fieldType name="text" class="solr.TextField" omitNorms="false">
258
+ <analyzer>
259
+ <tokenizer class="solr.ICUTokenizerFactory"/>
260
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
261
+ <filter class="solr.TrimFilterFactory"/>
262
+ </analyzer>
263
+ </fieldType>
264
+
265
+ <!-- A text field that only splits on whitespace for exact matching of words -->
266
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
267
+ <analyzer>
268
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
269
+ <filter class="solr.TrimFilterFactory"/>
270
+ </analyzer>
271
+ </fieldType>
272
+
273
+ <!-- single token analyzed text, for sorting. Punctuation is significant. -->
274
+ <fieldtype name="alphaSort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
275
+ <analyzer>
276
+ <tokenizer class="solr.KeywordTokenizerFactory" />
277
+ <filter class="solr.ICUFoldingFilterFactory"/>
278
+ <filter class="solr.TrimFilterFactory" />
279
+ </analyzer>
280
+ </fieldtype>
281
+
282
+ <!-- A text field with defaults appropriate for English -->
283
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
284
+ <analyzer>
285
+ <tokenizer class="solr.ICUTokenizerFactory"/>
286
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
287
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
288
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
289
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
290
+ <!--
291
+ <filter class="solr.PorterStemFilterFactory"/>
292
+ -->
293
+ <filter class="solr.TrimFilterFactory"/>
294
+ </analyzer>
295
+ </fieldType>
296
+
297
+ <!-- A text field with defaults appropriate for English an NGrams -->
298
+ <fieldType name="text_en_ng" class="solr.TextField" positionIncrementGap="100">
299
+ <analyzer type="index">
300
+ <tokenizer class="solr.ICUTokenizerFactory"/>
301
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
302
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
303
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
304
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
305
+ <filter class="solr.TrimFilterFactory"/>
306
+ <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
307
+ </analyzer>
308
+
309
+ <analyzer type="index">
310
+ <tokenizer class="solr.ICUTokenizerFactory"/>
311
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
312
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
313
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
314
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
315
+ <filter class="solr.TrimFilterFactory"/>
316
+ </analyzer>
317
+ </fieldType>
318
+
319
+ <fieldType name="pid_text" class="solr.TextField" positionIncrementGap="100">
320
+ <analyzer>
321
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
322
+ </analyzer>
323
+ </fieldType>
324
+
325
+ <!-- queries for paths match documents at that path, or in descendent paths -->
326
+ <fieldType name="descendent_path" class="solr.TextField">
327
+ <analyzer type="index">
328
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
329
+ </analyzer>
330
+ <analyzer type="query">
331
+ <tokenizer class="solr.KeywordTokenizerFactory" />
332
+ </analyzer>
333
+ </fieldType>
334
+
335
+ <!-- queries for paths match documents at that path, or in ancestor paths -->
336
+ <fieldType name="ancestor_path" class="solr.TextField">
337
+ <analyzer type="index">
338
+ <tokenizer class="solr.KeywordTokenizerFactory" />
339
+ </analyzer>
340
+ <analyzer type="query">
341
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
342
+ </analyzer>
343
+ </fieldType>
344
+
345
+ </types>
346
+
347
+ </schema>
@@ -0,0 +1,163 @@
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>6.1.0</luceneMatchVersion>
10
+
11
+ <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
12
+
13
+ <updateHandler class="solr.DirectUpdateHandler2">
14
+ <updateLog>
15
+ <str name="dir">${solr.core0.data.dir:}</str>
16
+ </updateLog>
17
+ </updateHandler>
18
+
19
+ <!-- solr lib dirs -->
20
+ <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" />
21
+ <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" />
22
+
23
+ <dataDir>${solr.data.dir:}</dataDir>
24
+
25
+ <requestHandler name="search" class="solr.SearchHandler" default="true">
26
+ <!-- default values for query parameters can be specified, these
27
+ will be overridden by parameters in the request
28
+ -->
29
+ <lst name="defaults">
30
+ <str name="defType">edismax</str>
31
+ <str name="echoParams">explicit</str>
32
+ <str name="q.alt">*:*</str>
33
+ <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
34
+ <int name="qs">1</int>
35
+ <int name="ps">2</int>
36
+ <float name="tie">0.01</float>
37
+ <!-- this qf and pf are used by default, if not otherwise specified by
38
+ client. The default blacklight_config will use these for the
39
+ "keywords" search. See the author_qf/author_pf, title_qf, etc
40
+ below, which the default blacklight_config will specify for
41
+ those searches. You may also be interested in:
42
+ http://wiki.apache.org/solr/LocalParams
43
+ -->
44
+ <str name="qf">
45
+ id
46
+ full_title_tesim
47
+ short_title_tesim
48
+ alternative_title_tesim
49
+ active_fedora_model_ssi
50
+ title_tesim
51
+ author_tesim
52
+ subject_tesim
53
+ all_text_timv
54
+ </str>
55
+ <str name="pf">
56
+ all_text_timv^10
57
+ </str>
58
+
59
+ <str name="author_qf">
60
+ author_tesim
61
+ </str>
62
+ <str name="author_pf">
63
+ </str>
64
+ <str name="title_qf">
65
+ title_tesim
66
+ full_title_tesim
67
+ short_title_tesim
68
+ alternative_title_tesim
69
+ </str>
70
+ <str name="title_pf">
71
+ </str>
72
+ <str name="subject_qf">
73
+ subject_tesim
74
+ </str>
75
+ <str name="subject_pf">
76
+ </str>
77
+
78
+ <str name="fl">
79
+ *,
80
+ score
81
+ </str>
82
+
83
+ <str name="facet">true</str>
84
+ <str name="facet.mincount">1</str>
85
+ <str name="facet.limit">10</str>
86
+ <str name="facet.field">active_fedora_model_ssi</str>
87
+ <str name="facet.field">subject_ssim</str>
88
+
89
+ <str name="spellcheck">true</str>
90
+ <str name="spellcheck.dictionary">default</str>
91
+ <str name="spellcheck.onlyMorePopular">true</str>
92
+ <str name="spellcheck.extendedResults">true</str>
93
+ <str name="spellcheck.collate">false</str>
94
+ <str name="spellcheck.count">5</str>
95
+
96
+ </lst>
97
+ <arr name="last-components">
98
+ <str>spellcheck</str>
99
+ </arr>
100
+ </requestHandler>
101
+
102
+ <requestHandler name="permissions" class="solr.SearchHandler" >
103
+ <lst name="defaults">
104
+ <str name="facet">off</str>
105
+ <str name="echoParams">all</str>
106
+ <str name="rows">1</str>
107
+ <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
108
+ <str name="fl">
109
+ id,
110
+ access_ssim,
111
+ discover_access_group_ssim,discover_access_person_ssim,
112
+ read_access_group_ssim,read_access_person_ssim,
113
+ edit_access_group_ssim,edit_access_person_ssim,
114
+ depositor_ti,
115
+ embargo_release_date_dtsi
116
+ inheritable_access_ssim,
117
+ inheritable_discover_access_group_ssim,inheritable_discover_access_person_ssim,
118
+ inheritable_read_access_group_ssim,inheritable_read_access_person_ssim,
119
+ inheritable_edit_access_group_ssim,inheritable_edit_access_person_ssim,
120
+ inheritable_embargo_release_date_dtsi
121
+ </str>
122
+ </lst>
123
+ </requestHandler>
124
+
125
+ <requestHandler name="standard" class="solr.SearchHandler">
126
+ <lst name="defaults">
127
+ <str name="echoParams">explicit</str>
128
+ <str name="defType">lucene</str>
129
+ </lst>
130
+ </requestHandler>
131
+
132
+ <!-- for requests to get a single document; use id=666 instead of q=id:666 -->
133
+ <requestHandler name="document" class="solr.SearchHandler" >
134
+ <lst name="defaults">
135
+ <str name="echoParams">all</str>
136
+ <str name="fl">*</str>
137
+ <str name="rows">1</str>
138
+ <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
139
+ </lst>
140
+ </requestHandler>
141
+
142
+
143
+ <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
144
+ <str name="queryAnalyzerFieldType">textSpell</str>
145
+ <!-- Multiple "Spell Checkers" can be declared and used by this component
146
+ (e.g. for title_spell field)
147
+ -->
148
+ <lst name="spellchecker">
149
+ <str name="name">default</str>
150
+ <str name="field">spell</str>
151
+ <str name="spellcheckIndexDir">./spell</str>
152
+ <str name="buildOnOptimize">true</str>
153
+ </lst>
154
+ </searchComponent>
155
+
156
+ <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
157
+
158
+ <requestDispatcher handleSelect="true" >
159
+ <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
160
+ </requestDispatcher>
161
+
162
+ <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
163
+ </config>
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "blacklight-spotlight"
21
+ spec.add_dependency "blacklight-spotlight", "~> 0.26"
22
22
  spec.add_dependency "faraday"
23
23
  spec.add_dependency "iiif-presentation"
24
24
 
@@ -30,12 +30,12 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'database_cleaner', '~> 1.3'
31
31
  # spec.add_development_dependency 'poltergeist', '>= 1.5.0' # for js testing using phantomjs
32
32
  spec.add_development_dependency "coveralls"
33
- spec.add_development_dependency "rubocop"
33
+ spec.add_development_dependency 'rubocop', '~> 0.37.2'
34
34
  spec.add_development_dependency "rubocop-rspec"
35
35
  spec.add_development_dependency "yard"
36
+ spec.add_development_dependency "riiif"
36
37
  spec.add_development_dependency "engine_cart"
37
- spec.add_development_dependency "jettywrapper"
38
- spec.add_development_dependency 'exhibits_solr_conf'
38
+ spec.add_development_dependency "solr_wrapper"
39
39
  # FIXME: we shouldn't need explicit sitemap_generator dependency here as it should come with spotlight
40
40
  # but travis fails without it (though tests run fine locally)
41
41
  # cbeer: "we’re injecting the dependency into the host app. maybe we’re just
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spotlight-resources-iiif
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naomi Dushay
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-02-03 00:00:00.000000000 Z
12
+ date: 2016-08-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: blacklight-spotlight
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: '0.26'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: '0.26'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: faraday
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -155,16 +155,16 @@ dependencies:
155
155
  name: rubocop
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - ">="
158
+ - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: '0'
160
+ version: 0.37.2
161
161
  type: :development
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - ">="
165
+ - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: '0'
167
+ version: 0.37.2
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rubocop-rspec
170
170
  requirement: !ruby/object:Gem::Requirement
@@ -194,7 +194,7 @@ dependencies:
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
196
  - !ruby/object:Gem::Dependency
197
- name: engine_cart
197
+ name: riiif
198
198
  requirement: !ruby/object:Gem::Requirement
199
199
  requirements:
200
200
  - - ">="
@@ -208,7 +208,7 @@ dependencies:
208
208
  - !ruby/object:Gem::Version
209
209
  version: '0'
210
210
  - !ruby/object:Gem::Dependency
211
- name: jettywrapper
211
+ name: engine_cart
212
212
  requirement: !ruby/object:Gem::Requirement
213
213
  requirements:
214
214
  - - ">="
@@ -222,7 +222,7 @@ dependencies:
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  - !ruby/object:Gem::Dependency
225
- name: exhibits_solr_conf
225
+ name: solr_wrapper
226
226
  requirement: !ruby/object:Gem::Requirement
227
227
  requirements:
228
228
  - - ">="
@@ -262,6 +262,7 @@ files:
262
262
  - ".rspec"
263
263
  - ".rubocop.yml"
264
264
  - ".rubocop_todo.yml"
265
+ - ".solr_wrapper.yml"
265
266
  - ".travis.yml"
266
267
  - Gemfile
267
268
  - LICENSE.txt
@@ -271,6 +272,7 @@ files:
271
272
  - app/models/spotlight/resources/iiif_harvester.rb
272
273
  - app/models/spotlight/resources/iiif_manifest.rb
273
274
  - app/models/spotlight/resources/iiif_service.rb
275
+ - app/services/spotlight/resources/iiif_builder.rb
274
276
  - app/views/spotlight/resources/iiif/_form.html.erb
275
277
  - bin/console
276
278
  - bin/setup
@@ -281,6 +283,8 @@ files:
281
283
  - lib/spotlight/resources/iiif.rb
282
284
  - lib/spotlight/resources/iiif/engine.rb
283
285
  - lib/spotlight/resources/iiif/version.rb
286
+ - solr/conf/schema.xml
287
+ - solr/conf/solrconfig.xml
284
288
  - spotlight-resources-iiif.gemspec
285
289
  homepage: https://github.com/sul-dlss/spotlight-resources-iiif
286
290
  licenses:
@@ -302,9 +306,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
306
  version: '0'
303
307
  requirements: []
304
308
  rubyforge_project:
305
- rubygems_version: 2.4.5.1
309
+ rubygems_version: 2.5.1
306
310
  signing_key:
307
311
  specification_version: 4
308
312
  summary: Spotlight Resource Indexer for IIIF manifests or collections.
309
313
  test_files: []
310
- has_rdoc: