krikri 0.4.0 → 0.5.0

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.
Files changed (408) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/krikri/application.css +15 -0
  3. data/app/controllers/krikri/providers_controller.rb +27 -0
  4. data/app/controllers/krikri/qa_reports_controller.rb +28 -0
  5. data/app/controllers/krikri/records_controller.rb +29 -5
  6. data/app/controllers/krikri/reports_controller.rb +24 -0
  7. data/app/controllers/krikri/validation_reports_controller.rb +11 -29
  8. data/app/helpers/krikri/application_helper.rb +62 -0
  9. data/app/helpers/krikri/records_helper.rb +14 -0
  10. data/app/helpers/krikri/reports_helper.rb +16 -0
  11. data/app/models/krikri/activity.rb +27 -0
  12. data/app/models/krikri/provider.rb +80 -0
  13. data/app/models/krikri/qa_report.rb +238 -0
  14. data/app/models/krikri/validation_report.rb +62 -0
  15. data/app/views/krikri/providers/index.html.erb +18 -0
  16. data/app/views/krikri/providers/show.html.erb +21 -0
  17. data/app/views/krikri/qa_reports/index.html.erb +12 -0
  18. data/app/views/krikri/qa_reports/show.html.erb +1 -0
  19. data/app/views/krikri/records/index.html.erb +0 -2
  20. data/app/views/krikri/records/show.html.erb +12 -9
  21. data/app/views/krikri/reports/_qa_report_list.html.erb +13 -0
  22. data/app/views/krikri/reports/_validation_report_list.html.erb +10 -0
  23. data/app/views/krikri/reports/index.html.erb +11 -0
  24. data/app/views/krikri/shared/_flash_message.html.erb +1 -0
  25. data/app/views/krikri/shared/_navigation.html.erb +38 -8
  26. data/app/views/krikri/validation_reports/_validation_report.html.erb +23 -0
  27. data/app/views/krikri/validation_reports/show.html.erb +19 -0
  28. data/config/routes.rb +6 -2
  29. data/config/settings/development.yml +6 -0
  30. data/config/settings/test.yml +9 -0
  31. data/db/migrate/20150328035550_add_qa_report.rb +11 -0
  32. data/lib/generators/krikri/templates/schema.xml +36 -36
  33. data/lib/krikri/engine.rb +10 -0
  34. data/lib/krikri/enricher.rb +14 -15
  35. data/lib/krikri/entity_behavior.rb +40 -0
  36. data/lib/krikri/entity_behaviors/aggregation_entity_behavior.rb +29 -0
  37. data/lib/krikri/entity_behaviors/original_record_entity_behavior.rb +26 -0
  38. data/lib/krikri/entity_consumer.rb +48 -0
  39. data/lib/krikri/harvester.rb +8 -0
  40. data/lib/krikri/indexer.rb +46 -0
  41. data/lib/krikri/mapper.rb +25 -9
  42. data/lib/krikri/qa_query_client.rb +154 -0
  43. data/lib/krikri/random_search_index_document_builder.rb +41 -0
  44. data/lib/krikri/search_index.rb +326 -0
  45. data/lib/krikri/search_results_helper_behavior.rb +2 -29
  46. data/lib/krikri/software_agent.rb +15 -0
  47. data/lib/krikri/solr_response_builder.rb +14 -0
  48. data/lib/krikri/version.rb +1 -1
  49. data/lib/krikri.rb +5 -0
  50. data/lib/tasks/krikri.rake +10 -11
  51. data/spec/controllers/application_controller_spec.rb +5 -0
  52. data/spec/controllers/providers_controller_spec.rb +37 -0
  53. data/spec/controllers/qa_reports_controller_spec.rb +69 -0
  54. data/spec/controllers/records_controller_spec.rb +73 -0
  55. data/spec/controllers/reports_controller_spec.rb +56 -0
  56. data/spec/controllers/validation_reports_controller_spec.rb +4 -5
  57. data/spec/dummy/db/development.sqlite3 +0 -0
  58. data/spec/dummy/db/test.sqlite3 +0 -0
  59. data/spec/dummy/log/development.log +207 -0
  60. data/spec/factories/krikri_activities.rb +34 -10
  61. data/spec/factories/krikri_provider.rb +8 -0
  62. data/spec/factories/krikri_qa_report.rb +7 -0
  63. data/spec/helpers/krikri/application_helper_spec.rb +43 -0
  64. data/spec/helpers/krikri/records_helper_spec.rb +15 -3
  65. data/spec/internal/Gemfile +3 -4
  66. data/spec/internal/Gemfile.lock +59 -37
  67. data/spec/internal/app/assets/javascripts/application.js +1 -1
  68. data/spec/internal/config/initializers/blacklight_initializer.rb +1 -1
  69. data/spec/internal/config/initializers/devise.rb +2 -2
  70. data/spec/internal/config/secrets.yml +2 -2
  71. data/spec/internal/db/development.sqlite3 +0 -0
  72. data/spec/internal/db/migrate/{20150320153132_devise_create_users.rb → 20150403220331_devise_create_users.rb} +0 -0
  73. data/spec/internal/db/migrate/{20150320153151_create_searches.blacklight.rb → 20150403220354_create_searches.blacklight.rb} +0 -0
  74. data/spec/internal/db/migrate/{20150320153152_create_bookmarks.blacklight.rb → 20150403220355_create_bookmarks.blacklight.rb} +0 -0
  75. data/spec/internal/db/migrate/{20150320153153_add_polymorphic_type_to_bookmarks.blacklight.rb → 20150403220356_add_polymorphic_type_to_bookmarks.blacklight.rb} +0 -0
  76. data/spec/internal/db/schema.rb +9 -1
  77. data/spec/internal/db/test.sqlite3 +0 -0
  78. data/spec/internal/log/development.log +88 -83
  79. data/spec/internal/log/test.log +3229 -83003
  80. data/spec/internal/tmp/cache/assets/test/sass/{b28605b1c659cf09fc72f3c1fff32918869d28b8 → 6449c927c92ef1ea4378c66161e3b0efe1bf954d}/_bootstrap-sprockets.scssc +0 -0
  81. data/spec/internal/tmp/cache/assets/test/sass/{b28605b1c659cf09fc72f3c1fff32918869d28b8 → 6449c927c92ef1ea4378c66161e3b0efe1bf954d}/_bootstrap.scssc +0 -0
  82. data/spec/internal/tmp/cache/assets/test/sass/{93e201cf4a11978a1f491a057a3bd569c3825210 → 71fba6bdfa89d88fe8a72b36eafd3b91cf10a6d0}/blacklight.css.scssc +0 -0
  83. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_alerts.scssc +0 -0
  84. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_background-variant.scssc +0 -0
  85. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_border-radius.scssc +0 -0
  86. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_buttons.scssc +0 -0
  87. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_center-block.scssc +0 -0
  88. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_clearfix.scssc +0 -0
  89. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_forms.scssc +0 -0
  90. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_gradients.scssc +0 -0
  91. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_grid-framework.scssc +0 -0
  92. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_grid.scssc +0 -0
  93. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_hide-text.scssc +0 -0
  94. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_image.scssc +0 -0
  95. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_labels.scssc +0 -0
  96. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_list-group.scssc +0 -0
  97. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_nav-divider.scssc +0 -0
  98. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_nav-vertical-align.scssc +0 -0
  99. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_opacity.scssc +0 -0
  100. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_pagination.scssc +0 -0
  101. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_panels.scssc +0 -0
  102. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_progress-bar.scssc +0 -0
  103. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_reset-filter.scssc +0 -0
  104. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_resize.scssc +0 -0
  105. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_responsive-visibility.scssc +0 -0
  106. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_size.scssc +0 -0
  107. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_tab-focus.scssc +0 -0
  108. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_table-row.scssc +0 -0
  109. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_text-emphasis.scssc +0 -0
  110. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_text-overflow.scssc +0 -0
  111. data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_vendor-prefixes.scssc +0 -0
  112. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_blacklight_base.scssc +0 -0
  113. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_bookmark.scssc +0 -0
  114. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_catalog.scssc +0 -0
  115. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_facets.scssc +0 -0
  116. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_group.scssc +0 -0
  117. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_header.scssc +0 -0
  118. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_layout.scssc +0 -0
  119. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_modal.scssc +0 -0
  120. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_search_history.scssc +0 -0
  121. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/blacklight.scssc +0 -0
  122. data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/blacklight_defaults.scssc +0 -0
  123. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_alerts.scssc +0 -0
  124. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_badges.scssc +0 -0
  125. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_breadcrumbs.scssc +0 -0
  126. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_button-groups.scssc +0 -0
  127. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_buttons.scssc +0 -0
  128. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_carousel.scssc +0 -0
  129. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_close.scssc +0 -0
  130. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_code.scssc +0 -0
  131. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_component-animations.scssc +0 -0
  132. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_dropdowns.scssc +0 -0
  133. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_forms.scssc +0 -0
  134. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_glyphicons.scssc +0 -0
  135. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_grid.scssc +0 -0
  136. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_input-groups.scssc +0 -0
  137. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_jumbotron.scssc +0 -0
  138. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_labels.scssc +0 -0
  139. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_list-group.scssc +0 -0
  140. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_media.scssc +0 -0
  141. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_mixins.scssc +0 -0
  142. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_modals.scssc +0 -0
  143. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_navbar.scssc +0 -0
  144. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_navs.scssc +0 -0
  145. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_normalize.scssc +0 -0
  146. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_pager.scssc +0 -0
  147. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_pagination.scssc +0 -0
  148. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_panels.scssc +0 -0
  149. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_popovers.scssc +0 -0
  150. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_print.scssc +0 -0
  151. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_progress-bars.scssc +0 -0
  152. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_responsive-embed.scssc +0 -0
  153. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_responsive-utilities.scssc +0 -0
  154. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_scaffolding.scssc +0 -0
  155. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_tables.scssc +0 -0
  156. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_thumbnails.scssc +0 -0
  157. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_tooltip.scssc +0 -0
  158. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_type.scssc +0 -0
  159. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_utilities.scssc +0 -0
  160. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_variables.scssc +0 -0
  161. data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_wells.scssc +0 -0
  162. data/spec/internal/tmp/cache/assets/test/sprockets/05604ccd7329b6afb8e7cdafbaa09fe3 +0 -0
  163. data/spec/internal/tmp/cache/assets/test/sprockets/0b3850cd2568d76d8583e8e6bffa44d9 +0 -0
  164. data/spec/internal/tmp/cache/assets/test/sprockets/0dffbe192bade10cf2b568c73695e96e +0 -0
  165. data/spec/internal/tmp/cache/assets/test/sprockets/0e349883625d7536c00fac0eafde4415 +0 -0
  166. data/spec/internal/tmp/cache/assets/test/sprockets/0f05dd42159c418ddcfa12edd10d98bb +0 -0
  167. data/spec/internal/tmp/cache/assets/test/sprockets/{ab2a05b91d7d316d4ceb47ce067006fb → 11b7eeb5da37de1c315d886349adbc98} +0 -0
  168. data/spec/internal/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  169. data/spec/internal/tmp/cache/assets/test/sprockets/16648e86ab6ef2950f3630ff0d566409 +0 -0
  170. data/spec/internal/tmp/cache/assets/test/sprockets/1877c8233ee501d08788d7324a70bd70 +0 -0
  171. data/spec/internal/tmp/cache/assets/test/sprockets/1c814c5c5dfd63768fff312c442847d6 +0 -0
  172. data/spec/internal/tmp/cache/assets/test/sprockets/1e699d4d1e439eeb1d52a210573f5053 +0 -0
  173. data/spec/internal/tmp/cache/assets/test/sprockets/2c58fb6a2406edc8067b46ee33af7262 +0 -0
  174. data/spec/internal/tmp/cache/assets/test/sprockets/2d0220441d85355dcd9ade523f95c048 +0 -0
  175. data/spec/internal/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  176. data/spec/internal/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  177. data/spec/internal/tmp/cache/assets/test/sprockets/{3cc20a63495e66e9251101ccfb0d389c → 39329b3558b9f58b0d4e43621aeaa8c2} +0 -0
  178. data/spec/internal/tmp/cache/assets/test/sprockets/39ed74e4d194593ec48c481d0fd76007 +0 -0
  179. data/spec/internal/tmp/cache/assets/test/sprockets/40271adcb3c4654dcb20b55abc2505c9 +0 -0
  180. data/spec/internal/tmp/cache/assets/test/sprockets/402ffe46f4586abacce366e0e3f690d8 +0 -0
  181. data/spec/internal/tmp/cache/assets/test/sprockets/{43da966542fafc2a4c768be78527391c → 46ec3d34d3576e4452b0a95b87176996} +0 -0
  182. data/spec/internal/tmp/cache/assets/test/sprockets/{9f68eb44ffcb9dd95623c179300414fd → 4a9e62d054a09c7c8e486f73bd032bdc} +0 -0
  183. data/spec/internal/tmp/cache/assets/test/sprockets/4c5e3966eae6a44e852dcf449c3f4cb0 +0 -0
  184. data/spec/internal/tmp/cache/assets/test/sprockets/52ce034583a746333fd7b8aa3916b8e1 +0 -0
  185. data/spec/internal/tmp/cache/assets/test/sprockets/52fe40fddbd8e73f6743866d4930bde6 +0 -0
  186. data/spec/internal/tmp/cache/assets/test/sprockets/{f3935581a84aba9a499005ed6a8e18be → 53329c49c9b4ba25d31c73c9b98260b0} +0 -0
  187. data/spec/internal/tmp/cache/assets/test/sprockets/{c9efce42580b0ad0374a052aa61f2a07 → 59b1fd64c6fc18a82465ad6fdc7094fa} +0 -0
  188. data/spec/internal/tmp/cache/assets/test/sprockets/677fd27eda24da657f51d725742582f3 +0 -0
  189. data/spec/internal/tmp/cache/assets/test/sprockets/6b2c5572f9e2cd322ad7b2878673d0dd +0 -0
  190. data/spec/internal/tmp/cache/assets/test/sprockets/735621cd88de5e37980cced4fb13ded9 +0 -0
  191. data/spec/internal/tmp/cache/assets/test/sprockets/7e4f29f7a7327f10677cd047be78cf8a +0 -0
  192. data/spec/internal/tmp/cache/assets/test/sprockets/{350a65d446eb7398f96d102f7a1a6d69 → 7f804c48c333d9758fa49ff9331b78e2} +0 -0
  193. data/spec/internal/tmp/cache/assets/test/sprockets/806c560c2f6e89ba0ad39561804ff79c +0 -0
  194. data/spec/internal/tmp/cache/assets/test/sprockets/{f3e7729c53b8a2c408086a61b58922ae → 82dd05a187bccd30f62fabb16491fe03} +0 -0
  195. data/spec/internal/tmp/cache/assets/test/sprockets/{f74af03e26e893af40b07a6d0f970cd4 → 82de1c42365fd1cf6a2adc2f644150c1} +0 -0
  196. data/spec/internal/tmp/cache/assets/test/sprockets/{813e23719129cf9f19349f720bebdf70 → 853ad370adfaa0da7ec26f51b89421f1} +0 -0
  197. data/spec/internal/tmp/cache/assets/test/sprockets/857d45eb67a43a30a6d5d0370464e596 +0 -0
  198. data/spec/internal/tmp/cache/assets/test/sprockets/8da6b6aafe413b1ba635e82f71c194be +0 -0
  199. data/spec/internal/tmp/cache/assets/test/sprockets/{b1a42de74c934edd0e5eed0f98a23597 → 8ea9ff17090b736331312d04c8036810} +0 -0
  200. data/spec/internal/tmp/cache/assets/test/sprockets/{d1bce36d6e3ab792562b9c929f2ce897 → 8fad7abbbfbb3748b36d73dfb482c2bd} +0 -0
  201. data/spec/internal/tmp/cache/assets/test/sprockets/9181f512b689ddb01d6778bac83791ac +0 -0
  202. data/spec/internal/tmp/cache/assets/test/sprockets/{b660ec1ede271559cfd0259eed96ae9c → 92c82efebbff4c3a9f96e08b308e92dd} +0 -0
  203. data/spec/internal/tmp/cache/assets/test/sprockets/93aaa9231a32901266b05632f3d35ecd +0 -0
  204. data/spec/internal/tmp/cache/assets/test/sprockets/{8ad5c3dc0f5fcc5d7a775d6294dda9f5 → 93c6b8da8f3373c42510a25694457483} +0 -0
  205. data/spec/internal/tmp/cache/assets/test/sprockets/{bb92f4b8c1bedafe60b6f226b549138a → 93dd91f6519f569f11fddf4df22460d9} +0 -0
  206. data/spec/internal/tmp/cache/assets/test/sprockets/9443255223294f7ad9ad6daba446afc3 +0 -0
  207. data/spec/internal/tmp/cache/assets/test/sprockets/96ff03d6a5f9604c6980874bb00c1d17 +0 -0
  208. data/spec/internal/tmp/cache/assets/test/sprockets/9ca9885875e2e0ab4e531cba60aa03e5 +0 -0
  209. data/spec/internal/tmp/cache/assets/test/sprockets/{41b62fb10530766b5b9fef3338f5f30b → a13d3a27038cf6570d22b54c54442642} +0 -0
  210. data/spec/internal/tmp/cache/assets/test/sprockets/{ba078b29a7f067b3acdd538a286235a8 → aa92d8a74950d2d6217a51424ce4b33b} +0 -0
  211. data/spec/internal/tmp/cache/assets/test/sprockets/ad4a54c43c2a4c3874bfde1c9f08c248 +0 -0
  212. data/spec/internal/tmp/cache/assets/test/sprockets/{30ca7caa200fa8eaddaef443913ad9ad → b146aa842b38c17ed4117b2f52d4b51f} +0 -0
  213. data/spec/internal/tmp/cache/assets/test/sprockets/b37776526b5809e55fbb0add6d059127 +0 -0
  214. data/spec/internal/tmp/cache/assets/test/sprockets/{db0d9534ecdebba33af5d1d81060e855 → b6d54919d5e4a3921287a5fb178dc455} +0 -0
  215. data/spec/internal/tmp/cache/assets/test/sprockets/c514fd002d57ddf3d94669e369d45283 +0 -0
  216. data/spec/internal/tmp/cache/assets/test/sprockets/{b225d67626669cb154cbe08a3c439d48 → cd59839c2fc0d494ffa76ef4c4dbfa42} +0 -0
  217. data/spec/internal/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  218. data/spec/internal/tmp/cache/assets/test/sprockets/{b3ae9e3cdd9991d7103b0a00e33b5778 → d32e733978c8eb7c7db3ec2b865ee87f} +0 -0
  219. data/spec/internal/tmp/cache/assets/test/sprockets/d6995317fba3b6344c75db70b8c997e2 +0 -0
  220. data/spec/internal/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  221. data/spec/internal/tmp/cache/assets/test/sprockets/{ecfc314951b349e27742c1b26880619e → d7bf17ad1471147b5314b4dda0bad9fe} +0 -0
  222. data/spec/internal/tmp/cache/assets/test/sprockets/{9ce190f082dc4fb74bddb818cc011ce6 → e6a1afebb687728d619fe27e84335d2f} +0 -0
  223. data/spec/internal/tmp/cache/assets/test/sprockets/{19f4ba6fa86d2609c171da9f5ee3b11a → e83c10c393da1c028c7d4217ecfc9c03} +0 -0
  224. data/spec/internal/tmp/cache/assets/test/sprockets/f64fd792a429f69332c1489015953219 +0 -0
  225. data/spec/internal/tmp/cache/assets/test/sprockets/{fa11f1beb15b0f04503ce1f06701a8bf → f7a87683461c3a58ee9b6e9546473c4e} +0 -0
  226. data/spec/internal/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  227. data/spec/internal/tmp/cache/assets/test/sprockets/{4e93570db72bb61820711448b78d548d → fed76e6bd857a06488c186874bbe2bb2} +0 -0
  228. data/spec/krikri_spec.rb +8 -0
  229. data/spec/lib/krikri/aggregation_entity_behavior_spec.rb +37 -0
  230. data/spec/lib/krikri/enricher_spec.rb +38 -1
  231. data/spec/lib/krikri/entity_consumer_spec.rb +27 -0
  232. data/spec/lib/krikri/indexer_spec.rb +48 -0
  233. data/spec/lib/krikri/mapper_agent_spec.rb +54 -40
  234. data/spec/lib/krikri/qa_query_client_spec.rb +120 -0
  235. data/spec/lib/krikri/random_search_index_docmument_builder_spec.rb +31 -0
  236. data/spec/lib/krikri/search_index_spec.rb +547 -0
  237. data/spec/models/activity_spec.rb +19 -0
  238. data/spec/models/provider_spec.rb +119 -0
  239. data/spec/models/qa_report_spec.rb +102 -0
  240. data/spec/models/validation_report_spec.rb +49 -0
  241. data/spec/spec_helper.rb +8 -0
  242. data/spec/support/shared_contexts/entities_query.rb +22 -0
  243. data/spec/support/shared_contexts/indexed_item.rb +27 -0
  244. data/spec/support/shared_contexts/provenance_query_client.rb +15 -2
  245. data/spec/views/krikri/providers/index.html.erb_spec.rb +23 -0
  246. data/spec/views/krikri/providers/show.html.erb_spec.rb +22 -0
  247. data/spec/views/krikri/qa_reports/index.html.erb_spec.rb +42 -0
  248. data/spec/views/krikri/qa_reports/show.html.erb_spec.rb +5 -0
  249. data/spec/views/krikri/records/index.html.erb_spec.rb +5 -0
  250. data/spec/views/krikri/records/show.html.erb_spec.rb +49 -0
  251. data/spec/views/krikri/reports/index.html.erb_spec.rb +26 -0
  252. metadata +501 -593
  253. data/app/controllers/krikri/report_lists_controller.rb +0 -10
  254. data/app/helpers/krikri/validation_reports_helper.rb +0 -5
  255. data/app/models/krikri/harvesters/oai_harvester.rb~ +0 -10
  256. data/app/models/krikri/original_record_desc.rb~ +0 -6
  257. data/app/models/krikri/original_record_metadata.rb~ +0 -9
  258. data/app/models/krikri/parser.rb~ +0 -5
  259. data/app/models/krikri/parsers/xml_parser.rb~ +0 -5
  260. data/app/views/krikri/report_lists/_validation_report_list.html.erb +0 -14
  261. data/app/views/krikri/report_lists/index.html.erb +0 -5
  262. data/app/views/krikri/validation_reports/_document_list.html.erb +0 -18
  263. data/app/views/krikri/validation_reports/_search_header.html.erb +0 -1
  264. data/app/views/krikri/validation_reports/_zero_results.html.erb +0 -1
  265. data/app/views/krikri/validation_reports/index.html.erb +0 -18
  266. data/config/initializers/config.rb~ +0 -19
  267. data/config/settings/test.yml~ +0 -3
  268. data/lib/aggregation.rb~ +0 -4
  269. data/lib/blacklight.rb~ +0 -8
  270. data/lib/krikri/enrichment.rb~ +0 -5
  271. data/lib/krikri/enrichment_agent.rb~ +0 -11
  272. data/lib/krikri/enrichment_agent_spec.rb~ +0 -2
  273. data/lib/krikri/enrichment_job.rb~ +0 -13
  274. data/lib/krikri/enrichments/dedup_values.rb~ +0 -7
  275. data/lib/krikri/enrichments/strip_ending_punctuation.rb~ +0 -18
  276. data/lib/krikri/enrichments/strip_leading_colons.rb~ +0 -15
  277. data/lib/krikri/enrichments/strip_leading_punctuation.rb~ +0 -18
  278. data/lib/krikri/enrichments.rb~ +0 -4
  279. data/lib/krikri/field_enrichment.rb~ +0 -3
  280. data/lib/krikri/harvesters/api_harvester.rb~ +0 -44
  281. data/lib/krikri/harvesters/basic_save_behavior.rb~ +0 -1
  282. data/lib/krikri/harvesters/file_harvester.rb~ +0 -4
  283. data/lib/krikri/harvesters/harvest_behavior.rb~ +0 -14
  284. data/lib/krikri/harvesters/mdl_api_harvester.rb~ +0 -7
  285. data/lib/krikri/harvesters/mdl_harvester.rb~ +0 -4
  286. data/lib/krikri/harvesters/oai_skip_deleted_behavior.rb~ +0 -17
  287. data/lib/krikri/id_minter.rb~ +0 -8
  288. data/lib/krikri/id_service.rb~ +0 -4
  289. data/lib/krikri/index_service.rb +0 -128
  290. data/lib/krikri/ldp/container.rb~ +0 -22
  291. data/lib/krikri/ldp/nr_source.rb~ +0 -4
  292. data/lib/krikri/ldp/rdf_source.rb~ +0 -24
  293. data/lib/krikri/ldp/resource.rb~ +0 -49
  294. data/lib/krikri/mapping_dsl.rb~ +0 -4
  295. data/lib/krikri/mapping_job.rb~ +0 -13
  296. data/lib/krikri/md5_minter.rb~ +0 -8
  297. data/lib/krikri/parsers/json_parser.rb~ +0 -17
  298. data/lib/krikri/parsers/oai_headers.rb~ +0 -4
  299. data/lib/krikri/parsers/oai_parser.rb~ +0 -2
  300. data/lib/krikri/parsers/oai_parser_headers.rb~ +0 -4
  301. data/lib/krikri/parsers/xml_parser.rb~ +0 -61
  302. data/lib/krikri/provenance_query.rb~ +0 -4
  303. data/lib/krikri/provenance_query_client.rb~ +0 -11
  304. data/lib/krikri/random_record_generator.rb +0 -19
  305. data/lib/krikri/util/edtf_converter.rb~ +0 -26
  306. data/lib/krikri/util/extended_date_parser.rb~ +0 -70
  307. data/lib/krikri/validation_report_list.rb +0 -61
  308. data/lib/tasks/jetty.rake~ +0 -12
  309. data/lib/tasks/krikri.rake~ +0 -20
  310. data/spec/factories/krikri_original_record.rb~ +0 -5
  311. data/spec/internal/lib/generators/test_app_generator.rb~ +0 -14
  312. data/spec/internal/tmp/cache/assets/test/sprockets/059eceaa18e2eaee3d5168f3949f4957 +0 -0
  313. data/spec/internal/tmp/cache/assets/test/sprockets/093d898bf3f20b26b13c82714a77c040 +0 -0
  314. data/spec/internal/tmp/cache/assets/test/sprockets/10517c9579f8d23c82fb8caa66dca6a7 +0 -0
  315. data/spec/internal/tmp/cache/assets/test/sprockets/2bec18569db80effd80a2a19a038100b +0 -0
  316. data/spec/internal/tmp/cache/assets/test/sprockets/4052820c15af72ba690230a0f92bd75e +0 -0
  317. data/spec/internal/tmp/cache/assets/test/sprockets/421c89c58d3e76046a0294dae1f731ff +0 -0
  318. data/spec/internal/tmp/cache/assets/test/sprockets/496a0d7dce1ff6bf4a9c3a089ea3a635 +0 -0
  319. data/spec/internal/tmp/cache/assets/test/sprockets/50b9db0b908b421a9b941a445dbaeacc +0 -0
  320. data/spec/internal/tmp/cache/assets/test/sprockets/5155772cce704d83a64aa83eeda20c5a +0 -0
  321. data/spec/internal/tmp/cache/assets/test/sprockets/528c628cf107f8be6dd122e1154344be +0 -0
  322. data/spec/internal/tmp/cache/assets/test/sprockets/5ed02c7072bb024fa0832a1ca4113227 +0 -0
  323. data/spec/internal/tmp/cache/assets/test/sprockets/60141dc3d16c502963c3d798a099862d +0 -0
  324. data/spec/internal/tmp/cache/assets/test/sprockets/6df5b5c0a8e6d87ced9504a460df875e +0 -0
  325. data/spec/internal/tmp/cache/assets/test/sprockets/6eefd2765a716d66ff857cfcda69a119 +0 -0
  326. data/spec/internal/tmp/cache/assets/test/sprockets/88ded10f28177bec1bddb0d72d6b1cd2 +0 -0
  327. data/spec/internal/tmp/cache/assets/test/sprockets/8edfca9082e02111be92e79000667f22 +0 -0
  328. data/spec/internal/tmp/cache/assets/test/sprockets/90b54a819800edfa41b67722d1561040 +0 -0
  329. data/spec/internal/tmp/cache/assets/test/sprockets/9c653367feff82588eb6041d783a5809 +0 -0
  330. data/spec/internal/tmp/cache/assets/test/sprockets/b1c03c36188b4f58f819510adb9a7e9c +0 -0
  331. data/spec/internal/tmp/cache/assets/test/sprockets/b35e12934e9f05662777579549e31cd7 +0 -0
  332. data/spec/internal/tmp/cache/assets/test/sprockets/b42c247628daaf44109584724682a6ad +0 -0
  333. data/spec/internal/tmp/cache/assets/test/sprockets/bb108ef3fc4c96d1c20cc41f97d943a0 +0 -0
  334. data/spec/internal/tmp/cache/assets/test/sprockets/c644ecad928e076f999e9c9a3bc350c9 +0 -0
  335. data/spec/internal/tmp/cache/assets/test/sprockets/c78dd20a0df27e9394a413bf2e4abf92 +0 -0
  336. data/spec/internal/tmp/cache/assets/test/sprockets/d24a7c4b8ac71a90e809881a64970898 +0 -0
  337. data/spec/internal/tmp/cache/assets/test/sprockets/dbba4bbc32c17ade3d618c5d0baeb371 +0 -0
  338. data/spec/internal/tmp/cache/assets/test/sprockets/e8276b98892dcac8285a592bb63fe75b +0 -0
  339. data/spec/internal/tmp/cache/assets/test/sprockets/e9f7ccc553ce1a217709cc7a08cfb032 +0 -0
  340. data/spec/internal/tmp/cache/assets/test/sprockets/eddae0741d973a8ab3df27c1ea5b635e +0 -0
  341. data/spec/internal/tmp/cache/assets/test/sprockets/f274b5f22db177b6464b50691d531688 +0 -0
  342. data/spec/internal/tmp/cache/assets/test/sprockets/f45dfdb34e84d3c72a3319399a7316a3 +0 -0
  343. data/spec/internal/tmp/cache/assets/test/sprockets/faac2909046aa87e1f1f08b2bf0ad2b2 +0 -0
  344. data/spec/krikri_spec.rb~ +0 -30
  345. data/spec/ldp/active_triples_spec.rb~ +0 -15
  346. data/spec/ldp/at_resource_spec.rb~ +0 -41
  347. data/spec/ldp/nr_source_spec.rb~ +0 -3
  348. data/spec/ldp/rdf_source_spec.rb~ +0 -4
  349. data/spec/ldp/resource_spec.rb~ +0 -49
  350. data/spec/lib/krikri/enrichment_agent_spec.rb~ +0 -4
  351. data/spec/lib/krikri/enrichments/capitalize_spec.rb~ +0 -24
  352. data/spec/lib/krikri/enrichments/dedup_values_spec.rb~ +0 -10
  353. data/spec/lib/krikri/enrichments/deduplication_spec.rb~ +0 -5
  354. data/spec/lib/krikri/enrichments/genre_filter_spec.rb~ +0 -19
  355. data/spec/lib/krikri/enrichments/iso_enrich_spec.rb~ +0 -5
  356. data/spec/lib/krikri/enrichments/parse_date_spec.rb~ +0 -16
  357. data/spec/lib/krikri/enrichments/strip_ending_punctuation_spec.rb~ +0 -16
  358. data/spec/lib/krikri/enrichments/strip_leading_colons_spec.rb~ +0 -16
  359. data/spec/lib/krikri/enrichments/strip_leading_punctuation_spec.rb~ +0 -16
  360. data/spec/lib/krikri/enrichments/timespan_spec.rb~ +0 -10
  361. data/spec/lib/krikri/enrichments/timespan_split_spec.rb~ +0 -59
  362. data/spec/lib/krikri/harvesters/api_harvester_spec.rb~ +0 -47
  363. data/spec/lib/krikri/harvesters/basic_save_behavior_spec.rb~ +0 -12
  364. data/spec/lib/krikri/harvesters/file_harvester_spec.rb~ +0 -3
  365. data/spec/lib/krikri/harvesters/harvest_behavior_spec.rb~ +0 -5
  366. data/spec/lib/krikri/harvesters/mdl_api_harvester_spec.rb~ +0 -11
  367. data/spec/lib/krikri/harvesters/mdl_harvester_spec.rb~ +0 -8
  368. data/spec/lib/krikri/harvesters/oai_skip_deleted_behavior.rb~ +0 -7
  369. data/spec/lib/krikri/harvesters/oai_skip_deleted_behavior_spec.rb~ +0 -15
  370. data/spec/lib/krikri/id_service_spec.rb~ +0 -3
  371. data/spec/lib/krikri/index_service_spec.rb +0 -83
  372. data/spec/lib/krikri/job_spec.rb~ +0 -13
  373. data/spec/lib/krikri/mapper_agent_spec.rb~ +0 -64
  374. data/spec/lib/krikri/mapper_spec.rb~ +0 -5
  375. data/spec/lib/krikri/mapping_dsl/parser_methods_spec.rb~ +0 -65
  376. data/spec/lib/krikri/mapping_dsl/property_declaration_spec.rb~ +0 -87
  377. data/spec/lib/krikri/mapping_dsl/rdf_subjects_spec.rb~ +0 -16
  378. data/spec/lib/krikri/mapping_dsl_spec.rb~ +0 -10
  379. data/spec/lib/krikri/mapping_job.rb~ +0 -12
  380. data/spec/lib/krikri/mapping_job_spec.rb~ +0 -11
  381. data/spec/lib/krikri/mapping_spec.rb~ +0 -5
  382. data/spec/lib/krikri/md5_minter_spec.rb~ +0 -5
  383. data/spec/lib/krikri/parser_value_array.rb~ +0 -5
  384. data/spec/lib/krikri/parsers/json_parser_spec.rb~ +0 -17
  385. data/spec/lib/krikri/parsers/xml_parser_spec.rb~ +0 -21
  386. data/spec/lib/krikri/provenance_query_client.rb~ +0 -5
  387. data/spec/lib/krikri/provenance_query_client_spec.rb~ +0 -8
  388. data/spec/lib/krikri/util/edtf_converter_spec.rb~ +0 -17
  389. data/spec/lib/krikri/util/extended_date_parser_spec.rb~ +0 -102
  390. data/spec/lib/krikri/validation_report_list_spec.rb +0 -50
  391. data/spec/models/activity_spec.rb~ +0 -41
  392. data/spec/models/dpla/map/aggregation_spec.rb~ +0 -67
  393. data/spec/models/harvesters/oai_harvester_spec.rb~ +0 -15
  394. data/spec/models/mapper_spec.rb~ +0 -5
  395. data/spec/models/original_record_metadata_spec.rb~ +0 -5
  396. data/spec/models/original_record_spec.rb~ +0 -5
  397. data/spec/support/shared_contexts/mapping_dsl.rb~ +0 -12
  398. data/spec/support/shared_contexts/provenance_query_client.rb~ +0 -6
  399. data/spec/support/shared_examples/enrichment.rb~ +0 -5
  400. data/spec/support/shared_examples/harvest_behavior.rb~ +0 -13
  401. data/spec/support/shared_examples/job.rb~ +0 -20
  402. data/spec/support/shared_examples/ldp_resource.rb~ +0 -4
  403. data/spec/support/shared_examples/oai_parser_headers.rb~ +0 -12
  404. data/spec/support/shared_examples/rdf_source.rb~ +0 -1
  405. data/spec/support/shared_examples/software_agent.rb~ +0 -5
  406. data/spec/support/shared_examples/string_enrichment.rb~ +0 -12
  407. data/spec/test_app_templates/lib/generators/test_app_generator.rb~ +0 -14
  408. data/spec/webmocks/oai.rb~ +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ba2b247b82e5f0d8a3f52adb0e3242d41deff3b
4
- data.tar.gz: 429288310bd3531d4fbb20881d7a17983c69a015
3
+ metadata.gz: 59195bbb3fbde31f549ca473ae9941c28a294947
4
+ data.tar.gz: dca46026cd0cf2c5cc51970aa0d69ae7a9ba3275
5
5
  SHA512:
6
- metadata.gz: 783c38573ddf5cac189f56220981aeba2768c1eba0a5e4d873d36642f4e633ca9e3ef449ba14ceae49d58b0bc05e426c9b5b84708f0ed7e9788ec305f3416464
7
- data.tar.gz: 817df4eee63756335abc562d8badc40160d32d83a92aa5fde93e32ba17ca2938b2b311eed93cf8469756939f6551afd3b0bca25ca2b269f504d6b21b258457b8
6
+ metadata.gz: 97d5fae3cf1dd0860ee9d66b800e0f1bde373367ec82bffaf3d48b5e73f4f7d2ba0976b06c6a43e0a2d0b9102e6830d5083819d7cbbcbc01995b656fd4220bb3
7
+ data.tar.gz: 767df8d2522301a580cabf47320347932ddfae28a3fd1e136d406d343cae6726827d26447c26541372d9debf9858933e79fe3efd332efba16da022ad22e252b4
@@ -17,3 +17,18 @@
17
17
  #document_list_table td {
18
18
  padding-right: 3em;
19
19
  }
20
+
21
+ h1 {
22
+ font-size: 2.2em;
23
+ margin-bottom: 0px;
24
+ }
25
+
26
+ h2 {
27
+ font-size: 1.5em;
28
+ color: #888;
29
+ margin-top: 2px;
30
+ }
31
+
32
+ h3 {
33
+ font-size: 1.3em;
34
+ }
@@ -0,0 +1,27 @@
1
+ module Krikri
2
+ ##
3
+ # Handles requests for provider dashboards for 'All Providers' and
4
+ # individual providers by ID.
5
+ #
6
+ # @see Krikri::Provider
7
+ class ProvidersController < ApplicationController
8
+ ##
9
+ # Renders the index view with `@providers` as an Array of {Krikri::Provider}s.
10
+ def index
11
+ @providers = Krikri::Provider.all
12
+ end
13
+
14
+ ##
15
+ # Renders the show view for the provider given by `id`.
16
+ def show
17
+ if params[:set_session]
18
+ session[:current_provider] = params[:id]
19
+ redirect_to :back, provider: params[:id]
20
+ elsif params[:clear_session]
21
+ session.delete :current_provider
22
+ redirect_to providers_path
23
+ end
24
+ @current_provider = Krikri::Provider.find(params[:id])
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ module Krikri
2
+ ##
3
+ # Handles HTTP requests for QA Reports
4
+ #
5
+ # @see Krikri::QAReport
6
+ class QaReportsController < ApplicationController
7
+ ##
8
+ # Renders a list of current reports
9
+ def index
10
+ @reports = Krikri::QAReport.all
11
+ end
12
+
13
+ ##
14
+ # Rendering the report as either a full `field` report or a `count` report.
15
+ #
16
+ # Responds to format of `text/csv` with a CSV rendering of the requested
17
+ # report type.
18
+ def show
19
+ @report = Krikri::QAReport.find(params[:id])
20
+ @type = params[:type] == 'count' ? :count : :field
21
+
22
+ respond_to do |format|
23
+ format.html
24
+ format.csv { render text: @report.send("#{@type}_csv".to_sym).to_csv }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -7,11 +7,14 @@ module Krikri
7
7
  # ApplicationController. It does not interit from Krikri's
8
8
  # ApplicationController.
9
9
  class RecordsController < CatalogController
10
- before_action :authenticate_user!
10
+ before_action :authenticate_user!, :set_provider
11
+
12
+ self.solr_search_params_logic += [:records_by_provider]
13
+
11
14
  ##
12
- # RecordsReportsController has access to views in the following
15
+ # RecordsController has access to views in the following
13
16
  # directories:
14
- # krikri/validation_reports
17
+ # krikri/records
15
18
  # catalog (defined in Blacklight)
16
19
  # It inherits view templates from the host application's
17
20
  # ApplicationController. It uses krikri's application layout:
@@ -81,6 +84,8 @@ module Krikri
81
84
  config.solr_document_model = Krikri::SearchIndexDocument
82
85
  end
83
86
 
87
+ private
88
+
84
89
  ##
85
90
  # Construct a valid item URI from a local name, and use it to fetch a single
86
91
  # document from the search index.
@@ -90,9 +95,28 @@ module Krikri
90
95
  # with Blacklight v5.10.
91
96
  # @param String id is a local name.
92
97
  def get_solr_response_for_doc_id(id=nil, extra_controller_params={})
93
- id_uri = Krikri::Settings.marmotta.item_container << '/' << id
94
- solr_response = solr_repository.find(id_uri, extra_controller_params)
98
+ id = (RDF::URI(Krikri::Settings.marmotta.item_container) / id).to_s if id
99
+ solr_response = solr_repository.find(id, extra_controller_params)
95
100
  [solr_response, solr_response.documents.first]
96
101
  end
102
+
103
+ ##
104
+ # Limit the records returned by a Solr request to those belonging to the
105
+ # current provider.
106
+ # @param [Hash] solr_parameters a hash of parameters to be sent to Solr.
107
+ # @param [Hash] user_parameters a hash of user-supplied parameters.
108
+ def records_by_provider(solr_params, user_params)
109
+ if @provider_id.present?
110
+ provider = Krikri::Provider.find(@provider_id)
111
+ solr_params[:fq] ||= []
112
+ solr_params[:fq] << "provider_id:\"#{provider.rdf_subject}\""
113
+ end
114
+ end
115
+
116
+ ##
117
+ # Sets the provider id for use as a search filter/view
118
+ def set_provider
119
+ @provider_id = params[:provider]
120
+ end
97
121
  end
98
122
  end
@@ -0,0 +1,24 @@
1
+ module Krikri
2
+ ##
3
+ # Handles HTTP requests for the Reports dashboard, presenting all types of
4
+ # reports, filtered by {Krikri::Provider} if given.
5
+ class ReportsController < ApplicationController
6
+ layout 'krikri/application'
7
+
8
+ ##
9
+ # Renders the index view, giving `@validation_reports` and `@qa_reports`
10
+ # for the specified provider.
11
+ def index
12
+ @current_provider = params[:provider]
13
+ @validation_reports = Krikri::ValidationReport.new.all do
14
+ self.provider_id = @current_provider
15
+ end
16
+
17
+ if @current_provider
18
+ @qa_reports = Array(Krikri::QAReport.find_by(provider: @current_provider))
19
+ else
20
+ @qa_reports = Krikri::QAReport.all
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,14 +1,12 @@
1
1
  module Krikri
2
2
  ##
3
- # Marshals SolrDocuments for views.
4
- # Sets default Solr request params for Validation Reports.
3
+ # Marshals validation reports for views.
5
4
  #
6
5
  # ValidationReportsController inherits from the host application's
7
6
  # ApplicationController. It does not interit from Krikri's
8
7
  # ApplicationController.
9
8
  class ValidationReportsController < CatalogController
10
9
  before_action :authenticate_user!
11
- before_filter :valid_params, :only => :index
12
10
 
13
11
  ##
14
12
  # ValidationReportsController has access to views in the following
@@ -19,32 +17,16 @@ module Krikri
19
17
  # ApplicationController. It uses krikri's application layout:
20
18
  layout 'krikri/application'
21
19
 
22
- configure_blacklight do |config|
23
-
24
- # Default parameters to send to solr for all search-like requests.
25
- config.default_solr_params = {
26
- :qt => 'standard',
27
- :rows => 100
28
- }
29
-
30
- # solr fields to be displayed in the index (search results) view
31
- # The ordering of the field names is the order of the display
32
- config.add_index_field 'sourceResource_title', :label => 'Title',
33
- helper_method: 'link_to_show'
34
- config.add_index_field 'id', :label => 'ID', helper_method: 'link_to_show'
35
- config.add_index_field 'isShownAt_id', :label => 'Is Shown At',
36
- helper_method: 'make_this_a_link'
37
-
38
- config.show.route = { controller: 'records' }
39
-
40
- config.solr_document_model = Krikri::SearchIndexDocument
20
+ def show
21
+ provider_id = params[:provider]
22
+ page = params[:page]
23
+ per_page = params[:per_page]
24
+ @response = ValidationReport.new.find(params[:id]) do
25
+ self.provider_id = provider_id
26
+ self.start = page
27
+ self.rows = per_page
28
+ end
29
+ @documents = @response.documents
41
30
  end
42
-
43
- private
44
-
45
- def valid_params
46
- redirect_to :report_lists if !params['report_name'] || !params['q']
47
- end
48
-
49
31
  end
50
32
  end
@@ -1,4 +1,66 @@
1
1
  module Krikri
2
2
  module ApplicationHelper
3
+ ##
4
+ # @return [Array<Blacklight::SolrResponse::Facets::FacetItem>]
5
+ def available_providers
6
+ Krikri::Provider.all(&:reload)
7
+ end
8
+
9
+ ##
10
+ # @param provider [String, nil]
11
+ # @return [String]
12
+ def provider_name(provider)
13
+ provider = Krikri::Provider.find(provider) if provider.is_a? String
14
+ provider.present? ? provider.provider_name : "All Providers"
15
+ end
16
+
17
+ ##
18
+ # Gives the last path fragment for a given URI string in HTML escaped form
19
+ #
20
+ # @example
21
+ # local_name('http://my_domain/blah/0123') => '0123'
22
+ #
23
+ # @param uri [#to_s] a URL formatted string to split
24
+ # @return [String] the escaped fragment
25
+ def local_name(uri)
26
+ uri.to_s.split('/').last.html_safe
27
+ end
28
+
29
+ ##
30
+ # Link to the current page, changing the session provider the given
31
+ # value.
32
+ # @param provider [String, nil]
33
+ def link_to_current_page_by_provider(provider)
34
+ provider = Krikri::Provider.find(provider) if provider.is_a? String
35
+
36
+ return link_to_provider_page(provider) if params[:controller] ==
37
+ 'krikri/providers'
38
+ params[:provider] = provider.id
39
+ params[:session_provider] = provider.id
40
+ link_to provider_name(provider), params
41
+ end
42
+
43
+ def set_session_provider(provider)
44
+ provider = Krikri::Provider.find(provider) if provider.is_a? String
45
+ link_to provider_name(provider),
46
+ krikri.provider_path(provider.id, set_session: 1),
47
+ rel: 'nofollow'
48
+ end
49
+
50
+ def remove_session_provider
51
+ link_to "All Providers",
52
+ krikri.provider_path('clear', clear_session: 1),
53
+ rel: 'nofollow'
54
+ end
55
+
56
+ ##
57
+ # Link to the ProviderController's :index or :show route, using the given
58
+ # provider id in the case of :show.
59
+ # @param provider [String, nil]
60
+ def link_to_provider_page(provider)
61
+ return link_to(provider_name(provider), providers_path) unless provider
62
+ return link_to provider_name(provider),
63
+ provider_path(provider.id, set_session: provider.id)
64
+ end
3
65
  end
4
66
  end
@@ -1,5 +1,19 @@
1
1
  module Krikri
2
2
  module RecordsHelper
3
3
  include Krikri::SearchResultsHelperBehavior
4
+
5
+ ##
6
+ # Return the id of a document randomly selected from the search index.
7
+ # @param provider_id [String, nil] the id of the provider that the randomly
8
+ # selected document will belong to.
9
+ # @return [String, nil] the id of the randomly selected document. If none are
10
+ # available, gives `nil`
11
+ def random_record_id(provider_id)
12
+ doc = Krikri::RandomSearchIndexDocumentBuilder.new do
13
+ self.provider_id = provider_id
14
+ end.document
15
+
16
+ doc.present? ? local_name(doc.id) : nil
17
+ end
4
18
  end
5
19
  end
@@ -0,0 +1,16 @@
1
+ module Krikri
2
+ module ReportsHelper
3
+ def render_validation_report(report)
4
+ return validation_report_title(report) if report.items.first.hits == 0
5
+ link_to validation_report_title(report), { :controller =>
6
+ 'validation_reports', :action => 'show', :id => report.name,
7
+ :provider => @current_provider }, :method => :get
8
+ end
9
+
10
+ def validation_report_title(report)
11
+ return "#{report.name} missing (#{report.items.first.hits} record)" if
12
+ report.items.first.hits == 1
13
+ "#{report.name} missing (#{report.items.first.hits} records)"
14
+ end
15
+ end
16
+ end
@@ -83,5 +83,32 @@ module Krikri
83
83
  RDF::URI(Krikri::Settings['marmotta']['ldp']) /
84
84
  Krikri::Settings['prov']['activity'] / id.to_s
85
85
  end
86
+
87
+ ##
88
+ # Return an Enumerator of URI strings of entities (e.g. aggregations or
89
+ # original records) that pertain to this activity
90
+ #
91
+ # @return [Enumerator] URI strings
92
+ def entity_uris
93
+ activity_uri = RDF::URI(rdf_subject) # This activity's LDP URI
94
+ query = Krikri::ProvenanceQueryClient.find_by_activity(activity_uri)
95
+ query.each_solution.lazy.map do |s|
96
+ s.record.to_s
97
+ end
98
+ end
99
+
100
+ ##
101
+ # Return an Enumerator of entities (e.g. aggregations or original records)
102
+ # that have been affected by this activity.
103
+ #
104
+ # The kind of object that is returned depends on the EntityBehavior class
105
+ # that is associated with the SoftwareAgent that is represented by the
106
+ # Activity's `agent' field.
107
+ #
108
+ # @return [Enumerator] Objects
109
+ def entities
110
+ agent_instance.entity_behavior.entities(self)
111
+ end
112
+
86
113
  end
87
114
  end
@@ -0,0 +1,80 @@
1
+ module Krikri
2
+ ##
3
+ # This models provider data from the {Krikri::Repository}.
4
+ #
5
+ # @todo create an appropriate `ActiveTriples::PersistenceStrategy' for
6
+ # handling providers as data from a repository alongside LDP data.
7
+ # @see ActiveTriples::Resource
8
+ class Provider < DPLA::MAP::Agent
9
+ configure :base_uri => Krikri::Settings.prov.provider_base
10
+
11
+ ##
12
+ # Gives a list of all providers, ignoring those with no URI (bnodes).
13
+ #
14
+ # @return [Array<Krikri::Provider>]
15
+ def self.all
16
+ query_params = { :rows => 0,
17
+ :id => '*:*',
18
+ 'facet.field' => 'provider_id' }
19
+ response = Krikri::SolrResponseBuilder.new(query_params).response
20
+ response.facets.first.items.map do |item|
21
+ provider = new(item.value)
22
+ provider.node? ? nil : provider
23
+ end.compact
24
+ end
25
+
26
+ ##
27
+ # @param id [#to_s] the identifier (local name or URI) of the provider
28
+ # to find
29
+ #
30
+ # @return [Krikri::Provider]
31
+ # @todo Use {ActiveTriples}/{RDF::Repository} to populate the object
32
+ def self.find(id)
33
+ return nil if id.nil?
34
+ provider = new(id)
35
+ provider.reload
36
+ return nil if provider.empty?
37
+ provider
38
+ end
39
+
40
+ ##
41
+ # Loads the provider's data from the repository.
42
+ #
43
+ # @return [Krikri::Provider] self
44
+ def reload
45
+ query = Krikri::Repository.query_client.select.where([self, :p, :o])
46
+ query.each_solution do |solution|
47
+ set_value(solution.p, solution.o)
48
+ end
49
+
50
+ self
51
+ end
52
+
53
+ ##
54
+ # A list of records of type ore:Aggregation associated with this provider
55
+ #
56
+ # @return [Array<DPLA::MAP::Aggregation>] the Aggregations with this
57
+ # provider
58
+ def records
59
+ query = Krikri::Repository.query_client.select
60
+ .where([:record, RDF::EDM.provider, self],
61
+ [:record, RDF.type, RDF::ORE.Aggregation])
62
+
63
+ query.execute.map do |solution|
64
+ DPLA::MAP::Aggregation.new(solution.record)
65
+ end
66
+ end
67
+
68
+ ##
69
+ # @return [String] the local name (last uri segment) for the provider
70
+ def id
71
+ node? ? nil : rdf_subject.to_s.gsub(base_uri.to_s, '')
72
+ end
73
+
74
+ ##
75
+ # @return [String] the name of the provider
76
+ def provider_name
77
+ label.first || providedLabel.first || id
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,238 @@
1
+ module Krikri
2
+ ##
3
+ # Represents a QA Report, giving details about a set of records associated
4
+ # with a given provider. Reports are given as structured hashes, containing
5
+ # keys for each registered property in the {DPLA::MAP::Aggregation} structure.
6
+ #
7
+ # Reports include two report types, a `#field_report` and a `#count_report`.
8
+ #
9
+ # The `#field_report` includes values for each property with the URIs for the
10
+ # `ore:Aggregation` and `edm:isShownAt` (`edm:WebResource`) associated with
11
+ # that field.
12
+ #
13
+ # The `#count_report` includes values for each field, with the count occurances
14
+ # for that value across all records for the provider.
15
+ #
16
+ # `QAReports` are saved to the database (with timestamp, etc... via
17
+ # {ActiveRecord}). More than one report can be associated with each provider.
18
+ #
19
+ # Reports can also serialize themselves as `csv`, via `#field_csv` and
20
+ # `#count_csv`.
21
+ #
22
+ # @example:
23
+ #
24
+ # report = QAReport.create(provider: 'moomin_valley')
25
+ # report.generate_field_report!
26
+ # report.generate_count_report!
27
+ #
28
+ # report.field_report['edm:aggregatedCHO->dc:alternative']
29
+ # => {"Stonewall Inn Graffiti"=>
30
+ # [{:aggregation=>"http://localhost:8983/marmotta/ldp/items/krikri_sample",
31
+ # :isShownAt=> "http://digitalcollections.nypl.org/items/12345"}]}
32
+ #
33
+ # report.count_report['edm:aggregatedCHO->dc:alternative']
34
+ # => {"Stonewall Inn Graffiti"=>1}
35
+ #
36
+ # @see Krikri::QAQueryClient
37
+ class QAReport < ActiveRecord::Base
38
+ serialize :field_report, Hash
39
+ serialize :count_report, Hash
40
+
41
+ ##
42
+ # Generates and saves the field report for the provider, sending SPARQL
43
+ # queries as necessary.
44
+ #
45
+ # @return [Hash]
46
+ def generate_field_report!
47
+ report = field_queries.inject({}) do |report_hash, (k, v)|
48
+ report_hash[k] = solutions_to_hash(v.execute)
49
+ report_hash
50
+ end
51
+ update(field_report: report)
52
+ end
53
+
54
+ ##
55
+ # Generates and saves the coun treport for the provider, sending SPARQL
56
+ # queries as necessary.
57
+ #
58
+ # @return [Hash]
59
+ def generate_count_report!
60
+ report = count_queries.inject({}) do |report_hash, (k, v)|
61
+ report_hash[k] = solutions_to_counts(v.execute)
62
+ report_hash
63
+ end
64
+
65
+ update(count_report: report)
66
+ end
67
+
68
+ ##
69
+ # @param include_fields
70
+ #
71
+ # @return [CSV::Table] a table containing values, aggregations, and
72
+ # isShownAt URLs for each included field
73
+ def field_csv(*include_fields)
74
+ fields = field_report.keys
75
+ fields.select! { |f| include_fields.include? f } unless
76
+ include_fields.empty?
77
+
78
+ variables = [:value, :aggregation, :isShownAt]
79
+ headers = fields.product(variables).map { |header| header.join(' ') }
80
+
81
+ table = CSV::Table.new([CSV::Row.new(headers, [], true)])
82
+ return table if field_report.nil? || field_report.empty?
83
+
84
+ rows = []
85
+
86
+ field_report.each do |field, values|
87
+ values.each do |value, agg_list|
88
+ agg_list.each_with_index do |agg_hash, i|
89
+ rows[i] ||= CSV::Row.new(headers, [])
90
+ rows[i]["#{field} value"] = value.to_s
91
+ rows[i]["#{field} aggregation"] = agg_hash[:aggregation].to_s
92
+ rows[i]["#{field} isShownAt"] = agg_hash[:isShownAt].to_s
93
+ end
94
+ end
95
+ end
96
+
97
+ rows.each { |r| table << r }
98
+ table
99
+ end
100
+
101
+ ##
102
+ # @param include_fields
103
+ #
104
+ # @return [CSV::Table] a table containing values and their counts
105
+ # for each included field
106
+ def count_csv(*include_fields)
107
+ fields = count_report.keys
108
+ fields.select! { |f| include_fields.include? f } unless
109
+ include_fields.empty?
110
+
111
+ variables = [:value, :count]
112
+ headers = fields.product(variables).map { |header| header.join(' ') }
113
+
114
+ table = CSV::Table.new([CSV::Row.new(headers, [], true)])
115
+ return table if count_report.nil? || count_report.empty?
116
+
117
+ rows = []
118
+
119
+ count_report.each do |field, hash|
120
+ hash.to_a.each_with_index do |value, i|
121
+ rows[i] ||= CSV::Row.new(headers, [])
122
+ rows[i]["#{field} value"] = value.first.to_s
123
+ rows[i]["#{field} count"] = value.last
124
+ end
125
+ end
126
+
127
+ rows.each { |r| table << r }
128
+ table
129
+ end
130
+
131
+ ##
132
+ # Retrieves the provider as an object
133
+ #
134
+ # @return [Krikri::Provider] the provider as a populated
135
+ # {ActiveTriples::RDFSource}
136
+ # @todo figure out a better relations pattern between {ActiveRecord} objects
137
+ # and {ActiveTriples}
138
+ def build_provider
139
+ Krikri::Provider.find(provider)
140
+ end
141
+
142
+ private
143
+
144
+ ##
145
+ # @return [Hash<SPARQL::Client::Query]
146
+ def count_queries
147
+ queries = {}
148
+ each_property(DPLA::MAP::Aggregation).each do |properties|
149
+ queries[property_name(properties)] =
150
+ QAQueryClient.counts_for_predicate(properties,
151
+ RDF::URI(build_provider.rdf_subject))
152
+ end
153
+ queries
154
+ end
155
+
156
+ ##
157
+ # @return [Array<SPARQL::Client::Query]
158
+ def field_queries
159
+ queries = {}
160
+ each_property(DPLA::MAP::Aggregation).each do |properties|
161
+ queries[property_name(properties)] =
162
+ QAQueryClient.values_for_predicate(properties,
163
+ RDF::URI(build_provider.rdf_subject))
164
+ end
165
+ queries
166
+ end
167
+
168
+ ##
169
+ # @param properties [Array<RDF::URI>] an array of URIs to join
170
+ #
171
+ # @return [String] a string representing the property array as qualified
172
+ # names
173
+ def property_name(properties)
174
+ properties.map(&:pname).join('->')
175
+ end
176
+
177
+ ##
178
+ # @param solutions [RDF::Query::Solutions]
179
+ # @return [Hash] a hash of values, aggregations, and isShownAt URIs
180
+ def solutions_to_hash(solutions)
181
+ matches = {}
182
+ solutions.each do |solution|
183
+ key = solution.value.to_s
184
+ matches[key] ||= []
185
+ matches[key] << { aggregation: solution.aggregation.to_s,
186
+ isShownAt: solution.isShownAt.to_s }
187
+
188
+ end
189
+ matches
190
+ end
191
+
192
+ ##
193
+ # @param solutions [RDF::Query::Solutions]
194
+ # @return [Hash] a hash of values and counts
195
+ def solutions_to_counts(solutions)
196
+ matches = {}
197
+ solutions.each do |solution|
198
+ count = solution[:count].to_i
199
+ matches[solution.value.to_s] = count unless count == 0
200
+ end
201
+ matches
202
+ end
203
+
204
+ ##
205
+ # Gives an enumerator for the properties on an {ActiveTriples::Resource}
206
+ # class; #each/#next give an Array representing the property chain for each
207
+ # property config that does not have a `class_name` (i.e. is configured as
208
+ # a literal).
209
+ #
210
+ # @return [Enumerator] an deep enumerator over all registered
211
+ # properties
212
+ # @todo move to {ActiveTriples}?
213
+ def each_property(klass)
214
+ nested_properties_list(klass).flatten(1).to_enum
215
+ end
216
+
217
+ ##
218
+ # @param klass [#properties]
219
+ #
220
+ # @return [Array<Array<RDF::Term>>] An array of property predicates
221
+ # @todo move to {ActiveTriples}?
222
+ def nested_properties_list(klass)
223
+ klass.properties.map do |_, config|
224
+ properties = []
225
+ if config.class_name.nil? || config.class_name == klass
226
+ properties << Array(config.predicate)
227
+ else
228
+ nested_properties_list(config.class_name).each do |prop|
229
+ prop.each do |p|
230
+ properties << Array(config.predicate).append(p).flatten
231
+ end
232
+ end
233
+ end
234
+ properties
235
+ end
236
+ end
237
+ end
238
+ end