spotlight-dor-resources 0.0.1

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 +7 -0
  2. data/.gitignore +23 -0
  3. data/.hound.yml +2 -0
  4. data/.rubocop.yml +8 -0
  5. data/.rubocop_todo.yml +191 -0
  6. data/.travis.yml +17 -0
  7. data/Gemfile +32 -0
  8. data/LICENSE.txt +13 -0
  9. data/README.md +65 -0
  10. data/Rakefile +48 -0
  11. data/app/models/spotlight/resources/dor_resource.rb +17 -0
  12. data/app/models/spotlight/resources/harvestdor.rb +4 -0
  13. data/app/models/spotlight/resources/purl.rb +14 -0
  14. data/app/models/spotlight/resources/searchworks.rb +15 -0
  15. data/lib/spotlight/dor/indexer.rb +160 -0
  16. data/lib/spotlight/dor/resources.rb +16 -0
  17. data/lib/spotlight/dor/resources/engine.rb +13 -0
  18. data/lib/spotlight/dor/resources/version.rb +7 -0
  19. data/solr_conf/conf/schema.xml +346 -0
  20. data/solr_conf/conf/solrconfig.xml +180 -0
  21. data/spec/integration/gdor_integration_spec.rb +30 -0
  22. data/spec/integration/indexer_integration_spec.rb +28 -0
  23. data/spec/models/spotlight/resources/purl_spec.rb +115 -0
  24. data/spec/models/spotlight/resources/searchworks_spec.rb +91 -0
  25. data/spec/spec_helper.rb +60 -0
  26. data/spec/test_app_templates/catalog_controller.rb +96 -0
  27. data/spec/test_app_templates/gdor.yml +9 -0
  28. data/spec/test_app_templates/lib/generators/test_app_generator.rb +40 -0
  29. data/spec/unit/spotlight/dor/indexer_spec.rb +200 -0
  30. data/spec/vcr_cassettes/gdor_indexing_integration_test/should_have_a_doc_id.yml +1201 -0
  31. data/spec/vcr_cassettes/gdor_indexing_integration_test/should_have_exhibit-specific_indexing.yml +1003 -0
  32. data/spec/vcr_cassettes/gdor_indexing_integration_test/should_have_spotlight_data.yml +1003 -0
  33. data/spec/vcr_cassettes/gdor_indexing_integration_test/should_have_the_gdor_data.yml +1003 -0
  34. data/spec/vcr_cassettes/indexer_integration_tests/donor_tags/no_donor_tags_ssim_field_in_solr_doc_when_note_displayLabel_Donor_tags_not_in_MODS.yml +1382 -0
  35. data/spec/vcr_cassettes/indexer_integration_tests/donor_tags/solr_doc_has_donor_tags_ssim_field_when_note_displayLabel_Donor_tags_is_in_MODS.yml +1602 -0
  36. data/spec/vcr_cassettes/indexer_integration_tests/genre/no_genre_ssim_field_when_genre_not_in_MODS.yml +6822 -0
  37. data/spec/vcr_cassettes/indexer_integration_tests/genre/solr_doc_has_genre_ssim_field_when_genre_in_MODS.yml +1390 -0
  38. data/spotlight-dor-resources.gemspec +37 -0
  39. metadata +336 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b86fa8d9250353055a9f68632944a996fa4e0523
4
+ data.tar.gz: d53448b9b23303463ed7db3c54d7f02bff763739
5
+ SHA512:
6
+ metadata.gz: 7df884fe6f4617270b56b97dccb83630f6cae9ac2640c6a28d4a7763c702ae1e3b77f4ca300647b952b185fefd577096742ceedd4e17f584b34ffee1068ec676
7
+ data.tar.gz: a9757073e8b1e7a92df0e2cc39d00ba8df3d028aed15c9f776a907c0b546b19405b08a46535742bd09700819f1e8480c673443ad59e0589912c6ce70beb07608
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.rbc
2
+ *.sassc
3
+ .sass-cache
4
+ capybara-*.html
5
+ .rspec
6
+ .rvmrc
7
+ .ruby-version
8
+ /.bundle
9
+ /vendor/bundle
10
+ /log/*
11
+ /tmp/*
12
+ /db/*.sqlite3
13
+ /public/system/*
14
+ /coverage/
15
+ /spec/tmp/*
16
+ **.orig
17
+ rerun.txt
18
+ pickle-email-*.html
19
+ .project
20
+ config/initializers/secret_token.rb
21
+ spec/internal
22
+ Gemfile.lock
23
+ jetty
data/.hound.yml ADDED
@@ -0,0 +1,2 @@
1
+ ruby:
2
+ config_file: .rubocop.yml
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ require: rubocop-rspec
4
+
5
+ AllCops:
6
+ Exclude:
7
+ - 'spec/internal/**/*'
8
+ - 'spec/test_app_templates/**/*'
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,191 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2015-10-29 09:20:45 -0700 using RuboCop version 0.34.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ Metrics/AbcSize:
11
+ Max: 33
12
+
13
+ # Offense count: 1
14
+ # Configuration parameters: CountComments.
15
+ Metrics/ClassLength:
16
+ Max: 102
17
+
18
+ # Offense count: 84
19
+ # Configuration parameters: AllowURI, URISchemes.
20
+ Metrics/LineLength:
21
+ Max: 171
22
+
23
+ # Offense count: 1
24
+ # Configuration parameters: CountComments.
25
+ Metrics/MethodLength:
26
+ Max: 13
27
+
28
+ # Offense count: 1
29
+ # Cop supports --auto-correct.
30
+ Performance/StringReplacement:
31
+ Exclude:
32
+ - 'lib/spotlight/dor/indexer.rb'
33
+
34
+ # Offense count: 2
35
+ RSpec/DescribeClass:
36
+ Exclude:
37
+ - 'spec/integration/gdor_integration_spec.rb'
38
+ - 'spec/integration/indexer_integration_spec.rb'
39
+
40
+ # Offense count: 4
41
+ RSpec/DescribedClass:
42
+ Exclude:
43
+ - 'spec/models/spotlight/resources/purl_spec.rb'
44
+ - 'spec/models/spotlight/resources/searchworks_spec.rb'
45
+
46
+ # Offense count: 26
47
+ # Configuration parameters: CustomTransform, IgnoredWords.
48
+ RSpec/ExampleWording:
49
+ Exclude:
50
+ - 'spec/integration/gdor_integration_spec.rb'
51
+ - 'spec/models/spotlight/resources/purl_spec.rb'
52
+ - 'spec/models/spotlight/resources/searchworks_spec.rb'
53
+
54
+ # Offense count: 4
55
+ # Cop supports --auto-correct.
56
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
57
+ Style/AndOr:
58
+ Exclude:
59
+ - 'lib/spotlight/dor/indexer.rb'
60
+ - 'spec/spec_helper.rb'
61
+
62
+ # Offense count: 11
63
+ # Cop supports --auto-correct.
64
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
65
+ Style/BracesAroundHashParameters:
66
+ Exclude:
67
+ - 'spec/models/spotlight/resources/purl_spec.rb'
68
+ - 'spec/models/spotlight/resources/searchworks_spec.rb'
69
+
70
+ # Offense count: 6
71
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
72
+ Style/ClassAndModuleChildren:
73
+ Exclude:
74
+ - 'app/models/spotlight/resources/dor_resource.rb'
75
+ - 'app/models/spotlight/resources/harvestdor.rb'
76
+ - 'app/models/spotlight/resources/purl.rb'
77
+ - 'app/models/spotlight/resources/searchworks.rb'
78
+ - 'lib/spotlight/dor/indexer.rb'
79
+ - 'lib/spotlight/dor/resources/engine.rb'
80
+
81
+ # Offense count: 7
82
+ # Configuration parameters: Exclude.
83
+ Style/Documentation:
84
+ Exclude:
85
+ - 'app/models/spotlight/resources/dor_resource.rb'
86
+ - 'app/models/spotlight/resources/purl.rb'
87
+ - 'app/models/spotlight/resources/searchworks.rb'
88
+ - 'lib/spotlight/dor/indexer.rb'
89
+ - 'lib/spotlight/dor/resources.rb'
90
+ - 'lib/spotlight/dor/resources/engine.rb'
91
+ - 'lib/spotlight/dor/resources/version.rb'
92
+
93
+ # Offense count: 2
94
+ Style/DoubleNegation:
95
+ Exclude:
96
+ - 'app/models/spotlight/resources/purl.rb'
97
+ - 'app/models/spotlight/resources/searchworks.rb'
98
+
99
+ # Offense count: 1
100
+ # Cop supports --auto-correct.
101
+ Style/EmptyLines:
102
+ Exclude:
103
+ - 'spec/spec_helper.rb'
104
+
105
+ # Offense count: 4
106
+ # Cop supports --auto-correct.
107
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
108
+ Style/EmptyLinesAroundClassBody:
109
+ Exclude:
110
+ - 'app/models/spotlight/resources/purl.rb'
111
+ - 'app/models/spotlight/resources/searchworks.rb'
112
+ - 'lib/spotlight/dor/resources/engine.rb'
113
+
114
+ # Offense count: 1
115
+ # Cop supports --auto-correct.
116
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
117
+ Style/EmptyLinesAroundModuleBody:
118
+ Exclude:
119
+ - 'lib/spotlight/dor/resources.rb'
120
+
121
+ # Offense count: 9
122
+ # Cop supports --auto-correct.
123
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
124
+ Style/MethodDefParentheses:
125
+ Enabled: false
126
+
127
+ # Offense count: 4
128
+ # Cop supports --auto-correct.
129
+ # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
130
+ Style/RegexpLiteral:
131
+ Exclude:
132
+ - 'app/models/spotlight/resources/purl.rb'
133
+ - 'app/models/spotlight/resources/searchworks.rb'
134
+
135
+ # Offense count: 2
136
+ # Cop supports --auto-correct.
137
+ Style/SpaceAfterComma:
138
+ Exclude:
139
+ - 'lib/spotlight/dor/indexer.rb'
140
+
141
+ # Offense count: 2
142
+ # Cop supports --auto-correct.
143
+ # Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
144
+ Style/SpaceInsideBlockBraces:
145
+ Enabled: false
146
+
147
+ # Offense count: 31
148
+ # Cop supports --auto-correct.
149
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
150
+ Style/SpaceInsideHashLiteralBraces:
151
+ Enabled: false
152
+
153
+ # Offense count: 122
154
+ # Cop supports --auto-correct.
155
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
156
+ Style/StringLiterals:
157
+ Enabled: false
158
+
159
+ # Offense count: 1
160
+ # Cop supports --auto-correct.
161
+ # Configuration parameters: IgnoredMethods.
162
+ Style/SymbolProc:
163
+ Exclude:
164
+ - 'lib/spotlight/dor/indexer.rb'
165
+
166
+ # Offense count: 2
167
+ # Cop supports --auto-correct.
168
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
169
+ Style/TrailingBlankLines:
170
+ Exclude:
171
+ - 'spec/models/spotlight/resources/searchworks_spec.rb'
172
+ - 'spec/spec_helper.rb'
173
+
174
+ # Offense count: 12
175
+ # Cop supports --auto-correct.
176
+ Style/TrailingWhitespace:
177
+ Exclude:
178
+ - 'lib/spotlight/dor/resources.rb'
179
+ - 'spec/models/spotlight/resources/searchworks_spec.rb'
180
+
181
+ # Offense count: 1
182
+ # Cop supports --auto-correct.
183
+ # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
184
+ Style/TrivialAccessors:
185
+ Exclude:
186
+ - 'lib/spotlight/dor/indexer.rb'
187
+
188
+ # Offense count: 4
189
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
190
+ Style/VariableName:
191
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ notifications:
2
+ email: false
3
+
4
+ rvm:
5
+ - 2.2.2
6
+
7
+ env:
8
+ global:
9
+ - JRUBY_OPTS="-J-Xms512m -J-Xmx1024m"
10
+ - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
11
+
12
+ sudo: false
13
+ language: ruby
14
+
15
+ script:
16
+ - bundle exec rake
17
+ - bundle exec rake rubocop
data/Gemfile ADDED
@@ -0,0 +1,32 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in spotlight-dor-resources.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'simplecov', '~> 0.10', require: false
8
+ gem 'coveralls', require: false
9
+ gem 'rubocop', require: false
10
+ gem 'rubocop-rspec', require: false
11
+ gem 'pry', require: false
12
+ gem 'pry-byebug', require: false
13
+ end
14
+
15
+ # the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app
16
+ file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path("../spec/internal", __FILE__))
17
+ if File.exist?(file)
18
+ puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
19
+ instance_eval File.read(file)
20
+ else
21
+ gem 'rails', ENV['RAILS_VERSION']
22
+
23
+ # explicitly include sass-rails to get compatible sprocket dependencies
24
+ if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
25
+ gem 'coffee-rails', '~> 4.1.0'
26
+ gem 'sass-rails', '~> 5.0'
27
+ gem 'responders', "~> 2.0"
28
+ else
29
+ gem 'sass-rails', "< 5.0"
30
+ gem 'coffee-rails', "~> 4.0.0"
31
+ end
32
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 The Board of Trustees of the Leland Stanford Junior University.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ [![Build Status](https://travis-ci.org/sul-dlss/spotlight-dor-resources.png?branch=master)](https://travis-ci.org/sul-dlss/spotlight-dor-resources) | [![Coverage Status](https://coveralls.io/repos/sul-dlss/spotlight-dor-resources/badge.png?branch=master)](https://coveralls.io/r/sul-dlss/spotlight-dor-resources) | [![Gem Version](https://badge.fury.io/rb/spotlight-dor-resources.png)](http://badge.fury.io/rb/spotlight-dor-resources)
2
+
3
+ # Spotlight::Dor::Resources
4
+
5
+ Harvest Stanford DOR resources into a Spotlight exhibit.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'spotlight-dor-resources'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install spotlight-dor-resources
20
+
21
+ ## Usage
22
+
23
+ Within a Spotlight application with `spotlight-dor-resources` installed, you could index a set of records the ["gdor-indexer"](https://github.com/sul-dlss/gdor-indexer) way.
24
+
25
+ Note that Spotlight:
26
+
27
+ * is a Rails engine and needs to be used in the context of a Rails application. We use [engine_cart](https://github.com/cbeer/engine_cart) to create an internal test application at spec/internal.
28
+ * uses Solr as part of its integration tests. We use [jettywrapper](https://github.com/projecthydra/jettywrapper) to manage the Solr instance used for development and test.
29
+
30
+ Our `$ rake ci` task utilizes Solr and the testing rails app, with Spotlight installed, automatically.
31
+
32
+ For access to a Rails console with the gem loaded up for testing purposes, you can use an engine-cart generated Spotlight app.
33
+
34
+ ### First time only configuration for local testing
35
+
36
+ $ bundle
37
+ $ bundle exec rake:ci
38
+
39
+ This will download a test jetty instance (to run Solr), generate a testing app at ```spec/internal``` and run the tests.
40
+
41
+ ### Indexing with the generated test app
42
+
43
+ $ cd spec/internal
44
+
45
+ $ bundle exec rails console
46
+
47
+ ```ruby
48
+ purl=Spotlight::Resources::Purl.new({:url=>'https://purl.stanford.edu/cx709ty7769'})
49
+ puts purl.to_solr.first # the solr document as a hash
50
+ public_xml=purl.resource.public_xml # nokogiri doc with all public XML
51
+ mods=purl.resource.mods # nokogiri doc with just the MODs
52
+ smods_rec=purl.resource.smods_rec # a Stanford::Mods::Record Object (which inherits from the MODS gem)
53
+
54
+ purl.resource.indexer.config.solr.url # the configured solr server (should be localhost in development)
55
+ purl.save # save and index to solr
56
+ purl.reindex # reindex once saved the first time
57
+ ```
58
+
59
+ ## Contributing
60
+
61
+ 1. Fork it ( http://github.com/sul-dlss/spotlight-dor-resources/fork )
62
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
63
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
64
+ 4. Push to the branch (`git push origin my-new-feature`)
65
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,48 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ ZIP_URL = 'https://github.com/projectblacklight/blacklight-jetty/archive/v4.10.4.zip'
8
+
9
+ Bundler::GemHelper.install_tasks
10
+
11
+ task default: [:ci, :rubocop]
12
+
13
+ namespace :spotlight do
14
+ desc 'Copies the default SOLR config for the bundled Testing Server'
15
+ task :configure_jetty do
16
+ FileList['solr_conf/conf/*'].each do |f|
17
+ cp("#{f}", 'jetty/solr/blacklight-core/conf/', verbose: true)
18
+ end
19
+ end
20
+ end
21
+
22
+ require 'rspec/core/rake_task'
23
+ RSpec::Core::RakeTask.new(:spec)
24
+
25
+ require 'rubocop/rake_task'
26
+ RuboCop::RakeTask.new(:rubocop)
27
+
28
+ require 'jettywrapper'
29
+ require 'engine_cart/rake_task'
30
+ task ci: ['engine_cart:generate', 'jetty:clean', 'spotlight:configure_jetty'] do
31
+ ENV['environment'] = 'test'
32
+ jetty_params = Jettywrapper.load_config
33
+ jetty_params[:startup_wait] = 60
34
+
35
+ Jettywrapper.wrap(jetty_params) do
36
+ # run the tests
37
+ Rake::Task['spec'].invoke
38
+ end
39
+ end
40
+
41
+ require 'rdoc/task'
42
+ RDoc::Task.new(:rdoc) do |rdoc|
43
+ rdoc.rdoc_dir = 'rdoc'
44
+ rdoc.title = 'Spotlight::Dor::Resources'
45
+ rdoc.options << '--line-numbers'
46
+ rdoc.rdoc_files.include('README.rdoc')
47
+ rdoc.rdoc_files.include('lib/**/*.rb')
48
+ end
@@ -0,0 +1,17 @@
1
+ module Spotlight::Resources
2
+ class DorResource < Spotlight::Resource
3
+ def to_solr
4
+ return to_enum :to_solr unless block_given?
5
+
6
+ base_doc = super
7
+
8
+ [resource, (resource.items if resource.collection?)].flatten.compact.each do |res|
9
+ yield base_doc.merge(Spotlight::Dor::Resources.indexer.solr_document(res))
10
+ end
11
+ end
12
+
13
+ def resource
14
+ @resource ||= Spotlight::Dor::Resources.indexer.resource doc_id
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ module Spotlight::Resources
2
+ class Harvestdor < Spotlight::Resource
3
+ end
4
+ end