supplejack_api 1
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 +7 -0
- data/README.md +80 -0
- data/Rakefile +42 -0
- data/app/assets/javascripts/supplejack_api/application.js +26 -0
- data/app/assets/stylesheets/supplejack_api/application.css +30 -0
- data/app/controllers/supplejack_api/admin/base_controller.rb +24 -0
- data/app/controllers/supplejack_api/admin/sessions_controller.rb +25 -0
- data/app/controllers/supplejack_api/admin/site_activities_controller.rb +21 -0
- data/app/controllers/supplejack_api/admin/users_controller.rb +55 -0
- data/app/controllers/supplejack_api/application_controller.rb +70 -0
- data/app/controllers/supplejack_api/concepts_controller.rb +52 -0
- data/app/controllers/supplejack_api/concerns/ignore_metrics.rb +14 -0
- data/app/controllers/supplejack_api/concerns/records_controller_metrics.rb +26 -0
- data/app/controllers/supplejack_api/concerns/set_items_controller_metrics.rb +20 -0
- data/app/controllers/supplejack_api/concerns/user_sets_controller_metrics.rb +26 -0
- data/app/controllers/supplejack_api/harvester/concepts_controller.rb +41 -0
- data/app/controllers/supplejack_api/harvester/fragments_controller.rb +30 -0
- data/app/controllers/supplejack_api/harvester/records_controller.rb +68 -0
- data/app/controllers/supplejack_api/metrics_api_controller.rb +44 -0
- data/app/controllers/supplejack_api/partners_controller.rb +39 -0
- data/app/controllers/supplejack_api/records_controller.rb +71 -0
- data/app/controllers/supplejack_api/schema_controller.rb +19 -0
- data/app/controllers/supplejack_api/set_items_controller.rb +38 -0
- data/app/controllers/supplejack_api/sources_controller.rb +67 -0
- data/app/controllers/supplejack_api/status_controller.rb +67 -0
- data/app/controllers/supplejack_api/user_sets_controller.rb +97 -0
- data/app/controllers/supplejack_api/users_controller.rb +49 -0
- data/app/helpers/supplejack_api/application_helper.rb +39 -0
- data/app/helpers/supplejack_api/facets_helper.rb +30 -0
- data/app/mailers/supplejack_api/request_limit_mailer.rb +43 -0
- data/app/models/supplejack_api/api_concept/concept_fragment.rb +31 -0
- data/app/models/supplejack_api/api_record/record_fragment.rb +15 -0
- data/app/models/supplejack_api/concept.rb +46 -0
- data/app/models/supplejack_api/concept_search.rb +86 -0
- data/app/models/supplejack_api/concerns/queryable_by_date.rb +31 -0
- data/app/models/supplejack_api/concerns/record.rb +108 -0
- data/app/models/supplejack_api/concerns/record_fragmentable.rb +24 -0
- data/app/models/supplejack_api/concerns/searchable.rb +430 -0
- data/app/models/supplejack_api/concerns/user_set.rb +219 -0
- data/app/models/supplejack_api/daily_metrics.rb +20 -0
- data/app/models/supplejack_api/faceted_metrics.rb +55 -0
- data/app/models/supplejack_api/fragment.rb +82 -0
- data/app/models/supplejack_api/interaction_models/record.rb +60 -0
- data/app/models/supplejack_api/interaction_models/set.rb +13 -0
- data/app/models/supplejack_api/interaction_updaters/all_usage_metric.rb +41 -0
- data/app/models/supplejack_api/interaction_updaters/set_metrics.rb +32 -0
- data/app/models/supplejack_api/interaction_updaters/usage_metrics.rb +73 -0
- data/app/models/supplejack_api/partner.rb +24 -0
- data/app/models/supplejack_api/preview_record.rb +30 -0
- data/app/models/supplejack_api/record.rb +18 -0
- data/app/models/supplejack_api/record_search.rb +12 -0
- data/app/models/supplejack_api/schema_definition.rb +147 -0
- data/app/models/supplejack_api/search.rb +14 -0
- data/app/models/supplejack_api/set_item.rb +57 -0
- data/app/models/supplejack_api/site_activity.rb +59 -0
- data/app/models/supplejack_api/source.rb +28 -0
- data/app/models/supplejack_api/source_activity.rb +36 -0
- data/app/models/supplejack_api/source_authority.rb +42 -0
- data/app/models/supplejack_api/supplejack_schema.rb +37 -0
- data/app/models/supplejack_api/support/concept/searchable.rb +79 -0
- data/app/models/supplejack_api/support/concept/storable.rb +59 -0
- data/app/models/supplejack_api/support/fragment_helpers.rb +96 -0
- data/app/models/supplejack_api/support/harvestable.rb +105 -0
- data/app/models/supplejack_api/support/searchable.rb +115 -0
- data/app/models/supplejack_api/support/status_logger.rb +23 -0
- data/app/models/supplejack_api/support/storable.rb +49 -0
- data/app/models/supplejack_api/support/validation_logger.rb +23 -0
- data/app/models/supplejack_api/usage_metrics.rb +25 -0
- data/app/models/supplejack_api/user.rb +211 -0
- data/app/models/supplejack_api/user_activity.rb +65 -0
- data/app/models/supplejack_api/user_set.rb +17 -0
- data/app/serializers/supplejack_api/application_serializer.rb +12 -0
- data/app/serializers/supplejack_api/concept_record_serializer.rb +23 -0
- data/app/serializers/supplejack_api/concept_search_serializer.rb +12 -0
- data/app/serializers/supplejack_api/concept_serializer.rb +100 -0
- data/app/serializers/supplejack_api/concerns/record_serializable.rb +119 -0
- data/app/serializers/supplejack_api/concerns/search_serializable.rb +24 -0
- data/app/serializers/supplejack_api/record_search_serializer.rb +64 -0
- data/app/serializers/supplejack_api/record_serializer.rb +13 -0
- data/app/serializers/supplejack_api/search_serializer.rb +13 -0
- data/app/serializers/supplejack_api/source_authority_serializer.rb +23 -0
- data/app/serializers/supplejack_api/user_serializer.rb +13 -0
- data/app/serializers/supplejack_api/user_set_record_serializer.rb +14 -0
- data/app/serializers/supplejack_api/user_set_serializer.rb +77 -0
- data/app/services/metrics_api/v3/api.rb +30 -0
- data/app/services/metrics_api/v3/endpoints/facets.rb +23 -0
- data/app/services/metrics_api/v3/endpoints/global.rb +26 -0
- data/app/services/metrics_api/v3/endpoints/helpers.rb +14 -0
- data/app/services/metrics_api/v3/endpoints/root.rb +97 -0
- data/app/services/metrics_api/v3/presenters/daily_metric.rb +23 -0
- data/app/services/metrics_api/v3/presenters/extended_metadata.rb +41 -0
- data/app/services/metrics_api/v3/presenters/record.rb +26 -0
- data/app/services/metrics_api/v3/presenters/view.rb +28 -0
- data/app/views/layouts/supplejack_api/_head.html.erb +17 -0
- data/app/views/layouts/supplejack_api/_top_nav.html.erb +33 -0
- data/app/views/layouts/supplejack_api/application.html.erb +33 -0
- data/app/views/supplejack_api/admin/sessions/new.html.erb +25 -0
- data/app/views/supplejack_api/admin/shared/_links.erb +34 -0
- data/app/views/supplejack_api/admin/site_activities/index.csv.erb +22 -0
- data/app/views/supplejack_api/admin/site_activities/index.html.erb +54 -0
- data/app/views/supplejack_api/admin/users/edit.html.erb +16 -0
- data/app/views/supplejack_api/admin/users/index.csv.erb +22 -0
- data/app/views/supplejack_api/admin/users/index.html.erb +57 -0
- data/app/views/supplejack_api/admin/users/show.html.erb +33 -0
- data/app/views/supplejack_api/request_limit_mailer/at100percent.text.erb +13 -0
- data/app/views/supplejack_api/request_limit_mailer/at100percent_admin.text.erb +1 -0
- data/app/views/supplejack_api/request_limit_mailer/at90percent.text.erb +13 -0
- data/app/views/supplejack_api/request_limit_mailer/at90percent_admin.text.erb +1 -0
- data/app/workers/supplejack_api/daily_metrics_worker.rb +112 -0
- data/app/workers/supplejack_api/interaction_metrics_worker.rb +45 -0
- data/config/cucumber.yml +16 -0
- data/config/initializers/force_eagerload.rb +11 -0
- data/config/initializers/interaction_updaters.rb +7 -0
- data/config/routes.rb +81 -0
- data/db/binding_records.development.json +7 -0
- data/db/binding_records.staging.json +7 -0
- data/db/concepts.json +33 -0
- data/db/concepts_data.json +569745 -0
- data/db/source_authorities.json +119 -0
- data/lib/generators/supplejack_api/install_generator.rb +124 -0
- data/lib/mongoid/paperclip.rb +53 -0
- data/lib/mongoid/string.rb +20 -0
- data/lib/sunspot/mongoid.rb +51 -0
- data/lib/sunspot/resque_session_proxy.rb +72 -0
- data/lib/sunspot/sunspot_spellcheck.rb +98 -0
- data/lib/supplejack_api.rb +13 -0
- data/lib/supplejack_api/admin/sortable.rb +40 -0
- data/lib/supplejack_api/engine.rb +46 -0
- data/lib/supplejack_api/harvester_constraint.rb +28 -0
- data/lib/supplejack_api/stylesheets.rb +36 -0
- data/lib/supplejack_api/utils.rb +75 -0
- data/lib/supplejack_api/version.rb +11 -0
- data/lib/tasks/resque.rake +22 -0
- data/lib/url_validator.rb +38 -0
- data/spec/controllers/supplejack_api/admin/base_controller_spec.rb +55 -0
- data/spec/controllers/supplejack_api/admin/site_activities_controller_spec.rb +43 -0
- data/spec/controllers/supplejack_api/admin/users_controller_spec.rb +79 -0
- data/spec/controllers/supplejack_api/application_controller_spec.rb +133 -0
- data/spec/controllers/supplejack_api/concepts_controller_spec.rb +83 -0
- data/spec/controllers/supplejack_api/concerns/records_controller_metrics_spec.rb +60 -0
- data/spec/controllers/supplejack_api/harvester/concepts_controller_spec.rb +57 -0
- data/spec/controllers/supplejack_api/harvester/records_controller_spec.rb +138 -0
- data/spec/controllers/supplejack_api/metrics_api_controller_spec.rb +71 -0
- data/spec/controllers/supplejack_api/partners_controller_spec.rb +77 -0
- data/spec/controllers/supplejack_api/records_controller_spec.rb +143 -0
- data/spec/controllers/supplejack_api/set_items_controller_spec.rb +78 -0
- data/spec/controllers/supplejack_api/sources_controller_spec.rb +161 -0
- data/spec/controllers/supplejack_api/status_controller_spec.rb +120 -0
- data/spec/controllers/supplejack_api/user_sets_controller_spec.rb +233 -0
- data/spec/controllers/supplejack_api/users_controller_spec.rb +61 -0
- data/spec/dummy/README.rdoc +268 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +23 -0
- data/spec/dummy/app/assets/stylesheets/application.css +22 -0
- data/spec/dummy/app/controllers/application_controller.rb +10 -0
- data/spec/dummy/app/helpers/application_helper.rb +9 -0
- data/spec/dummy/app/supplejack_api/concept_schema.rb +83 -0
- data/spec/dummy/app/supplejack_api/record_schema.rb +64 -0
- data/spec/dummy/app/supplejack_api/record_schema.txt +66 -0
- data/spec/dummy/app/views/layouts/application.html.erb +23 -0
- data/spec/dummy/app/workers/supplejack_api/clear_index_buffer.rb +32 -0
- data/spec/dummy/app/workers/supplejack_api/flush_old_records_worker.rb +17 -0
- data/spec/dummy/app/workers/supplejack_api/index_buffer.rb +49 -0
- data/spec/dummy/app/workers/supplejack_api/index_source_worker.rb +39 -0
- data/spec/dummy/app/workers/supplejack_api/index_worker.rb +82 -0
- data/spec/dummy/app/workers/supplejack_api/store_user_activity_worker.rb +24 -0
- data/spec/dummy/config.ru +11 -0
- data/spec/dummy/config/application.rb +76 -0
- data/spec/dummy/config/application.yml +31 -0
- data/spec/dummy/config/application.yml.example +36 -0
- data/spec/dummy/config/boot.rb +17 -0
- data/spec/dummy/config/environment.rb +12 -0
- data/spec/dummy/config/environments/development.rb +42 -0
- data/spec/dummy/config/environments/production.rb +76 -0
- data/spec/dummy/config/environments/test.rb +46 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +14 -0
- data/spec/dummy/config/initializers/devise.rb +214 -0
- data/spec/dummy/config/initializers/inflections.rb +22 -0
- data/spec/dummy/config/initializers/kaminari_config.rb +17 -0
- data/spec/dummy/config/initializers/mime_types.rb +12 -0
- data/spec/dummy/config/initializers/mongoid.rb +9 -0
- data/spec/dummy/config/initializers/quiet_logger.rb +23 -0
- data/spec/dummy/config/initializers/resque.rb +18 -0
- data/spec/dummy/config/initializers/secret_token.rb +14 -0
- data/spec/dummy/config/initializers/session_store.rb +15 -0
- data/spec/dummy/config/initializers/simple_form.rb +149 -0
- data/spec/dummy/config/initializers/simple_form_foundation.rb +33 -0
- data/spec/dummy/config/initializers/state_machine.rb +8 -0
- data/spec/dummy/config/initializers/sunspot.rb +32 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +17 -0
- data/spec/dummy/config/locales/devise.en.yml +63 -0
- data/spec/dummy/config/locales/en.yml +66 -0
- data/spec/dummy/config/locales/simple_form.en.yml +33 -0
- data/spec/dummy/config/mongoid.travis.yml +34 -0
- data/spec/dummy/config/mongoid.yml +36 -0
- data/spec/dummy/config/resque-pool.yml +18 -0
- data/spec/dummy/config/resque_schedule.yml +12 -0
- data/spec/dummy/config/routes.rb +11 -0
- data/spec/dummy/config/secrets.yml +8 -0
- data/spec/dummy/config/sunspot.yml +38 -0
- data/spec/dummy/db/concepts.json +37 -0
- data/spec/dummy/db/source_authorities.json +116 -0
- data/spec/dummy/public/404.html +35 -0
- data/spec/dummy/public/422.html +35 -0
- data/spec/dummy/public/500.html +34 -0
- data/spec/dummy/public/favicon.ico +8 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/solr/collection1/conf/elevate.xml +36 -0
- data/spec/dummy/solr/collection1/conf/mapping-FoldToASCII.txt +3813 -0
- data/spec/dummy/solr/collection1/conf/schema.xml +292 -0
- data/spec/dummy/solr/collection1/conf/solrconfig.xml +1780 -0
- data/spec/dummy/solr/collection1/conf/spellings.txt +2 -0
- data/spec/dummy/solr/collection1/conf/stopwords.txt +58 -0
- data/spec/dummy/solr/collection1/conf/synonyms.txt +31 -0
- data/spec/factories/concepts.rb +16 -0
- data/spec/factories/daily_metrics.rb +10 -0
- data/spec/factories/faceted_metrics.rb +25 -0
- data/spec/factories/fragment.rb +14 -0
- data/spec/factories/partners.rb +14 -0
- data/spec/factories/record_interaction.rb +17 -0
- data/spec/factories/records.rb +47 -0
- data/spec/factories/set_interaction.rb +15 -0
- data/spec/factories/source_authorities.rb +19 -0
- data/spec/factories/sources.rb +16 -0
- data/spec/factories/usage_metrics.rb +20 -0
- data/spec/factories/user_activities.rb +14 -0
- data/spec/factories/user_sets.rb +27 -0
- data/spec/factories/users.rb +23 -0
- data/spec/helpers/application_helper_spec.rb +35 -0
- data/spec/models/concept_spec.rb +163 -0
- data/spec/models/fragment_spec.rb +15 -0
- data/spec/models/site_activity_spec.rb +103 -0
- data/spec/models/source_activity_spec.rb +56 -0
- data/spec/models/source_authority_spec.rb +42 -0
- data/spec/models/supplejack_api/api_concept/concept_fragment_spec.rb +189 -0
- data/spec/models/supplejack_api/api_record/record_fragment_spec.rb +189 -0
- data/spec/models/supplejack_api/concept_spec.rb +0 -0
- data/spec/models/supplejack_api/interaction_updaters/all_usage_metric_spec.rb +41 -0
- data/spec/models/supplejack_api/interaction_updaters/set_metrics_spec.rb +32 -0
- data/spec/models/supplejack_api/interaction_updaters/usage_metrics_spec.rb +44 -0
- data/spec/models/supplejack_api/partner_spec.rb +20 -0
- data/spec/models/supplejack_api/record_search_spec.rb +429 -0
- data/spec/models/supplejack_api/record_spec.rb +280 -0
- data/spec/models/supplejack_api/schema_definition_spec.rb +272 -0
- data/spec/models/supplejack_api/search_spec.rb +243 -0
- data/spec/models/supplejack_api/set_item_spec.rb +123 -0
- data/spec/models/supplejack_api/source_spec.rb +22 -0
- data/spec/models/supplejack_api/support/fragment_helpers_spec.rb +216 -0
- data/spec/models/supplejack_api/support/harvestable_spec.rb +177 -0
- data/spec/models/supplejack_api/support/searchable_spec.rb +85 -0
- data/spec/models/supplejack_api/support/storable_spec.rb +18 -0
- data/spec/models/supplejack_api/user_activity_spec.rb +88 -0
- data/spec/models/supplejack_api/user_set_spec.rb +559 -0
- data/spec/models/supplejack_api/user_spec.rb +348 -0
- data/spec/routing/concepts_routing_spec.rb +22 -0
- data/spec/routing/harvester_constraint_spec.rb +66 -0
- data/spec/routing/harvester_routing_spec.rb +51 -0
- data/spec/routing/partner_routing_spec.rb +34 -0
- data/spec/routing/records_routing_spec.rb +26 -0
- data/spec/routing/sets_routing_spec.rb +44 -0
- data/spec/routing/source_routing_spec.rb +38 -0
- data/spec/routing/users_routing_spec.rb +18 -0
- data/spec/serializers/concept_record_serializer_spec.rb +30 -0
- data/spec/serializers/supplejack_api/application_serializer_spec.rb +14 -0
- data/spec/serializers/supplejack_api/concept_search_serializer_spec.rb +34 -0
- data/spec/serializers/supplejack_api/concept_serializer_spec.rb +92 -0
- data/spec/serializers/supplejack_api/record_search_serializer_spec.rb +34 -0
- data/spec/serializers/supplejack_api/record_serializer_spec.rb +271 -0
- data/spec/serializers/supplejack_api/search_serializer_spec.rb +90 -0
- data/spec/serializers/supplejack_api/user_serializer_spec.rb +22 -0
- data/spec/serializers/supplejack_api/user_set_serializer_spec.rb +96 -0
- data/spec/services/metrics_api/v3/api_spec.rb +23 -0
- data/spec/services/metrics_api/v3/endpoints/facets_spec.rb +25 -0
- data/spec/services/metrics_api/v3/endpoints/global_spec.rb +22 -0
- data/spec/services/metrics_api/v3/endpoints/root_spec.rb +49 -0
- data/spec/services/metrics_api/v3/presenters/extended_metadata_spec.rb +49 -0
- data/spec/spec_helper.rb +70 -0
- data/spec/support/api/schemas/metrics/daily_metrics_metadata.json +24 -0
- data/spec/support/api/schemas/metrics/extended_metrics.json +26 -0
- data/spec/support/api/schemas/metrics/extended_response.json +6 -0
- data/spec/support/api/schemas/metrics/facets_response.json +6 -0
- data/spec/support/api/schemas/metrics/record_metadata.json +33 -0
- data/spec/support/api/schemas/metrics/top_level_response.json +6 -0
- data/spec/support/api/schemas/metrics/view_metadata.json +33 -0
- data/spec/support/api_schema_matcher.rb +14 -0
- data/spec/support/devise.rb +10 -0
- data/spec/workers/supplejack_api/daily_metrics_worker_spec.rb +140 -0
- data/spec/workers/supplejack_api/flush_old_records_worker_spec.rb +20 -0
- data/spec/workers/supplejack_api/index_worker_spec.rb +52 -0
- data/spec/workers/supplejack_api/source_index_worker_spec.rb +61 -0
- metadata +1231 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class RecordSerializer < ActiveModel::Serializer
|
11
|
+
include SupplejackApi::Concerns::RecordSerializable
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class SearchSerializer < ActiveModel::Serializer
|
11
|
+
include SupplejackApi::Concerns::SearchSerializable
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class SourceAuthoritySerializer < ActiveModel::Serializer
|
11
|
+
attributes :_mn_family_name, :_mn_given_name, :altLabel, :biographicalInformation,
|
12
|
+
:birthYear, :concept_id, :concept_score, :dateOfBirth, :dateOfDeath, :deathYear,
|
13
|
+
:familyName, :givenName, :internal_identifier, :name, :prefLabel, :sameAs,
|
14
|
+
:source_id, :source_name, :url, :updated_at, :created_at
|
15
|
+
|
16
|
+
def serializable_hash
|
17
|
+
hash = {}
|
18
|
+
hash['@type'] = object.concept_type
|
19
|
+
hash = hash.merge!(attributes)
|
20
|
+
hash
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class UserSerializer < ActiveModel::Serializer
|
11
|
+
attributes :id, :name, :username, :email, :api_key
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class UserSetRecordSerializer < ActiveModel::Serializer
|
11
|
+
attribute :record_id
|
12
|
+
root :set
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
3
|
+
# and is licensed under the GNU General Public License, version 3.
|
4
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
5
|
+
#
|
6
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
7
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
8
|
+
|
9
|
+
module SupplejackApi
|
10
|
+
class UserSetSerializer < ActiveModel::Serializer
|
11
|
+
attributes :name, :count, :priority, :featured, :approved, :created_at, :updated_at, :tags
|
12
|
+
has_one :record, serializer: UserSetRecordSerializer
|
13
|
+
root :set
|
14
|
+
|
15
|
+
def serializable_hash
|
16
|
+
hash = { id: object.id.to_s }
|
17
|
+
hash.merge! attributes
|
18
|
+
|
19
|
+
options.reverse_merge!(items: true)
|
20
|
+
|
21
|
+
include!(:record, node: hash)
|
22
|
+
|
23
|
+
if options[:items]
|
24
|
+
hash[:description] = object.description
|
25
|
+
hash[:privacy] = object.privacy
|
26
|
+
hash[:tags] = object.tags
|
27
|
+
hash[:records] = records
|
28
|
+
elsif options[:featured]
|
29
|
+
hash[:records] = records(1)
|
30
|
+
else
|
31
|
+
hash[:records] = simple_records
|
32
|
+
end
|
33
|
+
|
34
|
+
hash[:user] = user if options[:user]
|
35
|
+
|
36
|
+
hash
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns a array of Hashes with the information from each record
|
40
|
+
# included in the Hash
|
41
|
+
#
|
42
|
+
# The values to be added from the record are stored in SetItem::ATTRIBUTES
|
43
|
+
#
|
44
|
+
def records(amount = nil)
|
45
|
+
attributes = [:record_id, :position] + SetItem::ATTRIBUTES
|
46
|
+
object.items_with_records(amount).map do |item|
|
47
|
+
Hash[attributes.map { |attr| [attr, item.send(attr)] }]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns a array of Hashes with only the record_id and position
|
52
|
+
#
|
53
|
+
def simple_records
|
54
|
+
object.set_items.map do |item|
|
55
|
+
{ record_id: item.record_id, position: item.position }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Return the user information about the set, this is only displyed
|
60
|
+
# on the set show endpoint.
|
61
|
+
#
|
62
|
+
# When the user requesting the sets is a admin, also return the API Key
|
63
|
+
# for the owner of the set. This is required in order for applications
|
64
|
+
# to make requests on the user's behalf.
|
65
|
+
#
|
66
|
+
def user
|
67
|
+
hash = { name: object.user.try(:name) }
|
68
|
+
|
69
|
+
admin = options[:user]
|
70
|
+
if admin && admin.respond_to?(:admin?) && admin.try(:admin?)
|
71
|
+
hash[:api_key] = object.user.try(:api_key)
|
72
|
+
end
|
73
|
+
|
74
|
+
hash
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
# API entry point for V3 of the MetricsAPI
|
5
|
+
#
|
6
|
+
# It takes in the request parameters and
|
7
|
+
# generates the metrics JSON the API should
|
8
|
+
# respond with
|
9
|
+
class Api
|
10
|
+
ENDPOINT_BASE = 'MetricsApi::V3::Endpoints::'
|
11
|
+
|
12
|
+
attr_reader :params, :endpoint
|
13
|
+
|
14
|
+
# @param params [Hash] request parameters hash, passed onto active endpoint
|
15
|
+
# @param endpoint [Symbol] endpoint this API requests is for
|
16
|
+
def initialize(params, endpoint)
|
17
|
+
@params = params
|
18
|
+
@endpoint = (ENDPOINT_BASE + endpoint.to_s.camelize).constantize
|
19
|
+
end
|
20
|
+
|
21
|
+
# Generates an API response using the parameters passed in when the class is created.
|
22
|
+
# This response has already been presented and is ready to deliver to the client
|
23
|
+
#
|
24
|
+
# @return [Array<Hash>] the generated API response
|
25
|
+
def call
|
26
|
+
endpoint.new(params).call
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Endpoints
|
5
|
+
# Facets endpoint. Returns a list of display_collection names
|
6
|
+
class Facets
|
7
|
+
attr_reader :primary_key
|
8
|
+
|
9
|
+
# All endpoints take in a params hash, this endpoint has no params however
|
10
|
+
def initialize(*)
|
11
|
+
# TODO: maybe this should be a global metrics config? There are now 3+ locations you would need
|
12
|
+
# to update the primary key for metrics
|
13
|
+
@primary_key = 'display_collection'
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO: Better way of collecting display_collection names
|
17
|
+
def call
|
18
|
+
SupplejackApi::FacetsHelper.get_list_of_facet_values(primary_key)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Endpoints
|
5
|
+
# Global endpoint. Returns a list of presented DailyMetrics models
|
6
|
+
class Global
|
7
|
+
include Helpers
|
8
|
+
|
9
|
+
attr_reader :start_date, :end_date
|
10
|
+
|
11
|
+
# All endpoints take in a params hash, this endpoint has no params however
|
12
|
+
def initialize(params)
|
13
|
+
@start_date = parse_date_param(params[:start_date]) || Time.zone.yesterday
|
14
|
+
@end_date = parse_date_param(params[:end_date]) || Time.zone.today
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO: Better way of collecting display_collection names
|
18
|
+
def call
|
19
|
+
metrics = SupplejackApi::DailyMetrics.created_between(start_date, end_date)
|
20
|
+
|
21
|
+
metrics.map(&MetricsApi::V3::Presenters::DailyMetric)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Endpoints
|
5
|
+
class Root
|
6
|
+
include Helpers
|
7
|
+
|
8
|
+
attr_accessor :facets, :start_date, :end_date, :metrics
|
9
|
+
|
10
|
+
# Mapping of metric names to the model that represents that metric
|
11
|
+
METRICS_TO_MODEL = {
|
12
|
+
'record' => SupplejackApi::FacetedMetrics,
|
13
|
+
'view' => SupplejackApi::UsageMetrics
|
14
|
+
}.freeze
|
15
|
+
# Mapping of metrics to the field on it's respective model that contains
|
16
|
+
# the value to filter against
|
17
|
+
METRIC_TO_MODEL_KEY = {
|
18
|
+
'record' => :name,
|
19
|
+
'view' => :record_field_value
|
20
|
+
}.freeze
|
21
|
+
# Facet limit to return in response
|
22
|
+
MAX_FACETS = 10
|
23
|
+
|
24
|
+
def initialize(params)
|
25
|
+
@facets = parse_csv_param(params[:facets])
|
26
|
+
@start_date = parse_date_param(params[:start_date]) || Date.yesterday
|
27
|
+
@end_date = parse_date_param(params[:end_date]) || Date.yesterday
|
28
|
+
@metrics = parse_csv_param(params[:metrics]) || %w(record view)
|
29
|
+
end
|
30
|
+
|
31
|
+
def call
|
32
|
+
# TODO: Figure out a nicer way of handling error responses
|
33
|
+
unless facets.present?
|
34
|
+
return {
|
35
|
+
exception: {
|
36
|
+
status: 400,
|
37
|
+
message: 'facets parameter is required'
|
38
|
+
}
|
39
|
+
}
|
40
|
+
end
|
41
|
+
if facets.size > MAX_FACETS
|
42
|
+
return {
|
43
|
+
exception: {
|
44
|
+
status: 400,
|
45
|
+
message: "Only up to #{MAX_FACETS} may be requested at once"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
metrics_models = metrics.map(&method(:metric_to_model_bundle))
|
51
|
+
filtered_models = metrics_models.map(&method(:filter_model_bundle))
|
52
|
+
models_grouped_by_date = filtered_models.map(&method(:group_models_in_bundle_by_date))
|
53
|
+
|
54
|
+
MetricsApi::V3::Presenters::ExtendedMetadata.new(models_grouped_by_date, start_date, end_date).to_json
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def metric_to_model_bundle(metric)
|
60
|
+
model = METRICS_TO_MODEL[metric]
|
61
|
+
|
62
|
+
models_in_range = model.created_between(start_date, end_date).to_a
|
63
|
+
|
64
|
+
{ metric: metric, models: models_in_range.flatten }
|
65
|
+
end
|
66
|
+
|
67
|
+
def filter_model_bundle(model_bundle)
|
68
|
+
metric = model_bundle[:metric]
|
69
|
+
key = METRIC_TO_MODEL_KEY[metric]
|
70
|
+
|
71
|
+
models_to_keep = model_bundle[:models].select do |model|
|
72
|
+
facets.include? model.send(key)
|
73
|
+
end
|
74
|
+
|
75
|
+
{ metric: metric, models: models_to_keep }
|
76
|
+
end
|
77
|
+
|
78
|
+
def group_models_in_bundle_by_date(model_bundle)
|
79
|
+
metric = model_bundle[:metric]
|
80
|
+
models = model_bundle[:models]
|
81
|
+
|
82
|
+
{ metric: metric, models: models.group_by { |m| m.date.to_date } }
|
83
|
+
end
|
84
|
+
|
85
|
+
# Converts csv formatted parameter to an array
|
86
|
+
#
|
87
|
+
# @param param [String] CSV string
|
88
|
+
# @return [Array<String>] split CSV
|
89
|
+
def parse_csv_param(param)
|
90
|
+
return nil unless param.present?
|
91
|
+
|
92
|
+
param.split(',').map(&:strip)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Presenters
|
5
|
+
class DailyMetric
|
6
|
+
def initialize(daily_metric)
|
7
|
+
@dm = daily_metric
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_json
|
11
|
+
{
|
12
|
+
day: @dm.date,
|
13
|
+
total_public_sets: @dm.total_public_sets
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.to_proc
|
18
|
+
->(metric) { new(metric).to_json }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Presenters
|
5
|
+
class ExtendedMetadata
|
6
|
+
PRESENTERS_BASE = 'MetricsApi::V3::Presenters::'
|
7
|
+
|
8
|
+
attr_reader :metrics, :start_date, :end_date
|
9
|
+
|
10
|
+
def initialize(metrics, start_date, end_date)
|
11
|
+
@metrics = metrics
|
12
|
+
@start_date = start_date
|
13
|
+
@end_date = end_date
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_json
|
17
|
+
(start_date..end_date).map do |date|
|
18
|
+
base = { date: date }
|
19
|
+
|
20
|
+
todays_metrics = metrics.map do |metric|
|
21
|
+
relavent_models = metric[:models].select { |key| key == date }.values.first
|
22
|
+
presenter = (PRESENTERS_BASE + metric[:metric].camelize).constantize
|
23
|
+
|
24
|
+
next { metric[:metric] => [] } unless relavent_models.present?
|
25
|
+
|
26
|
+
{ metric[:metric] => relavent_models.map(&presenter) }
|
27
|
+
end
|
28
|
+
|
29
|
+
todays_metrics.each { |x| base.merge!(x) }
|
30
|
+
|
31
|
+
base
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.to_proc
|
36
|
+
->(models) { new(models).to_json }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module MetricsApi
|
3
|
+
module V3
|
4
|
+
module Presenters
|
5
|
+
class Record
|
6
|
+
def initialize(faceted_metrics)
|
7
|
+
@m = faceted_metrics
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_json
|
11
|
+
{
|
12
|
+
id: @m.name,
|
13
|
+
total_active_records: @m.total_active_records,
|
14
|
+
total_new_records: @m.total_new_records,
|
15
|
+
category_counts: @m.category_counts || {},
|
16
|
+
copyright_counts: @m.copyright_counts || {}
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.to_proc
|
21
|
+
->(metric) { new(metric).to_json }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|