curate 0.6.1 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +135 -51
  3. data/app/assets/images/curate/default.png +0 -0
  4. data/app/assets/stylesheets/layout/positioning.css.scss +4 -0
  5. data/app/assets/stylesheets/modules/search_results.css.scss +4 -0
  6. data/app/controllers/concerns/curate/fields_for_add_to_collection.rb +9 -0
  7. data/app/controllers/curation_concern/base_controller.rb +1 -0
  8. data/app/controllers/curation_concern/generic_files_controller.rb +1 -0
  9. data/app/models/concerns/curate/ability.rb +6 -2
  10. data/app/repository_models/curation_concern/model.rb +1 -1
  11. data/app/repository_models/generic_file.rb +4 -0
  12. data/app/views/application/_add_to_collection_gui.html.erb +19 -0
  13. data/app/views/catalog/_index_partials/_identifier_and_action.html.erb +19 -11
  14. data/app/views/collections/_collection.html.erb +2 -27
  15. data/app/views/curate/collections/_form_to_add_member.html.erb +12 -10
  16. data/app/views/curate/collections/add_member_form.html.erb +4 -2
  17. data/app/views/curation_concern/base/_collections.html.erb +0 -10
  18. data/app/views/curation_concern/base/_related_files.html.erb +1 -1
  19. data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
  20. data/app/views/curation_concern/base/_thumbnail.html.erb +7 -5
  21. data/app/views/curation_concern/base/show.html.erb +14 -6
  22. data/app/views/curation_concern/documents/_document.html.erb +1 -1
  23. data/app/views/curation_concern/generic_files/_media_display.html.erb +11 -1
  24. data/app/views/curation_concern/generic_files/show.html.erb +1 -1
  25. data/app/views/curation_concern/people/_person.html.erb +2 -20
  26. data/app/views/profiles/_profile.html.erb +2 -27
  27. data/lib/curate/spec_support.rb +1 -2
  28. data/lib/curate/version.rb +1 -1
  29. data/spec/features/catalog_search_spec.rb +0 -30
  30. data/spec/features/generic_file_spec.rb +2 -1
  31. data/spec/features/generic_work_spec.rb +0 -10
  32. data/spec/features/thumbnail_display_spec.rb +5 -2
  33. data/spec/helpers/curate_helper_spec.rb +27 -0
  34. data/spec/internal/Gemfile.lock +6 -6
  35. data/spec/internal/config/initializers/devise.rb +2 -2
  36. data/spec/internal/config/initializers/secret_token.rb +1 -1
  37. data/spec/internal/db/development.sqlite3 +0 -0
  38. data/spec/internal/db/migrate/{20131203200422_devise_create_users.rb → 20131205204122_devise_create_users.rb} +0 -0
  39. data/spec/internal/db/migrate/{20131203200427_add_devise_guests_to_users.rb → 20131205204126_add_devise_guests_to_users.rb} +0 -0
  40. data/spec/internal/db/migrate/{20131203200428_create_searches.rb → 20131205204127_create_searches.rb} +0 -0
  41. data/spec/internal/db/migrate/{20131203200429_create_bookmarks.rb → 20131205204128_create_bookmarks.rb} +0 -0
  42. data/spec/internal/db/migrate/{20131203200430_remove_editable_fields_from_bookmarks.rb → 20131205204129_remove_editable_fields_from_bookmarks.rb} +0 -0
  43. data/spec/internal/db/migrate/{20131203200431_add_user_types_to_bookmarks_searches.rb → 20131205204130_add_user_types_to_bookmarks_searches.rb} +0 -0
  44. data/spec/internal/db/migrate/{20131203200432_acts_as_follower_migration.rb → 20131205204131_acts_as_follower_migration.rb} +0 -0
  45. data/spec/internal/db/migrate/{20131203200433_add_social_to_users.rb → 20131205204132_add_social_to_users.rb} +0 -0
  46. data/spec/internal/db/migrate/{20131203200434_create_single_use_links.rb → 20131205204133_create_single_use_links.rb} +0 -0
  47. data/spec/internal/db/migrate/{20131203200435_add_ldap_attrs_to_user.rb → 20131205204134_add_ldap_attrs_to_user.rb} +0 -0
  48. data/spec/internal/db/migrate/{20131203200436_add_avatars_to_users.rb → 20131205204135_add_avatars_to_users.rb} +0 -0
  49. data/spec/internal/db/migrate/{20131203200437_create_checksum_audit_logs.rb → 20131205204136_create_checksum_audit_logs.rb} +0 -0
  50. data/spec/internal/db/migrate/{20131203200438_create_version_committers.rb → 20131205204137_create_version_committers.rb} +0 -0
  51. data/spec/internal/db/migrate/{20131203200439_add_groups_to_users.rb → 20131205204138_add_groups_to_users.rb} +0 -0
  52. data/spec/internal/db/migrate/{20131203200440_create_local_authorities.rb → 20131205204139_create_local_authorities.rb} +0 -0
  53. data/spec/internal/db/migrate/{20131203200441_create_trophies.rb → 20131205204140_create_trophies.rb} +0 -0
  54. data/spec/internal/db/migrate/{20131203200450_create_mailboxer.mailboxer_engine.rb → 20131205204152_create_mailboxer.mailboxer_engine.rb} +0 -0
  55. data/spec/internal/db/migrate/{20131203200451_add_notified_object.mailboxer_engine.rb → 20131205204153_add_notified_object.mailboxer_engine.rb} +0 -0
  56. data/spec/internal/db/migrate/{20131203200452_add_notification_code.mailboxer_engine.rb → 20131205204154_add_notification_code.mailboxer_engine.rb} +0 -0
  57. data/spec/internal/db/migrate/{20131203200453_add_attachments.mailboxer_engine.rb → 20131205204155_add_attachments.mailboxer_engine.rb} +0 -0
  58. data/spec/internal/db/migrate/{20131203200454_rename_receipts_read.mailboxer_engine.rb → 20131205204156_rename_receipts_read.mailboxer_engine.rb} +0 -0
  59. data/spec/internal/db/migrate/{20131203200455_add_global_notification_support.mailboxer_engine.rb → 20131205204157_add_global_notification_support.mailboxer_engine.rb} +0 -0
  60. data/spec/internal/db/migrate/{20131203200459_add_terms_of_service_to_user.curate_engine.rb → 20131205204202_add_terms_of_service_to_user.curate_engine.rb} +0 -0
  61. data/spec/internal/db/migrate/{20131203200460_add_user_force_update_profile.curate_engine.rb → 20131205204203_add_user_force_update_profile.curate_engine.rb} +0 -0
  62. data/spec/internal/db/migrate/{20131203200461_create_help_requests.curate_engine.rb → 20131205204204_create_help_requests.curate_engine.rb} +0 -0
  63. data/spec/internal/db/migrate/{20131203200462_add_repository_id_to_user.curate_engine.rb → 20131205204205_add_repository_id_to_user.curate_engine.rb} +0 -0
  64. data/spec/internal/db/migrate/{20131203200463_create_curate_proxy_deposit_rights.curate_engine.rb → 20131205204206_create_curate_proxy_deposit_rights.curate_engine.rb} +0 -0
  65. data/spec/internal/db/migrate/{20131203200464_change_display_name_to_name.curate_engine.rb → 20131205204207_change_display_name_to_name.curate_engine.rb} +0 -0
  66. data/spec/internal/db/schema.rb +1 -1
  67. data/spec/internal/db/test.sqlite3 +0 -0
  68. data/spec/internal/log/development.log +203 -191
  69. data/spec/internal/log/test.log +84621 -104943
  70. data/spec/internal/spec/factories/spams_factory.rb +0 -1
  71. data/spec/internal/spec/fixtures/cassettes/remotely_identified_doi_mint_generic_work.yml +13 -14
  72. data/spec/internal/spec/fixtures/cassettes/remotely_identified_doi_mint_spam.yml +13 -14
  73. data/spec/internal/tmp/cache/assets/test/sass/2c6be7e0f6fa11a075d87959732f91fde3df1f13/search_results.css.scssc +0 -0
  74. data/spec/internal/tmp/cache/assets/test/sass/953d624c1831fcea22a3be549290f4c654726e96/positioning.css.scssc +0 -0
  75. data/spec/internal/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  76. data/spec/internal/tmp/cache/assets/test/sprockets/163665b72c8e98b0c88c19896f080bc4 +0 -0
  77. data/spec/internal/tmp/cache/assets/test/sprockets/1c1167e9384b80e15359a663448a3196 +0 -0
  78. data/spec/internal/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  79. data/spec/internal/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  80. data/spec/internal/tmp/cache/assets/test/sprockets/4132e961bdf0f2ffa2f96a4c7822e209 +0 -0
  81. data/spec/internal/tmp/cache/assets/test/sprockets/41dd5dbd03cfa3f49e2d7569ffd03f8d +0 -0
  82. data/spec/internal/tmp/cache/assets/test/sprockets/611235bfd282813bdfbc998bcbe798e8 +0 -0
  83. data/spec/internal/tmp/cache/assets/test/sprockets/7d4fe23150294500a7bcd2630667e5c8 +0 -0
  84. data/spec/internal/tmp/cache/assets/test/sprockets/{7078324d4486aa4ba7a6c21debbf3638 → 98ad78dc8c309689440b20bfa7372b3e} +0 -0
  85. data/spec/internal/tmp/cache/assets/test/sprockets/ada353bb8ffe3eb0f2dd479e6d869a70 +0 -0
  86. data/spec/internal/tmp/cache/assets/test/sprockets/b148a5e98ff09a12b6a2139af1e62e46 +0 -0
  87. data/spec/internal/tmp/cache/assets/test/sprockets/{f0817826ed378d461b95e0e1ac870fcf → c14352828e1be2bbf3199771a34f9c57} +0 -0
  88. data/spec/internal/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  89. data/spec/internal/tmp/cache/assets/test/sprockets/d510daa6eb0cd4805bff7fd0990dfdb5 +0 -0
  90. data/spec/internal/tmp/cache/assets/test/sprockets/d610f39602b6149ca02638c1728778b5 +0 -0
  91. data/spec/internal/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  92. data/spec/internal/tmp/cache/assets/test/sprockets/e9c2a0f2fa471ace3f7ed3a1f1b9ffc5 +0 -0
  93. data/spec/internal/tmp/cache/assets/test/sprockets/ea0ece5befbce765051e27cf991cc805 +0 -0
  94. data/spec/internal/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  95. data/spec/matchers.rb +24 -0
  96. data/spec/{support/matchers → matchers}/metadata_field_matchers.rb +0 -0
  97. data/spec/{support/matchers → matchers}/raise_rescue_response_type_matcher.rb +0 -0
  98. data/spec/repository_models/generic_file_spec.rb +11 -0
  99. data/spec/spec_helper.rb +3 -2
  100. data/spec/support/shared/shared_examples_with_related_works.rb +0 -1
  101. data/spec/views/application/_add_to_collection_gui.html.erb_spec.rb +60 -0
  102. data/spec/views/curate/collections/_form_to_add_member.html.erb_spec.rb +11 -11
  103. data/spec/views/curation_concern/base/_collection.html.erb_spec.rb +0 -2
  104. data/spec/views/curation_concern/base/_related_files.html.erb_spec.rb +16 -0
  105. data/spec/views/curation_concern/base/_representative_media.html.erb_spec.rb +15 -0
  106. data/spec/views/curation_concern/base/_thumbnail.html.erb_spec.rb +27 -0
  107. data/spec/views/curation_concern/generic_files/_media_display.html.erb_spec.rb +34 -0
  108. data/spec/views/curation_concern/generic_files/show.html.erb_spec.rb +12 -0
  109. metadata +87 -74
  110. data/app/views/catalog/_add_to_collection_gui.html.erb +0 -15
  111. data/app/views/curation_concern/base/_add_to_collection_gui.html.erb +0 -18
  112. data/app/views/curation_concern/base/_form_to_add_collection.html.erb +0 -9
  113. data/app/views/curation_concern/base/_representative_image.html.erb +0 -6
  114. data/spec/views/catalog/_add_to_collection_gui.html.erb_spec.rb +0 -48
  115. data/spec/views/curation_concern/base/_add_to_collection_gui.html.erb_spec.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc4bca83d8de9ce311a2e254c8d42d6aecc871d4
4
- data.tar.gz: 7f1af6dc3efc70444219c73d9edda047c6f74fa5
3
+ metadata.gz: 59395ca50b59f9b6078a239e94f897910cb07f8c
4
+ data.tar.gz: caaf8e67b45bc57f724c9b1c660f3a03299fc33f
5
5
  SHA512:
6
- metadata.gz: cb7abc0b9a9df54d0df67c27a6ce6f95b4741ed431523d997dba14509791b3784c57957df75762aa12f31e0a254fefc7e03591c2231e186e438e8bce028416ad
7
- data.tar.gz: 5fefe88c94701c353dcd5fef6d8d011bdcabd5329bb8ea4c59c2f227c57d831bb6413640c246105282dd461bd0150cc08f3d1c3981b4b608415223217cbb33bd
6
+ metadata.gz: 1da77dd060d40a9307c28220655e6be818921a7371dcff140a907db975b1a3784e51bb52c7c137c761fe2e4c9c52afec7832d67287f101169f25a403db4c94ca
7
+ data.tar.gz: 04b2dc97393bfd0a1125be100c6eceb0bf64de81f02977b75239ec7b989a89237ee568ed1c00f6374fb65ead6c24a1caf5340c153095eb74ab0972ed2672f14b
data/README.md CHANGED
@@ -1,13 +1,34 @@
1
1
  # Curate [![Version](https://badge.fury.io/rb/curate.png)](http://badge.fury.io/rb/curate) [![Build Status](https://travis-ci.org/projecthydra/curate.png?branch=master)](https://travis-ci.org/projecthydra/curate) [![Coverage Status](https://coveralls.io/repos/projecthydra/curate/badge.png)](https://coveralls.io/r/projecthydra/curate)
2
2
 
3
- ## Starting a New Curate Base Application
3
+ Curate is a [Rails engine](http://edgeguides.rubyonrails.org/engines.html) leveraging [ProjectHydra](http://projecthydra.org) and [ProjectBlacklight](http://projectblacklight.org/) components to deliver a foundation for an Institutional Repositories.
4
+ It is released under the [Apache 2 License](./LICENSE)
5
+
6
+ * [Starting a new Curate-based Rails application](#starting-a-new-curate-based-application)
7
+ * [or install by hand](#or-install-by-hand)
8
+ * [Developing and contributing for the Curate gem](#developing-and-contributing-for-the-curate-gem)
9
+ * [Prerequisites](#prerequisites)
10
+ * [Clone the Curate repository](#clone-the-repo)
11
+ * [Jetty](#jetty)
12
+ * [Running the specs](#running-the-specs)
13
+ * [All of them](#all-of-them)
14
+ * [Some of them](#some-of-them)
15
+ * [With Zeus](#with-zeus)
16
+ * [Contributing back](#contributing-back)
17
+ * [Coding Guidelines](#coding-guidelines)
18
+ * [Writing Your Code](#writing-your-code)
19
+ * [Ruby File Structure](#ruby-file-structure)
20
+ * [Source Control Guidelines](#source-control-guidelines)
21
+ * [Working on Curate while working on my Application](#working-on-curate-while-working-on-my-application)
22
+ * [Standing up your Curate-based Rails application in Production](#standing-up-your-curate-based-rails-application-in-production)
23
+
24
+ # Starting a New Curate Based Application
4
25
 
5
26
  When you generate your new Rails application, you can use Curate's application template:
6
27
  ```bash
7
28
  $ rails new my_curate_application -m https://raw.github.com/ndlib/curate/master/lib/generators/curate/application_template.rb
8
29
  ```
9
30
 
10
- ### Or Install By Hand
31
+ ## Or Install By Hand
11
32
 
12
33
  Add the following line to your application's Gemfile:
13
34
 
@@ -19,84 +40,147 @@ $ bundle
19
40
  $ rails generate curate
20
41
  ```
21
42
 
22
- ## Curate Developer Notes
43
+ # Developing and Contributing for the Curate gem
23
44
 
24
- ### Initial Setup
45
+ ## Prerequisites
25
46
 
26
- Add this line to `config/environments/production.rb`
47
+ You may need to have the following installed ‡
27
48
 
28
- ```ruby
29
- config.assets.precompile += %w( modernizr.js )
30
- ```
49
+ * imagemagick (http://www.imagemagick.org/script/index.php)
50
+ * fits.sh (https://code.google.com/p/fits/wiki/installing)
51
+ * ffmpeg (optional, http://www.ffmpeg.org/)
52
+ * Redis (http://redis.io/)
53
+ * rubygems (http://rubygems.org/pages/download)
54
+ * ClamAV (http://www.clamav.net/)
31
55
 
32
- ### Jetty Commands
56
+ - Why "you may need"? Some of these are only optionally used in development and tests; But production will need it.
33
57
 
34
- Install jetty:
58
+ ## Clone the Curate repository
35
59
 
60
+ From the command line:
36
61
  ```bash
37
- $ rake jetty:unzip
62
+ git clone https://github.com/projecthydra/curate.git ./path/to/local
38
63
  ```
39
64
 
40
- Start/stop jetty:
65
+ ## Jetty
41
66
 
42
- ```bash
43
- $ rake jetty:start
44
- $ rake jetty:stop
45
- ```
67
+ Curate uses Jetty for development and testing.
68
+ You could configure it to use an alternate Fedora and SOLR location, but that is an exercise for the reader.
69
+ **The hydra-jetty package should not be use for secure production installations**
46
70
 
47
- Jetty logs:
71
+ ### Install Jetty
72
+ Install jetty, you should only need to do this once (unless you remove the ./jetty directory)
48
73
 
49
74
  ```bash
50
- $ tail -f jetty/jettywrapper.log
75
+ $ rake jetty:unzip
51
76
  ```
52
77
 
53
- ### Running the Specs
78
+ ## Running the Specs
54
79
 
55
- To clean & generate a dummy app that the specs will use for testing:
56
- ```bash
57
- $ rake clean
58
- $ rake generate
59
- ```
80
+ Inside the Curate directory (i.e. `./path/to/local`):
60
81
 
61
- Make sure jetty is running before you run the specs.
82
+ ### All of Them
62
83
 
63
- To run the test suite:
64
- ```bash
65
- $ rake spec
66
- ```
84
+ 1. Make sure jetty is running (`rake jetty:start`); It will take a bit to spin up jetty.
85
+ 1. Make sure you have a dummy app ‡
86
+ 1. Run `rake regenerate` build the to get a clean app ./spec/dummy
87
+ 1. Then run `rake spec`; The tests will take quite a while ‡‡
88
+
89
+ ‡ - A Rails engine requires a Rails application to run.
90
+ The dummy app is an generated application inside Curate in the `./spec/internal` directory
91
+ ‡‡ - Slow tests are a big problem and we are working on speeding them up, but its complicated.
92
+
93
+ ### Some of Them
94
+
95
+ In some cases you want to know the results of a single test. Here's how you do it.
96
+
97
+ 1. Make sure jetty is running (`rake jetty:start`); It will take a bit to spin up jetty.
98
+ 1. Make sure you have a dummy app ‡
99
+ 1. Run `rake regenerate` build the to get a clean app ./spec/dummy
100
+ 1. Then run `BUNDLE_GEMFILE=spec/internal/Gemfile bundle exec rspec path/to/spec.rb:LINE` ‡
101
+
102
+ ‡ - With Curate being an Engine we need to point to the Dummy Application's Gemfile.
103
+ In full Rails applications you can normally run the following `rspec path/to/spec.rb:LINE`
104
+
105
+ ### With Zeus
106
+
107
+ > [Zeus](https://github.com/burke/zeus) preloads your Rails app so that your normal development tasks such as console, server, generate, and specs/tests take less than one second. ‡
108
+
109
+ 1. In terminal window #1 run `zeus start`
110
+ 1. In terminal window #2, once Zeus is started: run `zeus rake spec` for all tests; or `zeus test path/to/spec.rb:LINE` for one
111
+
112
+ ‡ - Loading the environment to run your tests takes less than a second. So running an individual test will take less time.
113
+
114
+ ## Contributing Back
115
+
116
+ There is an existing [CONTRIBUTING.md](./CONTRIBUTING.md) document which is currently under review.
117
+
118
+ ### Coding Guidelines
119
+
120
+ The [Ruby Style Guide][1] is an excellent resource for how to craft your Ruby code, in particular the [Naming section][2].
121
+
122
+ **Can I break these guidelines?** Yes. But you may need to convince the person merging your changes.
123
+
124
+ #### Writing Your Code
125
+
126
+ We are going to do our best to follow [Sandi Metz' Rules for Developers][3]
127
+
128
+ > Here are the rules:
129
+ >
130
+ > * Classes can be no longer than one hundred lines of code.
131
+ > * Methods can be no longer than five lines of code.
132
+ > * Pass no more than four parameters into a method. Hash options are parameters.
133
+ > * Controllers can instantiate only one object. Therefore, views can only know about one instance variable and views should only send messages to that object (@object.collaborator.value is not allowed).
134
+
135
+ #### Ruby File Structure
136
+
137
+ * Use soft-tabs with a two space indent.
138
+ * Never leave trailing whitespace (unless it is meaningful in the language)
139
+ * End each file with a blank newline.
140
+ * Please do your best to keep lines to 80 characters or fewer.
141
+
142
+ ### Source Control Guidelines
143
+
144
+ *This is a placeholder for things to come*
145
+
146
+ [Processing JIRA issues with commit messages](https://confluence.atlassian.com/display/BITBUCKET/Processing+JIRA+issues+with+commit+messages)
67
147
 
68
- To run a localized spec:
69
- ```bash
70
- $ BUNDLE_GEMFILE=spec/internal/Gemfile bundle exec rspec path/to/spec.rb:LINE
71
148
  ```
149
+ First line is 50 characters or less
72
150
 
73
- #### Or run via Zeus:
151
+ Description of work done; wrap at 72 characters.
74
152
 
75
- In terminal window #1
76
- ```bash
77
- $ zeus start
153
+ HYDRASIR-123 #close Any comment to post to JIRA
78
154
  ```
79
155
 
80
- In terminal window #2, once Zeus is loaded:
156
+ Make sure your JIRA email matches your Git config email (`~/.gitconfig`)
81
157
 
82
- ```bash
83
- $ zeus rake spec
158
+ [1]:https://github.com/bbatsov/ruby-style-guide "Ruby Style Guide"
159
+ [2]:https://github.com/bbatsov/ruby-style-guide#naming "Ruby Style Guide - Naming"
160
+ [3]:http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers "Sandi Metz' Rules for Developers"
161
+
162
+ # Working on Curate while working on my Application
163
+
164
+ Assuming you are wanting to work on your Curate-based application and make modifications to the Curate gem, follow these instructions.
165
+
166
+ Replace the folliwing line in the Gemfile of your Curate-based application (see [Starting a New Curate Based Application](#starting-a-new-curate-based-application)):
167
+
168
+ ```ruby
169
+ gem 'curate' ...
84
170
  ```
85
171
 
86
- Or a localized spec:
172
+ with
87
173
 
88
- ```bash
89
- $ zeus test path/to/spec.rb:LINE
174
+ ```ruby
175
+ gem 'curate', path: './path/to/my/clone/of/curate'
90
176
  ```
91
177
 
92
- ### Running a copy of Curate in the curate gem
178
+ [More information about Gemfile management at Bundler.io](http://bundler.io/v1.5/gemfile.html)
93
179
 
94
- Given that Curate regenerates (via the `rake clean generate` tasks) you can run a functioning instance of curate in that directory.
180
+ You can then do concurrent development on both your clone of the Curate gem and your Curate-based application.
95
181
 
96
- From the curate directory:
97
- ```bash
98
- $ rake clean generate
99
- $ rake jetty:start
100
- $ cd ./spec/internal
101
- $ rails server
102
- ```
182
+ **NOTE: Any changes you make in the Curate gem will likely require you to restart your web-server.**
183
+
184
+ # Standing up your Curate-based Rails application in Production
185
+
186
+ We are working on this and have more to come.
@@ -40,6 +40,10 @@ legend .pull-right {
40
40
  margin-top:.2em;
41
41
  }
42
42
 
43
+ .unpadded {
44
+ padding:0;
45
+ }
46
+
43
47
  .with-headroom {
44
48
  padding-top:3em;
45
49
  }
@@ -36,3 +36,7 @@
36
36
 
37
37
  .search-result-details {
38
38
  }
39
+
40
+ .search-result-actions {
41
+ text-align:right;
42
+ }
@@ -3,6 +3,7 @@ module Curate::FieldsForAddToCollection
3
3
 
4
4
  included do
5
5
  helper_method :available_profiles
6
+ helper_method :available_collections
6
7
  helper_method :current_users_profile_sections
7
8
  end
8
9
 
@@ -16,6 +17,14 @@ protected
16
17
  current_user ? current_user.collections.to_a : []
17
18
  end
18
19
 
20
+ def available_collections(item = nil)
21
+ if item.present?
22
+ collection_options.reject {|n| n == item}
23
+ else
24
+ collection_options
25
+ end
26
+ end
27
+
19
28
  def available_profiles
20
29
  return [] unless current_user
21
30
  return [] unless current_user.profile
@@ -17,6 +17,7 @@ module CurationConcern
17
17
 
18
18
  with_themed_layout
19
19
  include Sufia::Noid # for normalize_identifier method
20
+ include Curate::FieldsForAddToCollection
20
21
 
21
22
  before_filter :authenticate_user!, :except => [:show]
22
23
  before_filter :agreed_to_terms_of_service!
@@ -20,6 +20,7 @@ class CurationConcern::GenericFilesController < CurationConcern::BaseController
20
20
  self.curation_concern_type = GenericFile
21
21
 
22
22
  def new
23
+ curation_concern.copy_permissions_from(parent)
23
24
  respond_with(curation_concern)
24
25
  end
25
26
 
@@ -2,12 +2,12 @@ module Curate
2
2
  module Ability
3
3
  extend ActiveSupport::Concern
4
4
  included do
5
- self.ability_logic += [:curate_permissions]
5
+ self.ability_logic += [:curate_permissions, :collection_permissions]
6
6
  end
7
7
 
8
8
  def curate_permissions
9
9
  alias_action :confirm, :copy, :to => :update
10
- can :edit, Person do |p|
10
+ can :edit, Person do |p|
11
11
  p.pid == current_user.repository_id
12
12
  end
13
13
 
@@ -17,6 +17,10 @@ module Curate
17
17
  end
18
18
  end
19
19
 
20
+ def collection_permissions
21
+ can :collect, :all
22
+ end
23
+
20
24
  end
21
25
  end
22
26
 
@@ -63,7 +63,7 @@ protected
63
63
  solr_doc[Solrizer.solr_name(:collection)] ||= []
64
64
  self.collection_ids.each do |collection_id|
65
65
  collection_obj = ActiveFedora::Base.load_instance_from_solr(collection_id)
66
- if collection_obj.class == Collection
66
+ if collection_obj.is_a?(Collection)
67
67
  solr_doc[Solrizer.solr_name(:collection, :facetable)] << collection_id
68
68
  solr_doc[Solrizer.solr_name(:collection)] << collection_id
69
69
  end
@@ -60,4 +60,8 @@ class GenericFile < ActiveFedora::Base
60
60
  def representative
61
61
  to_param
62
62
  end
63
+
64
+ def copy_permissions_from(obj)
65
+ self.datastreams['rightsMetadata'].ng_xml = obj.datastreams['rightsMetadata'].ng_xml
66
+ end
63
67
  end
@@ -0,0 +1,19 @@
1
+ <% button_class ||= "btn" %>
2
+ <% modal_id = "#{collectible.noid}-modal" %>
3
+ <% modal_title_id = "#{modal_id}-title" %>
4
+
5
+ <div class="modal fade" id="<%= modal_id %>">
6
+ <div class="modal-dialog">
7
+ <div class="modal-content">
8
+ <div class="modal-header">
9
+ <h4 id="<% modal_title_id %>class="modal-title">Add <%= "#{collectible}" %> to one of your collections:</h4>
10
+ </div>
11
+ <div class="unpadded modal-body">
12
+ <%= render partial: 'curate/collections/form_to_add_member', locals: { collectible: collectible, fieldset_class: 'with-side-padding with-top-padding', select_label_id: modal_title_id } %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+
18
+ <%= link_to 'Add to Collection', add_member_form_collections_path(collectible_id: collectible.pid), data: { toggle: "modal", target: ('#' + modal_id) }, method: :get, class: "add-to-collection #{button_class}", remote: true %>
19
+
@@ -1,24 +1,32 @@
1
- <% solr_doc = document.inner_object.solr_doc %>
1
+ <% solr_doc ||= document.inner_object.solr_doc %>
2
+ <% title_link_target ||= polymorphic_path([:curation_concern, document]) %>
3
+ <% title_link_text ||= render_index_field_value(document: solr_doc, field: 'desc_metadata__title_tesim') %>
4
+ <% edit_path ||= edit_polymorphic_path([:curation_concern, document]) %>
2
5
  <div class="row-fluid identifier-and-action">
3
6
  <div class="span2 list-number">
4
7
  <%= document_counter_with_offset(counter) if defined?(counter) %>
5
8
  <%= render :partial => 'catalog/_index_partials/type_display', locals: {document: document} %>
6
9
  </div>
7
10
 
8
- <div class="span6">
11
+ <div class="span6 search-result-link">
9
12
  <%# Minimize Fedora hits by using solr_doc rather than document %>
10
- <%= link_to render_index_field_value(document: solr_doc, field: 'desc_metadata__title_tesim'), polymorphic_path([:curation_concern, document]), :id => "src_copy_link_#{solr_doc.noid}" %>
13
+ <%= link_to title_link_text, title_link_target, :id => "src_copy_link_#{solr_doc.noid}" %>
11
14
  </div>
12
15
 
13
- <div class="span4">
16
+ <div class="span4 search-result-actions">
14
17
  <% if current_user -%>
15
- <%= render partial: 'add_to_collection_gui', locals: { document: document } %>
18
+ <% if can?( :edit, document ) && edit_path.present? %>
16
19
  <%= link_to(
17
20
  raw('<i class="icon-pencil icon-large"></i>'),
18
- edit_polymorphic_path([:curation_concern, document]),
19
- :class=> 'itemicon itemedit btn pull-right',
20
- :title => "Edit #{document.human_readable_type}"
21
- ) if can? :edit, document %>
22
- <% end -%>
21
+ edit_path,
22
+ class: 'itemicon itemedit btn',
23
+ title: "Edit #{document.human_readable_type}"
24
+ )%>
25
+ <% end %>
26
+ <% if can? :collect, document %>
27
+ <%= render 'add_to_collection_gui', collectible: document %>
28
+ <% end %>
29
+ <% end %>
23
30
  </div>
24
- </div>
31
+ </div>
32
+
@@ -1,34 +1,9 @@
1
1
  <%# This is a search result view %>
2
2
  <% noid = collection.noid %>
3
+ <% solr_doc = collection.inner_object.solr_doc %>
3
4
  <li id="document_<%= noid %>" class="search-result">
4
5
 
5
- <div class="row-fluid">
6
-
7
- <div class="span2 list-number">
8
- <%= document_counter_with_offset( collection_counter ) %>
9
- <%= render :partial => 'catalog/_index_partials/type_display', locals: {document: collection} %>
10
- </div>
11
-
12
- <div class="span6">
13
- <% solr_doc = collection.inner_object.solr_doc %>
14
- <%# Minimize Fedora hits by using solr_doc rather than document %>
15
- <%= link_to render_index_field_value(document: solr_doc, field: 'desc_metadata__title_tesim'), collection, :id => "src_copy_link_#{noid}" %>
16
- </div>
17
-
18
- <div class="span4">
19
- <% if current_user %>
20
- <%= render partial: 'add_to_collection_gui', locals: { document: collection } %>
21
-
22
- <%= link_to(
23
- raw('<i class="icon-pencil icon-large"></i>'),
24
- edit_collection_path(collection),
25
- :class=> 'itemicon itemedit btn pull-right',
26
- :title => 'Edit Collection'
27
- ) if can? :edit, collection %>
28
- <% end -%>
29
- </div>
30
-
31
- </div>
6
+ <%= render :partial => 'catalog/_index_partials/identifier_and_action', locals: { document: collection, counter: collection_counter, title_link_target: collection, edit_path: edit_collection_path(collection), solr_doc: solr_doc } %>
32
7
 
33
8
  <div class="row-fluid">
34
9