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,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SupplejackApi
|
3
|
+
module InteractionUpdaters
|
4
|
+
class AllUsageMetric
|
5
|
+
BLACKLISTED_FIELDS = [:_id, :created_at, :updated_at, :date, :record_field_value].freeze
|
6
|
+
attr_reader :model
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
# Slightly nonstandard model, so mock ActiveRecord interactions
|
10
|
+
# that the InteractionMetricsWorker performs
|
11
|
+
@model = OpenStruct.new(all: OpenStruct.new(delete_all: true))
|
12
|
+
end
|
13
|
+
|
14
|
+
def process(*)
|
15
|
+
usage_metrics = SupplejackApi::UsageMetrics
|
16
|
+
.where(:record_field_value.ne => 'all')
|
17
|
+
.created_on(Time.zone.today)
|
18
|
+
fields_to_update = SupplejackApi::UsageMetrics
|
19
|
+
.fields
|
20
|
+
.keys
|
21
|
+
.map(&:to_sym)
|
22
|
+
.reject { |field| BLACKLISTED_FIELDS.include? field }
|
23
|
+
summed_usage_metrics_fields = usage_metrics.reduce({}) do |acc, el|
|
24
|
+
fields_to_update.each_with_object(acc) do |field, accumulator|
|
25
|
+
accumulator[field] = accumulator[field].to_i + el[field]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
all_metric = SupplejackApi::UsageMetrics.find_or_create_by(
|
29
|
+
record_field_value: 'all',
|
30
|
+
date: Time.zone.today
|
31
|
+
) do |m|
|
32
|
+
m.record_field_value = 'all'
|
33
|
+
m.date = Time.zone.today
|
34
|
+
end
|
35
|
+
|
36
|
+
all_metric.update(summed_usage_metrics_fields)
|
37
|
+
true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SupplejackApi
|
3
|
+
module InteractionUpdaters
|
4
|
+
class SetMetrics
|
5
|
+
attr_reader :model
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@model = SupplejackApi::InteractionModels::Set
|
9
|
+
end
|
10
|
+
|
11
|
+
def process(set_interactions)
|
12
|
+
unique_facets = set_interactions.map(&:facet).uniq
|
13
|
+
|
14
|
+
unique_facets.each do |facet|
|
15
|
+
metric = SupplejackApi::UsageMetrics.find_or_create_by(
|
16
|
+
date: Date.current,
|
17
|
+
record_field_value: facet
|
18
|
+
) do |um|
|
19
|
+
um.date = Date.current
|
20
|
+
um.record_field_value = facet
|
21
|
+
end
|
22
|
+
|
23
|
+
records_added = set_interactions.count { |x| x.facet == facet }
|
24
|
+
metric.records_added_to_user_sets += records_added
|
25
|
+
metric.save!
|
26
|
+
end
|
27
|
+
|
28
|
+
true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module SupplejackApi
|
3
|
+
module InteractionUpdaters
|
4
|
+
class UsageMetrics
|
5
|
+
attr_reader :model
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@model = SupplejackApi::InteractionModels::Record
|
9
|
+
end
|
10
|
+
|
11
|
+
def process(record_interactions)
|
12
|
+
search_counts = build_hash_for(record_interactions, 'search')
|
13
|
+
get_counts = build_hash_for(record_interactions, 'get')
|
14
|
+
user_set_counts = build_hash_for(record_interactions, 'user_set')
|
15
|
+
|
16
|
+
unique_facets = (search_counts.keys + get_counts.keys + user_set_counts.keys).uniq
|
17
|
+
|
18
|
+
# Creating metrics for each primary collection
|
19
|
+
unique_facets.each do |facet|
|
20
|
+
process_facet(facet, search_counts, get_counts, user_set_counts)
|
21
|
+
end
|
22
|
+
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def process_facet(facet, search_counts, get_counts, user_set_counts)
|
29
|
+
usage_metric_entry = SupplejackApi::UsageMetrics.find_or_create_by(
|
30
|
+
date: Date.current,
|
31
|
+
record_field_value: facet
|
32
|
+
) do |metric|
|
33
|
+
metric.date = Date.current
|
34
|
+
metric.record_field_value = facet
|
35
|
+
end
|
36
|
+
|
37
|
+
# set everything to default value of 0 if no value is present, makes following code simpler
|
38
|
+
[search_counts, get_counts, user_set_counts].each do |x|
|
39
|
+
x[facet] = 0 unless x[facet]
|
40
|
+
end
|
41
|
+
|
42
|
+
searches = usage_metric_entry.searches + search_counts[facet]
|
43
|
+
gets = usage_metric_entry.gets + get_counts[facet]
|
44
|
+
user_set_views = usage_metric_entry.user_set_views + user_set_counts[facet]
|
45
|
+
|
46
|
+
total = searches + gets + user_set_views
|
47
|
+
|
48
|
+
usage_metric_entry.update(
|
49
|
+
searches: searches,
|
50
|
+
gets: gets,
|
51
|
+
user_set_views: user_set_views,
|
52
|
+
total_views: total
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_hash_for(record_interactions, request_type)
|
57
|
+
filtered_record_interactions = record_interactions.select { |rl| rl.request_type == request_type }
|
58
|
+
counts_by_facet = {}
|
59
|
+
|
60
|
+
filtered_record_interactions.each do |rl|
|
61
|
+
next unless rl.log_values.present?
|
62
|
+
|
63
|
+
rl.log_values.each do |facet|
|
64
|
+
counts_by_facet[facet] = 0 unless counts_by_facet.key? facet
|
65
|
+
counts_by_facet[facet] += 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
counts_by_facet
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,24 @@
|
|
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 Partner
|
11
|
+
include Mongoid::Document
|
12
|
+
include ActiveModel::MassAssignmentSecurity
|
13
|
+
|
14
|
+
store_in collection: 'partners', session: 'strong'
|
15
|
+
|
16
|
+
attr_accessible :_id, :name
|
17
|
+
|
18
|
+
field :name, type: String
|
19
|
+
|
20
|
+
has_many :sources, class_name: 'SupplejackApi::Source'
|
21
|
+
|
22
|
+
validates :name, presence: true
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
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 PreviewRecord
|
11
|
+
# These records are used for previewing in squirrel, expire after 60 seconds
|
12
|
+
|
13
|
+
include Support::Storable
|
14
|
+
include Support::FragmentHelpers
|
15
|
+
include Support::Harvestable
|
16
|
+
|
17
|
+
store_in collection: 'preview_records'
|
18
|
+
|
19
|
+
embeds_many :fragments, cascade_callbacks: true, class_name: 'SupplejackApi::ApiRecord::RecordFragment'
|
20
|
+
embeds_one :merged_fragment, class_name: 'SupplejackApi::ApiRecord::RecordFragment'
|
21
|
+
|
22
|
+
auto_increment :record_id, session: 'strong', collection: 'preview_sequences'
|
23
|
+
|
24
|
+
build_model_fields
|
25
|
+
|
26
|
+
def fragment_class
|
27
|
+
SupplejackApi::ApiRecord::RecordFragment
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
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 Record
|
11
|
+
include Support::Storable
|
12
|
+
include Support::Searchable
|
13
|
+
include Support::Harvestable
|
14
|
+
include Support::FragmentHelpers
|
15
|
+
include ActiveModel::SerializerSupport
|
16
|
+
include SupplejackApi::Concerns::Record
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
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 RecordSearch < Search
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,147 @@
|
|
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
|
+
module SchemaDefinition
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
ALLOWED_ATTRIBUTES = {
|
14
|
+
field: [:type, :search_value, :search_boost, :multi_value, :search_as, :store,
|
15
|
+
:solr_name, :namespace, :namespace_field, :default_value, :date_format],
|
16
|
+
group: [:fields, :includes],
|
17
|
+
role: [:default, :field_restrictions, :record_restrictions, :admin],
|
18
|
+
namespace: [:url],
|
19
|
+
mongo_index: [:fields, :index_options],
|
20
|
+
model_field: [:type, :field_options, :validation, :index_fields, :index_options,
|
21
|
+
:search_value, :search_as, :store, :namespace]
|
22
|
+
}.freeze
|
23
|
+
|
24
|
+
included do
|
25
|
+
cattr_accessor :fields, :groups, :roles, :default_role, :namespaces, :mongo_indexes, :model_fields
|
26
|
+
end
|
27
|
+
|
28
|
+
module ClassMethods
|
29
|
+
[:string, :integer, :datetime, :boolean, :latlon].each do |type|
|
30
|
+
define_method(type) do |*args, &block|
|
31
|
+
field(type, *args, &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def field(type, name, options = {}, &block)
|
38
|
+
self.fields ||= {}
|
39
|
+
options[:type] = type
|
40
|
+
|
41
|
+
field = Field.new(name, options, &block)
|
42
|
+
self.fields[name] = field
|
43
|
+
end
|
44
|
+
|
45
|
+
def group(name, options = {}, &block)
|
46
|
+
self.groups ||= {}
|
47
|
+
|
48
|
+
group = Group.new(name, options, &block)
|
49
|
+
group.include_groups_from(groups)
|
50
|
+
|
51
|
+
self.groups[name] = group
|
52
|
+
end
|
53
|
+
|
54
|
+
def role(name, options = {}, &block)
|
55
|
+
self.roles ||= {}
|
56
|
+
|
57
|
+
role = Role.new(name, options, &block)
|
58
|
+
self.default_role = role if role.default
|
59
|
+
|
60
|
+
self.roles[name] = role
|
61
|
+
end
|
62
|
+
|
63
|
+
def namespace(name, options = {})
|
64
|
+
self.namespaces ||= {}
|
65
|
+
|
66
|
+
namespace = Namespace.new(name, options)
|
67
|
+
self.namespaces[name] = namespace
|
68
|
+
end
|
69
|
+
|
70
|
+
def mongo_index(name, options = {})
|
71
|
+
self.mongo_indexes ||= {}
|
72
|
+
|
73
|
+
mongo_index = MongoIndex.new(name, options)
|
74
|
+
self.mongo_indexes[name] = mongo_index
|
75
|
+
end
|
76
|
+
|
77
|
+
def model_field(name, options = {}, &block)
|
78
|
+
self.model_fields ||= {}
|
79
|
+
|
80
|
+
model_field = ModelField.new(name, options, &block)
|
81
|
+
self.model_fields[name] = model_field
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class SchemaObject
|
86
|
+
ALLOWED_ATTRIBUTES = ALLOWED_ATTRIBUTES.values.flatten
|
87
|
+
|
88
|
+
attr_reader :name
|
89
|
+
|
90
|
+
def initialize(name, options, &block)
|
91
|
+
@name = name
|
92
|
+
|
93
|
+
builder = SchemaObjectBuilder.new(options)
|
94
|
+
builder.instance_eval(&block) if block_given?
|
95
|
+
|
96
|
+
@options = builder.options
|
97
|
+
end
|
98
|
+
|
99
|
+
ALLOWED_ATTRIBUTES.each do |attr|
|
100
|
+
define_method(attr) do
|
101
|
+
@options[attr]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class SchemaObjectBuilder
|
106
|
+
attr_reader :options
|
107
|
+
|
108
|
+
def initialize(options)
|
109
|
+
@options = options
|
110
|
+
end
|
111
|
+
|
112
|
+
ALLOWED_ATTRIBUTES.each do |attr|
|
113
|
+
define_method(attr) do |*args, &block|
|
114
|
+
@options[attr] = block || args.first
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Field < SchemaObject
|
121
|
+
def namespace_field
|
122
|
+
namespace_field = !!@options[:namespace_field] ? @options[:namespace_field] : @name
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
class Namespace < SchemaObject
|
127
|
+
end
|
128
|
+
|
129
|
+
class Group < SchemaObject
|
130
|
+
def include_groups_from(existing_groups)
|
131
|
+
return unless @options[:includes].present?
|
132
|
+
|
133
|
+
included_fields = @options[:includes].collect { |g| existing_groups[g].fields }
|
134
|
+
@options[:fields] = included_fields.flatten | @options[:fields]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class Role < SchemaObject
|
139
|
+
end
|
140
|
+
|
141
|
+
class MongoIndex < SchemaObject
|
142
|
+
end
|
143
|
+
|
144
|
+
class ModelField < SchemaObject
|
145
|
+
end
|
146
|
+
end
|
147
|
+
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 Search
|
11
|
+
include ActiveModel::SerializerSupport
|
12
|
+
include SupplejackApi::Concerns::Searchable
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,57 @@
|
|
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 SetItem
|
11
|
+
include Mongoid::Document
|
12
|
+
|
13
|
+
ATTRIBUTES = RecordSchema.groups[:sets].fields
|
14
|
+
|
15
|
+
attr_accessor :record
|
16
|
+
|
17
|
+
embedded_in :user_set, class_name: 'SupplejackApi::UserSet'
|
18
|
+
|
19
|
+
field :record_id, type: Integer
|
20
|
+
field :position, type: Integer
|
21
|
+
|
22
|
+
validates :record_id, presence: true, uniqueness: true, numericality: { greater_than: 0 }
|
23
|
+
validates :position, presence: true
|
24
|
+
validate :not_adding_set_to_itself
|
25
|
+
|
26
|
+
before_validation :set_position
|
27
|
+
after_destroy :reindex_record
|
28
|
+
|
29
|
+
def not_adding_set_to_itself
|
30
|
+
return unless user_set.record && record_id == user_set.record.record_id
|
31
|
+
|
32
|
+
errors.add(:set, "can't be added to itself")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Dynamically define methods for the attributes that get added to the set_item from
|
36
|
+
# the actual Record.
|
37
|
+
#
|
38
|
+
ATTRIBUTES.each do |record_attr|
|
39
|
+
define_method(record_attr) do
|
40
|
+
record.try(:send, record_attr)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Set the default position as the last in the set, if not defined.
|
45
|
+
#
|
46
|
+
def set_position
|
47
|
+
return if position
|
48
|
+
|
49
|
+
positions = user_set.set_items.map(&:position)
|
50
|
+
self.position = positions.compact.max.to_i + 1
|
51
|
+
end
|
52
|
+
|
53
|
+
def reindex_record
|
54
|
+
SupplejackApi::Record.custom_find(record_id).index rescue nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|