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
|
+
require 'supplejack_api/engine'
|
10
|
+
Dir[File.dirname(__FILE__) + '/**/*.rb'].each { |f| require f }
|
11
|
+
|
12
|
+
module SupplejackApi
|
13
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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 Sortable
|
11
|
+
module Criteria
|
12
|
+
def sort_order(order)
|
13
|
+
if order.to_s =~ /^([\w\_\.]+)_(desc|asc)$/
|
14
|
+
order_by("#{Regexp.last_match(1)} #{Regexp.last_match(2)}")
|
15
|
+
else
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Query
|
22
|
+
extend ActiveSupport::Concern
|
23
|
+
|
24
|
+
module ClassMethods
|
25
|
+
def sortable(options = {})
|
26
|
+
options = options.try(:symbolize_keys) || {}
|
27
|
+
options[:page] ||= 1
|
28
|
+
options[:per_page] ||= 25
|
29
|
+
|
30
|
+
scope = unscoped
|
31
|
+
scope = scope.sort_order(options[:order]) if options[:order]
|
32
|
+
scope = scope.page(options[:page]).per(options[:per_page])
|
33
|
+
scope
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Mongoid::Criteria.send(:include, SupplejackApi::Sortable::Criteria)
|
@@ -0,0 +1,46 @@
|
|
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
|
+
require 'rails'
|
10
|
+
require 'devise'
|
11
|
+
require 'devise-token_authenticatable'
|
12
|
+
require 'kaminari'
|
13
|
+
require 'simple_form'
|
14
|
+
require 'state_machine'
|
15
|
+
require 'protected_attributes'
|
16
|
+
require 'sunspot'
|
17
|
+
require 'active_model_serializers'
|
18
|
+
require 'mongoid'
|
19
|
+
require 'mongoid_auto_inc'
|
20
|
+
require 'mongoid/tree'
|
21
|
+
require 'devise/orm/mongoid'
|
22
|
+
require 'figaro'
|
23
|
+
require 'unicode_utils'
|
24
|
+
require 'rest_client'
|
25
|
+
require 'lazy_high_charts'
|
26
|
+
require 'zurb-foundation'
|
27
|
+
require 'resque/server'
|
28
|
+
require 'json/ld'
|
29
|
+
|
30
|
+
module SupplejackApi
|
31
|
+
class Engine < ::Rails::Engine
|
32
|
+
isolate_namespace SupplejackApi
|
33
|
+
engine_name 'supplejack_api'
|
34
|
+
|
35
|
+
config.generators do |g|
|
36
|
+
g.test_framework :rspec, fixture: false
|
37
|
+
g.fixture_replacement :factory_girl, dir: 'spec/factories'
|
38
|
+
g.assets false
|
39
|
+
g.helper false
|
40
|
+
end
|
41
|
+
|
42
|
+
config.to_prepare do
|
43
|
+
ApplicationController.helper(ActionView::Helpers::ApplicationHelper)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
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 HarvesterConstraint
|
11
|
+
def initialize
|
12
|
+
@ips = ENV['HARVESTER_IPS'].gsub(/\s+/, '').split(',')
|
13
|
+
rescue
|
14
|
+
# Allow supplejack:install generator to work without application.yml file
|
15
|
+
@ips = ['127.0.0.1']
|
16
|
+
end
|
17
|
+
|
18
|
+
def matches?(request)
|
19
|
+
forwarded_ips(request).each { |ip| return false unless @ips.include?(ip) }
|
20
|
+
@ips.include?(request.remote_ip)
|
21
|
+
end
|
22
|
+
|
23
|
+
def forwarded_ips(request)
|
24
|
+
ip_addresses = request.env['HTTP_X_FORWARDED_FOR']
|
25
|
+
ip_addresses ? ip_addresses.strip.split(/[,\s]+/) : []
|
26
|
+
end
|
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 Stylesheets
|
10
|
+
def self.all
|
11
|
+
{
|
12
|
+
'1' => 'custom_red.css',
|
13
|
+
'2' => 'custom_blue.css',
|
14
|
+
'3' => 'custom_green.css',
|
15
|
+
'4' => 'custom_brown.css',
|
16
|
+
'5' => 'widget_red.css',
|
17
|
+
'6' => 'widget_blue.css',
|
18
|
+
'9' => 'widget_coming_home.css',
|
19
|
+
'10' => 'custom_coming_home.css',
|
20
|
+
'11' => 'custom_purple.css',
|
21
|
+
'12' => 'custom_grey.css',
|
22
|
+
'13' => 'widget_purple.css',
|
23
|
+
'14' => 'widget_grey.css',
|
24
|
+
'15' => 'widget_yellow.css',
|
25
|
+
'16' => 'widget_transparent.css'
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.base_path
|
30
|
+
[ENV['HTTP_HOST'], 'assets/stylesheets/widgets'].join('/')
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.url(id)
|
34
|
+
[Stylesheets.base_path, Stylesheets.all[id.to_s]].join('/')
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,75 @@
|
|
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 Utils
|
10
|
+
extend self
|
11
|
+
|
12
|
+
def load_yaml(file_name)
|
13
|
+
path = File.join(Rails.root, 'config', file_name)
|
14
|
+
if File.exist?(path)
|
15
|
+
File.open(path) do |file|
|
16
|
+
YAML.load(file.read)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
{}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def call_block(dsl, &block)
|
24
|
+
Sunspot::Util.instance_eval_or_call(dsl, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def safe?(text, version = 3)
|
28
|
+
!unsafe?(text, version)
|
29
|
+
end
|
30
|
+
|
31
|
+
def unsafe?(text, version = 3)
|
32
|
+
if version == 3
|
33
|
+
text.to_s.match(/([\w]{3,40}:)/)
|
34
|
+
else
|
35
|
+
text.to_s.match(/([\w]{3,40}:)|(AND|OR|NOT)/)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Return a array no matter what.
|
41
|
+
#
|
42
|
+
def array(object)
|
43
|
+
case object
|
44
|
+
when Array
|
45
|
+
object
|
46
|
+
when String
|
47
|
+
object.present? ? [object] : []
|
48
|
+
when NilClass
|
49
|
+
[]
|
50
|
+
else
|
51
|
+
[object]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def time(value)
|
56
|
+
if value.blank?
|
57
|
+
return nil
|
58
|
+
elsif value.is_a?(Integer)
|
59
|
+
number = value.to_s[0..9]
|
60
|
+
Time.at(number.to_i)
|
61
|
+
elsif value.is_a?(String) && value.match(/^\d{13}$/)
|
62
|
+
number = value[0..9]
|
63
|
+
Time.at(number.to_i)
|
64
|
+
else
|
65
|
+
Time.parse(value) rescue nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def capitalize_first_word(string)
|
70
|
+
return '' unless string.present?
|
71
|
+
first_letter = string.to_s[0].upcase
|
72
|
+
string[0] = first_letter
|
73
|
+
string
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,11 @@
|
|
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
|
+
VERSION = '0.1'
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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
|
+
require 'resque/tasks'
|
10
|
+
require 'resque_scheduler/tasks'
|
11
|
+
|
12
|
+
namespace :resque do
|
13
|
+
task setup: :environment do
|
14
|
+
require 'resque'
|
15
|
+
require 'resque_scheduler'
|
16
|
+
require 'resque/scheduler'
|
17
|
+
|
18
|
+
# The schedule doesn't need to be stored in a YAML, it just needs to
|
19
|
+
# be a hash. YAML is usually the easiest.
|
20
|
+
Resque.schedule = YAML.load_file(File.join(Rails.root.to_s, 'config/resque_schedule.yml'))
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,38 @@
|
|
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
|
+
class UrlValidator < ActiveModel::EachValidator
|
10
|
+
def validate_each(record, attribute, value)
|
11
|
+
valid = false
|
12
|
+
|
13
|
+
return nil unless value.present?
|
14
|
+
|
15
|
+
if value.is_a?(Array)
|
16
|
+
value.each do |v|
|
17
|
+
valid = validate_url(v)
|
18
|
+
break unless valid
|
19
|
+
end
|
20
|
+
else
|
21
|
+
valid = validate_url(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
unless valid
|
25
|
+
record.errors[attribute] << (options[:message] || 'is not an url')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_url(value)
|
30
|
+
protocol = '(http|https)'
|
31
|
+
host = '[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?'
|
32
|
+
ip_host = '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
|
33
|
+
port = '(:\d{1,5})?'
|
34
|
+
|
35
|
+
regex = %r{ ^#{protocol}:\/\/((#{host})|(#{ip_host}))#{port}\/.*)?$ }ix
|
36
|
+
!!value.match(regex)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
2
|
+
# and is licensed under the GNU General Public License, version 3.
|
3
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
4
|
+
#
|
5
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
6
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
7
|
+
|
8
|
+
require 'spec_helper'
|
9
|
+
|
10
|
+
module SupplejackApi
|
11
|
+
module Admin
|
12
|
+
describe BaseController, type: :controller do
|
13
|
+
routes { SupplejackApi::Engine.routes }
|
14
|
+
|
15
|
+
let(:user) { double(User).as_null_object }
|
16
|
+
|
17
|
+
controller(Admin::BaseController) do
|
18
|
+
def index
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#restrict_to_admin_users!' do
|
23
|
+
before(:each) do
|
24
|
+
allow(controller).to receive(:current_admin_user) { user }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'user is a admin' do
|
28
|
+
before { allow(user).to receive(:admin?) { true } }
|
29
|
+
|
30
|
+
it 'should not do anything' do
|
31
|
+
expect(controller.restrict_to_admin_users!).to be_nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'user is not a admin' do
|
36
|
+
before do
|
37
|
+
allow(user).to receive(:admin?) { false }
|
38
|
+
allow(controller).to receive(:redirect_to) { nil }
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should sign the user out' do
|
42
|
+
expect(controller).to receive(:sign_out)
|
43
|
+
controller.restrict_to_admin_users!
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should redirect the user to the sign in page' do
|
47
|
+
expect(controller).to receive(:redirect_to).with(new_admin_user_session_path, { alert: 'This area is restricted to Administrators' })
|
48
|
+
controller.restrict_to_admin_users!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
2
|
+
# and is licensed under the GNU General Public License, version 3.
|
3
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
4
|
+
#
|
5
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
6
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
7
|
+
|
8
|
+
require 'spec_helper'
|
9
|
+
|
10
|
+
module SupplejackApi
|
11
|
+
module Admin
|
12
|
+
describe SiteActivitiesController, type: :controller do
|
13
|
+
routes { SupplejackApi::Engine.routes }
|
14
|
+
|
15
|
+
let(:site_activity) { double(SupplejackApi::SiteActivity).as_null_object }
|
16
|
+
let(:user) { double(User).as_null_object }
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
allow(controller).to receive(:current_admin_user) { user }
|
20
|
+
allow(controller).to receive(:authenticate_admin_user!) { true }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'GET index' do
|
24
|
+
before { allow(SupplejackApi::SiteActivity).to receive_message_chain(:sortable, :order_by) { [site_activity] } }
|
25
|
+
|
26
|
+
it 'finds all site activities' do
|
27
|
+
get :index
|
28
|
+
expect(assigns(:site_activities)).to eq [site_activity]
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'sorts the site activities by the order param' do
|
32
|
+
expect(SupplejackApi::SiteActivity).to receive(:sortable).with(hash_including(order: 'total_asc'))
|
33
|
+
get :index, order: 'total_asc'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'paginates the site activities' do
|
37
|
+
expect(SupplejackApi::SiteActivity).to receive(:sortable).with(hash_including(page: '2'))
|
38
|
+
get :index, page: 2
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
|
2
|
+
# and is licensed under the GNU General Public License, version 3.
|
3
|
+
# One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
|
4
|
+
#
|
5
|
+
# Supplejack was created by DigitalNZ at the National Library of NZ and
|
6
|
+
# the Department of Internal Affairs. http://digitalnz.org/supplejack
|
7
|
+
|
8
|
+
require 'spec_helper'
|
9
|
+
|
10
|
+
module SupplejackApi
|
11
|
+
module Admin
|
12
|
+
describe UsersController, type: :controller do
|
13
|
+
routes { SupplejackApi::Engine.routes }
|
14
|
+
|
15
|
+
let(:user) { double(User).as_null_object }
|
16
|
+
|
17
|
+
before(:each) do
|
18
|
+
allow(controller).to receive(:current_admin_user) { user }
|
19
|
+
allow(controller).to receive(:authenticate_admin_user!) { true }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'GET index' do
|
23
|
+
before { allow(User).to receive(:sortable) { [user] } }
|
24
|
+
|
25
|
+
it 'finds all the users' do
|
26
|
+
get :index
|
27
|
+
expect(assigns(:users)).to eq [user]
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'sorts the users by the order param' do
|
31
|
+
expect(User).to receive(:sortable).with(hash_including(order: 'name_asc'))
|
32
|
+
get :index, order: 'name_asc'
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'paginates the users' do
|
36
|
+
expect(User).to receive(:sortable).with(hash_including(page: '2'))
|
37
|
+
get :index, page: 2
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'GET edit' do
|
42
|
+
it 'finds the user by id' do
|
43
|
+
expect(User).to receive(:find).with('1') { user }
|
44
|
+
get :edit, id: 1
|
45
|
+
expect(assigns(:user)).to eq user
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'PUT update' do
|
50
|
+
before(:each) do
|
51
|
+
allow(User).to receive(:find) {user}
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'finds the user by id' do
|
55
|
+
expect(User).to receive(:find).with('1') { user }
|
56
|
+
put :update, id: 1, user: {max_requests: 1000}
|
57
|
+
expect(assigns(:user)).to eq user
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'trys to update attributes on user' do
|
61
|
+
expect(user).to receive(:update_attributes).with('max_requests' => '1000')
|
62
|
+
put :update, id: 1, user: {max_requests: 1000}
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'renders edit if attributes are invalid' do
|
66
|
+
allow(user).to receive(:update_attributes) {false}
|
67
|
+
put :update, id: 1, user: {max_requests: -1000}
|
68
|
+
expect(response).to render_template('admin/users/edit')
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'redirects to admin_users_path if attributes are valid' do
|
72
|
+
allow(user).to receive(:update_attributes) {true}
|
73
|
+
put :update, id: 1, user: {max_requests: 1000}
|
74
|
+
expect(response).to redirect_to admin_users_path
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|