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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/krikri/application.css +15 -0
- data/app/controllers/krikri/providers_controller.rb +27 -0
- data/app/controllers/krikri/qa_reports_controller.rb +28 -0
- data/app/controllers/krikri/records_controller.rb +29 -5
- data/app/controllers/krikri/reports_controller.rb +24 -0
- data/app/controllers/krikri/validation_reports_controller.rb +11 -29
- data/app/helpers/krikri/application_helper.rb +62 -0
- data/app/helpers/krikri/records_helper.rb +14 -0
- data/app/helpers/krikri/reports_helper.rb +16 -0
- data/app/models/krikri/activity.rb +27 -0
- data/app/models/krikri/provider.rb +80 -0
- data/app/models/krikri/qa_report.rb +238 -0
- data/app/models/krikri/validation_report.rb +62 -0
- data/app/views/krikri/providers/index.html.erb +18 -0
- data/app/views/krikri/providers/show.html.erb +21 -0
- data/app/views/krikri/qa_reports/index.html.erb +12 -0
- data/app/views/krikri/qa_reports/show.html.erb +1 -0
- data/app/views/krikri/records/index.html.erb +0 -2
- data/app/views/krikri/records/show.html.erb +12 -9
- data/app/views/krikri/reports/_qa_report_list.html.erb +13 -0
- data/app/views/krikri/reports/_validation_report_list.html.erb +10 -0
- data/app/views/krikri/reports/index.html.erb +11 -0
- data/app/views/krikri/shared/_flash_message.html.erb +1 -0
- data/app/views/krikri/shared/_navigation.html.erb +38 -8
- data/app/views/krikri/validation_reports/_validation_report.html.erb +23 -0
- data/app/views/krikri/validation_reports/show.html.erb +19 -0
- data/config/routes.rb +6 -2
- data/config/settings/development.yml +6 -0
- data/config/settings/test.yml +9 -0
- data/db/migrate/20150328035550_add_qa_report.rb +11 -0
- data/lib/generators/krikri/templates/schema.xml +36 -36
- data/lib/krikri/engine.rb +10 -0
- data/lib/krikri/enricher.rb +14 -15
- data/lib/krikri/entity_behavior.rb +40 -0
- data/lib/krikri/entity_behaviors/aggregation_entity_behavior.rb +29 -0
- data/lib/krikri/entity_behaviors/original_record_entity_behavior.rb +26 -0
- data/lib/krikri/entity_consumer.rb +48 -0
- data/lib/krikri/harvester.rb +8 -0
- data/lib/krikri/indexer.rb +46 -0
- data/lib/krikri/mapper.rb +25 -9
- data/lib/krikri/qa_query_client.rb +154 -0
- data/lib/krikri/random_search_index_document_builder.rb +41 -0
- data/lib/krikri/search_index.rb +326 -0
- data/lib/krikri/search_results_helper_behavior.rb +2 -29
- data/lib/krikri/software_agent.rb +15 -0
- data/lib/krikri/solr_response_builder.rb +14 -0
- data/lib/krikri/version.rb +1 -1
- data/lib/krikri.rb +5 -0
- data/lib/tasks/krikri.rake +10 -11
- data/spec/controllers/application_controller_spec.rb +5 -0
- data/spec/controllers/providers_controller_spec.rb +37 -0
- data/spec/controllers/qa_reports_controller_spec.rb +69 -0
- data/spec/controllers/records_controller_spec.rb +73 -0
- data/spec/controllers/reports_controller_spec.rb +56 -0
- data/spec/controllers/validation_reports_controller_spec.rb +4 -5
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +207 -0
- data/spec/factories/krikri_activities.rb +34 -10
- data/spec/factories/krikri_provider.rb +8 -0
- data/spec/factories/krikri_qa_report.rb +7 -0
- data/spec/helpers/krikri/application_helper_spec.rb +43 -0
- data/spec/helpers/krikri/records_helper_spec.rb +15 -3
- data/spec/internal/Gemfile +3 -4
- data/spec/internal/Gemfile.lock +59 -37
- data/spec/internal/app/assets/javascripts/application.js +1 -1
- data/spec/internal/config/initializers/blacklight_initializer.rb +1 -1
- data/spec/internal/config/initializers/devise.rb +2 -2
- data/spec/internal/config/secrets.yml +2 -2
- data/spec/internal/db/development.sqlite3 +0 -0
- data/spec/internal/db/migrate/{20150320153132_devise_create_users.rb → 20150403220331_devise_create_users.rb} +0 -0
- data/spec/internal/db/migrate/{20150320153151_create_searches.blacklight.rb → 20150403220354_create_searches.blacklight.rb} +0 -0
- data/spec/internal/db/migrate/{20150320153152_create_bookmarks.blacklight.rb → 20150403220355_create_bookmarks.blacklight.rb} +0 -0
- data/spec/internal/db/migrate/{20150320153153_add_polymorphic_type_to_bookmarks.blacklight.rb → 20150403220356_add_polymorphic_type_to_bookmarks.blacklight.rb} +0 -0
- data/spec/internal/db/schema.rb +9 -1
- data/spec/internal/db/test.sqlite3 +0 -0
- data/spec/internal/log/development.log +88 -83
- data/spec/internal/log/test.log +3229 -83003
- data/spec/internal/tmp/cache/assets/test/sass/{b28605b1c659cf09fc72f3c1fff32918869d28b8 → 6449c927c92ef1ea4378c66161e3b0efe1bf954d}/_bootstrap-sprockets.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{b28605b1c659cf09fc72f3c1fff32918869d28b8 → 6449c927c92ef1ea4378c66161e3b0efe1bf954d}/_bootstrap.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{93e201cf4a11978a1f491a057a3bd569c3825210 → 71fba6bdfa89d88fe8a72b36eafd3b91cf10a6d0}/blacklight.css.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_alerts.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_background-variant.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_border-radius.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_buttons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_center-block.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_clearfix.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_forms.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_gradients.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_grid-framework.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_grid.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_hide-text.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_image.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_labels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_list-group.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_nav-divider.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_nav-vertical-align.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_opacity.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_pagination.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_panels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_progress-bar.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_reset-filter.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_resize.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_responsive-visibility.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_size.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_tab-focus.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_table-row.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_text-emphasis.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_text-overflow.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{4a3ee647961c7e45976eb2c0a94406aad3427b3d → 75eb48b5361d55a8133e0091d663a085dacee3c5}/_vendor-prefixes.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_blacklight_base.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_bookmark.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_catalog.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_facets.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_group.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_header.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_layout.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_modal.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/_search_history.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/blacklight.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{ca8c12d03785e0d6cd4554f4d3939e7836d38282 → 78e0580c292179fc5fdd7b74b703dad1702b4176}/blacklight_defaults.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_alerts.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_badges.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_breadcrumbs.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_button-groups.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_buttons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_carousel.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_close.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_code.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_component-animations.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_dropdowns.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_forms.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_glyphicons.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_grid.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_input-groups.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_jumbotron.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_labels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_list-group.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_media.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_mixins.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_modals.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_navbar.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_navs.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_normalize.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_pager.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_pagination.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_panels.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_popovers.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_print.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_progress-bars.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_responsive-embed.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_responsive-utilities.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_scaffolding.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_tables.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_thumbnails.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_tooltip.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_type.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_utilities.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_variables.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sass/{a1ec1bb9c9cafeb054d542e861ebc8ffd5904439 → f79e9f3544f6b8d5f7ca05529260dceec8dd44ed}/_wells.scssc +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/05604ccd7329b6afb8e7cdafbaa09fe3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/0b3850cd2568d76d8583e8e6bffa44d9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/0dffbe192bade10cf2b568c73695e96e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/0e349883625d7536c00fac0eafde4415 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/0f05dd42159c418ddcfa12edd10d98bb +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{ab2a05b91d7d316d4ceb47ce067006fb → 11b7eeb5da37de1c315d886349adbc98} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/16648e86ab6ef2950f3630ff0d566409 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/1877c8233ee501d08788d7324a70bd70 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/1c814c5c5dfd63768fff312c442847d6 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/1e699d4d1e439eeb1d52a210573f5053 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2c58fb6a2406edc8067b46ee33af7262 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2d0220441d85355dcd9ade523f95c048 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{3cc20a63495e66e9251101ccfb0d389c → 39329b3558b9f58b0d4e43621aeaa8c2} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/39ed74e4d194593ec48c481d0fd76007 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/40271adcb3c4654dcb20b55abc2505c9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/402ffe46f4586abacce366e0e3f690d8 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{43da966542fafc2a4c768be78527391c → 46ec3d34d3576e4452b0a95b87176996} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{9f68eb44ffcb9dd95623c179300414fd → 4a9e62d054a09c7c8e486f73bd032bdc} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4c5e3966eae6a44e852dcf449c3f4cb0 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/52ce034583a746333fd7b8aa3916b8e1 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/52fe40fddbd8e73f6743866d4930bde6 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{f3935581a84aba9a499005ed6a8e18be → 53329c49c9b4ba25d31c73c9b98260b0} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{c9efce42580b0ad0374a052aa61f2a07 → 59b1fd64c6fc18a82465ad6fdc7094fa} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/677fd27eda24da657f51d725742582f3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6b2c5572f9e2cd322ad7b2878673d0dd +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/735621cd88de5e37980cced4fb13ded9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/7e4f29f7a7327f10677cd047be78cf8a +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{350a65d446eb7398f96d102f7a1a6d69 → 7f804c48c333d9758fa49ff9331b78e2} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/806c560c2f6e89ba0ad39561804ff79c +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{f3e7729c53b8a2c408086a61b58922ae → 82dd05a187bccd30f62fabb16491fe03} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{f74af03e26e893af40b07a6d0f970cd4 → 82de1c42365fd1cf6a2adc2f644150c1} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{813e23719129cf9f19349f720bebdf70 → 853ad370adfaa0da7ec26f51b89421f1} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/857d45eb67a43a30a6d5d0370464e596 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/8da6b6aafe413b1ba635e82f71c194be +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{b1a42de74c934edd0e5eed0f98a23597 → 8ea9ff17090b736331312d04c8036810} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{d1bce36d6e3ab792562b9c929f2ce897 → 8fad7abbbfbb3748b36d73dfb482c2bd} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9181f512b689ddb01d6778bac83791ac +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{b660ec1ede271559cfd0259eed96ae9c → 92c82efebbff4c3a9f96e08b308e92dd} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/93aaa9231a32901266b05632f3d35ecd +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{8ad5c3dc0f5fcc5d7a775d6294dda9f5 → 93c6b8da8f3373c42510a25694457483} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{bb92f4b8c1bedafe60b6f226b549138a → 93dd91f6519f569f11fddf4df22460d9} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9443255223294f7ad9ad6daba446afc3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/96ff03d6a5f9604c6980874bb00c1d17 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9ca9885875e2e0ab4e531cba60aa03e5 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{41b62fb10530766b5b9fef3338f5f30b → a13d3a27038cf6570d22b54c54442642} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{ba078b29a7f067b3acdd538a286235a8 → aa92d8a74950d2d6217a51424ce4b33b} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/ad4a54c43c2a4c3874bfde1c9f08c248 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{30ca7caa200fa8eaddaef443913ad9ad → b146aa842b38c17ed4117b2f52d4b51f} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b37776526b5809e55fbb0add6d059127 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{db0d9534ecdebba33af5d1d81060e855 → b6d54919d5e4a3921287a5fb178dc455} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/c514fd002d57ddf3d94669e369d45283 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{b225d67626669cb154cbe08a3c439d48 → cd59839c2fc0d494ffa76ef4c4dbfa42} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{b3ae9e3cdd9991d7103b0a00e33b5778 → d32e733978c8eb7c7db3ec2b865ee87f} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d6995317fba3b6344c75db70b8c997e2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{ecfc314951b349e27742c1b26880619e → d7bf17ad1471147b5314b4dda0bad9fe} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{9ce190f082dc4fb74bddb818cc011ce6 → e6a1afebb687728d619fe27e84335d2f} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{19f4ba6fa86d2609c171da9f5ee3b11a → e83c10c393da1c028c7d4217ecfc9c03} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f64fd792a429f69332c1489015953219 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{fa11f1beb15b0f04503ce1f06701a8bf → f7a87683461c3a58ee9b6e9546473c4e} +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/{4e93570db72bb61820711448b78d548d → fed76e6bd857a06488c186874bbe2bb2} +0 -0
- data/spec/krikri_spec.rb +8 -0
- data/spec/lib/krikri/aggregation_entity_behavior_spec.rb +37 -0
- data/spec/lib/krikri/enricher_spec.rb +38 -1
- data/spec/lib/krikri/entity_consumer_spec.rb +27 -0
- data/spec/lib/krikri/indexer_spec.rb +48 -0
- data/spec/lib/krikri/mapper_agent_spec.rb +54 -40
- data/spec/lib/krikri/qa_query_client_spec.rb +120 -0
- data/spec/lib/krikri/random_search_index_docmument_builder_spec.rb +31 -0
- data/spec/lib/krikri/search_index_spec.rb +547 -0
- data/spec/models/activity_spec.rb +19 -0
- data/spec/models/provider_spec.rb +119 -0
- data/spec/models/qa_report_spec.rb +102 -0
- data/spec/models/validation_report_spec.rb +49 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/shared_contexts/entities_query.rb +22 -0
- data/spec/support/shared_contexts/indexed_item.rb +27 -0
- data/spec/support/shared_contexts/provenance_query_client.rb +15 -2
- data/spec/views/krikri/providers/index.html.erb_spec.rb +23 -0
- data/spec/views/krikri/providers/show.html.erb_spec.rb +22 -0
- data/spec/views/krikri/qa_reports/index.html.erb_spec.rb +42 -0
- data/spec/views/krikri/qa_reports/show.html.erb_spec.rb +5 -0
- data/spec/views/krikri/records/index.html.erb_spec.rb +5 -0
- data/spec/views/krikri/records/show.html.erb_spec.rb +49 -0
- data/spec/views/krikri/reports/index.html.erb_spec.rb +26 -0
- metadata +501 -593
- data/app/controllers/krikri/report_lists_controller.rb +0 -10
- data/app/helpers/krikri/validation_reports_helper.rb +0 -5
- data/app/models/krikri/harvesters/oai_harvester.rb~ +0 -10
- data/app/models/krikri/original_record_desc.rb~ +0 -6
- data/app/models/krikri/original_record_metadata.rb~ +0 -9
- data/app/models/krikri/parser.rb~ +0 -5
- data/app/models/krikri/parsers/xml_parser.rb~ +0 -5
- data/app/views/krikri/report_lists/_validation_report_list.html.erb +0 -14
- data/app/views/krikri/report_lists/index.html.erb +0 -5
- data/app/views/krikri/validation_reports/_document_list.html.erb +0 -18
- data/app/views/krikri/validation_reports/_search_header.html.erb +0 -1
- data/app/views/krikri/validation_reports/_zero_results.html.erb +0 -1
- data/app/views/krikri/validation_reports/index.html.erb +0 -18
- data/config/initializers/config.rb~ +0 -19
- data/config/settings/test.yml~ +0 -3
- data/lib/aggregation.rb~ +0 -4
- data/lib/blacklight.rb~ +0 -8
- data/lib/krikri/enrichment.rb~ +0 -5
- data/lib/krikri/enrichment_agent.rb~ +0 -11
- data/lib/krikri/enrichment_agent_spec.rb~ +0 -2
- data/lib/krikri/enrichment_job.rb~ +0 -13
- data/lib/krikri/enrichments/dedup_values.rb~ +0 -7
- data/lib/krikri/enrichments/strip_ending_punctuation.rb~ +0 -18
- data/lib/krikri/enrichments/strip_leading_colons.rb~ +0 -15
- data/lib/krikri/enrichments/strip_leading_punctuation.rb~ +0 -18
- data/lib/krikri/enrichments.rb~ +0 -4
- data/lib/krikri/field_enrichment.rb~ +0 -3
- data/lib/krikri/harvesters/api_harvester.rb~ +0 -44
- data/lib/krikri/harvesters/basic_save_behavior.rb~ +0 -1
- data/lib/krikri/harvesters/file_harvester.rb~ +0 -4
- data/lib/krikri/harvesters/harvest_behavior.rb~ +0 -14
- data/lib/krikri/harvesters/mdl_api_harvester.rb~ +0 -7
- data/lib/krikri/harvesters/mdl_harvester.rb~ +0 -4
- data/lib/krikri/harvesters/oai_skip_deleted_behavior.rb~ +0 -17
- data/lib/krikri/id_minter.rb~ +0 -8
- data/lib/krikri/id_service.rb~ +0 -4
- data/lib/krikri/index_service.rb +0 -128
- data/lib/krikri/ldp/container.rb~ +0 -22
- data/lib/krikri/ldp/nr_source.rb~ +0 -4
- data/lib/krikri/ldp/rdf_source.rb~ +0 -24
- data/lib/krikri/ldp/resource.rb~ +0 -49
- data/lib/krikri/mapping_dsl.rb~ +0 -4
- data/lib/krikri/mapping_job.rb~ +0 -13
- data/lib/krikri/md5_minter.rb~ +0 -8
- data/lib/krikri/parsers/json_parser.rb~ +0 -17
- data/lib/krikri/parsers/oai_headers.rb~ +0 -4
- data/lib/krikri/parsers/oai_parser.rb~ +0 -2
- data/lib/krikri/parsers/oai_parser_headers.rb~ +0 -4
- data/lib/krikri/parsers/xml_parser.rb~ +0 -61
- data/lib/krikri/provenance_query.rb~ +0 -4
- data/lib/krikri/provenance_query_client.rb~ +0 -11
- data/lib/krikri/random_record_generator.rb +0 -19
- data/lib/krikri/util/edtf_converter.rb~ +0 -26
- data/lib/krikri/util/extended_date_parser.rb~ +0 -70
- data/lib/krikri/validation_report_list.rb +0 -61
- data/lib/tasks/jetty.rake~ +0 -12
- data/lib/tasks/krikri.rake~ +0 -20
- data/spec/factories/krikri_original_record.rb~ +0 -5
- data/spec/internal/lib/generators/test_app_generator.rb~ +0 -14
- data/spec/internal/tmp/cache/assets/test/sprockets/059eceaa18e2eaee3d5168f3949f4957 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/093d898bf3f20b26b13c82714a77c040 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/10517c9579f8d23c82fb8caa66dca6a7 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/2bec18569db80effd80a2a19a038100b +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/4052820c15af72ba690230a0f92bd75e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/421c89c58d3e76046a0294dae1f731ff +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/496a0d7dce1ff6bf4a9c3a089ea3a635 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/50b9db0b908b421a9b941a445dbaeacc +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/5155772cce704d83a64aa83eeda20c5a +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/528c628cf107f8be6dd122e1154344be +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/5ed02c7072bb024fa0832a1ca4113227 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/60141dc3d16c502963c3d798a099862d +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6df5b5c0a8e6d87ced9504a460df875e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/6eefd2765a716d66ff857cfcda69a119 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/88ded10f28177bec1bddb0d72d6b1cd2 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/8edfca9082e02111be92e79000667f22 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/90b54a819800edfa41b67722d1561040 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/9c653367feff82588eb6041d783a5809 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b1c03c36188b4f58f819510adb9a7e9c +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b35e12934e9f05662777579549e31cd7 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/b42c247628daaf44109584724682a6ad +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/bb108ef3fc4c96d1c20cc41f97d943a0 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/c644ecad928e076f999e9c9a3bc350c9 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/c78dd20a0df27e9394a413bf2e4abf92 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/d24a7c4b8ac71a90e809881a64970898 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/dbba4bbc32c17ade3d618c5d0baeb371 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/e8276b98892dcac8285a592bb63fe75b +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/e9f7ccc553ce1a217709cc7a08cfb032 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/eddae0741d973a8ab3df27c1ea5b635e +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f274b5f22db177b6464b50691d531688 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/f45dfdb34e84d3c72a3319399a7316a3 +0 -0
- data/spec/internal/tmp/cache/assets/test/sprockets/faac2909046aa87e1f1f08b2bf0ad2b2 +0 -0
- data/spec/krikri_spec.rb~ +0 -30
- data/spec/ldp/active_triples_spec.rb~ +0 -15
- data/spec/ldp/at_resource_spec.rb~ +0 -41
- data/spec/ldp/nr_source_spec.rb~ +0 -3
- data/spec/ldp/rdf_source_spec.rb~ +0 -4
- data/spec/ldp/resource_spec.rb~ +0 -49
- data/spec/lib/krikri/enrichment_agent_spec.rb~ +0 -4
- data/spec/lib/krikri/enrichments/capitalize_spec.rb~ +0 -24
- data/spec/lib/krikri/enrichments/dedup_values_spec.rb~ +0 -10
- data/spec/lib/krikri/enrichments/deduplication_spec.rb~ +0 -5
- data/spec/lib/krikri/enrichments/genre_filter_spec.rb~ +0 -19
- data/spec/lib/krikri/enrichments/iso_enrich_spec.rb~ +0 -5
- data/spec/lib/krikri/enrichments/parse_date_spec.rb~ +0 -16
- data/spec/lib/krikri/enrichments/strip_ending_punctuation_spec.rb~ +0 -16
- data/spec/lib/krikri/enrichments/strip_leading_colons_spec.rb~ +0 -16
- data/spec/lib/krikri/enrichments/strip_leading_punctuation_spec.rb~ +0 -16
- data/spec/lib/krikri/enrichments/timespan_spec.rb~ +0 -10
- data/spec/lib/krikri/enrichments/timespan_split_spec.rb~ +0 -59
- data/spec/lib/krikri/harvesters/api_harvester_spec.rb~ +0 -47
- data/spec/lib/krikri/harvesters/basic_save_behavior_spec.rb~ +0 -12
- data/spec/lib/krikri/harvesters/file_harvester_spec.rb~ +0 -3
- data/spec/lib/krikri/harvesters/harvest_behavior_spec.rb~ +0 -5
- data/spec/lib/krikri/harvesters/mdl_api_harvester_spec.rb~ +0 -11
- data/spec/lib/krikri/harvesters/mdl_harvester_spec.rb~ +0 -8
- data/spec/lib/krikri/harvesters/oai_skip_deleted_behavior.rb~ +0 -7
- data/spec/lib/krikri/harvesters/oai_skip_deleted_behavior_spec.rb~ +0 -15
- data/spec/lib/krikri/id_service_spec.rb~ +0 -3
- data/spec/lib/krikri/index_service_spec.rb +0 -83
- data/spec/lib/krikri/job_spec.rb~ +0 -13
- data/spec/lib/krikri/mapper_agent_spec.rb~ +0 -64
- data/spec/lib/krikri/mapper_spec.rb~ +0 -5
- data/spec/lib/krikri/mapping_dsl/parser_methods_spec.rb~ +0 -65
- data/spec/lib/krikri/mapping_dsl/property_declaration_spec.rb~ +0 -87
- data/spec/lib/krikri/mapping_dsl/rdf_subjects_spec.rb~ +0 -16
- data/spec/lib/krikri/mapping_dsl_spec.rb~ +0 -10
- data/spec/lib/krikri/mapping_job.rb~ +0 -12
- data/spec/lib/krikri/mapping_job_spec.rb~ +0 -11
- data/spec/lib/krikri/mapping_spec.rb~ +0 -5
- data/spec/lib/krikri/md5_minter_spec.rb~ +0 -5
- data/spec/lib/krikri/parser_value_array.rb~ +0 -5
- data/spec/lib/krikri/parsers/json_parser_spec.rb~ +0 -17
- data/spec/lib/krikri/parsers/xml_parser_spec.rb~ +0 -21
- data/spec/lib/krikri/provenance_query_client.rb~ +0 -5
- data/spec/lib/krikri/provenance_query_client_spec.rb~ +0 -8
- data/spec/lib/krikri/util/edtf_converter_spec.rb~ +0 -17
- data/spec/lib/krikri/util/extended_date_parser_spec.rb~ +0 -102
- data/spec/lib/krikri/validation_report_list_spec.rb +0 -50
- data/spec/models/activity_spec.rb~ +0 -41
- data/spec/models/dpla/map/aggregation_spec.rb~ +0 -67
- data/spec/models/harvesters/oai_harvester_spec.rb~ +0 -15
- data/spec/models/mapper_spec.rb~ +0 -5
- data/spec/models/original_record_metadata_spec.rb~ +0 -5
- data/spec/models/original_record_spec.rb~ +0 -5
- data/spec/support/shared_contexts/mapping_dsl.rb~ +0 -12
- data/spec/support/shared_contexts/provenance_query_client.rb~ +0 -6
- data/spec/support/shared_examples/enrichment.rb~ +0 -5
- data/spec/support/shared_examples/harvest_behavior.rb~ +0 -13
- data/spec/support/shared_examples/job.rb~ +0 -20
- data/spec/support/shared_examples/ldp_resource.rb~ +0 -4
- data/spec/support/shared_examples/oai_parser_headers.rb~ +0 -12
- data/spec/support/shared_examples/rdf_source.rb~ +0 -1
- data/spec/support/shared_examples/software_agent.rb~ +0 -5
- data/spec/support/shared_examples/string_enrichment.rb~ +0 -12
- data/spec/test_app_templates/lib/generators/test_app_generator.rb~ +0 -14
- data/spec/webmocks/oai.rb~ +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 59195bbb3fbde31f549ca473ae9941c28a294947
|
|
4
|
+
data.tar.gz: dca46026cd0cf2c5cc51970aa0d69ae7a9ba3275
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 97d5fae3cf1dd0860ee9d66b800e0f1bde373367ec82bffaf3d48b5e73f4f7d2ba0976b06c6a43e0a2d0b9102e6830d5083819d7cbbcbc01995b656fd4220bb3
|
|
7
|
+
data.tar.gz: 767df8d2522301a580cabf47320347932ddfae28a3fd1e136d406d343cae6726827d26447c26541372d9debf9858933e79fe3efd332efba16da022ad22e252b4
|
|
@@ -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
|
-
#
|
|
15
|
+
# RecordsController has access to views in the following
|
|
13
16
|
# directories:
|
|
14
|
-
# krikri/
|
|
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
|
-
|
|
94
|
-
solr_response = solr_repository.find(
|
|
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
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|