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,59 @@
|
|
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 SiteActivity
|
11
|
+
include Mongoid::Document
|
12
|
+
include Mongoid::Timestamps
|
13
|
+
include Sortable::Query
|
14
|
+
|
15
|
+
store_in collection: 'site_activities'
|
16
|
+
|
17
|
+
field :date, type: Date
|
18
|
+
field :user_sets, type: Integer
|
19
|
+
field :search, type: Integer
|
20
|
+
field :records, type: Integer
|
21
|
+
field :source_clicks, type: Integer
|
22
|
+
field :total, type: Integer
|
23
|
+
|
24
|
+
validates_uniqueness_of :date
|
25
|
+
|
26
|
+
IMPLICIT_FIELDS = %w(_type _id created_at updated_at).freeze
|
27
|
+
|
28
|
+
def self.generate_activity(time = Time.now)
|
29
|
+
site_activity_date = time.to_date
|
30
|
+
user_activities = SupplejackApi::UserActivity.gt(created_at: time - 12.hours).lte(created_at: time)
|
31
|
+
|
32
|
+
attributes = { user_sets: 0, search: 0, records: 0 }
|
33
|
+
|
34
|
+
user_activities.each do |user_activity|
|
35
|
+
[:user_sets, :search, :records].each do |field|
|
36
|
+
attributes[field] += user_activity.send(field)['total'] if user_activity.send(field)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# The date stored is yesterday's date since the activity corresponds to the day before.
|
41
|
+
attributes[:date] = site_activity_date
|
42
|
+
|
43
|
+
site_activity = new(attributes)
|
44
|
+
site_activity.source_clicks = SupplejackApi::SourceActivity.get_source_clicks || 0
|
45
|
+
SupplejackApi::SourceActivity.reset
|
46
|
+
site_activity.calculate_total
|
47
|
+
site_activity.save
|
48
|
+
site_activity
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.activities
|
52
|
+
%w(date search user_sets records source_clicks total) - IMPLICIT_FIELDS
|
53
|
+
end
|
54
|
+
|
55
|
+
def calculate_total
|
56
|
+
self.total = user_sets + records + search + source_clicks
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,28 @@
|
|
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 Source
|
11
|
+
include Mongoid::Document
|
12
|
+
include ActiveModel::MassAssignmentSecurity
|
13
|
+
|
14
|
+
store_in collection: 'sources', session: 'strong'
|
15
|
+
|
16
|
+
attr_accessible :name, :source_id, :_id, :partner_id, :status
|
17
|
+
|
18
|
+
field :name, type: String
|
19
|
+
field :source_id, type: String
|
20
|
+
field :status, type: String, default: 'active'
|
21
|
+
|
22
|
+
belongs_to :partner, class_name: 'SupplejackApi::Partner'
|
23
|
+
|
24
|
+
validates :name, presence: true
|
25
|
+
|
26
|
+
scope :suppressed, -> { where(status: 'suppressed') }
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,36 @@
|
|
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 SourceActivity
|
11
|
+
include Mongoid::Document
|
12
|
+
include Mongoid::Timestamps
|
13
|
+
|
14
|
+
store_in collection: 'source_activities'
|
15
|
+
|
16
|
+
field :source_clicks, type: Integer, default: 0
|
17
|
+
|
18
|
+
private_class_method :new
|
19
|
+
|
20
|
+
def self.increment
|
21
|
+
if first
|
22
|
+
first.inc(source_clicks: 1)
|
23
|
+
else
|
24
|
+
SupplejackApi::SourceActivity.create(source_clicks: 1)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.get_source_clicks
|
29
|
+
SupplejackApi::SourceActivity.first.try(:source_clicks)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.reset
|
33
|
+
SupplejackApi::SourceActivity.first.try(:delete)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
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 SourceAuthority
|
11
|
+
include Mongoid::Document
|
12
|
+
include Mongoid::Timestamps
|
13
|
+
include Mongoid::Attributes::Dynamic
|
14
|
+
|
15
|
+
# TODO: Move this to a class/module that store all the constants
|
16
|
+
MONGOID_TYPE_NAMES = {
|
17
|
+
string: String,
|
18
|
+
integer: Integer,
|
19
|
+
datetime: DateTime,
|
20
|
+
boolean: Boolean
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
store_in collection: 'source_authorities'
|
24
|
+
|
25
|
+
field :concept_type, type: String
|
26
|
+
field :internal_identifier, type: String
|
27
|
+
field :concept_score, type: Integer
|
28
|
+
field :source_id, type: String
|
29
|
+
field :source_name, type: String
|
30
|
+
field :url, type: String
|
31
|
+
|
32
|
+
# TODO: Add field validations
|
33
|
+
|
34
|
+
belongs_to :concept, class_name: 'SupplejackApi::Concept'
|
35
|
+
|
36
|
+
ConceptSchema.fields.each do |name, field|
|
37
|
+
next if field.store == false
|
38
|
+
type = field.multi_value.presence ? Array : MONGOID_TYPE_NAMES[field.type]
|
39
|
+
field name, type: type
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,37 @@
|
|
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 SupplejackSchema
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
include SupplejackApi::SchemaDefinition
|
13
|
+
|
14
|
+
CORE_FIELDS = [
|
15
|
+
:internal_identifier,
|
16
|
+
:status,
|
17
|
+
:record_type,
|
18
|
+
:created_at,
|
19
|
+
:updated_at
|
20
|
+
].freeze
|
21
|
+
|
22
|
+
included do
|
23
|
+
CORE_FIELDS.each do |field|
|
24
|
+
string field, store: false
|
25
|
+
end
|
26
|
+
|
27
|
+
group :internal_fields do
|
28
|
+
fields CORE_FIELDS
|
29
|
+
end
|
30
|
+
|
31
|
+
# Index core fields in mongo
|
32
|
+
# mongo_index :status, fields: [{status: 1}]
|
33
|
+
# mongo_index :internal_identifier, fields: [{internal_identifier: 1}]
|
34
|
+
# mongo_index :updated_at, fields: [{updated_at: 1}]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,79 @@
|
|
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 Support
|
11
|
+
module Concept
|
12
|
+
module Searchable
|
13
|
+
extend ActiveSupport::Concern
|
14
|
+
|
15
|
+
SUNSPOT_TYPE_NAMES = {
|
16
|
+
string: :string,
|
17
|
+
integer: :integer,
|
18
|
+
datetime: :time,
|
19
|
+
boolean: :boolean,
|
20
|
+
latlon: :latlon
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
included do
|
24
|
+
include Sunspot::Mongoid
|
25
|
+
|
26
|
+
searchable do
|
27
|
+
build_sunspot_schema(self)
|
28
|
+
end # searchable
|
29
|
+
end # included
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def custom_find(id, _scope = nil, options = {})
|
33
|
+
options ||= {}
|
34
|
+
class_scope = unscoped
|
35
|
+
|
36
|
+
if id.to_s =~ /^\d+$/
|
37
|
+
data = class_scope.where(concept_id: id).first
|
38
|
+
elsif id.to_s =~ /^[0-9a-f]{24}$/i
|
39
|
+
data = class_scope.find(id)
|
40
|
+
end
|
41
|
+
|
42
|
+
raise Mongoid::Errors::DocumentNotFound.new(self, [id], [id]) unless data
|
43
|
+
|
44
|
+
data
|
45
|
+
end
|
46
|
+
|
47
|
+
def build_sunspot_schema(builder)
|
48
|
+
ConceptSchema.model_fields.each do |_name, field|
|
49
|
+
options = {}
|
50
|
+
search_as = field.search_as || []
|
51
|
+
|
52
|
+
value_block = nil
|
53
|
+
if field.search_value.present?
|
54
|
+
value_block = proc do
|
55
|
+
field.search_value.call(self)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
options[:as] = field.solr_name if field.solr_name.present?
|
60
|
+
|
61
|
+
if search_as.include? :filter
|
62
|
+
filter_options = {}
|
63
|
+
filter_options[:multiple] = true if field.multi_value.present?
|
64
|
+
type = SUNSPOT_TYPE_NAMES[field.type]
|
65
|
+
|
66
|
+
builder.public_send(type, field.name, options.merge(filter_options), &value_block)
|
67
|
+
end
|
68
|
+
|
69
|
+
if search_as.include? :fulltext
|
70
|
+
options[:boost] = field.search_boost if field.search_boost.present?
|
71
|
+
builder.text field.name, options, &value_block
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end # module ClassMethods
|
76
|
+
end # module Searchable
|
77
|
+
end # module Concept
|
78
|
+
end # module Support
|
79
|
+
end # module SupplejackApi
|
@@ -0,0 +1,59 @@
|
|
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 Support
|
11
|
+
module Concept
|
12
|
+
module Storable
|
13
|
+
extend ActiveSupport::Concern
|
14
|
+
|
15
|
+
included do
|
16
|
+
include Mongoid::Document
|
17
|
+
include Mongoid::Timestamps
|
18
|
+
include Mongoid::Attributes::Dynamic
|
19
|
+
|
20
|
+
store_in collection: 'concepts'
|
21
|
+
|
22
|
+
has_many :source_authorities, class_name: 'SupplejackApi::SourceAuthority'
|
23
|
+
|
24
|
+
# Both of these fields are required in SJ API Core
|
25
|
+
# No need to configure in *Schema
|
26
|
+
field :concept_type, type: String
|
27
|
+
auto_increment :concept_id
|
28
|
+
|
29
|
+
index({ concept_id: 1 }, unique: true)
|
30
|
+
|
31
|
+
ConceptSchema.model_fields.each do |name, option|
|
32
|
+
next if option.store == false
|
33
|
+
field name.to_sym, option.field_options if !!option.field_options
|
34
|
+
|
35
|
+
# TODO: Set the Mongo index
|
36
|
+
# TODO: Set the validation
|
37
|
+
end
|
38
|
+
|
39
|
+
def records
|
40
|
+
# Limit the number of records by 50
|
41
|
+
SupplejackApi::Record.where(concept_ids: id).limit(50).to_a
|
42
|
+
end
|
43
|
+
end # included
|
44
|
+
|
45
|
+
def edm_type
|
46
|
+
concept_type.gsub(/edm:/, '').downcase.pluralize
|
47
|
+
end
|
48
|
+
|
49
|
+
def site_id
|
50
|
+
[ENV['CONCEPT_HTTP_HOST'], 'concepts', concept_id].join('/')
|
51
|
+
end
|
52
|
+
|
53
|
+
def context
|
54
|
+
[ENV['HTTP_HOST'], 'schema'].join('/')
|
55
|
+
end
|
56
|
+
end # module
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,96 @@
|
|
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 Support
|
11
|
+
module FragmentHelpers
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
validate :validate_unique_source_ids
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_ids
|
19
|
+
fragments.map(&:source_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def duplicate_source_ids?
|
23
|
+
source_ids.size != fragments.distinct(:source_id).count
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate_unique_source_ids
|
27
|
+
return unless duplicate_source_ids?
|
28
|
+
|
29
|
+
errors.add(:base, "fragment source_ids must be unique, source_ids: #{source_ids}")
|
30
|
+
klass_name = fragment_class.to_s.demodulize.gsub(/Fragment/, '')
|
31
|
+
klass_id = "#{klass_name.downcase}_id"
|
32
|
+
log_message = "#{klass_name} with #{klass_id}:#{send(klass_id)},"
|
33
|
+
log_message += " internal_identifier:#{internal_identifier} failed validation."
|
34
|
+
log_message += " Fragment source_ids must be unique, source_ids: #{source_ids}"
|
35
|
+
ValidationLogger.logger.error(log_message)
|
36
|
+
end
|
37
|
+
|
38
|
+
def primary_fragment(attributes = {})
|
39
|
+
primary = fragments.where(priority: 0).first
|
40
|
+
primary ? primary : fragments.build(attributes.merge(priority: 0))
|
41
|
+
end
|
42
|
+
|
43
|
+
def primary_fragment!(attributes = {})
|
44
|
+
primary_fragment(attributes).tap(&:save)
|
45
|
+
end
|
46
|
+
|
47
|
+
def merge_fragments
|
48
|
+
self.merged_fragment = nil
|
49
|
+
|
50
|
+
return unless fragments.size > 1
|
51
|
+
|
52
|
+
self.merged_fragment = fragment_class.new
|
53
|
+
|
54
|
+
fragment_class.mutable_fields.each do |name, field_type|
|
55
|
+
if field_type == Array
|
56
|
+
values = Set.new
|
57
|
+
sorted_fragments.each do |s|
|
58
|
+
values += Array(s.public_send(name))
|
59
|
+
end
|
60
|
+
merged_fragment.public_send("#{name}=", values.to_a)
|
61
|
+
else
|
62
|
+
values = sorted_fragments.to_a.map { |s| s.public_send(name) }
|
63
|
+
merged_fragment.public_send("#{name}=", values.compact.first)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
merged_fragment.unset(:priority)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Fetch the attribute from the underlying
|
71
|
+
# merged_fragment or only fragment.
|
72
|
+
# Means that record.{attribute} (ie. record.name) works for convenience
|
73
|
+
# and abstracts away the fact that fragments exist
|
74
|
+
# rubocop:disable Style/MethodMissing
|
75
|
+
def method_missing(symbol, *_args)
|
76
|
+
type = fragment_class.mutable_fields[symbol.to_s]
|
77
|
+
|
78
|
+
if merged_fragment
|
79
|
+
value = merged_fragment.public_send(symbol)
|
80
|
+
elsif fragments.first
|
81
|
+
value = fragments.first.public_send(symbol)
|
82
|
+
end
|
83
|
+
type == Array ? Array(value) : value
|
84
|
+
end
|
85
|
+
# rubocop:enable Style/MethodMissing
|
86
|
+
|
87
|
+
def sorted_fragments
|
88
|
+
fragments.sort_by { |s| s.priority || Integer::INT32_MAX }
|
89
|
+
end
|
90
|
+
|
91
|
+
def find_fragment(source_id)
|
92
|
+
fragments.where(source_id: source_id).first
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|