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.
Files changed (291) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +80 -0
  3. data/Rakefile +42 -0
  4. data/app/assets/javascripts/supplejack_api/application.js +26 -0
  5. data/app/assets/stylesheets/supplejack_api/application.css +30 -0
  6. data/app/controllers/supplejack_api/admin/base_controller.rb +24 -0
  7. data/app/controllers/supplejack_api/admin/sessions_controller.rb +25 -0
  8. data/app/controllers/supplejack_api/admin/site_activities_controller.rb +21 -0
  9. data/app/controllers/supplejack_api/admin/users_controller.rb +55 -0
  10. data/app/controllers/supplejack_api/application_controller.rb +70 -0
  11. data/app/controllers/supplejack_api/concepts_controller.rb +52 -0
  12. data/app/controllers/supplejack_api/concerns/ignore_metrics.rb +14 -0
  13. data/app/controllers/supplejack_api/concerns/records_controller_metrics.rb +26 -0
  14. data/app/controllers/supplejack_api/concerns/set_items_controller_metrics.rb +20 -0
  15. data/app/controllers/supplejack_api/concerns/user_sets_controller_metrics.rb +26 -0
  16. data/app/controllers/supplejack_api/harvester/concepts_controller.rb +41 -0
  17. data/app/controllers/supplejack_api/harvester/fragments_controller.rb +30 -0
  18. data/app/controllers/supplejack_api/harvester/records_controller.rb +68 -0
  19. data/app/controllers/supplejack_api/metrics_api_controller.rb +44 -0
  20. data/app/controllers/supplejack_api/partners_controller.rb +39 -0
  21. data/app/controllers/supplejack_api/records_controller.rb +71 -0
  22. data/app/controllers/supplejack_api/schema_controller.rb +19 -0
  23. data/app/controllers/supplejack_api/set_items_controller.rb +38 -0
  24. data/app/controllers/supplejack_api/sources_controller.rb +67 -0
  25. data/app/controllers/supplejack_api/status_controller.rb +67 -0
  26. data/app/controllers/supplejack_api/user_sets_controller.rb +97 -0
  27. data/app/controllers/supplejack_api/users_controller.rb +49 -0
  28. data/app/helpers/supplejack_api/application_helper.rb +39 -0
  29. data/app/helpers/supplejack_api/facets_helper.rb +30 -0
  30. data/app/mailers/supplejack_api/request_limit_mailer.rb +43 -0
  31. data/app/models/supplejack_api/api_concept/concept_fragment.rb +31 -0
  32. data/app/models/supplejack_api/api_record/record_fragment.rb +15 -0
  33. data/app/models/supplejack_api/concept.rb +46 -0
  34. data/app/models/supplejack_api/concept_search.rb +86 -0
  35. data/app/models/supplejack_api/concerns/queryable_by_date.rb +31 -0
  36. data/app/models/supplejack_api/concerns/record.rb +108 -0
  37. data/app/models/supplejack_api/concerns/record_fragmentable.rb +24 -0
  38. data/app/models/supplejack_api/concerns/searchable.rb +430 -0
  39. data/app/models/supplejack_api/concerns/user_set.rb +219 -0
  40. data/app/models/supplejack_api/daily_metrics.rb +20 -0
  41. data/app/models/supplejack_api/faceted_metrics.rb +55 -0
  42. data/app/models/supplejack_api/fragment.rb +82 -0
  43. data/app/models/supplejack_api/interaction_models/record.rb +60 -0
  44. data/app/models/supplejack_api/interaction_models/set.rb +13 -0
  45. data/app/models/supplejack_api/interaction_updaters/all_usage_metric.rb +41 -0
  46. data/app/models/supplejack_api/interaction_updaters/set_metrics.rb +32 -0
  47. data/app/models/supplejack_api/interaction_updaters/usage_metrics.rb +73 -0
  48. data/app/models/supplejack_api/partner.rb +24 -0
  49. data/app/models/supplejack_api/preview_record.rb +30 -0
  50. data/app/models/supplejack_api/record.rb +18 -0
  51. data/app/models/supplejack_api/record_search.rb +12 -0
  52. data/app/models/supplejack_api/schema_definition.rb +147 -0
  53. data/app/models/supplejack_api/search.rb +14 -0
  54. data/app/models/supplejack_api/set_item.rb +57 -0
  55. data/app/models/supplejack_api/site_activity.rb +59 -0
  56. data/app/models/supplejack_api/source.rb +28 -0
  57. data/app/models/supplejack_api/source_activity.rb +36 -0
  58. data/app/models/supplejack_api/source_authority.rb +42 -0
  59. data/app/models/supplejack_api/supplejack_schema.rb +37 -0
  60. data/app/models/supplejack_api/support/concept/searchable.rb +79 -0
  61. data/app/models/supplejack_api/support/concept/storable.rb +59 -0
  62. data/app/models/supplejack_api/support/fragment_helpers.rb +96 -0
  63. data/app/models/supplejack_api/support/harvestable.rb +105 -0
  64. data/app/models/supplejack_api/support/searchable.rb +115 -0
  65. data/app/models/supplejack_api/support/status_logger.rb +23 -0
  66. data/app/models/supplejack_api/support/storable.rb +49 -0
  67. data/app/models/supplejack_api/support/validation_logger.rb +23 -0
  68. data/app/models/supplejack_api/usage_metrics.rb +25 -0
  69. data/app/models/supplejack_api/user.rb +211 -0
  70. data/app/models/supplejack_api/user_activity.rb +65 -0
  71. data/app/models/supplejack_api/user_set.rb +17 -0
  72. data/app/serializers/supplejack_api/application_serializer.rb +12 -0
  73. data/app/serializers/supplejack_api/concept_record_serializer.rb +23 -0
  74. data/app/serializers/supplejack_api/concept_search_serializer.rb +12 -0
  75. data/app/serializers/supplejack_api/concept_serializer.rb +100 -0
  76. data/app/serializers/supplejack_api/concerns/record_serializable.rb +119 -0
  77. data/app/serializers/supplejack_api/concerns/search_serializable.rb +24 -0
  78. data/app/serializers/supplejack_api/record_search_serializer.rb +64 -0
  79. data/app/serializers/supplejack_api/record_serializer.rb +13 -0
  80. data/app/serializers/supplejack_api/search_serializer.rb +13 -0
  81. data/app/serializers/supplejack_api/source_authority_serializer.rb +23 -0
  82. data/app/serializers/supplejack_api/user_serializer.rb +13 -0
  83. data/app/serializers/supplejack_api/user_set_record_serializer.rb +14 -0
  84. data/app/serializers/supplejack_api/user_set_serializer.rb +77 -0
  85. data/app/services/metrics_api/v3/api.rb +30 -0
  86. data/app/services/metrics_api/v3/endpoints/facets.rb +23 -0
  87. data/app/services/metrics_api/v3/endpoints/global.rb +26 -0
  88. data/app/services/metrics_api/v3/endpoints/helpers.rb +14 -0
  89. data/app/services/metrics_api/v3/endpoints/root.rb +97 -0
  90. data/app/services/metrics_api/v3/presenters/daily_metric.rb +23 -0
  91. data/app/services/metrics_api/v3/presenters/extended_metadata.rb +41 -0
  92. data/app/services/metrics_api/v3/presenters/record.rb +26 -0
  93. data/app/services/metrics_api/v3/presenters/view.rb +28 -0
  94. data/app/views/layouts/supplejack_api/_head.html.erb +17 -0
  95. data/app/views/layouts/supplejack_api/_top_nav.html.erb +33 -0
  96. data/app/views/layouts/supplejack_api/application.html.erb +33 -0
  97. data/app/views/supplejack_api/admin/sessions/new.html.erb +25 -0
  98. data/app/views/supplejack_api/admin/shared/_links.erb +34 -0
  99. data/app/views/supplejack_api/admin/site_activities/index.csv.erb +22 -0
  100. data/app/views/supplejack_api/admin/site_activities/index.html.erb +54 -0
  101. data/app/views/supplejack_api/admin/users/edit.html.erb +16 -0
  102. data/app/views/supplejack_api/admin/users/index.csv.erb +22 -0
  103. data/app/views/supplejack_api/admin/users/index.html.erb +57 -0
  104. data/app/views/supplejack_api/admin/users/show.html.erb +33 -0
  105. data/app/views/supplejack_api/request_limit_mailer/at100percent.text.erb +13 -0
  106. data/app/views/supplejack_api/request_limit_mailer/at100percent_admin.text.erb +1 -0
  107. data/app/views/supplejack_api/request_limit_mailer/at90percent.text.erb +13 -0
  108. data/app/views/supplejack_api/request_limit_mailer/at90percent_admin.text.erb +1 -0
  109. data/app/workers/supplejack_api/daily_metrics_worker.rb +112 -0
  110. data/app/workers/supplejack_api/interaction_metrics_worker.rb +45 -0
  111. data/config/cucumber.yml +16 -0
  112. data/config/initializers/force_eagerload.rb +11 -0
  113. data/config/initializers/interaction_updaters.rb +7 -0
  114. data/config/routes.rb +81 -0
  115. data/db/binding_records.development.json +7 -0
  116. data/db/binding_records.staging.json +7 -0
  117. data/db/concepts.json +33 -0
  118. data/db/concepts_data.json +569745 -0
  119. data/db/source_authorities.json +119 -0
  120. data/lib/generators/supplejack_api/install_generator.rb +124 -0
  121. data/lib/mongoid/paperclip.rb +53 -0
  122. data/lib/mongoid/string.rb +20 -0
  123. data/lib/sunspot/mongoid.rb +51 -0
  124. data/lib/sunspot/resque_session_proxy.rb +72 -0
  125. data/lib/sunspot/sunspot_spellcheck.rb +98 -0
  126. data/lib/supplejack_api.rb +13 -0
  127. data/lib/supplejack_api/admin/sortable.rb +40 -0
  128. data/lib/supplejack_api/engine.rb +46 -0
  129. data/lib/supplejack_api/harvester_constraint.rb +28 -0
  130. data/lib/supplejack_api/stylesheets.rb +36 -0
  131. data/lib/supplejack_api/utils.rb +75 -0
  132. data/lib/supplejack_api/version.rb +11 -0
  133. data/lib/tasks/resque.rake +22 -0
  134. data/lib/url_validator.rb +38 -0
  135. data/spec/controllers/supplejack_api/admin/base_controller_spec.rb +55 -0
  136. data/spec/controllers/supplejack_api/admin/site_activities_controller_spec.rb +43 -0
  137. data/spec/controllers/supplejack_api/admin/users_controller_spec.rb +79 -0
  138. data/spec/controllers/supplejack_api/application_controller_spec.rb +133 -0
  139. data/spec/controllers/supplejack_api/concepts_controller_spec.rb +83 -0
  140. data/spec/controllers/supplejack_api/concerns/records_controller_metrics_spec.rb +60 -0
  141. data/spec/controllers/supplejack_api/harvester/concepts_controller_spec.rb +57 -0
  142. data/spec/controllers/supplejack_api/harvester/records_controller_spec.rb +138 -0
  143. data/spec/controllers/supplejack_api/metrics_api_controller_spec.rb +71 -0
  144. data/spec/controllers/supplejack_api/partners_controller_spec.rb +77 -0
  145. data/spec/controllers/supplejack_api/records_controller_spec.rb +143 -0
  146. data/spec/controllers/supplejack_api/set_items_controller_spec.rb +78 -0
  147. data/spec/controllers/supplejack_api/sources_controller_spec.rb +161 -0
  148. data/spec/controllers/supplejack_api/status_controller_spec.rb +120 -0
  149. data/spec/controllers/supplejack_api/user_sets_controller_spec.rb +233 -0
  150. data/spec/controllers/supplejack_api/users_controller_spec.rb +61 -0
  151. data/spec/dummy/README.rdoc +268 -0
  152. data/spec/dummy/Rakefile +7 -0
  153. data/spec/dummy/app/assets/javascripts/application.js +23 -0
  154. data/spec/dummy/app/assets/stylesheets/application.css +22 -0
  155. data/spec/dummy/app/controllers/application_controller.rb +10 -0
  156. data/spec/dummy/app/helpers/application_helper.rb +9 -0
  157. data/spec/dummy/app/supplejack_api/concept_schema.rb +83 -0
  158. data/spec/dummy/app/supplejack_api/record_schema.rb +64 -0
  159. data/spec/dummy/app/supplejack_api/record_schema.txt +66 -0
  160. data/spec/dummy/app/views/layouts/application.html.erb +23 -0
  161. data/spec/dummy/app/workers/supplejack_api/clear_index_buffer.rb +32 -0
  162. data/spec/dummy/app/workers/supplejack_api/flush_old_records_worker.rb +17 -0
  163. data/spec/dummy/app/workers/supplejack_api/index_buffer.rb +49 -0
  164. data/spec/dummy/app/workers/supplejack_api/index_source_worker.rb +39 -0
  165. data/spec/dummy/app/workers/supplejack_api/index_worker.rb +82 -0
  166. data/spec/dummy/app/workers/supplejack_api/store_user_activity_worker.rb +24 -0
  167. data/spec/dummy/config.ru +11 -0
  168. data/spec/dummy/config/application.rb +76 -0
  169. data/spec/dummy/config/application.yml +31 -0
  170. data/spec/dummy/config/application.yml.example +36 -0
  171. data/spec/dummy/config/boot.rb +17 -0
  172. data/spec/dummy/config/environment.rb +12 -0
  173. data/spec/dummy/config/environments/development.rb +42 -0
  174. data/spec/dummy/config/environments/production.rb +76 -0
  175. data/spec/dummy/config/environments/test.rb +46 -0
  176. data/spec/dummy/config/initializers/backtrace_silencers.rb +14 -0
  177. data/spec/dummy/config/initializers/devise.rb +214 -0
  178. data/spec/dummy/config/initializers/inflections.rb +22 -0
  179. data/spec/dummy/config/initializers/kaminari_config.rb +17 -0
  180. data/spec/dummy/config/initializers/mime_types.rb +12 -0
  181. data/spec/dummy/config/initializers/mongoid.rb +9 -0
  182. data/spec/dummy/config/initializers/quiet_logger.rb +23 -0
  183. data/spec/dummy/config/initializers/resque.rb +18 -0
  184. data/spec/dummy/config/initializers/secret_token.rb +14 -0
  185. data/spec/dummy/config/initializers/session_store.rb +15 -0
  186. data/spec/dummy/config/initializers/simple_form.rb +149 -0
  187. data/spec/dummy/config/initializers/simple_form_foundation.rb +33 -0
  188. data/spec/dummy/config/initializers/state_machine.rb +8 -0
  189. data/spec/dummy/config/initializers/sunspot.rb +32 -0
  190. data/spec/dummy/config/initializers/wrap_parameters.rb +17 -0
  191. data/spec/dummy/config/locales/devise.en.yml +63 -0
  192. data/spec/dummy/config/locales/en.yml +66 -0
  193. data/spec/dummy/config/locales/simple_form.en.yml +33 -0
  194. data/spec/dummy/config/mongoid.travis.yml +34 -0
  195. data/spec/dummy/config/mongoid.yml +36 -0
  196. data/spec/dummy/config/resque-pool.yml +18 -0
  197. data/spec/dummy/config/resque_schedule.yml +12 -0
  198. data/spec/dummy/config/routes.rb +11 -0
  199. data/spec/dummy/config/secrets.yml +8 -0
  200. data/spec/dummy/config/sunspot.yml +38 -0
  201. data/spec/dummy/db/concepts.json +37 -0
  202. data/spec/dummy/db/source_authorities.json +116 -0
  203. data/spec/dummy/public/404.html +35 -0
  204. data/spec/dummy/public/422.html +35 -0
  205. data/spec/dummy/public/500.html +34 -0
  206. data/spec/dummy/public/favicon.ico +8 -0
  207. data/spec/dummy/script/rails +6 -0
  208. data/spec/dummy/solr/collection1/conf/elevate.xml +36 -0
  209. data/spec/dummy/solr/collection1/conf/mapping-FoldToASCII.txt +3813 -0
  210. data/spec/dummy/solr/collection1/conf/schema.xml +292 -0
  211. data/spec/dummy/solr/collection1/conf/solrconfig.xml +1780 -0
  212. data/spec/dummy/solr/collection1/conf/spellings.txt +2 -0
  213. data/spec/dummy/solr/collection1/conf/stopwords.txt +58 -0
  214. data/spec/dummy/solr/collection1/conf/synonyms.txt +31 -0
  215. data/spec/factories/concepts.rb +16 -0
  216. data/spec/factories/daily_metrics.rb +10 -0
  217. data/spec/factories/faceted_metrics.rb +25 -0
  218. data/spec/factories/fragment.rb +14 -0
  219. data/spec/factories/partners.rb +14 -0
  220. data/spec/factories/record_interaction.rb +17 -0
  221. data/spec/factories/records.rb +47 -0
  222. data/spec/factories/set_interaction.rb +15 -0
  223. data/spec/factories/source_authorities.rb +19 -0
  224. data/spec/factories/sources.rb +16 -0
  225. data/spec/factories/usage_metrics.rb +20 -0
  226. data/spec/factories/user_activities.rb +14 -0
  227. data/spec/factories/user_sets.rb +27 -0
  228. data/spec/factories/users.rb +23 -0
  229. data/spec/helpers/application_helper_spec.rb +35 -0
  230. data/spec/models/concept_spec.rb +163 -0
  231. data/spec/models/fragment_spec.rb +15 -0
  232. data/spec/models/site_activity_spec.rb +103 -0
  233. data/spec/models/source_activity_spec.rb +56 -0
  234. data/spec/models/source_authority_spec.rb +42 -0
  235. data/spec/models/supplejack_api/api_concept/concept_fragment_spec.rb +189 -0
  236. data/spec/models/supplejack_api/api_record/record_fragment_spec.rb +189 -0
  237. data/spec/models/supplejack_api/concept_spec.rb +0 -0
  238. data/spec/models/supplejack_api/interaction_updaters/all_usage_metric_spec.rb +41 -0
  239. data/spec/models/supplejack_api/interaction_updaters/set_metrics_spec.rb +32 -0
  240. data/spec/models/supplejack_api/interaction_updaters/usage_metrics_spec.rb +44 -0
  241. data/spec/models/supplejack_api/partner_spec.rb +20 -0
  242. data/spec/models/supplejack_api/record_search_spec.rb +429 -0
  243. data/spec/models/supplejack_api/record_spec.rb +280 -0
  244. data/spec/models/supplejack_api/schema_definition_spec.rb +272 -0
  245. data/spec/models/supplejack_api/search_spec.rb +243 -0
  246. data/spec/models/supplejack_api/set_item_spec.rb +123 -0
  247. data/spec/models/supplejack_api/source_spec.rb +22 -0
  248. data/spec/models/supplejack_api/support/fragment_helpers_spec.rb +216 -0
  249. data/spec/models/supplejack_api/support/harvestable_spec.rb +177 -0
  250. data/spec/models/supplejack_api/support/searchable_spec.rb +85 -0
  251. data/spec/models/supplejack_api/support/storable_spec.rb +18 -0
  252. data/spec/models/supplejack_api/user_activity_spec.rb +88 -0
  253. data/spec/models/supplejack_api/user_set_spec.rb +559 -0
  254. data/spec/models/supplejack_api/user_spec.rb +348 -0
  255. data/spec/routing/concepts_routing_spec.rb +22 -0
  256. data/spec/routing/harvester_constraint_spec.rb +66 -0
  257. data/spec/routing/harvester_routing_spec.rb +51 -0
  258. data/spec/routing/partner_routing_spec.rb +34 -0
  259. data/spec/routing/records_routing_spec.rb +26 -0
  260. data/spec/routing/sets_routing_spec.rb +44 -0
  261. data/spec/routing/source_routing_spec.rb +38 -0
  262. data/spec/routing/users_routing_spec.rb +18 -0
  263. data/spec/serializers/concept_record_serializer_spec.rb +30 -0
  264. data/spec/serializers/supplejack_api/application_serializer_spec.rb +14 -0
  265. data/spec/serializers/supplejack_api/concept_search_serializer_spec.rb +34 -0
  266. data/spec/serializers/supplejack_api/concept_serializer_spec.rb +92 -0
  267. data/spec/serializers/supplejack_api/record_search_serializer_spec.rb +34 -0
  268. data/spec/serializers/supplejack_api/record_serializer_spec.rb +271 -0
  269. data/spec/serializers/supplejack_api/search_serializer_spec.rb +90 -0
  270. data/spec/serializers/supplejack_api/user_serializer_spec.rb +22 -0
  271. data/spec/serializers/supplejack_api/user_set_serializer_spec.rb +96 -0
  272. data/spec/services/metrics_api/v3/api_spec.rb +23 -0
  273. data/spec/services/metrics_api/v3/endpoints/facets_spec.rb +25 -0
  274. data/spec/services/metrics_api/v3/endpoints/global_spec.rb +22 -0
  275. data/spec/services/metrics_api/v3/endpoints/root_spec.rb +49 -0
  276. data/spec/services/metrics_api/v3/presenters/extended_metadata_spec.rb +49 -0
  277. data/spec/spec_helper.rb +70 -0
  278. data/spec/support/api/schemas/metrics/daily_metrics_metadata.json +24 -0
  279. data/spec/support/api/schemas/metrics/extended_metrics.json +26 -0
  280. data/spec/support/api/schemas/metrics/extended_response.json +6 -0
  281. data/spec/support/api/schemas/metrics/facets_response.json +6 -0
  282. data/spec/support/api/schemas/metrics/record_metadata.json +33 -0
  283. data/spec/support/api/schemas/metrics/top_level_response.json +6 -0
  284. data/spec/support/api/schemas/metrics/view_metadata.json +33 -0
  285. data/spec/support/api_schema_matcher.rb +14 -0
  286. data/spec/support/devise.rb +10 -0
  287. data/spec/workers/supplejack_api/daily_metrics_worker_spec.rb +140 -0
  288. data/spec/workers/supplejack_api/flush_old_records_worker_spec.rb +20 -0
  289. data/spec/workers/supplejack_api/index_worker_spec.rb +52 -0
  290. data/spec/workers/supplejack_api/source_index_worker_spec.rb +61 -0
  291. metadata +1231 -0
@@ -0,0 +1,65 @@
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 UserActivity
11
+ include Mongoid::Document
12
+ include Mongoid::Timestamps
13
+
14
+ store_in collection: 'user_activities'
15
+
16
+ belongs_to :user, class_name: 'SupplejackApi::User'
17
+
18
+ field :user_sets, type: Hash
19
+ field :search, type: Hash
20
+ field :records, type: Hash
21
+ field :custom_searches, type: Hash
22
+ field :total, type: Integer
23
+
24
+ index created_at: 1
25
+
26
+ def self.build_from_user(daily_activity)
27
+ user_activity = new
28
+ daily_activity ||= {}
29
+
30
+ %w(user_sets search records custom_searches).each do |group|
31
+ group_activity = daily_activity[group]
32
+
33
+ if group_activity
34
+ user_activity[group] = group_activity
35
+ user_activity.calculate_total_for(group)
36
+ end
37
+ end
38
+
39
+ user_activity.calculate_total
40
+ user_activity
41
+ end
42
+
43
+ def calculate_total_for(field)
44
+ total = 0
45
+
46
+ if activities = self[field]
47
+ activities.each { |_action, count| total += count.to_i }
48
+ else
49
+ activities = {}
50
+ end
51
+
52
+ activities['total'] = total
53
+ self[field] = activities
54
+ end
55
+
56
+ def calculate_total
57
+ count = 0
58
+ %w(user_sets search records custom_searches).each do |group|
59
+ values = send(group)
60
+ count += values['total'].to_i if values && values.is_a?(Hash)
61
+ end
62
+ self.total = count
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,17 @@
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 UserSet
11
+ include Mongoid::Document
12
+ include Mongoid::Timestamps
13
+ include ActionView::Helpers::SanitizeHelper
14
+ include ActiveModel::MassAssignmentSecurity
15
+ include SupplejackApi::Concerns::UserSet
16
+ end
17
+ 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 ApplicationSerializer < ActiveModel::Serializer
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ # The majority of the Supplejack API code is Crown copyright (C) 2014, New Zealand Government,
3
+ # and is licensed under the GNU General Public License, version 3.
4
+ # One component is a third party component. See https://github.com/DigitalNZ/supplejack_api for details.
5
+ #
6
+ # Supplejack was created by DigitalNZ at the National Library of NZ and
7
+ # the Department of Internal Affairs. http://digitalnz.org/supplejack
8
+
9
+ module SupplejackApi
10
+ class ConceptRecordSerializer < ActiveModel::Serializer
11
+ attributes :title, :description, :date, :display_content_partner, :display_collection, :thumbnail_url
12
+
13
+ TYPE_PROXY = 'edm:ProvidedCHO'
14
+
15
+ def serializable_hash
16
+ hash = {}
17
+ hash['@id'] = "http://#{ENV['WWW_DOMAIN']}/records/#{object.record_id}"
18
+ hash['@type'] = TYPE_PROXY
19
+ hash = hash.merge!(attributes)
20
+ hash
21
+ end
22
+ end
23
+ 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 ConceptSearchSerializer < SearchSerializer
11
+ end
12
+ end
@@ -0,0 +1,100 @@
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 ConceptSerializer < ActiveModel::Serializer
11
+ has_many :source_authorities, serializer: SupplejackApi::SourceAuthoritySerializer
12
+ has_many :records, serializer: SupplejackApi::ConceptRecordSerializer
13
+
14
+ ConceptSchema.groups.keys.each do |group|
15
+ define_method("#{group}?") do
16
+ return false unless options[:groups].try(:any?)
17
+ options[:groups].include?(group)
18
+ end
19
+ end
20
+
21
+ def serializable_hash
22
+ hash = attributes
23
+ # Create empty context block to add to once we know what fields we have.
24
+ hash['@context'] = {}
25
+ hash['@type'] = object.concept_type
26
+ hash['@id'] = object.site_id
27
+
28
+ if default? || verbose?
29
+ groups = (options[:groups] & ConceptSchema.groups.keys) || []
30
+ fields = Set.new
31
+
32
+ groups.each do |group|
33
+ fields.merge(ConceptSchema.groups[group].try(:fields)) rescue {}
34
+ end
35
+
36
+ fields.each do |field|
37
+ # Doesn't allow the real record id to be overwritten by mongo id
38
+ hash[field] = field == :id ? hash[field] : field_value(field, options)
39
+ end
40
+ end
41
+
42
+ include_individual_fields!(hash)
43
+ include_context_fields!(hash)
44
+ include_reverse_fields!(hash) if reverse?
45
+ include!(:source_authorities, node: hash) if source_authorities?
46
+ hash
47
+ end
48
+
49
+ def include_context_fields!(hash)
50
+ fields = hash.dup
51
+ fields.keep_if { |field| ConceptSchema.model_fields.include?(field) }
52
+ field_keys = fields.keys
53
+
54
+ # Include unstored fields from the Schema
55
+ record_fields = ConceptSchema.model_fields.select { |_key, value| value.try(:store) == false }
56
+ field_keys += record_fields.keys
57
+
58
+ hash['@context'] = if options[:inline_context]
59
+ Concept.build_context(field_keys)
60
+ else
61
+ object.context
62
+ end
63
+ hash
64
+ end
65
+
66
+ def include_individual_fields!(hash)
67
+ if options[:fields].present?
68
+ options[:fields].push(:concept_id)
69
+ options[:fields].sort!
70
+ options[:fields].each do |field|
71
+ hash[field] = object.send(field)
72
+ end
73
+ end
74
+ hash
75
+ end
76
+
77
+ def include_reverse_fields!(hash)
78
+ hash['@reverse'] = {}
79
+ key = concept.edm_type
80
+ include!(:records, node: hash['@reverse'], key: key)
81
+ hash
82
+ end
83
+
84
+ def field_value(field)
85
+ value = if ConceptSchema.fields[field].try(:search_value) && ConceptSchema.fields[field].try(:store) == false
86
+ ConceptSchema.fields[field].search_value.call(object)
87
+ else
88
+ object.public_send(field)
89
+ end
90
+
91
+ value = ConceptSchema.fields[field].try(:default_value) if value.nil? rescue nil
92
+
93
+ if ConceptSchema.fields[field].try(:date_format)
94
+ value = format_date(value, ConceptSchema.fields[field].try(:date_format))
95
+ end
96
+
97
+ value
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+ module SupplejackApi::Concerns::RecordSerializable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ end
7
+
8
+ RecordSchema.groups.keys.each do |group|
9
+ define_method("#{group}?") do
10
+ return false unless options[:groups].try(:any?)
11
+ options[:groups].include?(group)
12
+ end
13
+ end
14
+
15
+ def to_xml(*_args)
16
+ serializable_hash.to_xml(root: 'record')
17
+ end
18
+
19
+ def remove_restricted_fields!(hash)
20
+ role_field_restrictions.each do |conditional_field, restrictions|
21
+ restrictions.each do |condition, restricted_fields|
22
+ if field_restricted?(conditional_field, condition)
23
+ remove_field_values(restricted_fields, hash)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ # REFACTOR -- Used in concept_serializer.rb too
30
+ def field_value(field, _options = {})
31
+ value = if RecordSchema.fields[field].try(:search_value) && RecordSchema.fields[field].try(:store) == false
32
+ RecordSchema.fields[field].search_value.call(object)
33
+ else
34
+ object.public_send(field)
35
+ end
36
+
37
+ value = RecordSchema.fields[field].try(:default_value) if value.nil? rescue nil
38
+
39
+ if RecordSchema.fields[field].try(:date_format)
40
+ value = format_date(value, RecordSchema.fields[field].try(:date_format))
41
+ end
42
+
43
+ value
44
+ end
45
+
46
+ def role
47
+ @role ||= options[:scope].role.to_sym rescue nil
48
+ end
49
+
50
+ def format_date(date, format)
51
+ date.strftime(format) rescue date
52
+ end
53
+
54
+ def role_field_restrictions
55
+ restrictions = []
56
+
57
+ if role && RecordSchema.roles[role] && RecordSchema.roles[role].field_restrictions.present?
58
+ restrictions = RecordSchema.roles[role].field_restrictions
59
+ end
60
+
61
+ restrictions
62
+ end
63
+
64
+ def field_restricted?(conditional_field, condition)
65
+ field_values = field_value(conditional_field).to_a
66
+ restricted = false
67
+
68
+ field_values.each do |value|
69
+ if (condition.is_a?(Regexp) && value.match(condition)) ||
70
+ (condition.is_a?(String) && value.include?(condition))
71
+ restricted = true
72
+ end
73
+ break if restricted
74
+ end
75
+
76
+ restricted
77
+ end
78
+
79
+ def remove_field_values(restricted_fields, hash)
80
+ restricted_fields.each do |field|
81
+ hash[field.to_sym] = nil
82
+ end
83
+ end
84
+
85
+ # Returns a hash including all desirable record attributes and its associations
86
+ def serializable_hash
87
+ hash = attributes
88
+ groups = (options[:groups] & RecordSchema.groups.keys) || []
89
+ fields = Set.new
90
+ groups.each do |group|
91
+ fields.merge(RecordSchema.groups[group].try(:fields))
92
+ end
93
+
94
+ # hash[:id] = field_value(:record_id, options) if fields.any?
95
+ fields.each do |field|
96
+ hash[field] = field_value(field, options)
97
+ end
98
+
99
+ include_individual_fields!(hash)
100
+ remove_restricted_fields!(hash)
101
+
102
+ hash[:next_page] = object.next_page if object.next_page.present?
103
+ hash[:next_record] = object.next_record if object.next_record.present?
104
+ hash[:previous_page] = object.previous_page if object.previous_page.present?
105
+ hash[:previous_record] = object.previous_record if object.previous_record.present?
106
+
107
+ hash
108
+ end
109
+
110
+ def include_individual_fields!(hash)
111
+ if options[:fields].present?
112
+ options[:fields].each do |field|
113
+ hash[field] = record.send(field)
114
+ end
115
+ end
116
+
117
+ hash
118
+ end
119
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module SupplejackApi::Concerns::SearchSerializable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def serializable_hash
7
+ hash = {}
8
+ hash[:result_count] = object.total
9
+ hash[:results] = records_serialized_array
10
+ hash[:per_page] = object.per_page
11
+ hash[:page] = object.page
12
+ hash[:request_url] = object.request_url
13
+ hash[:solr_request_params] = object.solr_request_params if object.solr_request_params
14
+ hash[:warnings] = object.warnings if object.warnings.present?
15
+ hash[:suggestion] = object.collation if object.options[:suggest]
16
+ hash
17
+ end
18
+
19
+ def records_serialized_array
20
+ args = { fields: object.field_list, groups: object.group_list, scope: object.scope }
21
+ ActiveModel::ArraySerializer.new(object.results, args)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,64 @@
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 RecordSearchSerializer < SearchSerializer
11
+ RecordSchema.groups.keys.each do |group|
12
+ define_method("#{group}?") do
13
+ return false unless options[:groups].try(:any?)
14
+ options[:groups].include?(group)
15
+ end
16
+ end
17
+
18
+ def json_facets
19
+ facets = {}
20
+ object.facets.map do |facet|
21
+ rows = {}
22
+ facet.rows.each do |row|
23
+ rows[row.value] = row.count
24
+ end
25
+
26
+ facets.merge!(facet.name => rows)
27
+ end
28
+ facets
29
+ end
30
+
31
+ def xml_facets
32
+ facets = []
33
+ object.facets.map do |facet|
34
+ values = facet.rows.map do |row|
35
+ { name: row.value, count: row.count }
36
+ end
37
+ facets << { name: facet.name.to_s, values: values }
38
+ end
39
+ facets
40
+ end
41
+
42
+ def to_json(options = {})
43
+ rendered_json = as_json(options).to_json
44
+ rendered_json = "#{object.jsonp}(#{rendered_json})" if object.jsonp
45
+ rendered_json
46
+ end
47
+
48
+ def as_json(_options = {})
49
+ hash = { search: serializable_hash }
50
+ hash[:search][:facets] = json_facets
51
+ hash
52
+ end
53
+
54
+ def to_xml(*args)
55
+ hash = serializable_hash
56
+ hash[:facets] = xml_facets
57
+
58
+ options = {}
59
+ options = args.first.merge(root: :search) if args.first.is_a?(Hash)
60
+
61
+ hash.to_xml(options)
62
+ end
63
+ end
64
+ end