umlaut 3.0.5 → 3.1.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +48 -5
- data/app/assets/images/umlaut_icons.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-book-go.png +0 -0
- data/app/assets/images/{famfamfam/book_open.png → umlaut_icons/famfamfam-book-open.png} +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-book.png +0 -0
- data/app/assets/images/{famfamfam/cross.png → umlaut_icons/famfamfam-cross.png} +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-error.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-help.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-information.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-link.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-sound.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-text.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-up.png +0 -0
- data/app/assets/images/{famfamfam/page_white.png → umlaut_icons/famfamfam-page-white.png} +0 -0
- data/app/assets/images/{famfamfam/readme.html → umlaut_icons/famfamfam-readme.html} +0 -0
- data/app/assets/images/{famfamfam/tiny_cross.png → umlaut_icons/famfamfam-tiny-cross.png} +0 -0
- data/app/assets/images/{list_closed.png → umlaut_icons/list-closed.png} +0 -0
- data/app/assets/images/{list_open.png → umlaut_icons/list-open.png} +0 -0
- data/app/assets/javascripts/umlaut.js +5 -4
- data/app/assets/javascripts/umlaut/ajax_windows.js +41 -23
- data/app/assets/javascripts/umlaut/expand_contract_toggle.js +21 -29
- data/app/assets/javascripts/umlaut/load_permalink.js +26 -0
- data/app/assets/javascripts/umlaut/search_autocomplete.js +103 -44
- data/app/assets/stylesheets/umlaut.css.scss +19 -0
- data/app/assets/stylesheets/umlaut/_admin.scss +14 -0
- data/app/assets/stylesheets/umlaut/_az.scss +29 -0
- data/app/assets/stylesheets/umlaut/_forms.scss +31 -0
- data/app/assets/stylesheets/umlaut/_icons.scss +64 -0
- data/app/assets/stylesheets/umlaut/_layout.scss +52 -0
- data/app/assets/stylesheets/umlaut/_misc.scss +59 -0
- data/app/assets/stylesheets/umlaut/_mixins.scss +65 -0
- data/app/assets/stylesheets/umlaut/_modal.scss +4 -0
- data/app/assets/stylesheets/umlaut/_resolve.scss +308 -0
- data/app/assets/stylesheets/umlaut/_results.scss +34 -0
- data/app/assets/stylesheets/umlaut/_search.scss +14 -0
- data/app/assets/stylesheets/umlaut/_spinner.scss +12 -0
- data/app/assets/stylesheets/umlaut/_variables.scss +72 -0
- data/app/controllers/export_email_controller.rb +22 -39
- data/app/controllers/journal_tocs_controller +90 -0
- data/app/controllers/js_helper_controller.rb +2 -3
- data/app/controllers/link_router_controller.rb +32 -43
- data/app/controllers/open_search_controller.rb +3 -4
- data/app/controllers/resolve_controller.rb +68 -107
- data/app/controllers/resource_controller.rb +14 -20
- data/app/controllers/search_controller.rb +75 -94
- data/app/controllers/search_methods/README.md +28 -0
- data/app/controllers/search_methods/sfx4.rb +50 -119
- data/app/controllers/search_methods/sfx4_solr/README.md +57 -0
- data/app/controllers/search_methods/sfx4_solr/local.rb +40 -0
- data/app/controllers/search_methods/sfx4_solr/searcher.rb +90 -0
- data/app/controllers/store_controller.rb +24 -30
- data/app/controllers/umlaut/controller_behavior.rb +45 -17
- data/app/controllers/umlaut/error_handling.rb +20 -25
- data/{lib → app/controllers}/umlaut_configurable.rb +35 -21
- data/app/controllers/umlaut_controller.rb +43 -46
- data/app/helpers/emailer_helper.rb +9 -16
- data/app/helpers/export_email_helper.rb +8 -8
- data/app/helpers/open_search_helper.rb +2 -3
- data/app/helpers/resolve_helper.rb +130 -100
- data/app/helpers/search_helper.rb +17 -5
- data/app/helpers/umlaut/footer_helper.rb +1 -1
- data/app/helpers/umlaut/helper.rb +34 -0
- data/app/helpers/umlaut/html_head_helper.rb +12 -21
- data/{lib → app/mixin_logic}/marc_helper.rb +1 -1
- data/{lib → app/mixin_logic}/metadata_helper.rb +6 -5
- data/{lib → app/mixin_logic}/umlaut_http.rb +0 -0
- data/{lib → app/mixin_logic}/xml_schema_helper.rb +0 -0
- data/app/models/collection.rb +97 -95
- data/{lib → app/models}/hip3/bib.rb +0 -0
- data/{lib → app/models}/hip3/bib_searcher.rb +0 -0
- data/{lib → app/models}/hip3/custom_field_lookup.rb +0 -0
- data/{lib → app/models}/hip3/holding.rb +0 -0
- data/{lib → app/models}/hip3/item.rb +0 -0
- data/{lib → app/models}/hip3/receipt.rb +0 -0
- data/{lib → app/models}/hip3/serial_copy.rb +0 -0
- data/app/models/permalink.rb +3 -8
- data/app/models/referent.rb +29 -21
- data/app/models/request.rb +19 -8
- data/app/models/service_response.rb +24 -3
- data/app/models/service_store.rb +108 -39
- data/app/models/service_store.rb-NEW +73 -0
- data/app/models/service_wave.rb +2 -0
- data/app/models/sfx4/abstract/README.md +68 -0
- data/app/models/sfx4/abstract/az_extra_info.rb +44 -0
- data/app/models/sfx4/abstract/az_letter_group.rb +24 -0
- data/app/models/sfx4/abstract/az_title.rb +96 -0
- data/app/models/sfx4/abstract/az_title_search.rb +24 -0
- data/app/models/sfx4/abstract/base.rb +77 -0
- data/app/models/sfx4/global/base.rb +24 -0
- data/app/models/sfx4/global/kb_objects.rb +34 -0
- data/app/models/sfx4/local/az_extra_info.rb +7 -0
- data/app/models/sfx4/local/az_letter_group.rb +7 -0
- data/app/models/sfx4/local/az_title.rb +7 -0
- data/app/models/sfx4/local/az_title_search.rb +7 -0
- data/app/models/sfx4/local/base.rb +26 -0
- data/{lib → app/presentation}/section_renderer.rb +0 -12
- data/app/referent_filters/dissertation_catch.rb +67 -0
- data/{lib → app/referent_filters}/referent_filter.rb +0 -0
- data/{lib → app}/service_adaptors/ajax_export.rb +0 -0
- data/{lib → app}/service_adaptors/amazon.rb +2 -0
- data/{lib → app}/service_adaptors/blacklight.rb +22 -10
- data/{lib → app}/service_adaptors/book_finder.rb +0 -0
- data/{lib → app}/service_adaptors/bx.rb +0 -0
- data/{lib → app}/service_adaptors/cover_thing.rb +0 -0
- data/{lib → app}/service_adaptors/dummy_service.rb +0 -0
- data/{lib → app}/service_adaptors/elsevier_cover.rb +0 -0
- data/{lib → app}/service_adaptors/email_export.rb +0 -0
- data/{lib → app}/service_adaptors/ezproxy.rb +0 -0
- data/{lib → app}/service_adaptors/google_book_search.rb +0 -0
- data/app/service_adaptors/google_scholar_link.rb +71 -0
- data/{lib → app}/service_adaptors/gpo.rb +0 -0
- data/{lib → app}/service_adaptors/hathi_trust.rb +0 -0
- data/{lib → app}/service_adaptors/hip3_service.rb +0 -0
- data/{lib → app}/service_adaptors/hip_holding_search.rb +0 -0
- data/{lib → app}/service_adaptors/internet_archive.rb +0 -0
- data/{lib → app}/service_adaptors/isbn_db.rb +0 -0
- data/{lib → app}/service_adaptors/isi.rb +22 -13
- data/{lib → app}/service_adaptors/jcr.rb +0 -0
- data/{lib → app}/service_adaptors/opac.rb +0 -0
- data/{lib → app}/service_adaptors/open_library.rb +0 -0
- data/{lib → app}/service_adaptors/open_library_cover.rb +0 -0
- data/{lib → app}/service_adaptors/pubmed.rb +0 -0
- data/{lib → app}/service_adaptors/request_to_fixture.rb +0 -0
- data/{lib → app}/service_adaptors/scopus.rb +0 -0
- data/{lib → app/service_adaptors}/service.rb +3 -3
- data/{lib → app}/service_adaptors/sfx.rb +154 -11
- data/{lib → app}/service_adaptors/sfx_backchannel_record.rb +0 -0
- data/app/service_adaptors/tr_link.rb +267 -0
- data/app/service_adaptors/tr_links.rb +278 -0
- data/{lib → app}/service_adaptors/txt_holding_export.rb +0 -0
- data/{lib → app}/service_adaptors/ulrichs_cover.rb +0 -0
- data/{lib → app}/service_adaptors/ulrichs_link.rb +0 -0
- data/{lib → app}/service_adaptors/worldcat.rb +0 -0
- data/{lib → app}/service_adaptors/worldcat_identities.rb +0 -0
- data/app/views/admin/service_errors/_dispatched_service.html.erb +13 -13
- data/app/views/admin/service_errors/index.html.erb +11 -21
- data/app/views/export_email/email.html.erb +17 -2
- data/app/views/export_email/send_email.html.erb +2 -1
- data/app/views/export_email/send_txt.html.erb +2 -1
- data/app/views/export_email/txt.html.erb +30 -2
- data/app/views/layouts/umlaut.html.erb +29 -49
- data/app/views/resolve/_background_progress.html.erb +43 -50
- data/app/views/resolve/_background_updater.html.erb +23 -36
- data/app/views/resolve/_citation.html.erb +63 -87
- data/app/views/resolve/_compact_citation.html.erb +15 -33
- data/app/views/resolve/_cover_image.html.erb +34 -43
- data/app/views/resolve/_fulltext.html.erb +29 -50
- data/app/views/resolve/_help.html.erb +17 -14
- data/app/views/resolve/_holding.html.erb +65 -82
- data/app/views/resolve/_manually_entered_warning.html.erb +7 -0
- data/app/views/resolve/_modal.html.erb +19 -0
- data/app/views/resolve/_related_items.html.erb +20 -35
- data/app/views/resolve/_search_inside.html.erb +34 -57
- data/app/views/resolve/_section_display.html.erb +34 -46
- data/app/views/resolve/_section_heading.html.erb +17 -0
- data/app/views/resolve/_service_errors.html.erb +27 -28
- data/app/views/resolve/_standard_response_item.html.erb +42 -72
- data/app/views/resolve/background_status.html.erb +19 -23
- data/app/views/resolve/get_permalink.html.erb +6 -0
- data/app/views/resolve/index.html.erb +47 -73
- data/app/views/search/_a_to_z.html.erb +9 -6
- data/app/views/search/_citation.html.erb +73 -94
- data/app/views/search/_pager.html.erb +6 -6
- data/app/views/search/books.html.erb +34 -102
- data/app/views/search/journal_search.html.erb +53 -90
- data/app/views/search/journals.html.erb +73 -167
- data/app/views/umlaut/_header.html.erb +9 -0
- data/app/views/umlaut/error.html.erb +44 -44
- data/config/locales/en.yml +5 -0
- data/lib/{CronTab.rb → cron_tab.rb} +0 -0
- data/lib/generators/templates/umlaut_services.yml +57 -43
- data/lib/generators/umlaut/install_generator.rb +12 -0
- data/lib/service_adaptors/README.md +0 -0
- data/lib/tasks/umlaut.rake +8 -24
- data/lib/umlaut.rb +1 -21
- data/lib/umlaut/version.rb +1 -1
- data/test/README.md +75 -0
- data/test/dummy/app/controllers/umlaut_controller.rb +3 -3
- data/test/dummy/config/application.rb +3 -0
- data/test/dummy/config/sunspot.yml +20 -0
- data/test/dummy/config/travis_database.yml +96 -0
- data/test/dummy/config/umlaut_services.yml +16 -23
- data/test/dummy/db/migrate/20120927163304_sfx4_global.rb +26 -0
- data/test/dummy/db/migrate/20120927164040_sfx4_local.rb +54 -0
- data/test/dummy/tmp/cache/assets/BBA/6A0/sprockets%2F2a335471966f33256b321f8324041981 +0 -0
- data/test/dummy/tmp/cache/assets/C2A/410/sprockets%2Fd654b74912b4773a2534616863fb6565 +0 -0
- data/test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26 +0 -0
- data/test/dummy/tmp/cache/assets/C49/730/sprockets%2F212d35831188417b5131e3e693aa69a6 +0 -0
- data/test/dummy/tmp/cache/assets/C55/1D0/sprockets%2F5af2f2a3403040f736981863fd278529 +0 -0
- data/test/dummy/tmp/cache/assets/C5A/A80/sprockets%2F2328c7370b56b4151776981a5f6d394e +0 -0
- data/test/dummy/tmp/cache/assets/C5F/340/sprockets%2F99692920160b7a279b86a80415b79db7 +0 -0
- data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
- data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
- data/test/dummy/tmp/cache/assets/C94/E20/sprockets%2F19579abc248373f419b1c3e287d74598 +0 -0
- data/test/dummy/tmp/cache/assets/C98/330/sprockets%2F0c81574ba94abc10657315d4190c201f +0 -0
- data/test/dummy/tmp/cache/assets/CA4/440/sprockets%2F0feb4425db6319d7d0582192a503671b +0 -0
- data/test/dummy/tmp/cache/assets/CA7/E80/sprockets%2F33310f455a870eaedd6d938e30620714 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/3C0/sprockets%2F697cd846490fda9f0e20c558320610f8 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
- data/test/dummy/tmp/cache/assets/CC7/F10/sprockets%2F939637f806eef3f0f21584659458ab2e +0 -0
- data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +0 -0
- data/test/dummy/tmp/cache/assets/CF8/DA0/sprockets%2Ff5b8c8499d3da954d392fa57739503c5 +0 -0
- data/test/dummy/tmp/cache/assets/CF9/590/sprockets%2F096bcc45cd31b3796fa2121cd203215f +0 -0
- data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
- data/test/dummy/tmp/cache/assets/D04/CC0/sprockets%2Fe9c1b92f2e437e1bbbe020d718739220 +0 -0
- data/test/dummy/tmp/cache/assets/D0B/090/sprockets%2F58009091c95e3ac328c91c68fca30e0e +0 -0
- data/test/dummy/tmp/cache/assets/D1A/B50/sprockets%2F2db5892438129fe94da8429b8be114ec +0 -0
- data/test/dummy/tmp/cache/assets/D2D/1A0/sprockets%2F376426b4896a3cff7969ce6c7b387e0e +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6 +0 -0
- data/test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0 +0 -0
- data/test/dummy/tmp/cache/assets/D46/F80/sprockets%2Fb15c08e749067d7aad9baf5e9388221c +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/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b +0 -0
- data/test/dummy/tmp/cache/assets/D6E/CF0/sprockets%2F5661c6e4f0cea86fe4523f27261aade5 +0 -0
- data/test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6 +0 -0
- data/test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6 +0 -0
- data/test/dummy/tmp/cache/assets/D9A/2F0/sprockets%2Fbba0f4b972dc53c15ce6c8c1993b82a4 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/860/sprockets%2Fec2d9f20b270d70e698ff33e53c21fca +0 -0
- data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
- data/test/dummy/tmp/cache/assets/DA8/BB0/sprockets%2F0cf1c7e9f966dce425517c0e2a844efe +0 -0
- data/test/dummy/tmp/cache/assets/DA9/BC0/sprockets%2Fcb9062b73291befe5e5bf2a70978dec8 +0 -0
- data/test/dummy/tmp/cache/assets/DB6/ED0/sprockets%2Ff4482d9b9f76fb65eef16430bde2f8e6 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
- data/test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b +0 -0
- data/test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e +0 -0
- data/test/dummy/tmp/cache/assets/E02/C10/sprockets%2F1463cadfce3fc70e61d482f9fcb75ac7 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E38/FE0/sprockets%2Fe1fc875efa817cbb94a5d8de25ea4e6b +0 -0
- data/test/dummy/tmp/cache/assets/E50/F00/sprockets%2Fec61afdbb1cc4df075e3dad46f0af571 +0 -0
- data/test/dummy/tmp/cache/assets/E5E/5F0/sprockets%2Feffaeb4d7f9bf4c0cc840ff320fde046 +0 -0
- data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_media.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-1200px-min.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-767px-max.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-768px-979px.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_admin.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_az.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_base.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_icons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_misc.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_modal.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_resolve.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_results.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_search.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_spinner.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap-responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fb58c04fd15fcc38a8c4d91b7070bcfeaf1c3799/umlaut.css.scssc +0 -0
- data/test/fixtures/dispatched_services.yml +0 -4
- data/test/fixtures/permalinks.yml +23 -4
- data/test/fixtures/referent_values.yml +226 -1493
- data/test/fixtures/referents.yml +14 -137
- data/test/fixtures/requests.yml +22 -260
- data/test/fixtures/service_responses.yml +169 -5
- data/test/fixtures/sfx4/global/KB_OBJECTS.yml +46 -0
- data/test/fixtures/sfx4/local/AZ_EXTRA_INFO.yml +4802 -0
- data/test/fixtures/sfx4/local/AZ_LETTER_GROUP.yml +105 -0
- data/test/fixtures/sfx4/local/AZ_TITLE.yml +165 -0
- data/test/fixtures/sfx4/local/AZ_TITLE_SEARCH.yml +341 -0
- data/test/fixtures/sfx_urls.yml +3 -0
- data/test/functional/export_email_controller_test.rb +43 -0
- data/test/functional/link_router_controller_test.rb +16 -0
- data/test/functional/resolve_controller_test.rb +102 -0
- data/test/functional/search_controller_test.rb +40 -0
- data/test/functional/store_controller_test.rb +29 -0
- data/test/helper/list_with_limit_test.rb +90 -0
- data/test/integration/permalinks_test.rb +14 -0
- data/test/support/search_methods/test_case.rb +0 -0
- data/test/support/service_adaptors/test_case.rb +0 -0
- data/test/support/test_with_cassette.rb +37 -0
- data/test/test_helper.rb +76 -30
- data/test/unit/aws_product_sign_test.rb +2 -0
- data/test/unit/determine_services_test.rb +163 -0
- data/test/unit/google_book_search_test.rb +8 -25
- data/test/unit/google_scholar_link_test.rb +81 -0
- data/test/unit/internet_archive_test.rb +33 -0
- data/test/unit/permalink_test.rb +15 -0
- data/test/unit/service_store_test.rb +47 -0
- data/test/unit/service_test.rb +28 -13
- data/test/unit/sfx/sfx_target_roll_up_test.rb +369 -0
- data/test/unit/sfx4_search_test.rb +102 -0
- data/test/unit/sfx4_solr_search_test.rb +77 -0
- data/test/unit/sfx_test.rb +38 -0
- data/test/unit/worldcat_test.rb +7 -0
- data/test/vcr_cassettes/google_book_search/frankenstein_by_OCLC_number.yml +107 -0
- data/test/vcr_cassettes/internet_archive/momo_by_title_author.yml +116 -0
- data/test/vcr_cassettes/resolve/fulltext_with_edition_warning.yml +44 -0
- data/test/vcr_cassettes/resolve/no_holdings.yml +649 -0
- data/test/vcr_cassettes/resolve/nytimes_by_issn.yml +224 -0
- data/test/vcr_cassettes/sfx/nytimes_by_issn.yml +1395 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_group.yml +109 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_begins_with.yml +33 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_contains.yml +34 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_exact.yml +32 -0
- data/test/view/holding_test.rb +30 -0
- metadata +435 -179
- data/app/assets/images/export_bg_bot.gif +0 -0
- data/app/assets/images/export_bg_mid.gif +0 -0
- data/app/assets/images/export_bg_top.gif +0 -0
- data/app/assets/images/famfamfam/page_sound.gif +0 -0
- data/app/assets/images/famfamfam/page_text.gif +0 -0
- data/app/assets/images/famfamfam/page_up.gif +0 -0
- data/app/assets/images/ico_go.gif +0 -0
- data/app/assets/images/more_info.gif +0 -0
- data/app/assets/images/rails.png +0 -0
- data/app/assets/images/request.gif +0 -0
- data/app/assets/javascripts/umlaut/simple_visible_toggle.js +0 -8
- data/app/assets/stylesheets/umlaut.css +0 -900
- data/app/assets/stylesheets/umlaut/_background_progress_spinner.scss +0 -21
- data/app/assets/stylesheets/umlaut/_expand_contract.scss +0 -28
- data/app/controllers/search_methods/sfx3.rb +0 -148
- data/app/models/sfx_db.rb +0 -10
- data/app/models/sfx_db/az_additional_title.rb +0 -11
- data/app/models/sfx_db/az_letter_group.rb +0 -11
- data/app/models/sfx_db/az_title.rb +0 -40
- data/app/models/sfx_db/az_title_v2.rb +0 -34
- data/app/models/sfx_db/isbn.rb +0 -12
- data/app/models/sfx_db/issn.rb +0 -12
- data/app/models/sfx_db/object.rb +0 -35
- data/app/models/sfx_db/object_portfolio.rb +0 -6
- data/app/models/sfx_db/publisher.rb +0 -10
- data/app/models/sfx_db/sfx_db_base.rb +0 -58
- data/app/models/sfx_db/target.rb +0 -10
- data/app/models/sfx_db/target_service.rb +0 -10
- data/app/models/sfx_db/title.rb +0 -10
- data/app/views/export_email/_email.html.erb +0 -25
- data/app/views/export_email/_send_email.html.erb +0 -3
- data/app/views/export_email/_send_txt.html.erb +0 -3
- data/app/views/export_email/_txt.html.erb +0 -62
- data/lib/holding.rb +0 -32
- data/lib/opensearch_feed.rb +0 -398
- data/lib/opensearch_query.rb +0 -98
- data/lib/referent_filters/dissertation_catch.rb +0 -45
- data/lib/service_adaptors/journal_tocs.progress +0 -68
- data/lib/service_adaptors/primo_service.rb +0 -452
- data/lib/service_adaptors/primo_source.rb +0 -82
- data/lib/umlaut/default_configuration.rb +0 -5
- data/test/dummy/config/primo.yml +0 -271
- data/test/unit/primo_service_test.rb +0 -947
@@ -0,0 +1,34 @@
|
|
1
|
+
# +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+------------------------+-----------------------------+
|
2
|
+
# | Field | Type | Null | Key | Default | Extra |
|
3
|
+
# +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+------------------------+-----------------------------+
|
4
|
+
# | OBJECT_ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
|
5
|
+
# | OBJECT_TYPE | enum('JOURNAL','BOOK','DISSERTATION','PROCEEDING','CONFERENCE','REPORT','DOCUMENT','SERIES','NEWSPAPER','TRANSCRIPT','DATABASE','WIRE','CD','MANUSCRIPT') | YES | MUL | NULL | |
|
6
|
+
# | LANGUAGE | char(3) | NO | MUL | eng | |
|
7
|
+
# | PEER_REVIEWED | enum('YES','NO') | YES | | NO | |
|
8
|
+
# | OWNER | varchar(100) | NO | | | |
|
9
|
+
# | AVAILABLE_FOR | varchar(100) | NO | | | |
|
10
|
+
# | ATTR_XML | mediumtext | YES | | NULL | |
|
11
|
+
# | MMS_ID | bigint(20) unsigned | NO | | NULL | |
|
12
|
+
# | STATUS | enum('ACTIVE','WITHDRAWN') | YES | | ACTIVE | |
|
13
|
+
# | STATUS_DATE | timestamp | NO | | 0000-00-00 00:00:00 | |
|
14
|
+
# | DISTRIBUTION_STATUS | enum('READY FOR DISTRIBUTION','NOT FOR DISTRIBUTION') | YES | | READY FOR DISTRIBUTION | |
|
15
|
+
# | DISTRIBUTION_STATUS_DATE | timestamp | NO | | 0000-00-00 00:00:00 | |
|
16
|
+
# | VERSION_NUMBER | int(10) | NO | | 1 | |
|
17
|
+
# | RELEASE_NUMBER | int(10) | NO | | 1 | |
|
18
|
+
# | CRUD_TYPE | enum('CREATE','UPDATE','DELETE') | NO | | CREATE | |
|
19
|
+
# | CREATION_DATE | timestamp | NO | | 0000-00-00 00:00:00 | |
|
20
|
+
# | CREATED_BY | varchar(255) | NO | | | |
|
21
|
+
# | LAST_UPDATE_DATE | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
|
22
|
+
# | LAST_UPDATED_BY | varchar(255) | NO | | | |
|
23
|
+
# +--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+------------------------+-----------------------------+
|
24
|
+
module Sfx4
|
25
|
+
module Global
|
26
|
+
class KbObject < Sfx4::Global::Base
|
27
|
+
self.table_name = 'KB_OBJECTS'
|
28
|
+
self.primary_key = 'OBJECT_ID'
|
29
|
+
|
30
|
+
has_many :az_titles,
|
31
|
+
:foreign_key=>'OBJECT_ID'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Sfx4
|
2
|
+
module Local
|
3
|
+
class Base < ActiveRecord::Base
|
4
|
+
attr_accessible
|
5
|
+
|
6
|
+
# Was a SFX DB connection set in database.yml to connect directly to sfx?
|
7
|
+
def self.connection_configured?
|
8
|
+
config = ActiveRecord::Base.configurations["sfx_db"]
|
9
|
+
(not (config.nil? or config.blank? or config["adapter"].blank?))
|
10
|
+
end
|
11
|
+
|
12
|
+
self.establish_connection :sfx_db if self.connection_configured?
|
13
|
+
|
14
|
+
# ActiveRecord likes it when we tell it this is an abstract
|
15
|
+
# class only.
|
16
|
+
self.abstract_class = true
|
17
|
+
|
18
|
+
extend Sfx4::Abstract::Base
|
19
|
+
|
20
|
+
# All SFX things are read-only!
|
21
|
+
def readonly?()
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -313,18 +313,6 @@ class SectionRenderer
|
|
313
313
|
(! show_partial_only?) && @options[:show_heading]
|
314
314
|
end
|
315
315
|
|
316
|
-
def render_heading
|
317
|
-
content_tag(:div, :class=>"section_heading")
|
318
|
-
|
319
|
-
output = ''
|
320
|
-
|
321
|
-
output <<= '<div class="section_heading">'
|
322
|
-
(output <<= '<h3>' << CGI::escapeHTML(section_title) << '</h3>') if section_title
|
323
|
-
(output <<= '<p class="section_prompt">' << CGI::escapeHTML(section_prompt) << '</p>') if section_prompt
|
324
|
-
output <<= '</div>'
|
325
|
-
|
326
|
-
output.html_safe
|
327
|
-
end
|
328
316
|
|
329
317
|
def show_spinner?
|
330
318
|
(! show_partial_only?) && @options[:show_spinner] &&
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class DissertationCatch < ReferentFilter
|
2
|
+
include MetadataHelper
|
3
|
+
|
4
|
+
# ISSNs taken from http://spotdocs.scholarsportal.info/display/sfxdocs/SFX+and+Dissertations
|
5
|
+
@@da_issns = []
|
6
|
+
@@da_issns << "00994375" # Microfilm abstracts
|
7
|
+
@@da_issns << "00993123" # Dissertation abstracts
|
8
|
+
@@da_issns << "0420073X" # Dissertation abstracts. B, The sciences and engineering
|
9
|
+
@@da_issns << "00959154" # Dissertation abstracts. A, The humanities and social sciences
|
10
|
+
@@da_issns << "04194209" # Dissertation abstracts. A, The humanities and social sciences
|
11
|
+
@@da_issns << "04194217" # Dissertation abstracts. A, The humanities and social sciences
|
12
|
+
@@da_issns << "03076075" # Dissertation abstracts international. C, European abstracts
|
13
|
+
@@da_issns << "10427279" # Dissertation abstracts international. C, Worldwide
|
14
|
+
@@da_issns << "00255106" # Masters abstracts
|
15
|
+
@@da_issns << "08989095" # Masters abstracts international
|
16
|
+
@@da_issns << "1086962X" # Dissertation summaries in mathematics
|
17
|
+
@@da_issns << "10644687" # Dissertation abstracts ondisc
|
18
|
+
@@da_issns << "03616657" # Comprehensive dissertation index. Supplement
|
19
|
+
@@da_issns << "10869700" # Dissertation summaries in chemical engineering
|
20
|
+
@@da_issns << "10869689" # Dissertation summaries in computer sciences
|
21
|
+
@@da_issns << "10869697" # Dissertation summaries in electrical engineering
|
22
|
+
@@da_issns << "10869670" # Dissertation summaries in mechanical engineering
|
23
|
+
# plus one more we've been using
|
24
|
+
@@da_issns << "00993123" # Dissertation Abstracts
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
# input: ropenurl ContextObject
|
29
|
+
# Is this a citation to a Dissertation Abstracts
|
30
|
+
# issn, or do we otherwise think it's a dissertation citation? Then change
|
31
|
+
# it to a dissertation citation.
|
32
|
+
def filter(referent)
|
33
|
+
issn = get_identifier(:urn, "issn", referent)
|
34
|
+
|
35
|
+
return unless issn
|
36
|
+
|
37
|
+
# normalize removing hyphen
|
38
|
+
issn.gsub!('-', '')
|
39
|
+
|
40
|
+
if ( @@da_issns.find { |i| i == issn } )
|
41
|
+
# || lc($jtitle) =~ /dissertation/i || lc($jtitle2) =~ /dissertation/i)
|
42
|
+
|
43
|
+
referent.enhance_referent("genre", "dissertation")
|
44
|
+
|
45
|
+
metadata = referent.metadata
|
46
|
+
# Reset it's title to the dissertation title
|
47
|
+
title = metadata['atitle'] || metadata['title']
|
48
|
+
referent.enhance_referent("btitle", title)
|
49
|
+
referent.enhance_referent("title", title, true, false, :overwrite => true)
|
50
|
+
# Now erase titles that do not apply
|
51
|
+
referent.remove_value("atitle")
|
52
|
+
referent.remove_value("jtitle")
|
53
|
+
referent.remove_value("stitle")
|
54
|
+
# issn or isbn are wrong, probably point to Dissertation Abstracts
|
55
|
+
referent.remove_value("issn")
|
56
|
+
referent.remove_value("isbn")
|
57
|
+
# Same with all article level metadata
|
58
|
+
referent.remove_value("volume")
|
59
|
+
referent.remove_value("issue")
|
60
|
+
referent.remove_value("issue_start")
|
61
|
+
referent.remove_value("spage")
|
62
|
+
referent.remove_value("epage")
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
File without changes
|
File without changes
|
@@ -70,7 +70,7 @@ class Blacklight < Service
|
|
70
70
|
def handle(request)
|
71
71
|
ids_processed = []
|
72
72
|
holdings_added = 0
|
73
|
-
|
73
|
+
|
74
74
|
if (@identifier_search && url = blacklight_precise_search_url(request) )
|
75
75
|
doc = Nokogiri::XML( http_fetch(url).body )
|
76
76
|
|
@@ -98,7 +98,8 @@ class Blacklight < Service
|
|
98
98
|
# filter out matches whose titles don't really match at all, or
|
99
99
|
# which have already been seen in identifier search.
|
100
100
|
entries = filter_keyword_entries( doc.xpath("atom:feed/atom:entry", xml_ns) , :exclude_ids => ids_processed, :remove_subtitle => (! title_is_serial?(request.referent)) )
|
101
|
-
|
101
|
+
|
102
|
+
|
102
103
|
marc_by_atom_id = {}
|
103
104
|
|
104
105
|
# Grab the marc from our entries. Important not to do a // xpath
|
@@ -196,7 +197,13 @@ class Blacklight < Service
|
|
196
197
|
# We need both title and author to search keyword style, or
|
197
198
|
# we get too many false positives. Except serials we'll do
|
198
199
|
# title only. sigh, logic tree.
|
199
|
-
|
200
|
+
|
201
|
+
# Also need to use appropriate 'container' title if avail, not
|
202
|
+
# article title.
|
203
|
+
title = request.referent['jtitle']
|
204
|
+
title = request.referent['btitle'] if title.blank?
|
205
|
+
title = request.referent['title'] if title.blank?
|
206
|
+
|
200
207
|
author = get_top_level_creator(request.referent)
|
201
208
|
return nil unless title && (author || (@bl_fields["serials_limit_clause"] && title_is_serial?(request.referent)))
|
202
209
|
# phrase search for title, just raw dismax for author
|
@@ -273,24 +280,29 @@ class Blacklight < Service
|
|
273
280
|
def filter_keyword_entries(atom_entries, options = {})
|
274
281
|
options[:exclude_ids] ||= []
|
275
282
|
options[:remove_subtitle] ||= true
|
283
|
+
|
284
|
+
title = request.referent['jtitle']
|
285
|
+
title = request.referent['btitle'] if title.blank?
|
286
|
+
title = request.referent['title'] if title.blank?
|
287
|
+
|
276
288
|
request_title_forms = [
|
277
|
-
|
278
|
-
normalize_title(
|
289
|
+
title.downcase,
|
290
|
+
normalize_title( title )
|
279
291
|
]
|
280
|
-
request_title_forms << normalize_title(
|
281
|
-
request_title_forms.compact
|
292
|
+
request_title_forms << normalize_title( title, :remove_subtitle => true) if options[:remove_subtitle]
|
293
|
+
request_title_forms = request_title_forms.compact.uniq
|
282
294
|
|
283
295
|
# Only keep entries with title match, and that aren't in the
|
284
296
|
# exclude_ids list.
|
285
297
|
good_entries = atom_entries.find_all do |atom_entry|
|
286
|
-
title = atom_entry.xpath("atom:title/text()", xml_ns).
|
298
|
+
title = atom_entry.xpath("atom:title/text()", xml_ns).text
|
287
299
|
|
288
300
|
entry_title_forms = [
|
289
301
|
title.downcase,
|
290
302
|
normalize_title(title)
|
291
303
|
]
|
292
304
|
entry_title_forms << normalize_title(title, :remove_subtitle=>true) if options[:remove_subtitle]
|
293
|
-
entry_title_forms.compact
|
305
|
+
entry_title_forms = entry_title_forms.compact.uniq
|
294
306
|
|
295
307
|
((entry_title_forms & request_title_forms).length > 0 &&
|
296
308
|
(bib_ids_from_atom_entries(atom_entry) & options[:exclude_ids]).length == 0)
|
@@ -310,7 +322,7 @@ class Blacklight < Service
|
|
310
322
|
|
311
323
|
return base_url + "?search_field=#{@cql_search_field}&content_format=#{format}&q=" + CGI.escape("#{@bl_fields["id"]} any \"#{ids.join(" ")}\"")
|
312
324
|
end
|
313
|
-
|
325
|
+
|
314
326
|
|
315
327
|
def get_solr_id(rft)
|
316
328
|
rft.identifiers.each do |id|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Generates a LINK to search google scholar for the requested article.
|
2
|
+
# G.Scholar has no API, all we can do is link out.
|
3
|
+
#
|
4
|
+
# Will only generate link for citations that appear article-level
|
5
|
+
# and have author and title.
|
6
|
+
#
|
7
|
+
# You probably want to only execute if there is no found fulltext, by configuring
|
8
|
+
# in umlaut_services.yml with:
|
9
|
+
#
|
10
|
+
# preempted_by:
|
11
|
+
# existing_type: fulltext
|
12
|
+
#
|
13
|
+
# It will only be preempted by fulltext created in earlier waves of service
|
14
|
+
# execution, service order 'priority' matters.
|
15
|
+
#
|
16
|
+
# optional config: service_type, defaults to 'highlighted_link', but maybe
|
17
|
+
# you want it actually under 'fulltext' or something.
|
18
|
+
class GoogleScholarLink < Service
|
19
|
+
|
20
|
+
|
21
|
+
def initialize(config)
|
22
|
+
@service_type = "highlighted_link"
|
23
|
+
@display_name = "Google Scholar"
|
24
|
+
|
25
|
+
super(config)
|
26
|
+
end
|
27
|
+
|
28
|
+
def service_types_generated
|
29
|
+
[ServiceTypeValue[@service_type]]
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def handle(request)
|
34
|
+
return request.dispatched(self, true) unless should_link_out_to?(request)
|
35
|
+
|
36
|
+
link = "http://scholar.google.com/scholar?q=#{CGI.escape construct_query(request)}"
|
37
|
+
|
38
|
+
request.add_service_response(
|
39
|
+
:service => self,
|
40
|
+
:display_text => "Look for article on Google Scholar",
|
41
|
+
:url => link,
|
42
|
+
:service_type_value => @service_type,
|
43
|
+
:notes => "This article <b>may</b> be available on the public web, look for links labelled <span class='gscholar_example'>[html]</span> or <span class='gscholar_example'>[pdf]</span>".html_safe
|
44
|
+
)
|
45
|
+
|
46
|
+
return request.dispatched(self, true)
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def construct_query(request)
|
51
|
+
metadata = request.referent.metadata
|
52
|
+
|
53
|
+
title_query = "allintitle: \"#{metadata["atitle"]}\""
|
54
|
+
|
55
|
+
author_query = (metadata["aulast"] || metadata["au"]).strip.split(/\s+|[[:punct:]]+/).
|
56
|
+
reject {|term| term.length <= 3}.
|
57
|
+
collect { |term| "author:#{term}" }.join(" ")
|
58
|
+
|
59
|
+
"#{title_query} #{author_query}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def should_link_out_to?(request)
|
63
|
+
return false unless (! request.title_level_citation?)
|
64
|
+
|
65
|
+
metadata = request.referent.metadata
|
66
|
+
|
67
|
+
metadata["atitle"] && (metadata["au"] || metadata["aulast"])
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -18,6 +18,8 @@
|
|
18
18
|
# http://scientific.thomson.com/scientific/techsupport/cpe/form.html.
|
19
19
|
# to request a change.
|
20
20
|
#
|
21
|
+
# File support/outage tickets at http://ip-science.thomsonreuters.com/support/
|
22
|
+
#
|
21
23
|
# Note, as of 13 april 09, there's a bug in ISI where journal titles including
|
22
24
|
# ampersands cause an error. We will catch those errors and output a 'warning'
|
23
25
|
# instead of an 'error', since it's a known problem.
|
@@ -61,7 +63,16 @@ class Isi < Service
|
|
61
63
|
|
62
64
|
|
63
65
|
begin
|
64
|
-
|
66
|
+
#raise if it's an error HTTP response
|
67
|
+
isi_response.value
|
68
|
+
|
69
|
+
response_xml = Nokogiri::XML(isi_response.body)
|
70
|
+
# Check for errors.
|
71
|
+
if (error = (response_xml.at('val[@name = "error"]') || response_xml.at("error") || response_xml.at('null[@name = "error"]')))
|
72
|
+
raise IsiResponseException.new("ISI service reported error: #{error.inner_text}")
|
73
|
+
end
|
74
|
+
|
75
|
+
add_responses( request, response_xml )
|
65
76
|
rescue IsiResponseException => e
|
66
77
|
# Is this the known problem with ampersands?
|
67
78
|
# if so, output a warning, but report success not exception,
|
@@ -73,7 +84,14 @@ class Isi < Service
|
|
73
84
|
return request.dispatched(self, true)
|
74
85
|
else
|
75
86
|
# Log the error, return exception condition.
|
76
|
-
|
87
|
+
|
88
|
+
error_parts = []
|
89
|
+
error_parts << "ISI URI: #{@api_url}"
|
90
|
+
error_parts << "Request XML: #{xml}"
|
91
|
+
error_parts << "ISI Response body: #{response_xml}"
|
92
|
+
|
93
|
+
|
94
|
+
Rails.logger.error("#{e.message} ; " + error_parts.join("\n ") )
|
77
95
|
return request.dispatched(self, false, e)
|
78
96
|
end
|
79
97
|
end
|
@@ -193,17 +211,8 @@ class Isi < Service
|
|
193
211
|
return http.post(uri.request_uri, xml, headers)
|
194
212
|
end
|
195
213
|
|
196
|
-
def add_responses(request,
|
197
|
-
|
198
|
-
isi_response.value
|
199
|
-
|
200
|
-
response_xml = Nokogiri::XML(isi_response.body)
|
201
|
-
|
202
|
-
# Check for errors.
|
203
|
-
if (error = (response_xml.at('val[@name = "error"]') || response_xml.at("error") || response_xml.at('null[@name = "error"]')))
|
204
|
-
raise IsiResponseException.new("ISI service reported error: #{error.inner_text}")
|
205
|
-
end
|
206
|
-
|
214
|
+
def add_responses(request, response_xml)
|
215
|
+
|
207
216
|
results = response_xml.at('map[@name ="cite_id"] map[@name="WOS"]')
|
208
217
|
unless (results)
|
209
218
|
error_message = "#{self.id}: "
|