umlaut 3.0.0alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +7 -0
- data/README.md +49 -0
- data/Rakefile +37 -0
- data/app/assets/images/error.gif +0 -0
- 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/book_open.png +0 -0
- data/app/assets/images/famfamfam/cross.png +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/famfamfam/page_white.png +0 -0
- data/app/assets/images/famfamfam/readme.html +1495 -0
- data/app/assets/images/famfamfam/tiny_cross.png +0 -0
- data/app/assets/images/frame_remove.gif +0 -0
- data/app/assets/images/ico_go.gif +0 -0
- data/app/assets/images/jhu_findit.gif +0 -0
- data/app/assets/images/list_closed.png +0 -0
- data/app/assets/images/list_open.png +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/images/spinner.gif +0 -0
- data/app/assets/javascripts/umlaut/ajax_windows.js +35 -0
- data/app/assets/javascripts/umlaut/ensure_window_size.js.erb +34 -0
- data/app/assets/javascripts/umlaut/expand_contract_toggle.js +25 -0
- data/app/assets/javascripts/umlaut/search_autocomplete.js +46 -0
- data/app/assets/javascripts/umlaut/simple_visible_toggle.js +8 -0
- data/app/assets/javascripts/umlaut/update_html.js +152 -0
- data/app/assets/javascripts/umlaut.js +17 -0
- data/app/assets/stylesheets/umlaut.css +857 -0
- data/app/controllers/application_controller.rb +14 -0
- data/app/controllers/export_email_controller.rb +123 -0
- data/app/controllers/js_helper_controller.rb +10 -0
- data/app/controllers/link_router_controller.rb +87 -0
- data/app/controllers/open_search_controller.rb +9 -0
- data/app/controllers/resolve_controller.rb +288 -0
- data/app/controllers/resource_controller.rb +83 -0
- data/app/controllers/search_controller.rb +328 -0
- data/app/controllers/search_methods/sfx3.rb +148 -0
- data/app/controllers/search_methods/sfx4.rb +257 -0
- data/app/controllers/search_methods/sfx_api.rb +47 -0
- data/app/controllers/store_controller.rb +64 -0
- data/app/controllers/umlaut/controller_behavior.rb +20 -0
- data/app/controllers/umlaut/controller_logic.rb +96 -0
- data/app/controllers/umlaut/error_handling.rb +48 -0
- data/app/controllers/umlaut_controller.rb +112 -0
- data/app/helpers/application_helper.rb +4 -0
- data/app/helpers/emailer_helper.rb +43 -0
- data/app/helpers/export_email_helper.rb +34 -0
- data/app/helpers/open_search_helper.rb +7 -0
- data/app/helpers/resolve_helper.rb +225 -0
- data/app/helpers/search_helper.rb +50 -0
- data/app/helpers/umlaut/footer_helper.rb +64 -0
- data/app/helpers/umlaut/helper.rb +62 -0
- data/app/helpers/umlaut/html_head_helper.rb +37 -0
- data/app/helpers/umlaut/url_generation.rb +77 -0
- data/app/mailers/emailer.rb +48 -0
- data/app/models/clickthrough.rb +2 -0
- data/app/models/collection.rb +259 -0
- data/app/models/crossref_lookup.rb +2 -0
- data/app/models/dispatched_service.rb +58 -0
- data/app/models/permalink.rb +29 -0
- data/app/models/referent.rb +473 -0
- data/app/models/referent_value.rb +14 -0
- data/app/models/request.rb +449 -0
- data/app/models/service_response.rb +179 -0
- data/app/models/service_store.rb +59 -0
- data/app/models/service_type_value.rb +58 -0
- data/app/models/service_wave.rb +150 -0
- data/app/models/sfx_db/az_additional_title.rb +11 -0
- data/app/models/sfx_db/az_letter_group.rb +11 -0
- data/app/models/sfx_db/az_title.rb +38 -0
- data/app/models/sfx_db/az_title_v2.rb +34 -0
- data/app/models/sfx_db/isbn.rb +12 -0
- data/app/models/sfx_db/issn.rb +12 -0
- data/app/models/sfx_db/object.rb +35 -0
- data/app/models/sfx_db/object_portfolio.rb +6 -0
- data/app/models/sfx_db/publisher.rb +10 -0
- data/app/models/sfx_db/sfx_db_base.rb +54 -0
- data/app/models/sfx_db/target.rb +9 -0
- data/app/models/sfx_db/target_service.rb +10 -0
- data/app/models/sfx_db/title.rb +10 -0
- data/app/models/sfx_db.rb +10 -0
- data/app/models/sfx_url.rb +35 -0
- data/app/views/emailer/citation.text.erb +28 -0
- data/app/views/emailer/short_citation.text.erb +8 -0
- data/app/views/export_email/_email.html.erb +25 -0
- data/app/views/export_email/_send_email.html.erb +3 -0
- data/app/views/export_email/_send_txt.html.erb +3 -0
- data/app/views/export_email/_txt.html.erb +62 -0
- data/app/views/export_email/email.html.erb +3 -0
- data/app/views/export_email/send_email.html.erb +1 -0
- data/app/views/export_email/send_txt.html.erb +1 -0
- data/app/views/export_email/txt.html.erb +3 -0
- data/app/views/js_helper/loader.erb.js +13 -0
- data/app/views/layouts/umlaut.html.erb +52 -0
- data/app/views/open_search/index.html.erb +9 -0
- data/app/views/resolve/_api_in_progress.xml.erb +21 -0
- data/app/views/resolve/_background_progress.html.erb +51 -0
- data/app/views/resolve/_background_updater.html.erb +38 -0
- data/app/views/resolve/_citation.html.erb +87 -0
- data/app/views/resolve/_coins.html.erb +1 -0
- data/app/views/resolve/_compact_citation.html.erb +33 -0
- data/app/views/resolve/_cover_image.html.erb +35 -0
- data/app/views/resolve/_fulltext.html.erb +55 -0
- data/app/views/resolve/_help.html.erb +17 -0
- data/app/views/resolve/_holding.html.erb +91 -0
- data/app/views/resolve/_related_items.html.erb +35 -0
- data/app/views/resolve/_search_inside.html.erb +62 -0
- data/app/views/resolve/_section_display.html.erb +49 -0
- data/app/views/resolve/_service_errors.html.erb +29 -0
- data/app/views/resolve/_standard_response_item.html.erb +89 -0
- data/app/views/resolve/api.xml.builder +72 -0
- data/app/views/resolve/background_status.html.erb +26 -0
- data/app/views/resolve/index.html.erb +73 -0
- data/app/views/resolve/partial_html_sections.xml.erb +30 -0
- data/app/views/search/_a_to_z.html.erb +6 -0
- data/app/views/search/_citation.html.erb +94 -0
- data/app/views/search/_pager.html.erb +60 -0
- data/app/views/search/books.html.erb +103 -0
- data/app/views/search/journal_search.html.erb +90 -0
- data/app/views/search/journals.html.erb +167 -0
- data/app/views/search/opensearch_description.rxml +10 -0
- data/app/views/testing/index.html.erb +1 -0
- data/app/views/umlaut/README +5 -0
- data/app/views/umlaut/error.html.erb +45 -0
- data/db/migrate/01_umlaut_init.rb +113 -0
- data/db/orig_fixed_data/service_type_values.yml +120 -0
- data/db/seeds.rb +7 -0
- data/lib/CronTab.rb +192 -0
- data/lib/aws_product_sign.rb +146 -0
- data/lib/exlibris/aleph/patron.rb +64 -0
- data/lib/exlibris/aleph/record.rb +54 -0
- data/lib/exlibris/aleph/rest_api.rb +29 -0
- data/lib/exlibris/primo/holding.rb +192 -0
- data/lib/exlibris/primo/rsrc.rb +17 -0
- data/lib/exlibris/primo/searcher.rb +276 -0
- data/lib/exlibris/primo/source/aleph.rb +46 -0
- data/lib/exlibris/primo/source/distribution/nyu_aleph.rb +323 -0
- data/lib/exlibris/primo/toc.rb +17 -0
- data/lib/exlibris/primo_ws.rb +140 -0
- data/lib/generators/templates/umlaut_services.yml +237 -0
- data/lib/generators/umlaut/asset_hooks_generator.rb +44 -0
- data/lib/generators/umlaut/install_generator.rb +110 -0
- data/lib/hip3/bib.rb +291 -0
- data/lib/hip3/bib_searcher.rb +302 -0
- data/lib/hip3/custom_field_lookup.rb +44 -0
- data/lib/hip3/holding.rb +50 -0
- data/lib/hip3/item.rb +65 -0
- data/lib/hip3/receipt.rb +7 -0
- data/lib/hip3/serial_copy.rb +82 -0
- data/lib/holding.rb +32 -0
- data/lib/marc_helper.rb +254 -0
- data/lib/metadata_helper.rb +312 -0
- data/lib/opensearch_feed.rb +398 -0
- data/lib/opensearch_query.rb +98 -0
- data/lib/referent_filter.rb +16 -0
- data/lib/referent_filters/dissertation_catch.rb +45 -0
- data/lib/section_renderer.rb +503 -0
- data/lib/service.rb +336 -0
- data/lib/service_adaptors/ajax_export.rb +37 -0
- data/lib/service_adaptors/amazon.rb +412 -0
- data/lib/service_adaptors/blacklight.rb +327 -0
- data/lib/service_adaptors/book_finder.rb +40 -0
- data/lib/service_adaptors/bx.rb +51 -0
- data/lib/service_adaptors/cover_thing.rb +73 -0
- data/lib/service_adaptors/elsevier_cover.rb +57 -0
- data/lib/service_adaptors/email_export.rb +10 -0
- data/lib/service_adaptors/ezproxy.rb +171 -0
- data/lib/service_adaptors/google_book_search.rb +442 -0
- data/lib/service_adaptors/gpo.rb +124 -0
- data/lib/service_adaptors/hathi_trust.rb +308 -0
- data/lib/service_adaptors/hip3_service.rb +150 -0
- data/lib/service_adaptors/hip_holding_search.rb +237 -0
- data/lib/service_adaptors/internet_archive.rb +488 -0
- data/lib/service_adaptors/isbn_db.rb +86 -0
- data/lib/service_adaptors/isi.rb +258 -0
- data/lib/service_adaptors/jcr.rb +146 -0
- data/lib/service_adaptors/opac.rb +351 -0
- data/lib/service_adaptors/open_library.rb +316 -0
- data/lib/service_adaptors/open_library_cover.rb +73 -0
- data/lib/service_adaptors/primo_service.rb +392 -0
- data/lib/service_adaptors/primo_source.rb +78 -0
- data/lib/service_adaptors/pubmed.rb +133 -0
- data/lib/service_adaptors/request_to_fixture.rb +68 -0
- data/lib/service_adaptors/scopus.rb +295 -0
- data/lib/service_adaptors/sfx-new.rb +557 -0
- data/lib/service_adaptors/sfx.rb +566 -0
- data/lib/service_adaptors/sfx_backchannel_record.rb +69 -0
- data/lib/service_adaptors/txt_holding_export.rb +32 -0
- data/lib/service_adaptors/ulrichs_cover.rb +57 -0
- data/lib/service_adaptors/ulrichs_link.rb +47 -0
- data/lib/service_adaptors/worldcat.rb +116 -0
- data/lib/service_adaptors/worldcat_identities.rb +591 -0
- data/lib/tasks/umlaut.rake +134 -0
- data/lib/umlaut/default_configuration.rb +5 -0
- data/lib/umlaut/routes.rb +136 -0
- data/lib/umlaut/version.rb +3 -0
- data/lib/umlaut.rb +37 -0
- data/lib/umlaut_configurable.rb +343 -0
- data/lib/umlaut_http.rb +100 -0
- data/lib/xml_schema_helper.rb +109 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/umlaut_controller.rb +112 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +45 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database-jhu.yml +44 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +34 -0
- data/test/dummy/config/environments/production.rb +60 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +61 -0
- data/test/dummy/config/umlaut_services.yml +237 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20111228211210_umlaut_init.rb +113 -0
- data/test/dummy/db/schema.rb +124 -0
- data/test/dummy/log/development.log +12981 -0
- data/test/dummy/log/production.log +0 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +26 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -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/C73/920/sprockets%2Fd371318f22900492fd180f17c5e2a504 +9268 -0
- data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
- data/test/dummy/tmp/cache/assets/C8F/780/sprockets%2Fe47e28558116fb5f8038754e60d1961d +11769 -0
- data/test/dummy/tmp/cache/assets/CAA/EB0/sprockets%2F1d179210e8b76f1ea63c802688a015e4 +9271 -0
- data/test/dummy/tmp/cache/assets/CBB/9C0/sprockets%2F706f28923fb754cad04b9107c89986a1 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
- data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
- data/test/dummy/tmp/cache/assets/CF6/F20/sprockets%2F5b2ffa1103079dfd555197838f87a99f +0 -0
- data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +862 -0
- data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
- data/test/dummy/tmp/cache/assets/D22/060/sprockets%2F9aec77b768e91a802d284271c58e2f7e +21357 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D33/6D0/sprockets%2F500129c57f1146e556ec3aacd6cd38c1 +0 -0
- data/test/dummy/tmp/cache/assets/D33/FD0/sprockets%2F2ba0b4e6334a77b923e5f770381bb2bf +0 -0
- data/test/dummy/tmp/cache/assets/D42/C20/sprockets%2Fbcf14e437b1582bf93b77670acf8e090 +21353 -0
- data/test/dummy/tmp/cache/assets/D50/A30/sprockets%2F7d8b294ac433db5d056538f8cf7c66b9 +0 -0
- data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +872 -0
- data/test/dummy/tmp/cache/assets/D65/590/sprockets%2Fc1bb92fc3406a126b7dd302edc96d629 +0 -0
- data/test/dummy/tmp/cache/assets/D71/6B0/sprockets%2Fde558b71b494cf09b1bf055c8dff0353 +0 -0
- data/test/dummy/tmp/cache/assets/D72/610/sprockets%2Fa8c708eeb30ef93de34d755d4f45d023 +859 -0
- data/test/dummy/tmp/cache/assets/D76/AD0/sprockets%2Fe2158cde93188cf5ab6457bc6d6602ec +0 -0
- data/test/dummy/tmp/cache/assets/D7A/E40/sprockets%2F9622ffcc499a57627cd1bb18fe31b8e4 +11772 -0
- data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
- data/test/dummy/tmp/cache/assets/D9B/770/sprockets%2F8aacf02eb7dbb0949704b28f27b87e0b +0 -0
- data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
- data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
- data/test/dummy/tmp/cache/assets/DF7/F30/sprockets%2F7bc16c4109b17fabe29f8ddbbf732d1c +374 -0
- data/test/dummy/tmp/cache/assets/E03/570/sprockets%2F493bdc0ac14cd4f57fdfe4253f992bde +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E0B/4B0/sprockets%2F7988df51a61c81ce6ede4a2d4c8cce4f +377 -0
- data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
- data/test/fixtures/dispatched_services.yml +5 -0
- data/test/fixtures/permalinks.yml +5 -0
- data/test/fixtures/referent_values.yml +1734 -0
- data/test/fixtures/referents.yml +156 -0
- data/test/fixtures/requests.yml +284 -0
- data/test/fixtures/service_responses.yml +5 -0
- data/test/fixtures/sfx_urls.yml +4 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +10 -0
- data/test/umlaut_test.rb +7 -0
- data/test/unit/aleph_patron_test.rb +39 -0
- data/test/unit/aleph_record_benchmarks.rb +28 -0
- data/test/unit/aleph_record_test.rb +30 -0
- data/test/unit/aws_product_sign_test.rb +93 -0
- data/test/unit/collection_test.rb +76 -0
- data/test/unit/google_book_search_test.rb +101 -0
- data/test/unit/primo_searcher_test.rb +403 -0
- data/test/unit/primo_service_test.rb +939 -0
- data/test/unit/primo_ws_test.rb +131 -0
- data/test/unit/service_response_test.rb +9 -0
- data/test/unit/service_test.rb +33 -0
- metadata +580 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
module SfxDb
|
2
|
+
class AzTitle < SfxDbBase
|
3
|
+
self.table_name = 'AZ_TITLE_VER3'
|
4
|
+
self.primary_key = 'AZ_TITLE_VER3_ID'
|
5
|
+
|
6
|
+
belongs_to :object,
|
7
|
+
:foreign_key => 'OBJECT_ID',
|
8
|
+
:class_name => "SfxDb::Object"
|
9
|
+
|
10
|
+
has_many :az_additional_titles,
|
11
|
+
:foreign_key => 'AZ_TITLE_VER3_ID'
|
12
|
+
has_many :az_letter_groups,
|
13
|
+
:foreign_key => 'AZ_TITLE_VER3_ID'
|
14
|
+
|
15
|
+
|
16
|
+
def to_context_object
|
17
|
+
#require 'openurl'
|
18
|
+
co = OpenURL::ContextObject.new
|
19
|
+
# Make sure it uses a journal type referent please, that's what we've
|
20
|
+
# got here.
|
21
|
+
co.referent = OpenURL::ContextObjectEntity.new_from_format( 'info:ofi/fmt:xml:xsd:journal' )
|
22
|
+
|
23
|
+
|
24
|
+
co.referent.set_metadata('jtitle', self.TITLE_DISPLAY)
|
25
|
+
co.referent.set_metadata('object_id', self.OBJECT_ID.to_s)
|
26
|
+
|
27
|
+
# Add publisher stuff, if possible.
|
28
|
+
pub = self.object ? self.object.publishers.first : nil
|
29
|
+
if ( pub )
|
30
|
+
co.referent.set_metadata('pub', pub.PUBLISHER_DISPLAY )
|
31
|
+
co.referent.set_metadata('place', pub.PLACE_OF_PUBLICATION_DISPLAY)
|
32
|
+
end
|
33
|
+
|
34
|
+
return co
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# The SFX A-Z "version 2" title table.
|
2
|
+
|
3
|
+
module SfxDb
|
4
|
+
class AzTitleV2 < SfxDbBase
|
5
|
+
self.table_name = 'AZ_TITLE'
|
6
|
+
self.primary_key = 'OBJECT_ID' # This is a lie, it's really a compound pk, but it works anyway for what we need. Rails doesn't do compound pks formally.
|
7
|
+
|
8
|
+
belongs_to :object,
|
9
|
+
:foreign_key => 'OBJECT_ID',
|
10
|
+
:class_name => "SfxDb::Object"
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
def to_context_object
|
15
|
+
co = OpenURL::ContextObject.new
|
16
|
+
# Make sure it uses a journal type referent please, that's what we've
|
17
|
+
# got here.
|
18
|
+
co.referent = OpenURL::ContextObjectEntity.new_from_format( 'info:ofi/fmt:xml:xsd:journal' )
|
19
|
+
|
20
|
+
co.referent.set_metadata('jtitle', self.TITLE_DISPLAY)
|
21
|
+
co.referent.set_metadata('object_id', self.OBJECT_ID.to_s)
|
22
|
+
|
23
|
+
# Add publisher stuff, if possible.
|
24
|
+
pub = self.object.publishers.first
|
25
|
+
if ( pub )
|
26
|
+
co.referent.set_metadata('pub', pub.PUBLISHER_DISPLAY )
|
27
|
+
co.referent.set_metadata('place', pub.PLACE_OF_PUBLICATION_DISPLAY)
|
28
|
+
end
|
29
|
+
|
30
|
+
return co
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module SfxDb
|
2
|
+
class Object < SfxDbBase
|
3
|
+
self.table_name = "OBJECT"
|
4
|
+
self.primary_key = "OBJECT_ID"
|
5
|
+
|
6
|
+
#has_many :issns,
|
7
|
+
# :foreign_key => 'OBJECT_ID'
|
8
|
+
has_many :titles,
|
9
|
+
:foreign_key => 'OBJECT_ID',
|
10
|
+
:class_name => 'SfxDb::Title'
|
11
|
+
|
12
|
+
has_many :publishers,
|
13
|
+
:foreign_key => 'OBJECT_ID',
|
14
|
+
:class_name => 'SfxDb::Publisher'
|
15
|
+
|
16
|
+
has_many :az_titles,
|
17
|
+
:foreign_key=>'OBJECT_ID',
|
18
|
+
:class_name => 'SfxDb::AzTitle'
|
19
|
+
|
20
|
+
has_many :primary_isbns,
|
21
|
+
:class_name => 'SfxDb::Isbn',
|
22
|
+
:foreign_key => 'OBJECT_ID',
|
23
|
+
:conditions => "ISBN_HIERARCHY = 'PRIMARY'"
|
24
|
+
|
25
|
+
has_many :primary_issns,
|
26
|
+
:class_name => 'SfxDb::Issn',
|
27
|
+
:foreign_key => 'OBJECT_ID',
|
28
|
+
:conditions => "ISSN_HIERARCHY = 'PRIMARY'"
|
29
|
+
|
30
|
+
has_many :main_titles,
|
31
|
+
:class_name => 'SfxDb::Title',
|
32
|
+
:foreign_key => 'OBJECT_ID',
|
33
|
+
:conditions => "TITLE_TYPE = 'main'"
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module SfxDb
|
2
|
+
class SfxDbBase < ActiveRecord::Base
|
3
|
+
# This guy uses a different db connection. We can establish that here, on
|
4
|
+
# class-load. Please define an sfx_db database in databases.yml!
|
5
|
+
# Some utility methods are also located in this class.
|
6
|
+
begin
|
7
|
+
if SfxDb.connection_configured?
|
8
|
+
self.establish_connection :sfx_db
|
9
|
+
end
|
10
|
+
rescue ActiveRecord::ActiveRecordError => e
|
11
|
+
# Make it more descriptive for the newbies.
|
12
|
+
new_e = e.class.new(e.message + ": SfxDb classes require you to specify a database connection called sfx_db in your config/databases.yml.")
|
13
|
+
new_e.set_backtrace( e.backtrace )
|
14
|
+
raise new_e
|
15
|
+
end
|
16
|
+
|
17
|
+
# All SfxDb things are read-only!
|
18
|
+
def readonly?()
|
19
|
+
return true
|
20
|
+
end
|
21
|
+
|
22
|
+
# Atttempts to extract all URLs that SFX knows about from the db.
|
23
|
+
# This process is not 100%, becuase of the way SFX calculates URLs
|
24
|
+
# on the fly. We are only grabbing them from the db--and even the
|
25
|
+
# way they are stored in the db is hard for us to grab reliably!
|
26
|
+
# So this is really just a kind of guess heuristic in a bunch
|
27
|
+
# of ways.
|
28
|
+
# But we do our best, and use this to load the SfxUrl model.
|
29
|
+
def self.fetch_sfx_urls
|
30
|
+
# Fetch all target services that look like they might have a URL
|
31
|
+
# in the parse param, and that are active. We know this misses ones
|
32
|
+
# that are just active for certain institutes! Known defect.
|
33
|
+
target_services = TargetService.find(:all, :conditions => "PARSE_PARAM like '%.%' and AVAILABILITY ='ACTIVE'")
|
34
|
+
|
35
|
+
# Same with object portfolios, which can also have urls hidden in em
|
36
|
+
object_portfolios = ObjectPortfolio.find(:all, :conditions => "PARSE_PARAM like '%.%' and AVAILABILITY = 'ACTIVE'")
|
37
|
+
|
38
|
+
urls = []
|
39
|
+
(target_services + object_portfolios).each do |db_row|
|
40
|
+
parse_param = db_row.PARSE_PARAM
|
41
|
+
|
42
|
+
# Try to get things that look sort of like URLs out. Brutal force,
|
43
|
+
# sorry.
|
44
|
+
url_re = Regexp.new('(https?://\S+\.\S+)(\s|$)')
|
45
|
+
urls.concat( parse_param.scan( url_re ).collect {|matches| matches[0]} )
|
46
|
+
|
47
|
+
end
|
48
|
+
urls.uniq!
|
49
|
+
return urls
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Just an indexed list of URLs extracted from SFX, urls we believe are
|
2
|
+
# sfx-controlled. Kind of an ugly hack, kind of duplicates the local journal
|
3
|
+
# index if in use, but we need it to suppress catalog URLs if they duplicate
|
4
|
+
# what SFX ought to control.
|
5
|
+
class SfxUrl < ActiveRecord::Base
|
6
|
+
|
7
|
+
# Pass in a string, we tell you if we think SFX controls this URL--
|
8
|
+
# that is, if the SFX KB handles resources at this URL, or not.
|
9
|
+
# It's really just a guess for a bunch of reasons, but best we can
|
10
|
+
# do. We just check hostname, which could create false positives.
|
11
|
+
# Checking entire URL won't work.
|
12
|
+
# Lots of things in SFX could create false negatives.
|
13
|
+
def self.sfx_controls_url?(url)
|
14
|
+
ActiveRecord::Base.connection_pool.with_connection do
|
15
|
+
# Does it match any of our supplementary configged strings or regexps?
|
16
|
+
UmlautController.umlaut_config.lookup!("sfx.additional_sfx_controlled_urls", []).each do |test|
|
17
|
+
'===' # will match a regexp or equality on a string
|
18
|
+
return true if test === url
|
19
|
+
end
|
20
|
+
|
21
|
+
begin
|
22
|
+
uri = URI.parse(url)
|
23
|
+
rescue
|
24
|
+
# Bad uri in catalog? Fine, we don't know SFX controls it.
|
25
|
+
return false;
|
26
|
+
end
|
27
|
+
host = uri.host
|
28
|
+
|
29
|
+
# If URI was malformed, just punt and say no.
|
30
|
+
return false unless host
|
31
|
+
|
32
|
+
return SfxUrl.find(:all, :conditions => ["url = ?", host]).length > 0
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Title: <%= @title%>
|
2
|
+
<%
|
3
|
+
unless @user_request.title_level_citation?
|
4
|
+
puts brief_citation(@user_request)
|
5
|
+
end
|
6
|
+
unless @fulltexts.nil? or @fulltexts.empty? %>
|
7
|
+
|
8
|
+
|
9
|
+
Electronic Versions:
|
10
|
+
|
11
|
+
<%
|
12
|
+
@fulltexts.each do |fulltext|
|
13
|
+
view_data = fulltext.view_data %>
|
14
|
+
* <%= view_data[:display_text] %>: <%= view_data[:url] %>
|
15
|
+
|
16
|
+
<%
|
17
|
+
end
|
18
|
+
end
|
19
|
+
unless @holdings.nil? or @holdings.empty? %>
|
20
|
+
|
21
|
+
|
22
|
+
Holdings:
|
23
|
+
|
24
|
+
<% @holdings.each do |holding| %>
|
25
|
+
<% target = holding.view_data %>
|
26
|
+
* <%= raw(target[:collection_str]) %> <%= raw(target[:call_number]) %> <%= raw(target[:status]) %>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<%
|
2
|
+
unless @user_request.nil?
|
3
|
+
cite = @user_request.referent.to_citation %>
|
4
|
+
|
5
|
+
<div class="inner_modal_dialog">
|
6
|
+
<%= form_tag({:controller => "export_email", :action => "send_email", :id => params[:id]}, :class => "modal_dialog_form" ) do %>
|
7
|
+
<h2>Email the title and locations</h2>
|
8
|
+
|
9
|
+
<div class="formError">
|
10
|
+
<%= @error || flash[:error] %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<h3><strong>Title:</strong> <%= h(cite[:title]) %>/<%= h(cite[:author]) %></h3>
|
14
|
+
<div>
|
15
|
+
<%= label_tag 'email', 'Enter your email address:' %>
|
16
|
+
<%= text_field_tag 'email', params[:email] %>
|
17
|
+
</div>
|
18
|
+
<div class="section">
|
19
|
+
<%= submit_tag 'Send!' %>
|
20
|
+
</div>
|
21
|
+
<%
|
22
|
+
end
|
23
|
+
end
|
24
|
+
%>
|
25
|
+
</div>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<%
|
2
|
+
unless @user_request.nil?
|
3
|
+
%>
|
4
|
+
|
5
|
+
<div class="inner_modal_dialog send_to_txt">
|
6
|
+
<%= form_tag( {:controller => "export_email", :action => "send_txt", :id => params[:id]}, :class => "modal_dialog_form" ) do %>
|
7
|
+
<h2>Send the title and location of an item to your mobile phone</h2>
|
8
|
+
|
9
|
+
<div class="formError">
|
10
|
+
<%= @error || flash[:error] %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<h3><strong>Title:</strong>
|
14
|
+
<%= h(brief_citation(@user_request)) %>
|
15
|
+
</h3>
|
16
|
+
<div class="section">
|
17
|
+
<%= label_tag('number', 'Enter your mobile phone number:') %>
|
18
|
+
|
19
|
+
<%= text_field_tag('number', params[:number], :size => 14) %>
|
20
|
+
<p class="smallText"><em>10 digit US cell phone number</em></p>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div class="section">
|
24
|
+
<%= label_tag('provider', 'Select your provider:') %>
|
25
|
+
<%
|
26
|
+
providers = @svc_response.service.instance_variable_get("@providers")
|
27
|
+
%>
|
28
|
+
<%= select_tag "provider", options_for_select(providers.sort, params[:provider]) %>
|
29
|
+
</div>
|
30
|
+
<%
|
31
|
+
holdings = @user_request.get_service_type('holding', {})
|
32
|
+
%>
|
33
|
+
<div class="section">
|
34
|
+
<p>Choose the item you want to send:</p>
|
35
|
+
<ul>
|
36
|
+
<%
|
37
|
+
holdings.each do |p|
|
38
|
+
target = p.view_data
|
39
|
+
%>
|
40
|
+
<li>
|
41
|
+
<%= radio_button_tag 'holding', p.id, (params[:holding].to_s == p.id.to_s) || holdings.length == 1 %>
|
42
|
+
<%= label_tag "holding_#{p.id}", formatted_html_holding_status(target) %>
|
43
|
+
</li>
|
44
|
+
<%
|
45
|
+
end
|
46
|
+
%>
|
47
|
+
</ul>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
|
51
|
+
<div class="section">
|
52
|
+
<p class="smallText"><em>Note: charges may apply if your service plan does not cover unlimited texting</em></p>
|
53
|
+
|
54
|
+
<%= submit_tag 'Send!' %>
|
55
|
+
|
56
|
+
|
57
|
+
</div>
|
58
|
+
<%
|
59
|
+
end
|
60
|
+
end
|
61
|
+
%>
|
62
|
+
</div>
|