krikri 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|