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.
Files changed (555) hide show
  1. data/README.md +13 -12
  2. data/active_record_patch/connection_pool.rb +41 -449
  3. data/app/assets/javascripts/bootstrap3-typeahead.js +415 -0
  4. data/app/assets/javascripts/umlaut.js +8 -4
  5. data/app/assets/javascripts/umlaut/ajax_windows.js +15 -21
  6. data/app/assets/javascripts/umlaut/search_autocomplete.js +95 -90
  7. data/app/assets/javascripts/umlaut/update_html.js +12 -4
  8. data/app/assets/stylesheets/umlaut.css.scss +2 -4
  9. data/app/assets/stylesheets/umlaut/_az.scss +6 -6
  10. data/app/assets/stylesheets/umlaut/_forms.scss +21 -15
  11. data/app/assets/stylesheets/umlaut/_layout.scss +4 -5
  12. data/app/assets/stylesheets/umlaut/_misc.scss +12 -9
  13. data/app/assets/stylesheets/umlaut/_mixins.scss +2 -3
  14. data/app/assets/stylesheets/umlaut/_resolve.scss +45 -24
  15. data/app/assets/stylesheets/umlaut/_results.scss +7 -7
  16. data/app/assets/stylesheets/umlaut/_search.scss +16 -5
  17. data/app/assets/stylesheets/umlaut/_spinner.scss +1 -1
  18. data/app/assets/stylesheets/umlaut/_variables.scss +2 -2
  19. data/app/controllers/export_email_controller.rb +11 -4
  20. data/app/controllers/resolve_controller.rb +14 -30
  21. data/app/controllers/search_controller.rb +3 -8
  22. data/app/controllers/umlaut/controller_behavior.rb +30 -1
  23. data/app/controllers/umlaut/error_handling.rb +1 -1
  24. data/app/controllers/umlaut_configurable.rb +13 -10
  25. data/app/controllers/umlaut_controller.rb +4 -0
  26. data/app/helpers/emailer_helper.rb +10 -10
  27. data/app/helpers/export_email_helper.rb +1 -1
  28. data/app/helpers/resolve_helper.rb +3 -2
  29. data/app/helpers/search_helper.rb +26 -29
  30. data/app/helpers/umlaut/footer_helper.rb +4 -6
  31. data/app/helpers/umlaut/helper.rb +41 -7
  32. data/app/helpers/umlaut/url_generation.rb +10 -29
  33. data/app/mixin_logic/umlaut_http.rb +5 -2
  34. data/app/models/collection.rb +21 -6
  35. data/app/models/dispatched_service.rb +13 -0
  36. data/app/models/referent.rb +66 -88
  37. data/app/models/referent_value.rb +6 -5
  38. data/app/models/request.rb +35 -22
  39. data/app/models/service_response.rb +132 -66
  40. data/app/models/service_type_value.rb +22 -5
  41. data/app/models/service_wave.rb +30 -9
  42. data/app/models/sfx4/local/base.rb +0 -2
  43. data/app/models/sfx_url.rb +2 -2
  44. data/app/presentation/section_renderer.rb +68 -22
  45. data/app/service_adaptors/ajax_export.rb +1 -0
  46. data/app/service_adaptors/amazon.rb +7 -3
  47. data/app/service_adaptors/email_export.rb +1 -0
  48. data/app/service_adaptors/google_book_search.rb +8 -3
  49. data/app/service_adaptors/google_scholar_link.rb +6 -4
  50. data/app/service_adaptors/hathi_trust.rb +23 -18
  51. data/app/service_adaptors/hip_holding_search.rb +1 -1
  52. data/app/service_adaptors/internet_archive.rb +2 -0
  53. data/app/service_adaptors/isi.rb +2 -2
  54. data/app/service_adaptors/service.rb +31 -41
  55. data/app/service_adaptors/txt_holding_export.rb +3 -2
  56. data/app/service_adaptors/ulrichs_link.rb +5 -5
  57. data/app/service_adaptors/worldcat.rb +3 -1
  58. data/app/views/export_email/email.html.erb +10 -9
  59. data/app/views/export_email/send_txt.html.erb +4 -2
  60. data/app/views/export_email/txt.html.erb +44 -22
  61. data/app/views/feedback/new.html.erb +5 -5
  62. data/app/views/resolve/_background_progress.html.erb +23 -4
  63. data/app/views/resolve/_background_updater.html.erb +8 -8
  64. data/app/views/resolve/_citation.html.erb +11 -10
  65. data/app/views/resolve/_compact_citation.html.erb +3 -3
  66. data/app/views/resolve/_cover_image.html.erb +4 -4
  67. data/app/views/resolve/_fulltext.html.erb +1 -1
  68. data/app/views/resolve/_holding.html.erb +13 -13
  69. data/app/views/resolve/_manually_entered_warning.html.erb +9 -5
  70. data/app/views/resolve/_modal.html.erb +19 -15
  71. data/app/views/resolve/_search_inside.html.erb +20 -17
  72. data/app/views/resolve/_service_errors.html.erb +6 -6
  73. data/app/views/resolve/_standard_response_item.html.erb +7 -7
  74. data/app/views/resolve/get_permalink.html.erb +2 -2
  75. data/app/views/resolve/index.html.erb +13 -11
  76. data/app/views/search/_citation.html.erb +16 -16
  77. data/app/views/search/_pager.html.erb +6 -6
  78. data/app/views/search/books.html.erb +59 -19
  79. data/app/views/search/journal_search.html.erb +11 -11
  80. data/app/views/search/journals.html.erb +33 -33
  81. data/app/views/umlaut/_header.html.erb +7 -1
  82. data/app/views/umlaut/error.html.erb +13 -14
  83. data/bin/umlaut +141 -0
  84. data/config/locales/da.yml +122 -0
  85. data/config/locales/en.yml +227 -4
  86. data/db/orig_fixed_data/service_type_values.yml +18 -7
  87. data/lib/generators/templates/umlaut_services.yml +1 -1
  88. data/lib/generators/umlaut/install_generator.rb +0 -12
  89. data/lib/generators/umlaut/remove_turbolinks_generator.rb +14 -0
  90. data/lib/generators/umlaut_app_template.rb +37 -0
  91. data/lib/umlaut.rb +29 -0
  92. data/lib/umlaut/routes.rb +34 -38
  93. data/lib/umlaut/version.rb +6 -1
  94. data/test/dummy/app/assets/javascripts/application.js +1 -1
  95. data/test/dummy/app/controllers/umlaut_controller.rb +4 -2
  96. data/test/dummy/config/application.rb +2 -1
  97. data/test/dummy/config/environments/development.rb +1 -3
  98. data/test/dummy/config/environments/test.rb +2 -2
  99. data/test/dummy/config/travis_database.yml +0 -14
  100. data/test/dummy/config/umlaut_services.yml +9 -0
  101. data/test/dummy/config/umlaut_services.yml-JH +289 -0
  102. data/test/dummy/config/umlaut_services.yml-TEST +250 -0
  103. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_alerts.scssc +0 -0
  104. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_badges.scssc +0 -0
  105. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_breadcrumbs.scssc +0 -0
  106. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_button-groups.scssc +0 -0
  107. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_buttons.scssc +0 -0
  108. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_carousel.scssc +0 -0
  109. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_close.scssc +0 -0
  110. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_code.scssc +0 -0
  111. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_component-animations.scssc +0 -0
  112. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_dropdowns.scssc +0 -0
  113. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_forms.scssc +0 -0
  114. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_glyphicons.scssc +0 -0
  115. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_grid.scssc +0 -0
  116. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_input-groups.scssc +0 -0
  117. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_jumbotron.scssc +0 -0
  118. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_labels.scssc +0 -0
  119. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_list-group.scssc +0 -0
  120. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_media.scssc +0 -0
  121. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_mixins.scssc +0 -0
  122. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_modals.scssc +0 -0
  123. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navbar.scssc +0 -0
  124. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navs.scssc +0 -0
  125. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_normalize.scssc +0 -0
  126. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pager.scssc +0 -0
  127. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pagination.scssc +0 -0
  128. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_panels.scssc +0 -0
  129. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_popovers.scssc +0 -0
  130. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_print.scssc +0 -0
  131. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_progress-bars.scssc +0 -0
  132. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-embed.scssc +0 -0
  133. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-utilities.scssc +0 -0
  134. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_scaffolding.scssc +0 -0
  135. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tables.scssc +0 -0
  136. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_thumbnails.scssc +0 -0
  137. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tooltip.scssc +0 -0
  138. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_type.scssc +0 -0
  139. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_utilities.scssc +0 -0
  140. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_variables.scssc +0 -0
  141. data/test/dummy/tmp/cache/assets/development/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_wells.scssc +0 -0
  142. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_admin.scssc +0 -0
  143. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_az.scssc +0 -0
  144. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_forms.scssc +0 -0
  145. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_icons.scssc +0 -0
  146. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_layout.scssc +0 -0
  147. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_misc.scssc +0 -0
  148. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_mixins.scssc +0 -0
  149. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_modal.scssc +0 -0
  150. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_resolve.scssc +0 -0
  151. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_results.scssc +0 -0
  152. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_search.scssc +0 -0
  153. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_spinner.scssc +0 -0
  154. data/test/dummy/tmp/cache/assets/development/sass/524eaf90d4782546823a37b80882f8b66bf73010/_variables.scssc +0 -0
  155. data/test/dummy/tmp/cache/assets/development/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/_bootstrap-sprockets.scssc +0 -0
  156. data/test/dummy/tmp/cache/assets/development/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/bootstrap.scssc +0 -0
  157. data/test/dummy/tmp/cache/assets/development/sass/dc1017bdbb6af49581dc35eda2911a13c557c111/umlaut.css.scssc +0 -0
  158. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_alerts.scssc +0 -0
  159. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_background-variant.scssc +0 -0
  160. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_border-radius.scssc +0 -0
  161. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_buttons.scssc +0 -0
  162. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_center-block.scssc +0 -0
  163. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_clearfix.scssc +0 -0
  164. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_forms.scssc +0 -0
  165. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_gradients.scssc +0 -0
  166. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid-framework.scssc +0 -0
  167. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid.scssc +0 -0
  168. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_hide-text.scssc +0 -0
  169. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_image.scssc +0 -0
  170. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_labels.scssc +0 -0
  171. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_list-group.scssc +0 -0
  172. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-divider.scssc +0 -0
  173. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-vertical-align.scssc +0 -0
  174. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_opacity.scssc +0 -0
  175. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_pagination.scssc +0 -0
  176. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_panels.scssc +0 -0
  177. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_progress-bar.scssc +0 -0
  178. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_reset-filter.scssc +0 -0
  179. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_resize.scssc +0 -0
  180. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_responsive-visibility.scssc +0 -0
  181. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_size.scssc +0 -0
  182. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_tab-focus.scssc +0 -0
  183. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_table-row.scssc +0 -0
  184. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-emphasis.scssc +0 -0
  185. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-overflow.scssc +0 -0
  186. data/test/dummy/tmp/cache/assets/development/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_vendor-prefixes.scssc +0 -0
  187. data/test/dummy/tmp/cache/assets/development/sprockets/00fe8b9f2a1f7a1c312f627c379f5a50 +0 -0
  188. data/test/dummy/tmp/cache/assets/{DCB/620/sprockets%2F2332a294ceeab3ab9b5ee643989dc0eb → development/sprockets/04757b33bf029a112819cf86c6e899db} +0 -0
  189. data/test/dummy/tmp/cache/assets/development/sprockets/0bdc06801d1626641264f7c81f0bb383 +0 -0
  190. data/test/dummy/tmp/cache/assets/development/sprockets/1365f0b692ced0628311ee4566e1b707 +0 -0
  191. data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  192. data/test/dummy/tmp/cache/assets/{C99/040/sprockets%2F84d95490d4855608b8dd8602192f4f9c → development/sprockets/19f5d7a61a156ff3b78882b11cc679dc} +0 -0
  193. data/test/dummy/tmp/cache/assets/development/sprockets/1b2d587ae29ea4eaabb3bab0f022f3d3 +0 -0
  194. data/test/dummy/tmp/cache/assets/development/sprockets/1d9ea1c7ecfa0067960ac916ce4b65ca +0 -0
  195. data/test/dummy/tmp/cache/assets/development/sprockets/1e127abfd1414d0de67e3d78570c8195 +0 -0
  196. data/test/dummy/tmp/cache/assets/development/sprockets/22a2e14590ab60250be8e55802e0416b +0 -0
  197. data/test/dummy/tmp/cache/assets/{D72/1E0/sprockets%2Fdee77a9fb00d0a6229fd6b54a8f14197 → development/sprockets/29512f3dcf5161d055eb24ebcaaf8613} +0 -0
  198. data/test/dummy/tmp/cache/assets/development/sprockets/2b31649bad46580f69b4c7283d75d7da +0 -0
  199. data/test/dummy/tmp/cache/assets/development/sprockets/2b6799917cb806635bb25ceb87199288 +0 -0
  200. data/test/dummy/tmp/cache/assets/development/sprockets/2dcbebcad08aa99d46c19c8dceebc0e8 +0 -0
  201. data/test/dummy/tmp/cache/assets/{DD1/120/sprockets%2Fbee5967b8282dab9fce5c242bcc14c55 → development/sprockets/2e10962ed25d5e106895b21500eed819} +0 -0
  202. data/test/dummy/tmp/cache/assets/development/sprockets/2e7a2009e7fa93a461d747b153241335 +0 -0
  203. data/test/dummy/tmp/cache/assets/development/sprockets/2edf520c0d6a5e6fe31a96ff6249deb3 +0 -0
  204. data/test/dummy/tmp/cache/assets/{DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 → development/sprockets/2f5173deea6c795b8fdde723bb4b63af} +0 -0
  205. data/test/dummy/tmp/cache/assets/development/sprockets/33effed14152fbf68a290dc9bfdacc49 +0 -0
  206. data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  207. data/test/dummy/tmp/cache/assets/development/sprockets/362ddf5dec149d8860307be28f1b6aba +0 -0
  208. data/test/dummy/tmp/cache/assets/development/sprockets/3bb0e2c4964797a92ce18c9265d7c35d +0 -0
  209. data/test/dummy/tmp/cache/assets/development/sprockets/3de79b672a2a13cc1a0ecdb4f14087b6 +0 -0
  210. data/test/dummy/tmp/cache/assets/development/sprockets/4059619b2636e7c20d35170dfe625a63 +0 -0
  211. data/test/dummy/tmp/cache/assets/development/sprockets/43cc6f487d302bad3c176fb117bc8790 +0 -0
  212. data/test/dummy/tmp/cache/assets/development/sprockets/4c4d82da23f69029b0c8346855f2effe +0 -0
  213. data/test/dummy/tmp/cache/assets/development/sprockets/4e00e47769496546d5560ba11077191e +0 -0
  214. data/test/dummy/tmp/cache/assets/development/sprockets/4ed3382d5f8738e189d0fb787a29e487 +0 -0
  215. data/test/dummy/tmp/cache/assets/development/sprockets/50e6046f30d33ebf382887de6500721f +0 -0
  216. data/test/dummy/tmp/cache/assets/development/sprockets/5488b82c680f30f6fd6e237c86e7887a +0 -0
  217. data/test/dummy/tmp/cache/assets/{C9D/060/sprockets%2F5c8956a1666824a1d214531abd22e2a2 → development/sprockets/56381d00a030c7822e9a88c9ddae434f} +0 -0
  218. data/test/dummy/tmp/cache/assets/{D17/BC0/sprockets%2F1ae6578a93a7a3d848319dea314f592d → development/sprockets/5bdde916a6e5824d9c695657aaada893} +0 -0
  219. data/test/dummy/tmp/cache/assets/development/sprockets/5d7a36094a81c5e13f8603581fdcd0a0 +0 -0
  220. data/test/dummy/tmp/cache/assets/development/sprockets/62df0d3ba0011b6ebf283e9e4fd33a59 +0 -0
  221. data/test/dummy/tmp/cache/assets/development/sprockets/685077a71b34728322a6a3df7a818f16 +0 -0
  222. data/test/dummy/tmp/cache/assets/development/sprockets/74007643206dfef480fe67a4ee6a5af9 +0 -0
  223. data/test/dummy/tmp/cache/assets/development/sprockets/747ce3a1a163cd0edc663342abb508c8 +0 -0
  224. data/test/dummy/tmp/cache/assets/development/sprockets/7752e1fdfeb11e34353bb24822e8eddc +0 -0
  225. data/test/dummy/tmp/cache/assets/development/sprockets/7ab84c0db002136373ac7278f78e4d69 +0 -0
  226. data/test/dummy/tmp/cache/assets/{D65/820/sprockets%2Fae5318865ebb4a2b74e84c0e13fb921a → development/sprockets/80f1a2af00dac454055d31d97fa9ea16} +0 -0
  227. data/test/dummy/tmp/cache/assets/development/sprockets/827f39ace148dd5b450c5b5c4f7b7407 +0 -0
  228. data/test/dummy/tmp/cache/assets/{DEF/A60/sprockets%2F3fddcee3e5dbd24f28de1001e5f3a009 → development/sprockets/84bda1ce77f140dbe330abbb9654a389} +0 -0
  229. data/test/dummy/tmp/cache/assets/development/sprockets/91cf221e4f31c9b0e394d61e76e383a6 +0 -0
  230. data/test/dummy/tmp/cache/assets/development/sprockets/91fc9ce33c0477ac8e5c38f43ace64f3 +0 -0
  231. data/test/dummy/tmp/cache/assets/development/sprockets/984eb5d6325666ea28ac61b8f00bbf96 +0 -0
  232. data/test/dummy/tmp/cache/assets/development/sprockets/a5ca1b208ac1648c9233a4f82231cc9d +0 -0
  233. data/test/dummy/tmp/cache/assets/development/sprockets/b0644dc48561692b74e67cfa49f1fccc +0 -0
  234. data/test/dummy/tmp/cache/assets/development/sprockets/b45832a1ef97f445005b6a5ed08ad4e1 +0 -0
  235. data/test/dummy/tmp/cache/assets/development/sprockets/b57b9a3152cba1d2ce51c8890cd2c069 +0 -0
  236. data/test/dummy/tmp/cache/assets/development/sprockets/bf432dfd03a3577b6fecab95f67d3e10 +0 -0
  237. data/test/dummy/tmp/cache/assets/development/sprockets/c10ba9d7ca59eade850d472f4620e679 +0 -0
  238. data/test/dummy/tmp/cache/assets/development/sprockets/c127c56dd327b8471950e4e4eb774d58 +0 -0
  239. data/test/dummy/tmp/cache/assets/development/sprockets/c4883e8efaaa0dd40101433793d62dd0 +0 -0
  240. data/test/dummy/tmp/cache/assets/development/sprockets/ccb8dacf69b5ea6e8638d5659f87e93b +0 -0
  241. data/test/dummy/tmp/cache/assets/{E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af → development/sprockets/cffd775d018f68ce5dba1ee0d951a994} +0 -0
  242. data/test/dummy/tmp/cache/assets/development/sprockets/d06b36a24841048e094f62c017a0e23c +0 -0
  243. data/test/dummy/tmp/cache/assets/development/sprockets/d40077dd950a280248a90c9cd9bf1171 +0 -0
  244. data/test/dummy/tmp/cache/assets/development/sprockets/d49649ea0360b8433251241f77ab88c1 +0 -0
  245. data/test/dummy/tmp/cache/assets/development/sprockets/d6a0c8ca3c8a8f1bde4550db740138b8 +0 -0
  246. data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  247. data/test/dummy/tmp/cache/assets/development/sprockets/d81f215f779ce2609d4dfa76b02df41c +0 -0
  248. data/test/dummy/tmp/cache/assets/development/sprockets/de3f87130aaf9847386d1f5e5c9893f1 +0 -0
  249. data/test/dummy/tmp/cache/assets/development/sprockets/dea953187fcf46b6d47f7653acc099c6 +0 -0
  250. data/test/dummy/tmp/cache/assets/development/sprockets/e1bf78affc4ede54eac4249af8f16e82 +0 -0
  251. data/test/dummy/tmp/cache/assets/development/sprockets/eaff4713f011dd8b1946264e8f120fb6 +0 -0
  252. data/test/dummy/tmp/cache/assets/development/sprockets/ef4a528b7df4e9417e42bc5aaf40ef9b +0 -0
  253. data/test/dummy/tmp/cache/assets/development/sprockets/f6be26089ea600503193ac4a8119a33b +0 -0
  254. data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  255. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_alerts.scssc +0 -0
  256. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_badges.scssc +0 -0
  257. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_breadcrumbs.scssc +0 -0
  258. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_button-groups.scssc +0 -0
  259. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_buttons.scssc +0 -0
  260. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_carousel.scssc +0 -0
  261. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_close.scssc +0 -0
  262. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_code.scssc +0 -0
  263. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_component-animations.scssc +0 -0
  264. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_dropdowns.scssc +0 -0
  265. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_forms.scssc +0 -0
  266. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_glyphicons.scssc +0 -0
  267. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_grid.scssc +0 -0
  268. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_input-groups.scssc +0 -0
  269. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_jumbotron.scssc +0 -0
  270. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_labels.scssc +0 -0
  271. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_list-group.scssc +0 -0
  272. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_media.scssc +0 -0
  273. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_mixins.scssc +0 -0
  274. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_modals.scssc +0 -0
  275. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navbar.scssc +0 -0
  276. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_navs.scssc +0 -0
  277. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_normalize.scssc +0 -0
  278. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pager.scssc +0 -0
  279. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_pagination.scssc +0 -0
  280. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_panels.scssc +0 -0
  281. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_popovers.scssc +0 -0
  282. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_print.scssc +0 -0
  283. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_progress-bars.scssc +0 -0
  284. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-embed.scssc +0 -0
  285. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_responsive-utilities.scssc +0 -0
  286. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_scaffolding.scssc +0 -0
  287. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tables.scssc +0 -0
  288. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_thumbnails.scssc +0 -0
  289. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_tooltip.scssc +0 -0
  290. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_type.scssc +0 -0
  291. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_utilities.scssc +0 -0
  292. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_variables.scssc +0 -0
  293. data/test/dummy/tmp/cache/assets/test/sass/05e2dc436ff96d50f418a3e756bafafe98e914ae/_wells.scssc +0 -0
  294. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_alerts.scssc +0 -0
  295. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_badges.scssc +0 -0
  296. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_breadcrumbs.scssc +0 -0
  297. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_button-groups.scssc +0 -0
  298. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_buttons.scssc +0 -0
  299. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_carousel.scssc +0 -0
  300. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_close.scssc +0 -0
  301. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_code.scssc +0 -0
  302. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_component-animations.scssc +0 -0
  303. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_dropdowns.scssc +0 -0
  304. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_forms.scssc +0 -0
  305. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_glyphicons.scssc +0 -0
  306. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_grid.scssc +0 -0
  307. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_input-groups.scssc +0 -0
  308. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_jumbotron.scssc +0 -0
  309. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_labels.scssc +0 -0
  310. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_list-group.scssc +0 -0
  311. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_media.scssc +0 -0
  312. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_mixins.scssc +0 -0
  313. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_modals.scssc +0 -0
  314. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_navbar.scssc +0 -0
  315. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_navs.scssc +0 -0
  316. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_normalize.scssc +0 -0
  317. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_pager.scssc +0 -0
  318. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_pagination.scssc +0 -0
  319. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_panels.scssc +0 -0
  320. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_popovers.scssc +0 -0
  321. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_print.scssc +0 -0
  322. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_progress-bars.scssc +0 -0
  323. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_responsive-embed.scssc +0 -0
  324. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_responsive-utilities.scssc +0 -0
  325. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_scaffolding.scssc +0 -0
  326. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_tables.scssc +0 -0
  327. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_thumbnails.scssc +0 -0
  328. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_tooltip.scssc +0 -0
  329. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_type.scssc +0 -0
  330. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_utilities.scssc +0 -0
  331. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_variables.scssc +0 -0
  332. data/test/dummy/tmp/cache/assets/test/sass/17fd8969872067ebc37af75de84fcc03527156bc/_wells.scssc +0 -0
  333. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_admin.scssc +0 -0
  334. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_az.scssc +0 -0
  335. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_forms.scssc +0 -0
  336. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_icons.scssc +0 -0
  337. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_layout.scssc +0 -0
  338. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_misc.scssc +0 -0
  339. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_mixins.scssc +0 -0
  340. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_modal.scssc +0 -0
  341. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_resolve.scssc +0 -0
  342. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_results.scssc +0 -0
  343. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_search.scssc +0 -0
  344. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_spinner.scssc +0 -0
  345. data/test/dummy/tmp/cache/assets/test/sass/524eaf90d4782546823a37b80882f8b66bf73010/_variables.scssc +0 -0
  346. data/test/dummy/tmp/cache/assets/test/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/_bootstrap-sprockets.scssc +0 -0
  347. data/test/dummy/tmp/cache/assets/test/sass/6e589d45ad6dae7b9687fd7eac1156e517932854/bootstrap.scssc +0 -0
  348. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_alerts.scssc +0 -0
  349. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_background-variant.scssc +0 -0
  350. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_border-radius.scssc +0 -0
  351. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_buttons.scssc +0 -0
  352. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_center-block.scssc +0 -0
  353. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_clearfix.scssc +0 -0
  354. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_forms.scssc +0 -0
  355. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_gradients.scssc +0 -0
  356. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_grid-framework.scssc +0 -0
  357. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_grid.scssc +0 -0
  358. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_hide-text.scssc +0 -0
  359. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_image.scssc +0 -0
  360. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_labels.scssc +0 -0
  361. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_list-group.scssc +0 -0
  362. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_nav-divider.scssc +0 -0
  363. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_nav-vertical-align.scssc +0 -0
  364. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_opacity.scssc +0 -0
  365. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_pagination.scssc +0 -0
  366. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_panels.scssc +0 -0
  367. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_progress-bar.scssc +0 -0
  368. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_reset-filter.scssc +0 -0
  369. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_resize.scssc +0 -0
  370. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_responsive-visibility.scssc +0 -0
  371. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_size.scssc +0 -0
  372. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_tab-focus.scssc +0 -0
  373. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_table-row.scssc +0 -0
  374. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_text-emphasis.scssc +0 -0
  375. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_text-overflow.scssc +0 -0
  376. data/test/dummy/tmp/cache/assets/test/sass/881c1ba03280ae14123609245e8314b2ba917406/_vendor-prefixes.scssc +0 -0
  377. data/test/dummy/tmp/cache/assets/test/sass/d66be29359c981abd965733fad9a31a018759486/_bootstrap-sprockets.scssc +0 -0
  378. data/test/dummy/tmp/cache/assets/test/sass/d66be29359c981abd965733fad9a31a018759486/_bootstrap.scssc +0 -0
  379. data/test/dummy/tmp/cache/assets/test/sass/dc1017bdbb6af49581dc35eda2911a13c557c111/umlaut.css.scssc +0 -0
  380. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_alerts.scssc +0 -0
  381. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_background-variant.scssc +0 -0
  382. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_border-radius.scssc +0 -0
  383. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_buttons.scssc +0 -0
  384. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_center-block.scssc +0 -0
  385. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_clearfix.scssc +0 -0
  386. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_forms.scssc +0 -0
  387. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_gradients.scssc +0 -0
  388. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid-framework.scssc +0 -0
  389. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_grid.scssc +0 -0
  390. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_hide-text.scssc +0 -0
  391. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_image.scssc +0 -0
  392. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_labels.scssc +0 -0
  393. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_list-group.scssc +0 -0
  394. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-divider.scssc +0 -0
  395. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_nav-vertical-align.scssc +0 -0
  396. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_opacity.scssc +0 -0
  397. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_pagination.scssc +0 -0
  398. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_panels.scssc +0 -0
  399. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_progress-bar.scssc +0 -0
  400. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_reset-filter.scssc +0 -0
  401. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_resize.scssc +0 -0
  402. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_responsive-visibility.scssc +0 -0
  403. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_size.scssc +0 -0
  404. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_tab-focus.scssc +0 -0
  405. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_table-row.scssc +0 -0
  406. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-emphasis.scssc +0 -0
  407. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_text-overflow.scssc +0 -0
  408. data/test/dummy/tmp/cache/assets/test/sass/f8ee09d7b9a6023c8ba1b1569df57c6a072dd36e/_vendor-prefixes.scssc +0 -0
  409. data/test/dummy/tmp/cache/assets/test/sprockets/00fe8b9f2a1f7a1c312f627c379f5a50 +0 -0
  410. data/test/dummy/tmp/cache/assets/test/sprockets/04757b33bf029a112819cf86c6e899db +0 -0
  411. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  412. data/test/dummy/tmp/cache/assets/test/sprockets/1a72ab0727d6b1c53a2425bce68ccd29 +0 -0
  413. data/test/dummy/tmp/cache/assets/{D02/B30/sprockets%2Fb9332ebd1d306cc9120a386ca986034d → test/sprockets/1b2d587ae29ea4eaabb3bab0f022f3d3} +0 -0
  414. data/test/dummy/tmp/cache/assets/test/sprockets/1d9ea1c7ecfa0067960ac916ce4b65ca +0 -0
  415. data/test/dummy/tmp/cache/assets/{D65/0D0/sprockets%2F9fd0b369f009be410bdb0b6e5458b3a6 → test/sprockets/1e127abfd1414d0de67e3d78570c8195} +0 -0
  416. data/test/dummy/tmp/cache/assets/test/sprockets/204c5ef815c91ad1dba36952ada84453 +0 -0
  417. data/test/dummy/tmp/cache/assets/test/sprockets/29512f3dcf5161d055eb24ebcaaf8613 +0 -0
  418. data/test/dummy/tmp/cache/assets/test/sprockets/2b31649bad46580f69b4c7283d75d7da +0 -0
  419. data/test/dummy/tmp/cache/assets/test/sprockets/2b6799917cb806635bb25ceb87199288 +0 -0
  420. data/test/dummy/tmp/cache/assets/test/sprockets/2dcbebcad08aa99d46c19c8dceebc0e8 +0 -0
  421. data/test/dummy/tmp/cache/assets/test/sprockets/2e10962ed25d5e106895b21500eed819 +0 -0
  422. data/test/dummy/tmp/cache/assets/test/sprockets/2e7a2009e7fa93a461d747b153241335 +0 -0
  423. data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  424. data/test/dummy/tmp/cache/assets/test/sprockets/300b3cf1812a5e2ba89266b8198caf8c +0 -0
  425. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  426. data/test/dummy/tmp/cache/assets/test/sprockets/3bb0e2c4964797a92ce18c9265d7c35d +0 -0
  427. data/test/dummy/tmp/cache/assets/test/sprockets/3de79b672a2a13cc1a0ecdb4f14087b6 +0 -0
  428. data/test/dummy/tmp/cache/assets/test/sprockets/4059619b2636e7c20d35170dfe625a63 +0 -0
  429. data/test/dummy/tmp/cache/assets/test/sprockets/42d8221eac1dc91b1c055df56147f009 +0 -0
  430. data/test/dummy/tmp/cache/assets/test/sprockets/43bdfbe7d60eec9cab5eda9af30fae29 +0 -0
  431. data/test/dummy/tmp/cache/assets/test/sprockets/43cc6f487d302bad3c176fb117bc8790 +0 -0
  432. data/test/dummy/tmp/cache/assets/test/sprockets/4403ea9870ef12ff2940eb16ee72aefd +0 -0
  433. data/test/dummy/tmp/cache/assets/test/sprockets/4c4d82da23f69029b0c8346855f2effe +0 -0
  434. data/test/dummy/tmp/cache/assets/test/sprockets/4e00e47769496546d5560ba11077191e +0 -0
  435. data/test/dummy/tmp/cache/assets/{DAB/C70/sprockets%2Ff8ac0db14f84bce083a7c58f965e806f → test/sprockets/4ed3382d5f8738e189d0fb787a29e487} +0 -0
  436. data/test/dummy/tmp/cache/assets/test/sprockets/50e6046f30d33ebf382887de6500721f +0 -0
  437. data/test/dummy/tmp/cache/assets/test/sprockets/5488b82c680f30f6fd6e237c86e7887a +0 -0
  438. data/test/dummy/tmp/cache/assets/test/sprockets/58901a70c4225a06a7b7402515a9b987 +0 -0
  439. data/test/dummy/tmp/cache/assets/test/sprockets/5bdde916a6e5824d9c695657aaada893 +0 -0
  440. data/test/dummy/tmp/cache/assets/test/sprockets/5d7a36094a81c5e13f8603581fdcd0a0 +0 -0
  441. data/test/dummy/tmp/cache/assets/test/sprockets/62df0d3ba0011b6ebf283e9e4fd33a59 +0 -0
  442. data/test/dummy/tmp/cache/assets/test/sprockets/641d193a017d5c7220a38ee54b714fa3 +0 -0
  443. data/test/dummy/tmp/cache/assets/test/sprockets/65c94ad4022a7bb639254a1716375313 +0 -0
  444. data/test/dummy/tmp/cache/assets/test/sprockets/661a6079c9ca1cbcf6215e9113867d30 +0 -0
  445. data/test/dummy/tmp/cache/assets/test/sprockets/685077a71b34728322a6a3df7a818f16 +0 -0
  446. data/test/dummy/tmp/cache/assets/test/sprockets/74007643206dfef480fe67a4ee6a5af9 +0 -0
  447. data/test/dummy/tmp/cache/assets/test/sprockets/747ce3a1a163cd0edc663342abb508c8 +0 -0
  448. data/test/dummy/tmp/cache/assets/{D47/690/sprockets%2Fd92186d33469ff2bd01ba096f33dfd78 → test/sprockets/7752e1fdfeb11e34353bb24822e8eddc} +0 -0
  449. data/test/dummy/tmp/cache/assets/test/sprockets/7ab84c0db002136373ac7278f78e4d69 +0 -0
  450. data/test/dummy/tmp/cache/assets/test/sprockets/80f1a2af00dac454055d31d97fa9ea16 +0 -0
  451. data/test/dummy/tmp/cache/assets/test/sprockets/84bda1ce77f140dbe330abbb9654a389 +0 -0
  452. data/test/dummy/tmp/cache/assets/test/sprockets/91cf221e4f31c9b0e394d61e76e383a6 +0 -0
  453. data/test/dummy/tmp/cache/assets/test/sprockets/91fc9ce33c0477ac8e5c38f43ace64f3 +0 -0
  454. data/test/dummy/tmp/cache/assets/test/sprockets/9424bf97ebe97817bf589d5409eb1b49 +0 -0
  455. data/test/dummy/tmp/cache/assets/test/sprockets/97197c94037eb886f290e1db6db71839 +0 -0
  456. data/test/dummy/tmp/cache/assets/test/sprockets/984eb5d6325666ea28ac61b8f00bbf96 +0 -0
  457. data/test/dummy/tmp/cache/assets/test/sprockets/9e9540a6ef6178fdc44134b8170b9104 +0 -0
  458. data/test/dummy/tmp/cache/assets/test/sprockets/a4605dfa1ec12c0c0a5fa6149836e146 +0 -0
  459. data/test/dummy/tmp/cache/assets/test/sprockets/a5ca1b208ac1648c9233a4f82231cc9d +0 -0
  460. data/test/dummy/tmp/cache/assets/test/sprockets/a8ae1c833918295d04a2921439ec6dda +0 -0
  461. data/test/dummy/tmp/cache/assets/test/sprockets/b0644dc48561692b74e67cfa49f1fccc +0 -0
  462. data/test/dummy/tmp/cache/assets/test/sprockets/b45832a1ef97f445005b6a5ed08ad4e1 +0 -0
  463. data/test/dummy/tmp/cache/assets/test/sprockets/b530e8eed86f8a06c34ebfba012ced9f +0 -0
  464. data/test/dummy/tmp/cache/assets/test/sprockets/bbff1f14224b48e4d838bcfb3ed8a610 +0 -0
  465. data/test/dummy/tmp/cache/assets/test/sprockets/c10ba9d7ca59eade850d472f4620e679 +0 -0
  466. data/test/dummy/tmp/cache/assets/test/sprockets/c127c56dd327b8471950e4e4eb774d58 +0 -0
  467. data/test/dummy/tmp/cache/assets/test/sprockets/c4883e8efaaa0dd40101433793d62dd0 +0 -0
  468. data/test/dummy/tmp/cache/assets/test/sprockets/c696c2db7d8317ca35a7243d8bd4f3b2 +0 -0
  469. data/test/dummy/tmp/cache/assets/test/sprockets/ccb8dacf69b5ea6e8638d5659f87e93b +0 -0
  470. data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  471. data/test/dummy/tmp/cache/assets/test/sprockets/d40077dd950a280248a90c9cd9bf1171 +0 -0
  472. data/test/dummy/tmp/cache/assets/test/sprockets/d49649ea0360b8433251241f77ab88c1 +0 -0
  473. data/test/dummy/tmp/cache/assets/test/sprockets/d6a0c8ca3c8a8f1bde4550db740138b8 +0 -0
  474. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  475. data/test/dummy/tmp/cache/assets/test/sprockets/db71108aa3843a309c5247dd6481dd12 +0 -0
  476. data/test/dummy/tmp/cache/assets/test/sprockets/dd484b056ce971aa93a7b69c6ec28fb3 +0 -0
  477. data/test/dummy/tmp/cache/assets/test/sprockets/de3f87130aaf9847386d1f5e5c9893f1 +0 -0
  478. data/test/dummy/tmp/cache/assets/test/sprockets/dea953187fcf46b6d47f7653acc099c6 +0 -0
  479. data/test/dummy/tmp/cache/assets/test/sprockets/df2a44cb5db91d63eb01e3d4a1673b75 +0 -0
  480. data/test/dummy/tmp/cache/assets/test/sprockets/e1bf78affc4ede54eac4249af8f16e82 +0 -0
  481. data/test/dummy/tmp/cache/assets/test/sprockets/e776d52f6ae606355fa1070b2eb7825b +0 -0
  482. data/test/dummy/tmp/cache/assets/test/sprockets/eaff4713f011dd8b1946264e8f120fb6 +0 -0
  483. data/test/dummy/tmp/cache/assets/test/sprockets/f6be26089ea600503193ac4a8119a33b +0 -0
  484. data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  485. data/test/functional/feedback_controller_test.rb +1 -1
  486. data/test/functional/resolve_controller_test-NOFIXTURES.rb +227 -0
  487. data/test/functional/resolve_controller_test.rb +155 -14
  488. data/test/functional/search_controller_test.rb +1 -1
  489. data/test/helper/list_with_limit_test.rb +11 -0
  490. data/test/test_helper.rb +63 -26
  491. data/test/unit/active_record_connection_pool_test.rb +43 -25
  492. data/test/unit/aws_product_sign_test.rb +3 -3
  493. data/test/unit/collection_test.rb +39 -3
  494. data/test/unit/determine_services_test.rb +11 -11
  495. data/test/unit/dispatched_service_test.rb +16 -0
  496. data/test/unit/dissertation_catch_test.rb +1 -2
  497. data/test/unit/google_book_search_test.rb +6 -8
  498. data/test/unit/internet_archive_test.rb +6 -5
  499. data/test/unit/permalink_test.rb +4 -2
  500. data/test/unit/referent_test.rb +60 -0
  501. data/test/unit/referent_to_citation_test.rb +29 -2
  502. data/test/unit/request_test.rb +48 -0
  503. data/test/unit/service_response_test.rb +63 -4
  504. data/test/unit/service_test.rb +35 -5
  505. data/test/unit/service_type_value_test.rb +25 -0
  506. data/test/unit/sfx4_search_test.rb +1 -1
  507. data/test/unit/sfx_test.rb +4 -2
  508. data/test/unit/worldcat_test.rb +1 -3
  509. data/test/vcr_cassettes/collection/live_dispatch.yml +311 -0
  510. data/test/vcr_cassettes/sfx/nytimes_by_issn.yml +1 -1
  511. metadata +831 -145
  512. data/app/controllers/search_methods/sfx4_solr/README.md +0 -57
  513. data/app/controllers/search_methods/sfx4_solr/local.rb +0 -40
  514. data/app/controllers/search_methods/sfx4_solr/searcher.rb +0 -118
  515. data/app/models/sfx4/global/base.rb +0 -24
  516. data/app/models/sfx4/global/kb_objects.rb +0 -34
  517. data/app/views/search/opensearch_description.rxml +0 -10
  518. data/lib/service_adaptors/README.md +0 -0
  519. data/test/dummy/db/migrate/20120927163304_sfx4_global.rb +0 -26
  520. data/test/dummy/tmp/cache/assets/BFF/760/sprockets%2Fe00969069e468419c393709f042b4527 +0 -0
  521. data/test/dummy/tmp/cache/assets/CC7/D80/sprockets%2F62a4c21a1d5bac4064e25082f523f238 +0 -0
  522. data/test/dummy/tmp/cache/assets/CC8/C70/sprockets%2F397590f867a06c2d0595c75ed4269e9b +0 -0
  523. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  524. data/test/dummy/tmp/cache/assets/CE3/1F0/sprockets%2F9a3b0380fe964d77f0013845d3d355fd +0 -0
  525. data/test/dummy/tmp/cache/assets/CE7/FA0/sprockets%2F98df08987c1b5c0f643a21538a7182ec +0 -0
  526. data/test/dummy/tmp/cache/assets/CEA/930/sprockets%2F42ebf67295336dfb5725a8bb12881a98 +0 -0
  527. data/test/dummy/tmp/cache/assets/D15/FC0/sprockets%2F8cbf3a8b7acb7fc27a42168846226385 +0 -0
  528. data/test/dummy/tmp/cache/assets/D2D/240/sprockets%2F6610ec2488ff4a57d54efb798f1a9994 +0 -0
  529. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  530. data/test/dummy/tmp/cache/assets/D33/2C0/sprockets%2F790e9527eead8b020b92b34dc6a600d2 +0 -0
  531. data/test/dummy/tmp/cache/assets/D38/930/sprockets%2F45cee52fe11df0057793a6751aa65a4c +0 -0
  532. data/test/dummy/tmp/cache/assets/D39/B30/sprockets%2Fcb7b9f6963b829c678ff9267c63577ce +0 -0
  533. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  534. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  535. data/test/dummy/tmp/cache/assets/D5F/690/sprockets%2Febe18c52ead548a955a1f2be191130b3 +0 -0
  536. data/test/dummy/tmp/cache/assets/D6A/A80/sprockets%2F22d5d4e74a9a3f3deb5a92704ae750f3 +0 -0
  537. data/test/dummy/tmp/cache/assets/D6B/020/sprockets%2Ffba640f8143fc0c24e3e6616e2eb93a9 +0 -0
  538. data/test/dummy/tmp/cache/assets/D6B/8C0/sprockets%2Fa0dc07225af433e77fd6a9028a8e3c6e +0 -0
  539. data/test/dummy/tmp/cache/assets/D98/990/sprockets%2F710ede3e7f5ebab14e9772fa88c00c02 +0 -0
  540. data/test/dummy/tmp/cache/assets/DAD/BA0/sprockets%2F193f81f7e4eae26eaaa7d909c0c8e956 +0 -0
  541. data/test/dummy/tmp/cache/assets/DD6/010/sprockets%2F15a8fcbaccc97804fce2ee514e371f79 +0 -0
  542. data/test/dummy/tmp/cache/assets/E2E/350/sprockets%2Fbea81b7c4fdf19664eff44b21ea53dbe +0 -0
  543. data/test/dummy/tmp/cache/assets/EF1/680/sprockets%2Fed8ede7dea4bd22aacb9584fbe7d6cad +0 -0
  544. data/test/fixtures/sfx4/global/KB_OBJECTS.yml +0 -46
  545. data/test/integration/request_test.rb +0 -25
  546. data/test/performance/browsing_test.rb +0 -9
  547. data/test/unit/sfx4_solr_search_test.rb +0 -81
  548. data/test/vcr_cassettes/resolve/fulltext_with_edition_warning.yml +0 -44
  549. data/test/vcr_cassettes/resolve/manually_entered.yml +0 -84
  550. data/test/vcr_cassettes/resolve/no_holdings.yml +0 -649
  551. data/test/vcr_cassettes/resolve/nytimes_by_issn.yml +0 -224
  552. data/test/vcr_cassettes/sfx4_solr/find_by_group.yml +0 -125
  553. data/test/vcr_cassettes/sfx4_solr/find_by_title_begins_with.yml +0 -71
  554. data/test/vcr_cassettes/sfx4_solr/find_by_title_contains.yml +0 -72
  555. data/test/vcr_cassettes/sfx4_solr/find_by_title_exact.yml +0 -36
@@ -1,15 +1,16 @@
1
1
  class ReferentValue < ActiveRecord::Base
2
- attr_accessible :key_name, :value, :normalized_value, :metadata, :private_data
3
- belongs_to :referent, :include => :referent_values
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
- # 'mb_chars' is neccesary for unicode.
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
@@ -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
- has_many :service_responses, :order => 'id ASC'
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.find(:first, :conditions=>{:service_id => service.service_id})
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 = ServiceResponse.new
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.find(:all,
266
- :conditions => ['status IN (?, ?)',
267
- DispatchedService::FailedTemporary, DispatchedService::FailedFatal])
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
- return self.service_responses.find(:all,
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.find(:first, :conditions => {:id => params['umlaut.referent_id']})
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.find(:first, :conditions=>{:service_id => service.service_id})
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 is a piece of data generated by a Service. It usually will
4
- be displayed on the resolve menu.
5
-
6
- ServiceResponses have a service type, represented by a string. When displaying, ServiceResponses are typically grouped into lists by service type. ServiceResponses are tied to the Service that created them, with the #service accessor.
7
-
8
- ServiceResponses have a few basic attributes stored in columns in the db: 'display_text' is the text to put in the hyperlink. 'notes' is available for longer explanatory text (\n in notes will be converted to <br> by view). 'url' can be used to store the url to link to (but see below on linking mechanism).
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
- [The legacy columns response_key, value_string, value_alt_string and value_text are deprecated and should not be used, but some legacy Services still use them, so they're still there for now].
55
+ return hash
56
+ end
11
57
 
12
- In addition, there's a Hash (automatically serialized by ActiveRecord) that's stored in service_data, for arbitrary additional data that a Service can store--whatever you want, just put it in. However, there are conventions that Views expect, see below. You can access ALL the arbitrary key/values in a ServiceResponse, built-in in attributes or from the serialized Hash, by the proxy object returned from #data_values.
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
- You can create a ServiceResponse object with ServiceResponse.create_from_hash,
15
- where the hash keys may be direct iVar columns, or serialized in the
16
- service_data hash, you don't have to care.
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
- ServiceResponse is connected to a Request via the ServiceType join table. The data architecture allows a ServiceResponse to be tied to multiple requests, perhaps to support some kind of cacheing re-use in the future. But at present, the code doesn't do this, a ServiceResponse will really only be related to one request. However, a ServiceResponse can be related to a single Request more than once--once per each type of service response. ServiceType is really a three way join, representing a ServiceResponse, attached to a particular Request, with a particular ServiceTypeValue.
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, to display a particular ServiceResponse. You can provide code in your Service to translate a ServiceResponse to a Hash. But you often don't need to, you can use the proxy object returned by #data_values instead, which provides hash-like access to all arbitrary key/values stored in ServiceResponse. If the Service stores properties in there using conventional keys (see below), no further translation is needed.
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, by calling response_url(response) on the relevant Service. The default implementation in service.rb just returns service_response['url'], so the easiest way to do this is just to put the url in service_response['url']. However, your Service can over-ride this method to provide it's own implementation to generate to generate the url on demand in any way it wants. If it does this, technically service_response['url'] doesn't need to include anything. But if you have a URL, you may still want to put it there, for Umlaut to use in guessing something about the destination, for de-duplication and possibly other future purposes.
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
- = Conventional keys:
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(params = nil)
108
- super(params)
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
- hash.delete(key)
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 data_values
174
- # Lazy load, and store a reference. Don't worry, ruby
175
- # GC handles circular references no problem.
176
- unless (@data_values_proxy)
177
- @data_values_proxy = ServiceResponseDataValues.new(self)
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 @data_values_proxy;
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
- end
189
-
190
- # A proxy-like class, to provide hash-like access to all arbitrary
191
- # key/value pairs stored in a ServiceResponse, whether they key/value
192
- # is stored in an ActiveRecord attribute (#built_in_fields) or in
193
- # the serialized hash in the service_data attribute.
194
- # Symbols passed in will be 'normalized' to strings before being used as keys.
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
- end
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
- # ServiceTypeValue's also have displable strings, stored in the
8
- # display_name attribute, and possibly custom display_name_plural
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, :display_name, :display_name_plural
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
- return self.display_name_plural || self.display_name.pluralize
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
 
@@ -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 so no ActiveRecord activity will be
66
- # needed later to see em.
67
- Request.includes(:referent, :service_responses, :dispatched_services).find(request_id)
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 Exception => e
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
- Rails.logger.error(TermColor.color("Umlaut: Threaded service raised exception.", :red, true) + " Service: #{service.service_id}, #{e.class} #{e.message}. Backtrace:\n #{e.backtrace.join("\n ")}")
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 Rails.env.development?
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 Rails.env.development?
140
+ debugger if ENV["UMLAUT_AUTO_DEBUGGER"]
120
141
  raise e
121
142
  end
122
143
  end