umlaut 3.3.1 → 4.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +13 -12
- data/active_record_patch/connection_pool.rb +41 -449
- data/app/assets/javascripts/bootstrap3-typeahead.js +415 -0
- data/app/assets/javascripts/umlaut.js +8 -4
- data/app/assets/javascripts/umlaut/ajax_windows.js +15 -21
- data/app/assets/javascripts/umlaut/search_autocomplete.js +95 -90
- data/app/assets/javascripts/umlaut/update_html.js +12 -4
- data/app/assets/stylesheets/umlaut.css.scss +2 -4
- data/app/assets/stylesheets/umlaut/_az.scss +6 -6
- data/app/assets/stylesheets/umlaut/_forms.scss +21 -15
- data/app/assets/stylesheets/umlaut/_layout.scss +4 -5
- data/app/assets/stylesheets/umlaut/_misc.scss +12 -9
- data/app/assets/stylesheets/umlaut/_mixins.scss +2 -3
- data/app/assets/stylesheets/umlaut/_resolve.scss +45 -24
- data/app/assets/stylesheets/umlaut/_results.scss +7 -7
- data/app/assets/stylesheets/umlaut/_search.scss +16 -5
- data/app/assets/stylesheets/umlaut/_spinner.scss +1 -1
- data/app/assets/stylesheets/umlaut/_variables.scss +2 -2
- data/app/controllers/export_email_controller.rb +11 -4
- data/app/controllers/resolve_controller.rb +14 -30
- data/app/controllers/search_controller.rb +3 -8
- data/app/controllers/umlaut/controller_behavior.rb +30 -1
- data/app/controllers/umlaut/error_handling.rb +1 -1
- data/app/controllers/umlaut_configurable.rb +13 -10
- data/app/controllers/umlaut_controller.rb +4 -0
- data/app/helpers/emailer_helper.rb +10 -10
- data/app/helpers/export_email_helper.rb +1 -1
- data/app/helpers/resolve_helper.rb +3 -2
- data/app/helpers/search_helper.rb +26 -29
- data/app/helpers/umlaut/footer_helper.rb +4 -6
- data/app/helpers/umlaut/helper.rb +41 -7
- data/app/helpers/umlaut/url_generation.rb +10 -29
- data/app/mixin_logic/umlaut_http.rb +5 -2
- data/app/models/collection.rb +21 -6
- data/app/models/dispatched_service.rb +13 -0
- data/app/models/referent.rb +66 -88
- data/app/models/referent_value.rb +6 -5
- data/app/models/request.rb +35 -22
- data/app/models/service_response.rb +132 -66
- data/app/models/service_type_value.rb +22 -5
- data/app/models/service_wave.rb +30 -9
- data/app/models/sfx4/local/base.rb +0 -2
- data/app/models/sfx_url.rb +2 -2
- data/app/presentation/section_renderer.rb +68 -22
- data/app/service_adaptors/ajax_export.rb +1 -0
- data/app/service_adaptors/amazon.rb +7 -3
- data/app/service_adaptors/email_export.rb +1 -0
- data/app/service_adaptors/google_book_search.rb +8 -3
- data/app/service_adaptors/google_scholar_link.rb +6 -4
- data/app/service_adaptors/hathi_trust.rb +23 -18
- data/app/service_adaptors/hip_holding_search.rb +1 -1
- data/app/service_adaptors/internet_archive.rb +2 -0
- data/app/service_adaptors/isi.rb +2 -2
- data/app/service_adaptors/service.rb +31 -41
- data/app/service_adaptors/txt_holding_export.rb +3 -2
- data/app/service_adaptors/ulrichs_link.rb +5 -5
- data/app/service_adaptors/worldcat.rb +3 -1
- data/app/views/export_email/email.html.erb +10 -9
- data/app/views/export_email/send_txt.html.erb +4 -2
- data/app/views/export_email/txt.html.erb +44 -22
- data/app/views/feedback/new.html.erb +5 -5
- data/app/views/resolve/_background_progress.html.erb +23 -4
- data/app/views/resolve/_background_updater.html.erb +8 -8
- data/app/views/resolve/_citation.html.erb +11 -10
- data/app/views/resolve/_compact_citation.html.erb +3 -3
- data/app/views/resolve/_cover_image.html.erb +4 -4
- data/app/views/resolve/_fulltext.html.erb +1 -1
- data/app/views/resolve/_holding.html.erb +13 -13
- data/app/views/resolve/_manually_entered_warning.html.erb +9 -5
- data/app/views/resolve/_modal.html.erb +19 -15
- data/app/views/resolve/_search_inside.html.erb +20 -17
- data/app/views/resolve/_service_errors.html.erb +6 -6
- data/app/views/resolve/_standard_response_item.html.erb +7 -7
- data/app/views/resolve/get_permalink.html.erb +2 -2
- data/app/views/resolve/index.html.erb +13 -11
- data/app/views/search/_citation.html.erb +16 -16
- data/app/views/search/_pager.html.erb +6 -6
- data/app/views/search/books.html.erb +59 -19
- data/app/views/search/journal_search.html.erb +11 -11
- data/app/views/search/journals.html.erb +33 -33
- data/app/views/umlaut/_header.html.erb +7 -1
- data/app/views/umlaut/error.html.erb +13 -14
- data/bin/umlaut +141 -0
- data/config/locales/da.yml +122 -0
- data/config/locales/en.yml +227 -4
- data/db/orig_fixed_data/service_type_values.yml +18 -7
- data/lib/generators/templates/umlaut_services.yml +1 -1
- data/lib/generators/umlaut/install_generator.rb +0 -12
- data/lib/generators/umlaut/remove_turbolinks_generator.rb +14 -0
- data/lib/generators/umlaut_app_template.rb +37 -0
- data/lib/umlaut.rb +29 -0
- data/lib/umlaut/routes.rb +34 -38
- data/lib/umlaut/version.rb +6 -1
- data/test/dummy/app/assets/javascripts/application.js +1 -1
- data/test/dummy/app/controllers/umlaut_controller.rb +4 -2
- data/test/dummy/config/application.rb +2 -1
- data/test/dummy/config/environments/development.rb +1 -3
- data/test/dummy/config/environments/test.rb +2 -2
- data/test/dummy/config/travis_database.yml +0 -14
- data/test/dummy/config/umlaut_services.yml +9 -0
- data/test/dummy/config/umlaut_services.yml-JH +289 -0
- data/test/dummy/config/umlaut_services.yml-TEST +250 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_admin.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_az.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_icons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_layout.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_misc.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_modal.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_resolve.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_results.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_search.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_spinner.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/dc1017bdbb6af49581dc35eda2911a13c557c111/umlaut.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/00fe8b9f2a1f7a1c312f627c379f5a50 +0 -0
- data/test/dummy/tmp/cache/assets/{DCB/620/sprockets%2F2332a294ceeab3ab9b5ee643989dc0eb → development/sprockets/04757b33bf029a112819cf86c6e899db} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0bdc06801d1626641264f7c81f0bb383 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1365f0b692ced0628311ee4566e1b707 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/{C99/040/sprockets%2F84d95490d4855608b8dd8602192f4f9c → development/sprockets/19f5d7a61a156ff3b78882b11cc679dc} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1b2d587ae29ea4eaabb3bab0f022f3d3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1d9ea1c7ecfa0067960ac916ce4b65ca +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1e127abfd1414d0de67e3d78570c8195 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/22a2e14590ab60250be8e55802e0416b +0 -0
- data/test/dummy/tmp/cache/assets/{D72/1E0/sprockets%2Fdee77a9fb00d0a6229fd6b54a8f14197 → development/sprockets/29512f3dcf5161d055eb24ebcaaf8613} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2b31649bad46580f69b4c7283d75d7da +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2b6799917cb806635bb25ceb87199288 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2dcbebcad08aa99d46c19c8dceebc0e8 +0 -0
- data/test/dummy/tmp/cache/assets/{DD1/120/sprockets%2Fbee5967b8282dab9fce5c242bcc14c55 → development/sprockets/2e10962ed25d5e106895b21500eed819} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2e7a2009e7fa93a461d747b153241335 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2edf520c0d6a5e6fe31a96ff6249deb3 +0 -0
- data/test/dummy/tmp/cache/assets/{DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 → development/sprockets/2f5173deea6c795b8fdde723bb4b63af} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/33effed14152fbf68a290dc9bfdacc49 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/362ddf5dec149d8860307be28f1b6aba +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3bb0e2c4964797a92ce18c9265d7c35d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3de79b672a2a13cc1a0ecdb4f14087b6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4059619b2636e7c20d35170dfe625a63 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/43cc6f487d302bad3c176fb117bc8790 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4c4d82da23f69029b0c8346855f2effe +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4e00e47769496546d5560ba11077191e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4ed3382d5f8738e189d0fb787a29e487 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/50e6046f30d33ebf382887de6500721f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5488b82c680f30f6fd6e237c86e7887a +0 -0
- data/test/dummy/tmp/cache/assets/{C9D/060/sprockets%2F5c8956a1666824a1d214531abd22e2a2 → development/sprockets/56381d00a030c7822e9a88c9ddae434f} +0 -0
- data/test/dummy/tmp/cache/assets/{D17/BC0/sprockets%2F1ae6578a93a7a3d848319dea314f592d → development/sprockets/5bdde916a6e5824d9c695657aaada893} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5d7a36094a81c5e13f8603581fdcd0a0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/62df0d3ba0011b6ebf283e9e4fd33a59 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/685077a71b34728322a6a3df7a818f16 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/74007643206dfef480fe67a4ee6a5af9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/747ce3a1a163cd0edc663342abb508c8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7752e1fdfeb11e34353bb24822e8eddc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7ab84c0db002136373ac7278f78e4d69 +0 -0
- data/test/dummy/tmp/cache/assets/{D65/820/sprockets%2Fae5318865ebb4a2b74e84c0e13fb921a → development/sprockets/80f1a2af00dac454055d31d97fa9ea16} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/827f39ace148dd5b450c5b5c4f7b7407 +0 -0
- data/test/dummy/tmp/cache/assets/{DEF/A60/sprockets%2F3fddcee3e5dbd24f28de1001e5f3a009 → development/sprockets/84bda1ce77f140dbe330abbb9654a389} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/91cf221e4f31c9b0e394d61e76e383a6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/91fc9ce33c0477ac8e5c38f43ace64f3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/984eb5d6325666ea28ac61b8f00bbf96 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a5ca1b208ac1648c9233a4f82231cc9d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b0644dc48561692b74e67cfa49f1fccc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b45832a1ef97f445005b6a5ed08ad4e1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b57b9a3152cba1d2ce51c8890cd2c069 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bf432dfd03a3577b6fecab95f67d3e10 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c10ba9d7ca59eade850d472f4620e679 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c127c56dd327b8471950e4e4eb774d58 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c4883e8efaaa0dd40101433793d62dd0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ccb8dacf69b5ea6e8638d5659f87e93b +0 -0
- data/test/dummy/tmp/cache/assets/{E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af → development/sprockets/cffd775d018f68ce5dba1ee0d951a994} +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d06b36a24841048e094f62c017a0e23c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d40077dd950a280248a90c9cd9bf1171 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d49649ea0360b8433251241f77ab88c1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d6a0c8ca3c8a8f1bde4550db740138b8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d81f215f779ce2609d4dfa76b02df41c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/de3f87130aaf9847386d1f5e5c9893f1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dea953187fcf46b6d47f7653acc099c6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e1bf78affc4ede54eac4249af8f16e82 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/eaff4713f011dd8b1946264e8f120fb6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ef4a528b7df4e9417e42bc5aaf40ef9b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f6be26089ea600503193ac4a8119a33b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_badges.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_close.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_code.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_glyphicons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_input-groups.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_jumbotron.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_media.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_normalize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_print.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_responsive-embed.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_type.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_admin.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_az.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_icons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_layout.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_misc.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_modal.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_resolve.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_results.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_search.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_spinner.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/d66be29359c981abd965733fad9a31a018759486/_bootstrap-sprockets.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/d66be29359c981abd965733fad9a31a018759486/_bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/dc1017bdbb6af49581dc35eda2911a13c557c111/umlaut.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_background-variant.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_center-block.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_gradients.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid-framework.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_image.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_labels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_list-group.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-divider.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-vertical-align.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_opacity.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_progress-bar.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_reset-filter.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_resize.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_responsive-visibility.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_size.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_tab-focus.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_table-row.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-emphasis.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-overflow.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_vendor-prefixes.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/00fe8b9f2a1f7a1c312f627c379f5a50 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/04757b33bf029a112819cf86c6e899db +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1a72ab0727d6b1c53a2425bce68ccd29 +0 -0
- data/test/dummy/tmp/cache/assets/{D02/B30/sprockets%2Fb9332ebd1d306cc9120a386ca986034d → test/sprockets/1b2d587ae29ea4eaabb3bab0f022f3d3} +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1d9ea1c7ecfa0067960ac916ce4b65ca +0 -0
- data/test/dummy/tmp/cache/assets/{D65/0D0/sprockets%2F9fd0b369f009be410bdb0b6e5458b3a6 → test/sprockets/1e127abfd1414d0de67e3d78570c8195} +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/204c5ef815c91ad1dba36952ada84453 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/29512f3dcf5161d055eb24ebcaaf8613 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2b31649bad46580f69b4c7283d75d7da +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2b6799917cb806635bb25ceb87199288 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2dcbebcad08aa99d46c19c8dceebc0e8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2e10962ed25d5e106895b21500eed819 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2e7a2009e7fa93a461d747b153241335 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/300b3cf1812a5e2ba89266b8198caf8c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3bb0e2c4964797a92ce18c9265d7c35d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/3de79b672a2a13cc1a0ecdb4f14087b6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4059619b2636e7c20d35170dfe625a63 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/42d8221eac1dc91b1c055df56147f009 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/43bdfbe7d60eec9cab5eda9af30fae29 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/43cc6f487d302bad3c176fb117bc8790 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4403ea9870ef12ff2940eb16ee72aefd +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4c4d82da23f69029b0c8346855f2effe +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/4e00e47769496546d5560ba11077191e +0 -0
- data/test/dummy/tmp/cache/assets/{DAB/C70/sprockets%2Ff8ac0db14f84bce083a7c58f965e806f → test/sprockets/4ed3382d5f8738e189d0fb787a29e487} +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/50e6046f30d33ebf382887de6500721f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5488b82c680f30f6fd6e237c86e7887a +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/58901a70c4225a06a7b7402515a9b987 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5bdde916a6e5824d9c695657aaada893 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/5d7a36094a81c5e13f8603581fdcd0a0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/62df0d3ba0011b6ebf283e9e4fd33a59 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/641d193a017d5c7220a38ee54b714fa3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/65c94ad4022a7bb639254a1716375313 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/661a6079c9ca1cbcf6215e9113867d30 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/685077a71b34728322a6a3df7a818f16 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/74007643206dfef480fe67a4ee6a5af9 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/747ce3a1a163cd0edc663342abb508c8 +0 -0
- data/test/dummy/tmp/cache/assets/{D47/690/sprockets%2Fd92186d33469ff2bd01ba096f33dfd78 → test/sprockets/7752e1fdfeb11e34353bb24822e8eddc} +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/7ab84c0db002136373ac7278f78e4d69 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/80f1a2af00dac454055d31d97fa9ea16 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/84bda1ce77f140dbe330abbb9654a389 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/91cf221e4f31c9b0e394d61e76e383a6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/91fc9ce33c0477ac8e5c38f43ace64f3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9424bf97ebe97817bf589d5409eb1b49 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/97197c94037eb886f290e1db6db71839 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/984eb5d6325666ea28ac61b8f00bbf96 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9e9540a6ef6178fdc44134b8170b9104 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a4605dfa1ec12c0c0a5fa6149836e146 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a5ca1b208ac1648c9233a4f82231cc9d +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a8ae1c833918295d04a2921439ec6dda +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b0644dc48561692b74e67cfa49f1fccc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b45832a1ef97f445005b6a5ed08ad4e1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b530e8eed86f8a06c34ebfba012ced9f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/bbff1f14224b48e4d838bcfb3ed8a610 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c10ba9d7ca59eade850d472f4620e679 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c127c56dd327b8471950e4e4eb774d58 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c4883e8efaaa0dd40101433793d62dd0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/c696c2db7d8317ca35a7243d8bd4f3b2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ccb8dacf69b5ea6e8638d5659f87e93b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d40077dd950a280248a90c9cd9bf1171 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d49649ea0360b8433251241f77ab88c1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d6a0c8ca3c8a8f1bde4550db740138b8 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/db71108aa3843a309c5247dd6481dd12 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/dd484b056ce971aa93a7b69c6ec28fb3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/de3f87130aaf9847386d1f5e5c9893f1 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/dea953187fcf46b6d47f7653acc099c6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/df2a44cb5db91d63eb01e3d4a1673b75 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e1bf78affc4ede54eac4249af8f16e82 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e776d52f6ae606355fa1070b2eb7825b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/eaff4713f011dd8b1946264e8f120fb6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f6be26089ea600503193ac4a8119a33b +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/functional/feedback_controller_test.rb +1 -1
- data/test/functional/resolve_controller_test-NOFIXTURES.rb +227 -0
- data/test/functional/resolve_controller_test.rb +155 -14
- data/test/functional/search_controller_test.rb +1 -1
- data/test/helper/list_with_limit_test.rb +11 -0
- data/test/test_helper.rb +63 -26
- data/test/unit/active_record_connection_pool_test.rb +43 -25
- data/test/unit/aws_product_sign_test.rb +3 -3
- data/test/unit/collection_test.rb +39 -3
- data/test/unit/determine_services_test.rb +11 -11
- data/test/unit/dispatched_service_test.rb +16 -0
- data/test/unit/dissertation_catch_test.rb +1 -2
- data/test/unit/google_book_search_test.rb +6 -8
- data/test/unit/internet_archive_test.rb +6 -5
- data/test/unit/permalink_test.rb +4 -2
- data/test/unit/referent_test.rb +60 -0
- data/test/unit/referent_to_citation_test.rb +29 -2
- data/test/unit/request_test.rb +48 -0
- data/test/unit/service_response_test.rb +63 -4
- data/test/unit/service_test.rb +35 -5
- data/test/unit/service_type_value_test.rb +25 -0
- data/test/unit/sfx4_search_test.rb +1 -1
- data/test/unit/sfx_test.rb +4 -2
- data/test/unit/worldcat_test.rb +1 -3
- data/test/vcr_cassettes/collection/live_dispatch.yml +311 -0
- data/test/vcr_cassettes/sfx/nytimes_by_issn.yml +1 -1
- metadata +831 -145
- data/app/controllers/search_methods/sfx4_solr/README.md +0 -57
- data/app/controllers/search_methods/sfx4_solr/local.rb +0 -40
- data/app/controllers/search_methods/sfx4_solr/searcher.rb +0 -118
- data/app/models/sfx4/global/base.rb +0 -24
- data/app/models/sfx4/global/kb_objects.rb +0 -34
- data/app/views/search/opensearch_description.rxml +0 -10
- data/lib/service_adaptors/README.md +0 -0
- data/test/dummy/db/migrate/20120927163304_sfx4_global.rb +0 -26
- data/test/dummy/tmp/cache/assets/BFF/760/sprockets%2Fe00969069e468419c393709f042b4527 +0 -0
- data/test/dummy/tmp/cache/assets/CC7/D80/sprockets%2F62a4c21a1d5bac4064e25082f523f238 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/C70/sprockets%2F397590f867a06c2d0595c75ed4269e9b +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CE3/1F0/sprockets%2F9a3b0380fe964d77f0013845d3d355fd +0 -0
- data/test/dummy/tmp/cache/assets/CE7/FA0/sprockets%2F98df08987c1b5c0f643a21538a7182ec +0 -0
- data/test/dummy/tmp/cache/assets/CEA/930/sprockets%2F42ebf67295336dfb5725a8bb12881a98 +0 -0
- data/test/dummy/tmp/cache/assets/D15/FC0/sprockets%2F8cbf3a8b7acb7fc27a42168846226385 +0 -0
- data/test/dummy/tmp/cache/assets/D2D/240/sprockets%2F6610ec2488ff4a57d54efb798f1a9994 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D33/2C0/sprockets%2F790e9527eead8b020b92b34dc6a600d2 +0 -0
- data/test/dummy/tmp/cache/assets/D38/930/sprockets%2F45cee52fe11df0057793a6751aa65a4c +0 -0
- data/test/dummy/tmp/cache/assets/D39/B30/sprockets%2Fcb7b9f6963b829c678ff9267c63577ce +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D5F/690/sprockets%2Febe18c52ead548a955a1f2be191130b3 +0 -0
- data/test/dummy/tmp/cache/assets/D6A/A80/sprockets%2F22d5d4e74a9a3f3deb5a92704ae750f3 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/020/sprockets%2Ffba640f8143fc0c24e3e6616e2eb93a9 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/8C0/sprockets%2Fa0dc07225af433e77fd6a9028a8e3c6e +0 -0
- data/test/dummy/tmp/cache/assets/D98/990/sprockets%2F710ede3e7f5ebab14e9772fa88c00c02 +0 -0
- data/test/dummy/tmp/cache/assets/DAD/BA0/sprockets%2F193f81f7e4eae26eaaa7d909c0c8e956 +0 -0
- data/test/dummy/tmp/cache/assets/DD6/010/sprockets%2F15a8fcbaccc97804fce2ee514e371f79 +0 -0
- data/test/dummy/tmp/cache/assets/E2E/350/sprockets%2Fbea81b7c4fdf19664eff44b21ea53dbe +0 -0
- data/test/dummy/tmp/cache/assets/EF1/680/sprockets%2Fed8ede7dea4bd22aacb9584fbe7d6cad +0 -0
- data/test/fixtures/sfx4/global/KB_OBJECTS.yml +0 -46
- data/test/integration/request_test.rb +0 -25
- data/test/performance/browsing_test.rb +0 -9
- data/test/unit/sfx4_solr_search_test.rb +0 -81
- data/test/vcr_cassettes/resolve/fulltext_with_edition_warning.yml +0 -44
- data/test/vcr_cassettes/resolve/manually_entered.yml +0 -84
- data/test/vcr_cassettes/resolve/no_holdings.yml +0 -649
- data/test/vcr_cassettes/resolve/nytimes_by_issn.yml +0 -224
- data/test/vcr_cassettes/sfx4_solr/find_by_group.yml +0 -125
- data/test/vcr_cassettes/sfx4_solr/find_by_title_begins_with.yml +0 -71
- data/test/vcr_cassettes/sfx4_solr/find_by_title_contains.yml +0 -72
- data/test/vcr_cassettes/sfx4_solr/find_by_title_exact.yml +0 -36
@@ -1,15 +1,16 @@
|
|
1
1
|
class ReferentValue < ActiveRecord::Base
|
2
|
-
|
3
|
-
|
2
|
+
if Rails::VERSION::MAJOR >= 4
|
3
|
+
belongs_to :referent, lambda { includes :referent_values }
|
4
|
+
else
|
5
|
+
belongs_to :referent, :include => :referent_values
|
6
|
+
end
|
4
7
|
|
5
8
|
# Class method to normalize a string for normalized_value attribute.
|
6
9
|
# Right now normalization is just downcasing. Only
|
7
10
|
# metadata values should be normalized (ie, not 'identifier' or 'format').
|
8
11
|
# identifier and format shoudl be stored in normalized_value unchanged.
|
9
12
|
def self.normalize(input)
|
10
|
-
|
11
|
-
# normalized_value column only holds 254 bytes..
|
12
|
-
return input.mb_chars.downcase.to_s[0..254]
|
13
|
+
return input.scrub.downcase.to_s[0..254]
|
13
14
|
end
|
14
15
|
|
15
16
|
end
|
data/app/models/request.rb
CHANGED
@@ -14,11 +14,17 @@ class Request < ActiveRecord::Base
|
|
14
14
|
# added to the db comes first. Less confusing to have a consistent order.
|
15
15
|
# Also lets installation be sure services run first will have their
|
16
16
|
# responses show up first
|
17
|
-
|
17
|
+
if Rails::VERSION::MAJOR >= 4
|
18
|
+
has_many :service_responses, lambda { order('id ASC') }
|
19
|
+
belongs_to :referent, lambda { includes(:referent_values) }
|
20
|
+
else
|
21
|
+
# Get rid of this when we stop supporting Rails3
|
22
|
+
has_many :service_responses, :order => 'id ASC'
|
23
|
+
belongs_to :referent, :include => :referent_values
|
24
|
+
end
|
18
25
|
|
19
26
|
has_many :clickthroughs
|
20
27
|
|
21
|
-
belongs_to :referent, :include => :referent_values
|
22
28
|
# holds a hash representing submitted http params
|
23
29
|
serialize :http_env
|
24
30
|
|
@@ -170,7 +176,7 @@ class Request < ActiveRecord::Base
|
|
170
176
|
# marked as Queued, or Failed---otherwise it should be already working,
|
171
177
|
# or done.
|
172
178
|
def can_dispatch?(service)
|
173
|
-
ds= self.dispatched_services.
|
179
|
+
ds= self.dispatched_services.where(:service_id => service.service_id).first
|
174
180
|
|
175
181
|
return ds.nil? || (ds.status == DispatchedService::Queued) || (ds.status == DispatchedService::FailedTemporary)
|
176
182
|
end
|
@@ -231,22 +237,20 @@ class Request < ActiveRecord::Base
|
|
231
237
|
#
|
232
238
|
# Safe to call in thread, uses connection pool checkout.
|
233
239
|
def add_service_response(response_data)
|
240
|
+
|
234
241
|
raise ArgumentError.new("missing required `:service` key") unless response_data[:service].kind_of?(Service)
|
235
242
|
raise ArgumentError.new("missing required `:service_type_value` key") unless response_data[:service_type_value]
|
236
243
|
|
237
244
|
svc_resp = nil
|
238
245
|
ActiveRecord::Base.connection_pool.with_connection do
|
239
|
-
svc_resp =
|
240
|
-
|
246
|
+
svc_resp = self.service_responses.build
|
241
247
|
|
242
248
|
svc_resp.service_id = response_data[:service].service_id
|
243
249
|
response_data.delete(:service)
|
244
250
|
|
245
251
|
type_value = response_data.delete(:service_type_value)
|
246
252
|
type_value = ServiceTypeValue[type_value.to_s] unless type_value.kind_of?(ServiceTypeValue)
|
247
|
-
svc_resp.service_type_value = type_value
|
248
|
-
|
249
|
-
svc_resp.request = self
|
253
|
+
svc_resp.service_type_value = type_value
|
250
254
|
|
251
255
|
# response_data now includes actual key/values for the ServiceResponse
|
252
256
|
# send em, take_key_values takes care of deciding which go directly
|
@@ -262,9 +266,9 @@ class Request < ActiveRecord::Base
|
|
262
266
|
|
263
267
|
# Methods to look at status of dispatched services
|
264
268
|
def failed_service_dispatches
|
265
|
-
return self.dispatched_services.
|
266
|
-
:
|
267
|
-
|
269
|
+
return self.dispatched_services.where(
|
270
|
+
:status => [DispatchedService::FailedTemporary, DispatchedService::FailedFatal]
|
271
|
+
).to_a
|
268
272
|
end
|
269
273
|
|
270
274
|
# Returns array of Services in progress or queued. Intentionally
|
@@ -338,23 +342,32 @@ class Request < ActiveRecord::Base
|
|
338
342
|
# :refresh=>true will force a trip to the db to get latest values.
|
339
343
|
# otherwise, association is used.
|
340
344
|
def get_service_type(svc_type, options = {})
|
345
|
+
|
346
|
+
|
341
347
|
svc_type_obj = (svc_type.kind_of?(ServiceTypeValue)) ? svc_type : ServiceTypeValue[svc_type]
|
342
348
|
|
343
|
-
if ( options[:refresh])
|
349
|
+
responses = if ( options[:refresh])
|
344
350
|
ActiveRecord::Base.connection_pool.with_connection do
|
345
|
-
|
346
|
-
:conditions =>
|
347
|
-
["service_type_value_name = ?",
|
348
|
-
svc_type_obj.name ]
|
349
|
-
)
|
351
|
+
self.service_responses.where(["service_type_value_name = ?", svc_type_obj.name ]).to_a
|
350
352
|
end
|
351
353
|
else
|
352
354
|
# find on an assoc will go to db, unless we convert it to a plain
|
353
|
-
# old array first.
|
354
|
-
|
355
|
-
return self.service_responses.to_a.find_all { |response|
|
355
|
+
# old array first.
|
356
|
+
self.service_responses.to_a.find_all { |response|
|
356
357
|
response.service_type_value == svc_type_obj }
|
357
358
|
end
|
359
|
+
|
360
|
+
# Filter out any services with ID's not currently registered in
|
361
|
+
# ServiceStore
|
362
|
+
(responses, excluded_responses) = responses.partition do |r|
|
363
|
+
ServiceStore.service_definition_for(r.service_id).present?
|
364
|
+
end
|
365
|
+
if excluded_responses.present?
|
366
|
+
Rails.logger.warn("ServiceResponses skipped for unknown service_ids: " +
|
367
|
+
excluded_responses.collect {|s| s.service_id}.uniq.join(","))
|
368
|
+
end
|
369
|
+
|
370
|
+
return responses
|
358
371
|
end
|
359
372
|
|
360
373
|
|
@@ -393,7 +406,7 @@ class Request < ActiveRecord::Base
|
|
393
406
|
|
394
407
|
rft = nil
|
395
408
|
if ( params['umlaut.referent_id'])
|
396
|
-
rft = Referent.
|
409
|
+
rft = Referent.where(:id => params['umlaut.referent_id']).first
|
397
410
|
end
|
398
411
|
|
399
412
|
|
@@ -427,7 +440,7 @@ class Request < ActiveRecord::Base
|
|
427
440
|
end
|
428
441
|
|
429
442
|
def find_dispatch_object(service)
|
430
|
-
return self.dispatched_services.
|
443
|
+
return self.dispatched_services.where(:service_id => service.service_id).first
|
431
444
|
end
|
432
445
|
|
433
446
|
# Input is a CGI::parse style of HTTP params (array values)
|
@@ -1,34 +1,109 @@
|
|
1
1
|
=begin rdoc
|
2
2
|
|
3
|
-
A ServiceResponse
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
A ServiceResponse represents a single piece of data or content generated in response to a request.
|
4
|
+
For instance, a full text link, a 'see also' link, a cover image, a library holding, or an
|
5
|
+
available 'search inside' service.
|
6
|
+
|
7
|
+
ServiceResponses were generated *for* to a particular request (`#request`), were
|
8
|
+
generated *by* a particular service (`#service_id` or `#service`), and
|
9
|
+
belong to a *category or type* such as 'fulltext', 'excerpts', or 'search_inside'
|
10
|
+
(#service_type_value)
|
11
|
+
|
12
|
+
A ServiceResponse additionally has a hash of keys and values representing
|
13
|
+
it's actual payload or content or data. Some of these keys are stored
|
14
|
+
individually in database columns of their own, others are stored in
|
15
|
+
a hash serialized to attribute `service_data` -- ServiceResponse offers
|
16
|
+
an API so you ordinarily don't need to care which is which; any arbitrary
|
17
|
+
key/value pairs can be included in a ServiceResponse.
|
18
|
+
|
19
|
+
service_response.view_data
|
20
|
+
#=> A hash of key/value pairs representing the payload
|
21
|
+
|
22
|
+
You ordinarily create a ServiceResponse by asking a particular
|
23
|
+
Umlaut Request to do so:
|
24
|
+
|
25
|
+
umlaut_request.add_service_response(
|
26
|
+
:service=>self,
|
27
|
+
:service_type_value => :fulltext
|
28
|
+
:display_text => "Some link",
|
29
|
+
:url => "http://example.com"
|
30
|
+
)
|
31
|
+
|
32
|
+
There are certain conventional keys (like :display_text and :notes) accross
|
33
|
+
most response types, and other keys that might be particular to a certain type
|
34
|
+
or even a certain service. Services can store data in their own custom keys
|
35
|
+
for their own use. See "Conventional Keys" below for documentation on Umlaut
|
36
|
+
standard naming.
|
37
|
+
|
38
|
+
== Transformation of view data on display: transform_view_data and response_url
|
39
|
+
|
40
|
+
When a ServiceResponse is created, it's initialized with some key/value
|
41
|
+
service_data that is stored in the database.
|
42
|
+
|
43
|
+
However, there are also features in place letting a Service filter or transform
|
44
|
+
this key/value data at the point of display or use.
|
45
|
+
|
46
|
+
If a Service implements a method `transform_view_data(hash)`, then this method
|
47
|
+
will be called at the point of view_data use (possibly multiple times). You can
|
48
|
+
modify the hash passsed in, or even replace it entirelyl, just return a new hash.
|
49
|
+
|
50
|
+
def transform_view_data(hash)
|
51
|
+
if hash[:add_some_notes]
|
52
|
+
hash[:display_text] = some_helper_method( params[:something])
|
53
|
+
end
|
9
54
|
|
10
|
-
|
55
|
+
return hash
|
56
|
+
end
|
11
57
|
|
12
|
-
|
58
|
+
This can be especially useful for internationalization (i18n), please see Umlaut
|
59
|
+
wiki at https://github.com/team-umlaut/umlaut/wiki/Localization#services-and-their-generated-serviceresponses
|
13
60
|
|
14
|
-
|
15
|
-
|
16
|
-
|
61
|
+
Similarly, instead of calculating the URL at the point of recording a ServiceResponse,
|
62
|
+
you can implement a method `response_url` that will be called when a user clicks
|
63
|
+
on a ServiceResponse, and can return a URL to redirect the user too.
|
17
64
|
|
18
|
-
|
65
|
+
This is useful if the URL is expensive to calculate; or if you want to log or report
|
66
|
+
something on click; or if the URL needs user-input to be calculated (eg search_inside deep link)
|
19
67
|
|
68
|
+
def response_url(service_response, submitted_params)
|
69
|
+
return "http://books.google.com/#{service_response.view_data[:book_id]?query=submitted_params[:q]"
|
70
|
+
end
|
20
71
|
|
21
72
|
== View Display of ServiceResponse
|
22
73
|
|
23
|
-
The resolve menu View expects a Hash (or Hash-like) object with certain conventional keys,
|
74
|
+
The resolve menu View expects a Hash (or Hash-like) object with certain conventional keys,
|
75
|
+
to display a particular ServiceResponse. You can provide code in your Service to translate a
|
76
|
+
ServiceResponse to a Hash. But you often don't need to, you can use the proxy object returned by
|
77
|
+
#data_values instead, which provides hash-like access to all arbitrary key/values stored in ServiceResponse.
|
78
|
+
If the Service stores properties in there using conventional keys (see below), no further translation is needed.
|
24
79
|
|
25
80
|
However, if you need to do further translation you can implement methods on the Service, of the form: "to_[service type string](response)", for instance "to_fulltext". Umlaut will give it a ServiceResponse object, method should return a hash (or hash-like obj). Service can also implement a method response_to_view_data(response), as a 'default' translation. This mechanism of various possible 'translations' is implemented by Service#view_data_from_service_type.
|
26
81
|
|
27
82
|
== Url generation
|
28
83
|
|
29
|
-
At the point the user clicks on a ServiceResponse, Umlaut will attempt to find a url for the ServiceResponse,
|
84
|
+
At the point the user clicks on a ServiceResponse, Umlaut will attempt to find a url for the ServiceResponse,
|
85
|
+
by calling response_url(response) on the relevant Service. The default
|
86
|
+
implementation in service.rb just returns service_response['url'], so the easiest way
|
87
|
+
to do this is just to put the url in service_response['url']. However, your Service can over-ride
|
88
|
+
this method to provide it's own implementation to generate to generate the url on demand in any way it wants.
|
89
|
+
If it does this, technically service_response['url'] doesn't need to include anything. But if you have a URL,
|
90
|
+
you may still want to put it there, for Umlaut to use in guessing something about the destination,
|
91
|
+
for de-duplication and possibly other future purposes.
|
92
|
+
|
93
|
+
== Note on ServiceType join table.
|
94
|
+
|
95
|
+
ServiceResponse is connected to a Request via the ServiceType join table. This is mostly
|
96
|
+
for legacy reasons, currently unused -- normally a ServiceResponse is attached to one
|
97
|
+
and only one Request.
|
30
98
|
|
31
|
-
|
99
|
+
The architecture would allows a ServiceResponse to be tied to multiple requests,
|
100
|
+
perhaps to support some kind of cacheing re-use in the future. But at present, the code
|
101
|
+
doesn't do this, a ServiceResponse will really only be related to one request. However, a
|
102
|
+
ServiceResponse can be related to a single Request more than once--once per each type of
|
103
|
+
service response. ServiceType is really a three way join, representing a ServiceResponse,
|
104
|
+
attached to a particular Request, with a particular ServiceTypeValue.
|
105
|
+
|
106
|
+
= Conventional keys
|
32
107
|
|
33
108
|
Absolute minimum:
|
34
109
|
[:display_text] Text that will be used
|
@@ -104,8 +179,8 @@ class ServiceResponse < ActiveRecord::Base
|
|
104
179
|
#MatchAltEdition = 'edition'
|
105
180
|
#MatchAltWork = 'work'
|
106
181
|
|
107
|
-
def initialize(
|
108
|
-
super
|
182
|
+
def initialize(*args)
|
183
|
+
super
|
109
184
|
self.service_data = {} unless self.service_data
|
110
185
|
end
|
111
186
|
|
@@ -122,13 +197,7 @@ class ServiceResponse < ActiveRecord::Base
|
|
122
197
|
def service
|
123
198
|
@service ||= ServiceStore.instantiate_service!( self.service_id, nil )
|
124
199
|
end
|
125
|
-
|
126
|
-
# Returns a hash or hash-like object with properties for the service response.
|
127
|
-
def view_data
|
128
|
-
self.service.view_data_from_service_type(self)
|
129
|
-
end
|
130
|
-
|
131
|
-
|
200
|
+
|
132
201
|
def service_data
|
133
202
|
# Fix weird-ass char encoding bug with AR serialize and hashes.
|
134
203
|
# https://github.com/rails/rails/issues/6538
|
@@ -152,65 +221,62 @@ class ServiceResponse < ActiveRecord::Base
|
|
152
221
|
|
153
222
|
|
154
223
|
def take_key_values(hash)
|
155
|
-
# copy it, cause we're gonna modify it
|
156
|
-
hash = hash.clone
|
157
|
-
|
158
224
|
hash.each_pair do |key, value|
|
159
225
|
setter = "#{key.to_s}="
|
160
226
|
if ( self.respond_to?(setter))
|
161
227
|
self.send(setter, value)
|
162
|
-
|
228
|
+
else
|
229
|
+
self.service_data[key] = value
|
163
230
|
end
|
164
231
|
end
|
165
|
-
# What's left is arbitrary key/values that go in service_data
|
166
|
-
init_service_data(hash)
|
167
232
|
end
|
168
233
|
|
169
|
-
def init_service_data(hash)
|
170
|
-
hash.each {|key, value| data_values[key] = value} if hash
|
171
|
-
end
|
172
234
|
|
173
|
-
def
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
235
|
+
def view_data
|
236
|
+
unless (@data_values)
|
237
|
+
h = HashWithIndifferentAccess.new
|
238
|
+
ServiceResponse.built_in_fields.each do |key|
|
239
|
+
h[key] = self.send(key)
|
240
|
+
end
|
241
|
+
h.merge!(self.service_data.deep_dup)
|
242
|
+
|
243
|
+
# add in service_type_value
|
244
|
+
h[:service_type_value] = self.service_type_value_name
|
245
|
+
|
246
|
+
# Handle requested i18n translations
|
247
|
+
translate_simple_i18n!(h)
|
248
|
+
|
249
|
+
# Optional additional transformation provided by service?
|
250
|
+
if service.respond_to? :transform_view_data
|
251
|
+
h = service.transform_view_data(h)
|
252
|
+
end
|
253
|
+
|
254
|
+
# Doesn't protect modifying nested structures, but
|
255
|
+
# protects from some problems.
|
256
|
+
h.freeze
|
257
|
+
@data_values = h
|
178
258
|
end
|
179
|
-
return @
|
259
|
+
return @data_values;
|
180
260
|
end
|
261
|
+
# old name now duplicate
|
262
|
+
alias_method :data_values, :view_data
|
181
263
|
|
182
264
|
def self.built_in_fields
|
183
265
|
@@built_in_fields
|
184
266
|
end
|
185
267
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
#
|
191
|
-
#
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
# So symbols and strings are interchangeable. Normally, keys should be symbols.
|
196
|
-
class ServiceResponseDataValues
|
197
|
-
def initialize(arg_service_response)
|
198
|
-
@service_response = arg_service_response
|
199
|
-
end
|
200
|
-
|
201
|
-
def [](key)
|
202
|
-
if ServiceResponse.built_in_fields.include?(key)
|
203
|
-
return @service_response.send(key)
|
204
|
-
else
|
205
|
-
return @service_response.service_data[key]
|
268
|
+
protected
|
269
|
+
# replaces :display_text and :notes with simple i18n key lookups
|
270
|
+
# iff :display_text_i18n and :notes_i18n are defined
|
271
|
+
#
|
272
|
+
# i18n lookups use Service.translate, to use standard scopes for
|
273
|
+
# this service.
|
274
|
+
def translate_simple_i18n!(hash)
|
275
|
+
if key = hash[:display_text_i18n]
|
276
|
+
hash[:display_text] = self.service.translate(key, :default => hash[:display_text])
|
206
277
|
end
|
207
|
-
|
208
|
-
|
209
|
-
def []=(key, value)
|
210
|
-
if(ServiceResponse.built_in_fields.include?(key))
|
211
|
-
@service_response.send(key.to_s+'=', value)
|
212
|
-
else
|
213
|
-
@service_response.service_data[key] = value
|
278
|
+
if key = self[:notes_i18n]
|
279
|
+
hash[:notes] = self.service.translate(key, :default => hash[:notes])
|
214
280
|
end
|
215
281
|
end
|
216
282
|
|
@@ -4,10 +4,18 @@ require 'yaml'
|
|
4
4
|
# This model is the actual list of valid service types. Not ActiveRecord,
|
5
5
|
# just load from config files into memory (loaded on file load).
|
6
6
|
#
|
7
|
-
#
|
8
|
-
#
|
7
|
+
# ServiceTypeValues have human-displayable names, that are controlled by Rails I18n,
|
8
|
+
# using standard Rails I18n pluralization forms, so for instance:
|
9
|
+
#
|
10
|
+
# For a ServiceTypeValue with name 'fulltext', key in i18n at 'umlaut.service_type_names.fulltext.one'
|
11
|
+
# represents the singular (non-plural) name of objects of this ServiceTypeValue, and
|
12
|
+
# 'umlaut.service_type_names.fulltext.other' is the plural name.
|
13
|
+
#
|
14
|
+
# Other languages may have more complex pluralization rules, but Umlaut at present only
|
15
|
+
# looks up a plural form for 10 items, so 'other' is probably all that is used.
|
9
16
|
class ServiceTypeValue
|
10
|
-
attr_accessor :name, :id
|
17
|
+
attr_accessor :name, :id
|
18
|
+
attr_writer :display_name, :display_name_plural
|
11
19
|
|
12
20
|
class << self; attr_accessor :values; end
|
13
21
|
|
@@ -24,11 +32,20 @@ class ServiceTypeValue
|
|
24
32
|
def self.[](name)
|
25
33
|
find(name)
|
26
34
|
end
|
35
|
+
|
36
|
+
def display_name
|
37
|
+
I18n.t(self.name, :scope => "umlaut.service_type_names", :default => :default, :count => 1)
|
38
|
+
end
|
27
39
|
|
40
|
+
# Some languages may have multiple plural forms, but Umlaut at
|
41
|
+
# present is not sophisticated enough to use em all, we just look up
|
42
|
+
# the plural form for 10 items -- most Umlaut use of plural form
|
43
|
+
# is for either zero or indetermininate number. But it still may need
|
44
|
+
# enhancing.
|
28
45
|
def display_name_pluralize
|
29
|
-
|
46
|
+
I18n.t(self.name, :scope => "umlaut.service_type_names", :default => :default, :count => 10)
|
30
47
|
end
|
31
|
-
|
48
|
+
|
32
49
|
@@distro_conf_file = File.join(Umlaut::Engine.root, "db", "orig_fixed_data", "service_type_values.yml")
|
33
50
|
@@local_conf_file = File.join(Rails.root, "config", "umlaut_service_type_values.yml")
|
34
51
|
|
data/app/models/service_wave.rb
CHANGED
@@ -62,11 +62,27 @@ class ServiceWave
|
|
62
62
|
|
63
63
|
begin
|
64
64
|
local_request = Request.connection_pool.with_connection do
|
65
|
-
# pre-load all relationships
|
66
|
-
#
|
67
|
-
|
65
|
+
# We are attempting to pre-load all relationships, both for efficiency,
|
66
|
+
# and so our thread can use them all without needing to checkout
|
67
|
+
# an ActiveRecord connection.
|
68
|
+
req = Request.includes({:referent => :referent_values}, :service_responses, :dispatched_services).find(request_id)
|
69
|
+
|
70
|
+
# It turns out even though referent.referent_values is loaded from the db, on first
|
71
|
+
# access Rails will still access #connection, triggering a checkout. We force
|
72
|
+
# that to happen here, in our with_connection, so it won't happen later.
|
73
|
+
#
|
74
|
+
# Yeah, this is a hacky mess, ActiveRecord isn't happy using it the way we are.
|
75
|
+
# Should we just surround all of handle_wrapper in a with_connection checkout?
|
76
|
+
# Maybe. But it would require more connections in the pool to have those
|
77
|
+
# longer checkouts.
|
78
|
+
req.referent.referent_values
|
79
|
+
req.service_responses
|
80
|
+
req.dispatched_services
|
81
|
+
|
82
|
+
req
|
68
83
|
end
|
69
|
-
|
84
|
+
|
85
|
+
|
70
86
|
|
71
87
|
if prepare_dispatch!(local_request, local_service)
|
72
88
|
local_service.handle_wrapper(local_request)
|
@@ -75,7 +91,7 @@ class ServiceWave
|
|
75
91
|
end
|
76
92
|
|
77
93
|
|
78
|
-
rescue
|
94
|
+
rescue StandardError => e
|
79
95
|
# We may not be able to access ActiveRecord because it may
|
80
96
|
# have been an AR connection error, perhaps out of connections
|
81
97
|
# in the pool. So log and record in non-AR ways.
|
@@ -85,10 +101,15 @@ class ServiceWave
|
|
85
101
|
|
86
102
|
# Log it too, although experience shows it may never make it to the
|
87
103
|
# log for mysterious reasons.
|
88
|
-
|
104
|
+
log_msg = TermColor.color("Umlaut: Threaded service raised exception.", :red, true) + " Service: #{service.service_id}, #{e.class} #{e.message}. Backtrace:\n #{e.backtrace.join("\n ")}"
|
105
|
+
Rails.logger.error(log_msg)
|
89
106
|
|
90
107
|
# And stick it in a thread variable too
|
91
|
-
Thread.current[:exception] = e
|
108
|
+
Thread.current[:exception] = e
|
109
|
+
|
110
|
+
# And try to re-raise if it's one we really don't want to swallow.
|
111
|
+
# Sorry, a mess.
|
112
|
+
raise e if defined?(VCR::Errors::UnhandledHTTPRequestError) && e.kind_of?(VCR::Errors::UnhandledHTTPRequestError)
|
92
113
|
ensure
|
93
114
|
Rails.logger.info(TermColor.color("Umlaut: Completed service #{local_service.service_id}", :yellow)+ ", level #{@priority_level}, request #{local_request && local_request.id}: in #{Time.now - service_start}.") if @log_timing
|
94
115
|
end
|
@@ -112,11 +133,11 @@ class ServiceWave
|
|
112
133
|
aThread.join
|
113
134
|
|
114
135
|
if aThread[:exception]
|
115
|
-
debugger if
|
136
|
+
debugger if ENV["UMLAUT_AUTO_DEBUGGER"]
|
116
137
|
begin
|
117
138
|
request.dispatched(aThread[:service], DispatchedService::FailedFatal, aThread[:exception])
|
118
139
|
rescue Exception => e
|
119
|
-
debugger if
|
140
|
+
debugger if ENV["UMLAUT_AUTO_DEBUGGER"]
|
120
141
|
raise e
|
121
142
|
end
|
122
143
|
end
|