sufia 5.0.0 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -8
  3. data/Gemfile +3 -12
  4. data/History.md +0 -36
  5. data/LICENSE.md +14 -0
  6. data/README.md +4 -8
  7. data/SUFIA_VERSION +1 -1
  8. data/app/assets/javascripts/sufia.js +1 -17
  9. data/app/assets/javascripts/sufia/batch_edit.js +43 -28
  10. data/app/assets/javascripts/sufia/edit_metadata.js +9 -14
  11. data/app/assets/javascripts/sufia/multiForm.js +67 -0
  12. data/app/assets/javascripts/sufia/permissions.js +92 -35
  13. data/app/assets/stylesheets/sufia.css.scss +1 -6
  14. data/app/assets/stylesheets/sufia/_batch-edit.scss +0 -8
  15. data/app/assets/stylesheets/sufia/_dashboard.scss +1 -15
  16. data/app/assets/stylesheets/sufia/_file-listing.scss +1 -1
  17. data/app/assets/stylesheets/sufia/_settings.scss +0 -1
  18. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +3 -10
  19. data/app/controllers/concerns/sufia/breadcrumbs.rb +3 -8
  20. data/app/controllers/concerns/sufia/catalog.rb +1 -1
  21. data/app/controllers/concerns/sufia/controller.rb +3 -1
  22. data/app/controllers/concerns/sufia/downloads_controller_behavior.rb +1 -1
  23. data/app/controllers/concerns/sufia/files_controller/browse_everything.rb +1 -1
  24. data/app/controllers/concerns/sufia/files_controller_behavior.rb +16 -4
  25. data/app/controllers/concerns/sufia/homepage_controller.rb +1 -1
  26. data/app/controllers/concerns/sufia/my_controller_behavior.rb +2 -2
  27. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +3 -4
  28. data/app/controllers/concerns/sufia/users_controller_behavior.rb +2 -7
  29. data/app/controllers/my/collections_controller.rb +3 -4
  30. data/app/controllers/my/highlights_controller.rb +2 -2
  31. data/app/controllers/my/shares_controller.rb +3 -3
  32. data/app/controllers/single_use_links_controller.rb +5 -9
  33. data/app/controllers/single_use_links_viewer_controller.rb +4 -4
  34. data/app/helpers/generic_file_helper.rb +9 -0
  35. data/app/helpers/sufia/records_helper_behavior.rb +16 -0
  36. data/app/helpers/sufia/sufia_helper_behavior.rb +0 -11
  37. data/app/jobs/content_depositor_change_event_job.rb +1 -1
  38. data/app/jobs/ingest_local_file_job.rb +2 -1
  39. data/app/models/concerns/sufia/solr_document_behavior.rb +10 -10
  40. data/app/models/featured_work_list.rb +7 -9
  41. data/app/presenters/sufia/version_list_presenter.rb +15 -0
  42. data/app/presenters/sufia/version_presenter.rb +30 -0
  43. data/app/views/batch/_metadata.html.erb +51 -29
  44. data/app/views/batch/_more_metadata.html.erb +1 -1
  45. data/app/views/batch/edit.html.erb +10 -8
  46. data/app/views/batch_edits/edit.html.erb +13 -9
  47. data/app/views/collections/_edit_descriptions.html.erb +1 -1
  48. data/app/views/collections/_form.html.erb +4 -4
  49. data/app/views/collections/_form_for_select_collection.html.erb +1 -1
  50. data/app/views/collections/_show_document_list_menu.html.erb +7 -5
  51. data/app/views/collections/_show_document_list_row.html.erb +2 -2
  52. data/app/views/collections/edit.html.erb +0 -1
  53. data/app/views/collections/edit_fields/_description.html.erb +4 -0
  54. data/app/views/collections/edit_fields/_title.html.erb +3 -0
  55. data/app/views/collections/show.html.erb +0 -1
  56. data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
  57. data/app/views/generic_files/_descriptions.html.erb +9 -9
  58. data/app/views/generic_files/_field_form.html.erb +11 -25
  59. data/app/views/generic_files/_permission.html.erb +6 -4
  60. data/app/views/generic_files/_permission_form.html.erb +15 -17
  61. data/app/views/generic_files/_show_details.html.erb +1 -11
  62. data/app/views/generic_files/_versioning.html.erb +5 -5
  63. data/app/views/generic_files/edit.html.erb +5 -4
  64. data/app/views/generic_files/show.html.erb +6 -6
  65. data/app/views/homepage/_featured_fields.html.erb +2 -2
  66. data/app/views/homepage/_recent_document.html.erb +1 -1
  67. data/app/views/layouts/_head_tag_content.html.erb +0 -2
  68. data/app/views/layouts/error.html.erb +0 -1
  69. data/app/views/my/_index_partials/_default_group.html.erb +1 -1
  70. data/app/views/my/_index_partials/_list_files.html.erb +1 -1
  71. data/app/views/my/index.html.erb +2 -2
  72. data/app/views/records/_edit_field.html.erb +17 -19
  73. data/app/views/records/edit_fields/_default.html.erb +10 -12
  74. data/app/views/records/edit_fields/_description.html.erb +10 -3
  75. data/app/views/records/edit_fields/_resource_type.html.erb +4 -5
  76. data/app/views/records/edit_fields/_rights.html.erb +9 -2
  77. data/app/views/records/edit_fields/_suffix.html.erb +10 -0
  78. data/app/views/records/edit_fields/_type.html.erb +8 -2
  79. data/app/views/records/show_fields/_based_near.html.erb +1 -1
  80. data/app/views/records/show_fields/_creator.html.erb +1 -1
  81. data/app/views/records/show_fields/_language.html.erb +1 -1
  82. data/app/views/records/show_fields/_publisher.html.erb +1 -1
  83. data/app/views/records/show_fields/_resource_type.html.erb +1 -1
  84. data/app/views/records/show_fields/_subject.html.erb +1 -1
  85. data/app/views/records/show_fields/_tag.html.erb +1 -1
  86. data/app/views/single_use_links/new_download.html.erb +2 -2
  87. data/app/views/users/_profile.html.erb +2 -1
  88. data/app/views/users/_social_media_info.html.erb +20 -0
  89. data/app/views/users/_user_info.html.erb +3 -20
  90. data/app/views/users/edit.html.erb +2 -11
  91. data/app/views/users/show.html.erb +1 -1
  92. data/bin/audit_repository +1 -1
  93. data/config/initializers/sufia_events.rb +4 -4
  94. data/config/locales/sufia.en.yml +0 -5
  95. data/config/routes.rb +1 -1
  96. data/lib/generators/sufia/install_generator.rb +0 -4
  97. data/lib/generators/sufia/templates/catalog_controller.rb +59 -59
  98. data/lib/sufia.rb +1 -4
  99. data/lib/sufia/version.rb +1 -1
  100. data/spec/actors/generic_file/actor_spec.rb +67 -8
  101. data/spec/controllers/batch_controller_spec.rb +72 -86
  102. data/spec/controllers/batch_edits_controller_spec.rb +17 -19
  103. data/spec/controllers/catalog_controller_spec.rb +16 -24
  104. data/spec/controllers/collections_controller_spec.rb +47 -74
  105. data/spec/controllers/downloads_controller_spec.rb +40 -35
  106. data/spec/controllers/generic_files_controller_spec.rb +363 -428
  107. data/spec/controllers/homepage_controller_spec.rb +12 -9
  108. data/spec/controllers/mailbox_controller_spec.rb +1 -4
  109. data/spec/controllers/my/files_controller_spec.rb +0 -10
  110. data/spec/controllers/single_use_links_controller_spec.rb +28 -35
  111. data/spec/controllers/single_use_links_viewer_controller_spec.rb +27 -41
  112. data/spec/controllers/transfers_controller_spec.rb +6 -6
  113. data/spec/controllers/users_controller_spec.rb +121 -124
  114. data/spec/factories/generic_files.rb +9 -17
  115. data/spec/features/browse_dashboard_files_spec.rb +8 -10
  116. data/spec/features/browse_files_spec.rb +12 -25
  117. data/spec/features/catalog_search_spec.rb +49 -49
  118. data/spec/features/collection_spec.rb +18 -24
  119. data/spec/features/contact_form_spec.rb +26 -20
  120. data/spec/features/ingest_upload_files_spec.rb +8 -6
  121. data/spec/features/ownership_transfer_spec.rb +2 -6
  122. data/spec/features/proxy_spec.rb +1 -1
  123. data/spec/features/search_spec.rb +2 -3
  124. data/spec/features/single_use_links_spec.rb +1 -1
  125. data/spec/features/users_spec.rb +1 -1
  126. data/spec/helpers/records_helper_spec.rb +24 -10
  127. data/spec/jobs/active_fedora_pid_based_job_spec.rb +1 -5
  128. data/spec/jobs/audit_job_spec.rb +66 -21
  129. data/spec/jobs/batch_update_job_spec.rb +49 -36
  130. data/spec/jobs/content_depositor_change_event_job_spec.rb +2 -4
  131. data/spec/jobs/create_derivatives_job_spec.rb +18 -19
  132. data/spec/jobs/event_jobs_spec.rb +17 -21
  133. data/spec/jobs/import_url_job_spec.rb +1 -6
  134. data/spec/jobs/ingest_local_file_job_spec.rb +0 -4
  135. data/spec/lib/sufia/breadcrumbs_spec.rb +8 -46
  136. data/spec/lib/sufia/id_service_spec.rb +8 -3
  137. data/spec/lib/sufia/user_stat_importer_spec.rb +18 -25
  138. data/spec/lib/sufia/writable_permissions_spec.rb +0 -4
  139. data/spec/models/ability_spec.rb +25 -18
  140. data/spec/models/batch_spec.rb +16 -45
  141. data/spec/models/characterization_spec.rb +1 -1
  142. data/spec/models/checksum_audit_log_spec.rb +51 -29
  143. data/spec/models/collection_spec.rb +0 -5
  144. data/spec/models/featured_work_list_spec.rb +2 -4
  145. data/spec/models/file_content_datastream_spec.rb +27 -60
  146. data/spec/models/file_usage_spec.rb +16 -21
  147. data/spec/models/fits_datastream_spec.rb +47 -2
  148. data/spec/models/generic_file/web_form_spec.rb +1 -1
  149. data/spec/models/generic_file_spec.rb +238 -735
  150. data/spec/models/local_authority_spec.rb +8 -13
  151. data/spec/models/proxy_deposit_request_spec.rb +3 -7
  152. data/spec/models/single_use_link_spec.rb +12 -16
  153. data/spec/models/solr_document_spec.rb +1 -1
  154. data/spec/models/trophy_spec.rb +1 -3
  155. data/spec/models/user_spec.rb +47 -75
  156. data/spec/presenters/sufia/version_list_presenter_spec.rb +22 -0
  157. data/spec/presenters/sufia/version_presenter_spec.rb +51 -0
  158. data/spec/services/generic_file_audit_service_spec.rb +85 -0
  159. data/spec/services/repository_audit_service_spec.rb +18 -0
  160. data/spec/spec_helper.rb +26 -7
  161. data/spec/support/fixture_helpers.rb +2 -4
  162. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -4
  163. data/spec/views/batch/edit.html.erb_spec.rb +17 -7
  164. data/spec/views/catalog/index.html.erb_spec.rb +8 -6
  165. data/spec/views/collections/_form.html.erb_spec.rb +4 -2
  166. data/spec/views/collections/_show_document_list.erb_spec.rb +31 -0
  167. data/spec/views/dashboard/index_spec.rb +2 -2
  168. data/spec/views/generic_file/edit.html.erb_spec.rb +20 -6
  169. data/spec/views/generic_file/show.html.erb_spec.rb +3 -3
  170. data/spec/views/users/show.html.erb_spec.rb +1 -1
  171. data/sufia-models/app/actors/sufia/generic_file/actor.rb +8 -10
  172. data/sufia-models/app/jobs/active_fedora_pid_based_job.rb +2 -3
  173. data/sufia-models/app/jobs/audit_job.rb +46 -32
  174. data/sufia-models/app/jobs/batch_update_job.rb +9 -8
  175. data/sufia-models/app/jobs/import_url_job.rb +2 -2
  176. data/sufia-models/app/models/batch.rb +11 -12
  177. data/sufia-models/app/models/checksum_audit_log.rb +12 -10
  178. data/sufia-models/app/models/concerns/sufia/ability.rb +4 -6
  179. data/sufia-models/app/models/concerns/sufia/collection.rb +4 -5
  180. data/sufia-models/app/models/concerns/sufia/generic_file.rb +3 -86
  181. data/sufia-models/app/models/concerns/sufia/generic_file/batches.rb +29 -0
  182. data/sufia-models/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
  183. data/sufia-models/app/models/concerns/sufia/generic_file/content.rb +13 -0
  184. data/sufia-models/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
  185. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +4 -0
  186. data/sufia-models/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
  187. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
  188. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
  189. data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
  190. data/sufia-models/app/models/concerns/sufia/generic_file/versions.rb +4 -4
  191. data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
  192. data/sufia-models/app/models/concerns/sufia/model_methods.rb +11 -9
  193. data/sufia-models/app/models/concerns/sufia/user.rb +11 -33
  194. data/sufia-models/app/models/datastreams/file_content_datastream.rb +1 -1
  195. data/sufia-models/app/models/datastreams/fits_datastream.rb +1 -1
  196. data/sufia-models/app/models/file_usage.rb +3 -3
  197. data/sufia-models/app/models/local_authority.rb +2 -2
  198. data/sufia-models/app/models/proxy_deposit_request.rb +1 -1
  199. data/sufia-models/app/services/sufia/generic_file_audit_service.rb +83 -0
  200. data/sufia-models/app/services/sufia/id_service.rb +5 -5
  201. data/sufia-models/app/services/sufia/noid.rb +10 -7
  202. data/sufia-models/app/services/sufia/repository_audit_service.rb +9 -0
  203. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
  204. data/sufia-models/lib/generators/sufia/models/install_generator.rb +31 -11
  205. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +31 -2
  206. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
  207. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
  208. data/sufia-models/lib/sufia/models/engine.rb +13 -4
  209. data/sufia-models/lib/sufia/models/file_content/versions.rb +9 -11
  210. data/sufia-models/lib/sufia/models/stats/user_stat_importer.rb +5 -9
  211. data/sufia-models/lib/sufia/models/version.rb +1 -1
  212. data/sufia-models/lib/sufia/permissions/writable.rb +34 -16
  213. data/sufia-models/sufia-models.gemspec +4 -2
  214. data/sufia.gemspec +4 -5
  215. data/tasks/jetty.rake +0 -26
  216. data/tasks/sufia-dev.rake +14 -2
  217. metadata +49 -64
  218. data/LICENSE +0 -15
  219. data/app/assets/images/orcid.png +0 -0
  220. data/app/assets/javascripts/sufia/manage_repeating_fields.js +0 -74
  221. data/app/assets/stylesheets/sufia/_multi_value_fields.css.scss +0 -67
  222. data/app/inputs/multi_value_input.rb +0 -84
  223. data/app/views/records/_rights_modal.html.erb +0 -1
  224. data/config/initializers/simple_form.rb +0 -167
  225. data/config/initializers/simple_form_bootstrap.rb +0 -137
  226. data/config/locales/simple_form.en.yml +0 -31
  227. data/fedora_conf/conf/development/fedora.fcfg +0 -946
  228. data/fedora_conf/conf/test/fedora.fcfg +0 -946
  229. data/spec/models/generic_file/reload_on_save_spec.rb +0 -25
  230. data/spec/models/generic_file_rdf_datastream_spec.rb +0 -12
  231. data/spec/models/properties_datastream_spec.rb +0 -41
  232. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +0 -19
  233. data/sufia-models/app/models/concerns/sufia/generic_file/audit.rb +0 -116
  234. data/sufia-models/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
  235. data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
  236. data/sufia-models/app/models/datastreams/batch_rdf_datastream.rb +0 -6
  237. data/sufia-models/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
  238. data/sufia-models/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
  239. data/sufia-models/app/models/datastreams/properties_datastream.rb +0 -4
  240. data/sufia-models/app/models/sufia/orcid_validator.rb +0 -8
  241. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  242. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  243. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  244. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +0 -31
@@ -1,12 +1,32 @@
1
- require_relative 'abstract_migration_generator'
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class Sufia::Models::CachedStatsGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
2
7
 
3
- class Sufia::Models::CachedStatsGenerator < Sufia::Models::AbstractMigrationGenerator
4
8
  source_root File.expand_path('../templates', __FILE__)
9
+ argument :model_name, type: :string , default: "user"
5
10
 
6
11
  desc """
7
12
  This generator adds the ability to cache usage stats to your application:
8
13
  1. Creates several database migrations if they do not exist in /db/migrate
14
+ 2. Adds stats methods to the user model
9
15
  """
16
+ # Implement the required interface for Rails::Generators::Migration.
17
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
18
+ def self.next_migration_number(path)
19
+ if @prev_migration_nr
20
+ @prev_migration_nr += 1
21
+ else
22
+ if last_migration = Dir[File.join(path, '*.rb')].sort.last
23
+ @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
24
+ else
25
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
26
+ end
27
+ end
28
+ @prev_migration_nr.to_s
29
+ end
10
30
 
11
31
  def banner
12
32
  say_status("warning", "ADDING STATS CACHING-RELATED SUFIA MODELS", :yellow)
@@ -14,11 +34,35 @@ This generator adds the ability to cache usage stats to your application:
14
34
 
15
35
  # Setup the database migrations
16
36
  def copy_migrations
37
+ # Can't get this any more DRY, because we need this order.
17
38
  [
18
39
  'create_file_view_stats.rb',
19
- 'create_file_download_stats.rb'
40
+ 'create_file_download_stats.rb',
41
+ 'create_user_stats.rb'
20
42
  ].each do |file|
21
43
  better_migration_template file
22
44
  end
23
45
  end
46
+
47
+ def add_stats_mixin_to_user_model
48
+ file_path = "app/models/#{model_name.underscore}.rb"
49
+
50
+ if File.exists?(file_path)
51
+ inject_into_file file_path, after: /include Sufia\:\:User.*$/ do
52
+ "\n include Sufia::UserUsageStats"
53
+ end
54
+ else
55
+ puts " \e[31mFailure\e[0m Sufia requires a user object. This generators assumes that the model is defined in the file #{file_path}, which does not exist. If you used a different name, please re-run the generator and provide that name as an argument. Such as \b rails -g sufia client"
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def better_migration_template(file)
62
+ begin
63
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
64
+ rescue Rails::Generators::Error => e
65
+ say_status("warning", e.message, :yellow)
66
+ end
67
+ end
24
68
  end
@@ -1,7 +1,12 @@
1
- require_relative 'abstract_migration_generator'
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class Sufia::Models::InstallGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
2
7
 
3
- class Sufia::Models::InstallGenerator < Sufia::Models::AbstractMigrationGenerator
4
8
  source_root File.expand_path('../templates', __FILE__)
9
+
5
10
  argument :model_name, type: :string , default: "user"
6
11
  desc """
7
12
  This generator makes the following changes to your application:
@@ -14,15 +19,30 @@ This generator makes the following changes to your application:
14
19
  7. Runs full-text generator
15
20
  8. Runs proxies generator
16
21
  9. Runs cached stats generator
17
- 10. Runs ORCID field generator
18
- 11. Runs user stats generator
19
22
  """
23
+
24
+ # Implement the required interface for Rails::Generators::Migration.
25
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
26
+ def self.next_migration_number(path)
27
+ if @prev_migration_nr
28
+ @prev_migration_nr += 1
29
+ else
30
+ if last_migration = Dir[File.join(path, '*.rb')].sort.last
31
+ @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
32
+ else
33
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
34
+ end
35
+ end
36
+ @prev_migration_nr.to_s
37
+ end
38
+
20
39
  def banner
21
40
  say_status("warning", "GENERATING SUFIA MODELS", :yellow)
22
41
  end
23
42
 
24
43
  # Setup the database migrations
25
44
  def copy_migrations
45
+ # Can't get this any more DRY, because we need this order.
26
46
  [
27
47
  "acts_as_follower_migration.rb",
28
48
  "add_social_to_users.rb",
@@ -94,13 +114,13 @@ This generator makes the following changes to your application:
94
114
  generate 'sufia:models:cached_stats'
95
115
  end
96
116
 
97
- # Adds orcid field to user model
98
- def orcid_field
99
- generate 'sufia:models:orcid_field'
100
- end
117
+ private
101
118
 
102
- # Adds user stats-related migration & methods
103
- def user_stats
104
- generate 'sufia:models:user_stats'
119
+ def better_migration_template(file)
120
+ begin
121
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
122
+ rescue Rails::Generators::Error => e
123
+ say_status("warning", e.message, :yellow)
124
+ end
105
125
  end
106
126
  end
@@ -1,12 +1,30 @@
1
- require_relative 'abstract_migration_generator'
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class Sufia::Models::ProxiesGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
2
7
 
3
- class Sufia::Models::ProxiesGenerator < Sufia::Models::AbstractMigrationGenerator
4
8
  source_root File.expand_path('../templates', __FILE__)
5
9
 
6
10
  desc """
7
11
  This generator adds proxies and transfers to your application:
8
12
  1. Creates several database migrations if they do not exist in /db/migrate
9
13
  """
14
+ # Implement the required interface for Rails::Generators::Migration.
15
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
16
+ def self.next_migration_number(path)
17
+ if @prev_migration_nr
18
+ @prev_migration_nr += 1
19
+ else
20
+ if last_migration = Dir[File.join(path, '*.rb')].sort.last
21
+ @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
22
+ else
23
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
24
+ end
25
+ end
26
+ @prev_migration_nr.to_s
27
+ end
10
28
 
11
29
  def banner
12
30
  say_status("warning", "ADDING PROXY/TRANSFER-RELATED SUFIA MODELS", :yellow)
@@ -14,6 +32,7 @@ This generator adds proxies and transfers to your application:
14
32
 
15
33
  # Setup the database migrations
16
34
  def copy_migrations
35
+ # Can't get this any more DRY, because we need this order.
17
36
  [
18
37
  'create_proxy_deposit_rights.rb',
19
38
  'create_proxy_deposit_requests.rb'
@@ -21,4 +40,14 @@ This generator adds proxies and transfers to your application:
21
40
  better_migration_template file
22
41
  end
23
42
  end
43
+
44
+ private
45
+
46
+ def better_migration_template(file)
47
+ begin
48
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
49
+ rescue Rails::Generators::Error => e
50
+ say_status("warning", e.message, :yellow)
51
+ end
52
+ end
24
53
  end
@@ -111,6 +111,16 @@ Sufia.config do |config|
111
111
  # Specify how many seconds back from the current time that we should show by default of the user's activity on the user's dashboard
112
112
  # config.activity_to_show_default_seconds_since_now = 24*60*60
113
113
 
114
+ # Specify a date you wish to start collecting Google Analytic statistics for.
115
+ # Leaving it blank will set the start date to when ever the file was uploaded by
116
+ # NOTE: if you have always sent analytics to GA for downloads and page views leave this commented out
117
+ # config.analytic_start_date = DateTime.new(2014,9,10)
118
+ #
119
+ # Method of converting pids into URIs for storage in Fedora
120
+ # config.translate_uri_to_id = lambda { |uri| uri.to_s.split('/')[-1] }
121
+ # config.translate_id_to_uri = lambda { |id|
122
+ # "#{ActiveFedora.fedora.host}#{ActiveFedora.fedora.base_path}/#{Sufia::Noid.treeify(id)}" }
123
+
114
124
  # If browse-everything has been configured, load the configs. Otherwise, set to nil.
115
125
  begin
116
126
  if defined? BrowseEverything
@@ -1,8 +1,13 @@
1
- require_relative 'abstract_migration_generator'
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class Sufia::Models::Upgrade400Generator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
2
7
 
3
- class Sufia::Models::Upgrade400Generator < Sufia::Models::AbstractMigrationGenerator
4
8
  source_root File.expand_path('../templates', __FILE__)
5
9
 
10
+ argument :model_name, type: :string , default: "user"
6
11
  desc """
7
12
  This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following changes to your application:
8
13
  1. Creates several database migrations if they do not exist in /db/migrate
@@ -11,12 +16,28 @@ This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following
11
16
  4. Runs full-text generator
12
17
  """
13
18
 
19
+ # Implement the required interface for Rails::Generators::Migration.
20
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
21
+ def self.next_migration_number(path)
22
+ if @prev_migration_nr
23
+ @prev_migration_nr += 1
24
+ else
25
+ if last_migration = Dir[File.join(path, '*.rb')].sort.last
26
+ @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
27
+ else
28
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
29
+ end
30
+ end
31
+ @prev_migration_nr.to_s
32
+ end
33
+
14
34
  def banner
15
35
  say_status("warning", "UPGRADING SUFIA MODELS", :yellow)
16
36
  end
17
37
 
18
38
  # Setup the database migrations
19
39
  def copy_migrations
40
+ # Can't get this any more DRY, because we need this order.
20
41
  [
21
42
  'create_tinymce_assets.rb',
22
43
  'create_content_blocks.rb',
@@ -51,4 +72,14 @@ This generator for upgrading sufia-models from 3.7.2 to 4.0 makes the following
51
72
  def full_text_indexing
52
73
  generate "sufia:models:fulltext"
53
74
  end
75
+
76
+ private
77
+
78
+ def better_migration_template(file)
79
+ begin
80
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
81
+ rescue Rails::Generators::Error => e
82
+ say_status("warning", e.message, :yellow)
83
+ end
84
+ end
54
85
  end
@@ -31,6 +31,10 @@ module Sufia
31
31
  # Defaulting analytic start date to when ever the file was uploaded by leaving it blank
32
32
  config.analytic_start_date = nil
33
33
 
34
+ config.translate_uri_to_id = lambda { |uri| uri.to_s.split('/')[-1] }
35
+ config.translate_id_to_uri = lambda { |id|
36
+ "#{ActiveFedora.fedora.host}#{ActiveFedora.fedora.base_path}/#{Sufia::Noid.treeify(id)}" }
37
+
34
38
  config.autoload_paths += %W(
35
39
  #{config.root}/app/models/datastreams
36
40
  )
@@ -58,10 +62,15 @@ module Sufia
58
62
  end
59
63
 
60
64
  initializer 'configure' do
61
- Hydra::Derivatives.ffmpeg_path = Sufia.config.ffmpeg_path
62
- Hydra::Derivatives.temp_file_base = Sufia.config.temp_file_base
63
- Hydra::Derivatives.fits_path = Sufia.config.fits_path
64
- Hydra::Derivatives.enable_ffmpeg = Sufia.config.enable_ffmpeg
65
+ Sufia.config.tap do |c|
66
+ Hydra::Derivatives.ffmpeg_path = c.ffmpeg_path
67
+ Hydra::Derivatives.temp_file_base = c.temp_file_base
68
+ Hydra::Derivatives.fits_path = c.fits_path
69
+ Hydra::Derivatives.enable_ffmpeg = c.enable_ffmpeg
70
+
71
+ ActiveFedora::Base.translate_uri_to_id = c.translate_uri_to_id
72
+ ActiveFedora::Base.translate_id_to_uri = c.translate_id_to_uri
73
+ end
65
74
  end
66
75
  end
67
76
  end
@@ -1,23 +1,21 @@
1
1
  module Sufia
2
2
  module FileContent
3
3
  module Versions
4
- def get_version(version_id)
5
- self.versions.select { |v| v.versionID == version_id}.first
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_many_versions
6
8
  end
7
9
 
8
10
  def latest_version
9
- self.versions.first
11
+ versions.last unless versions.empty?
10
12
  end
11
13
 
12
- def version_committer(version)
13
- vc = VersionCommitter.where(obj_id: version.pid,
14
- datastream_id: version.dsid,
15
- version_id: version.versionID)
16
- return vc.empty? ? nil : vc.first.committer_login
14
+ def save
15
+ super.tap do |passing|
16
+ create_version if passing
17
+ end
17
18
  end
18
-
19
-
20
19
  end
21
20
  end
22
21
  end
23
-
@@ -12,11 +12,11 @@ module Sufia
12
12
  start_date = date_since_last_cache(user)
13
13
 
14
14
  stats = {}
15
- file_ids_for_user(user).each do |file_id|
16
- view_stats = FileViewStat.statistics(file_id, start_date, user.id)
15
+ files_for_user(user).each do |file|
16
+ view_stats = FileViewStat.statistics(file.id, start_date, user.id)
17
17
  stats = tally_results(view_stats, :views, stats)
18
18
 
19
- dl_stats = FileDownloadStat.statistics(file_id, start_date, user.id)
19
+ dl_stats = FileDownloadStat.statistics(file.id, start_date, user.id)
20
20
  stats = tally_results(dl_stats, :downloads, stats)
21
21
  end
22
22
 
@@ -38,12 +38,8 @@ private
38
38
  end
39
39
  end
40
40
 
41
- def file_ids_for_user(user)
42
- ids = []
43
- ::GenericFile.find_in_batches("#{Solrizer.solr_name('depositor', :symbol)}:\"#{user.user_key}\"", fl:"id") do |group|
44
- ids.concat group.map { |doc| doc["id"] }
45
- end
46
- ids
41
+ def files_for_user(user)
42
+ ::GenericFile.where(Solrizer.solr_name('depositor', :symbol) => user.user_key)
47
43
  end
48
44
 
49
45
  # For each date, add the view and download counts for this
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "5.0.0"
3
+ VERSION = "6.0.0.beta1"
4
4
  end
5
5
  end
@@ -8,32 +8,50 @@ module Sufia
8
8
  include Hydra::AccessControls::Visibility
9
9
 
10
10
  included do
11
- has_metadata "rightsMetadata", type: ParanoidRightsDatastream
12
11
  validate :paranoid_permissions
13
12
  end
14
13
 
15
14
  def paranoid_permissions
16
- # let the rightsMetadata ds make this determination
17
- # - the object instance is passed in for easier access to the props ds
18
- rightsMetadata.validate(self)
15
+ valid = true
16
+ VALIDATIONS.each do |validation|
17
+ if validation[:condition].call(self)
18
+ errors[validation[:key]] ||= []
19
+ errors[validation[:key]] << validation[:message]
20
+ valid = false
21
+ end
22
+ end
23
+ return valid
19
24
  end
20
25
 
21
- ## Updates those permissions that are provided to it. Does not replace any permissions unless they are provided
22
- def permissions=(params)
23
- perm_hash = permission_hash
24
- params[:new_user_name].each { |name, access| perm_hash['person'][name] = access } if params[:new_user_name].present?
25
- params[:new_group_name].each { |name, access| perm_hash['group'][name] = access } if params[:new_group_name].present?
26
+ VALIDATIONS = [
27
+ {key: :edit_users, message: 'Depositor must have edit access', condition: lambda { |obj| !obj.edit_users.include?(obj.depositor) }},
28
+ {key: :edit_groups, message: 'Public cannot have edit access', condition: lambda { |obj| obj.edit_groups.include?('public') }},
29
+ {key: :edit_groups, message: 'Registered cannot have edit access', condition: lambda { |obj| obj.edit_groups.include?('registered') }}
30
+ ]
26
31
 
27
- params[:user].each { |name, access| perm_hash['person'][name] = access} if params[:user]
28
- params[:group].each { |name, access| perm_hash['group'][name] = access if ['read', 'edit'].include?(access)} if params[:group]
29
32
 
30
- rightsMetadata.update_permissions(perm_hash)
33
+ def clear_permissions!
34
+ self.permissions = []
31
35
  end
32
36
 
33
- def permissions
34
- perms = super
35
- perms.map {|p| { name: p.name, access: p.access, type:p.type } }
36
- end
37
+ ## Updates those permissions that are provided to it. Does not replace any permissions unless they are provided
38
+ # def permissions=(params)
39
+ # raise "Fixme #{params}"
40
+ # perm_hash = permission_hash
41
+ # params[:new_user_name].each { |name, access| perm_hash['person'][name] = access } if params[:new_user_name].present?
42
+ # params[:new_group_name].each { |name, access| perm_hash['group'][name] = access } if params[:new_group_name].present?
43
+
44
+ # params[:user].each { |name, access| perm_hash['person'][name] = access} if params[:user]
45
+ # params[:group].each { |name, access| perm_hash['group'][name] = access if ['read', 'edit'].include?(access)} if params[:group]
46
+
47
+ # # rightsMetadata.update_permissions(perm_hash)
48
+ # end
49
+
50
+ # def permissions
51
+ # raise "Fixme "
52
+ # perms = super
53
+ # perms.map {|p| { name: p.name, access: p.access, type:p.type } }
54
+ # end
37
55
 
38
56
  private
39
57
 
@@ -29,7 +29,10 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency 'rails', '~> 4.0', '< 5.0.0'
30
30
  spec.add_dependency 'activeresource', "~> 4.0" # No longer a dependency of rails 4.0
31
31
 
32
- spec.add_dependency "hydra-head", "~> 7.0"
32
+ spec.add_dependency "hydra-head", "~> 9.0.0.beta1"
33
+ spec.add_dependency "active-fedora", "~> 9.0.0.beta5"
34
+ spec.add_dependency "hydra-collections", "~> 4.0.0.beta1"
35
+ spec.add_dependency 'hydra-derivatives', '~> 1.0.0.beta1'
33
36
  spec.add_dependency 'nest', '~> 1.1'
34
37
  spec.add_dependency 'resque', '~> 1.23'
35
38
  spec.add_dependency 'resque-pool', '~> 0.3'
@@ -37,7 +40,6 @@ Gem::Specification.new do |spec|
37
40
  spec.add_dependency 'mailboxer', '~> 0.12'
38
41
  spec.add_dependency 'acts_as_follower', '>= 0.1.1', '< 0.3'
39
42
  spec.add_dependency 'carrierwave', '~> 0.9'
40
- spec.add_dependency 'hydra-derivatives', '~> 0.1'
41
43
  spec.add_dependency 'oauth2', '~> 0.9'
42
44
  spec.add_dependency 'google-api-client', '~> 0.7'
43
45
  spec.add_dependency 'legato', '~> 0.3'