enju_seed 0.1.1.pre12 → 0.2.0.beta.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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/app/controllers/my_accounts_controller.rb +93 -0
  4. data/app/controllers/profiles_controller.rb +219 -0
  5. data/app/controllers/roles_controller.rb +61 -0
  6. data/app/models/concerns/master_model.rb +38 -0
  7. data/app/models/identity.rb +9 -0
  8. data/app/models/profile.rb +101 -0
  9. data/app/models/role.rb +50 -0
  10. data/app/models/user_has_role.rb +19 -0
  11. data/app/policies/application_policy.rb +53 -0
  12. data/app/policies/profile_policy.rb +55 -0
  13. data/app/policies/role_policy.rb +21 -0
  14. data/app/views/my_accounts/_edit_credential.html.erb +99 -0
  15. data/app/views/my_accounts/_form.html.erb +24 -0
  16. data/app/views/my_accounts/_show.html.erb +1 -0
  17. data/app/views/my_accounts/edit.html.erb +32 -0
  18. data/app/views/my_accounts/show.html+phone.erb +1 -0
  19. data/app/views/my_accounts/show.html.erb +49 -0
  20. data/app/views/profiles/_edit_credential.html.erb +88 -0
  21. data/app/views/profiles/_edit_profile.html.erb +42 -0
  22. data/app/views/profiles/_form.html.erb +15 -0
  23. data/app/views/profiles/_show.html.erb +1 -0
  24. data/app/views/profiles/edit.html.erb +33 -0
  25. data/app/views/profiles/index.html.erb +70 -0
  26. data/app/views/profiles/new.html.erb +88 -0
  27. data/app/views/profiles/show.html+phone.erb +1 -0
  28. data/app/views/profiles/show.html.erb +71 -0
  29. data/app/views/roles/_form.html.erb +19 -0
  30. data/app/views/roles/edit.html.erb +13 -0
  31. data/app/views/roles/index.html.erb +32 -0
  32. data/app/views/roles/new.html.erb +12 -0
  33. data/app/views/roles/show.html.erb +46 -0
  34. data/config/routes.rb +5 -0
  35. data/db/migrate/041_create_roles.rb +13 -0
  36. data/db/migrate/20100606065209_create_user_has_roles.rb +12 -0
  37. data/db/migrate/20130221154434_add_additional_attributes_to_user.rb +16 -0
  38. data/db/migrate/20140122054321_create_profiles.rb +20 -0
  39. data/db/migrate/20140610123439_drop_email_unique_constraint_enju_leaf_rc10.rb +11 -0
  40. data/db/migrate/20140811031145_add_expired_at_to_profile.rb +5 -0
  41. data/db/migrate/20141003181336_add_full_name_transcription_to_profile.rb +5 -0
  42. data/db/migrate/20141003182825_add_date_of_birth_to_profile.rb +5 -0
  43. data/db/migrate/20150421023923_create_identities.rb +15 -0
  44. data/db/migrate/20151126005552_add_provider_to_identity.rb +5 -0
  45. data/lib/enju_seed/engine.rb +8 -5
  46. data/lib/enju_seed/version.rb +1 -1
  47. data/spec/controllers/my_accounts_controller_spec.rb +229 -0
  48. data/spec/controllers/profiles_controller_spec.rb +594 -0
  49. data/spec/controllers/roles_controller_spec.rb +136 -0
  50. data/spec/dummy/README.rdoc +15 -248
  51. data/spec/dummy/Rakefile +1 -2
  52. data/spec/dummy/app/assets/javascripts/application.js +4 -6
  53. data/spec/dummy/app/assets/stylesheets/application.css +6 -4
  54. data/spec/dummy/app/controllers/application_controller.rb +9 -1
  55. data/spec/dummy/app/models/user.rb +9 -0
  56. data/spec/dummy/app/views/layouts/application.html.erb +2 -2
  57. data/spec/dummy/bin/bundle +3 -0
  58. data/spec/dummy/bin/rails +4 -0
  59. data/spec/dummy/bin/rake +4 -0
  60. data/spec/dummy/bin/setup +29 -0
  61. data/spec/dummy/config.ru +2 -2
  62. data/spec/dummy/config/application.rb +4 -35
  63. data/spec/dummy/config/boot.rb +4 -9
  64. data/spec/dummy/config/database.yml +8 -8
  65. data/spec/dummy/config/environment.rb +3 -3
  66. data/spec/dummy/config/environments/development.rb +22 -18
  67. data/spec/dummy/config/environments/production.rb +46 -34
  68. data/spec/dummy/config/environments/test.rb +19 -14
  69. data/spec/dummy/config/initializers/assets.rb +11 -0
  70. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  71. data/spec/dummy/config/initializers/devise.rb +274 -0
  72. data/spec/dummy/config/initializers/enju_leaf.rb +2 -0
  73. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  74. data/spec/dummy/config/initializers/inflections.rb +6 -5
  75. data/spec/dummy/config/initializers/mime_types.rb +0 -1
  76. data/spec/dummy/config/initializers/secret_token.rb +7 -2
  77. data/spec/dummy/config/initializers/session_store.rb +1 -6
  78. data/spec/dummy/config/initializers/wrap_parameters.rb +6 -6
  79. data/spec/dummy/config/locales/en.yml +20 -2
  80. data/spec/dummy/config/routes.rb +24 -25
  81. data/spec/dummy/config/secrets.yml +22 -0
  82. data/spec/dummy/db/migrate/001_create_agents.rb +50 -0
  83. data/spec/dummy/db/migrate/002_devise_create_users.rb +46 -0
  84. data/spec/dummy/db/migrate/005_create_manifestations.rb +43 -0
  85. data/spec/dummy/db/migrate/006_create_items.rb +21 -0
  86. data/spec/dummy/db/migrate/012_create_owns.rb +12 -0
  87. data/spec/dummy/db/migrate/015_create_creates.rb +12 -0
  88. data/spec/dummy/db/migrate/032_create_checkins.rb +17 -0
  89. data/spec/dummy/db/migrate/033_create_checkouts.rb +25 -0
  90. data/spec/dummy/db/migrate/035_create_reserves.rb +26 -0
  91. data/spec/dummy/db/migrate/047_create_produces.rb +12 -0
  92. data/spec/dummy/db/migrate/059_create_libraries.rb +28 -0
  93. data/spec/dummy/db/migrate/069_create_shelves.rb +15 -0
  94. data/spec/dummy/db/migrate/073_create_carrier_types.rb +11 -0
  95. data/spec/dummy/db/migrate/077_create_user_groups.rb +12 -0
  96. data/spec/dummy/db/migrate/080_create_library_groups.rb +17 -0
  97. data/spec/dummy/db/migrate/112_create_frequencies.rb +12 -0
  98. data/spec/dummy/db/migrate/117_create_form_of_works.rb +12 -0
  99. data/spec/dummy/db/migrate/120_create_baskets.rb +12 -0
  100. data/spec/dummy/db/migrate/121_create_checked_items.rb +17 -0
  101. data/spec/dummy/db/migrate/124_create_bookstores.rb +17 -0
  102. data/spec/dummy/db/migrate/125_create_donates.rb +12 -0
  103. data/spec/dummy/db/migrate/127_create_use_restrictions.rb +16 -0
  104. data/spec/dummy/db/migrate/129_create_item_has_use_restrictions.rb +16 -0
  105. data/spec/dummy/db/migrate/130_create_request_status_types.rb +12 -0
  106. data/spec/dummy/db/migrate/131_create_request_types.rb +12 -0
  107. data/spec/dummy/db/migrate/132_create_circulation_statuses.rb +16 -0
  108. data/spec/dummy/db/migrate/133_create_agent_merges.rb +15 -0
  109. data/spec/dummy/db/migrate/134_create_agent_merge_lists.rb +13 -0
  110. data/spec/dummy/db/migrate/149_create_message_templates.rb +18 -0
  111. data/spec/dummy/db/migrate/154_create_messages.rb +23 -0
  112. data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +18 -0
  113. data/spec/dummy/db/migrate/20080830154109_create_realizes.rb +13 -0
  114. data/spec/dummy/db/migrate/20080905191442_create_agent_types.rb +12 -0
  115. data/spec/dummy/db/migrate/20081006090811_create_subscriptions.rb +17 -0
  116. data/spec/dummy/db/migrate/20081006093246_create_subscribes.rb +14 -0
  117. data/spec/dummy/db/migrate/20081023092436_create_search_engines.rb +17 -0
  118. data/spec/dummy/db/migrate/20081025083323_create_countries.rb +28 -0
  119. data/spec/dummy/db/migrate/20081025083905_create_languages.rb +23 -0
  120. data/spec/dummy/db/migrate/20081027150907_create_picture_files.rb +15 -0
  121. data/spec/dummy/db/migrate/20081028083142_create_agent_import_files.rb +20 -0
  122. data/spec/dummy/db/migrate/20081028083208_create_resource_import_files.rb +20 -0
  123. data/spec/dummy/db/migrate/20081030023412_create_checkout_types.rb +17 -0
  124. data/spec/dummy/db/migrate/20081030023518_create_user_group_has_checkout_types.rb +25 -0
  125. data/spec/dummy/db/migrate/20081030023615_create_carrier_type_has_checkout_types.rb +18 -0
  126. data/spec/dummy/db/migrate/20081212075554_create_checkout_stat_has_manifestations.rb +17 -0
  127. data/spec/dummy/db/migrate/20081212080038_create_manifestation_checkout_stats.rb +15 -0
  128. data/spec/dummy/db/migrate/20081215094302_create_user_checkout_stats.rb +15 -0
  129. data/spec/dummy/db/migrate/20081215094955_create_checkout_stat_has_users.rb +17 -0
  130. data/spec/dummy/db/migrate/20081216190517_create_reserve_stat_has_manifestations.rb +17 -0
  131. data/spec/dummy/db/migrate/20081216190724_create_manifestation_reserve_stats.rb +15 -0
  132. data/spec/dummy/db/migrate/20081220023628_create_user_reserve_stats.rb +15 -0
  133. data/spec/dummy/db/migrate/20081220034117_create_reserve_stat_has_users.rb +17 -0
  134. data/spec/dummy/db/migrate/20090321130448_add_completed_at_to_user_checkout_stat.rb +23 -0
  135. data/spec/dummy/db/migrate/20090705133942_add_attachments_picture_to_picture_file.rb +15 -0
  136. data/spec/dummy/db/migrate/20090705212043_add_attachments_attachment_to_manifestation.rb +15 -0
  137. data/spec/dummy/db/migrate/20090720091106_create_medium_of_performances.rb +12 -0
  138. data/spec/dummy/db/migrate/20090720091429_create_content_types.rb +12 -0
  139. data/spec/dummy/db/migrate/20090812151902_create_agent_relationship_types.rb +12 -0
  140. data/spec/dummy/db/migrate/20090831220301_create_lending_policies.rb +21 -0
  141. data/spec/dummy/db/migrate/20091012101112_add_dcndl_schema.rb +27 -0
  142. data/spec/dummy/db/migrate/20091025080447_create_licenses.rb +12 -0
  143. data/spec/dummy/db/migrate/20091214131723_create_series_statements.rb +13 -0
  144. data/spec/dummy/db/migrate/20100129142347_create_import_requests.rb +14 -0
  145. data/spec/dummy/db/migrate/20100211105551_add_admin_networks_to_library_group.rb +9 -0
  146. data/spec/dummy/db/migrate/20100223121519_rename_series_statement_title_to_original_title.rb +13 -0
  147. data/spec/dummy/db/migrate/20100314190054_add_opening_hour_to_library.rb +9 -0
  148. data/spec/dummy/db/migrate/20100321235924_add_series_statement_identifier_to_series_statement.rb +10 -0
  149. data/spec/dummy/db/migrate/20100525124311_create_manifestation_relationships.rb +13 -0
  150. data/spec/dummy/db/migrate/20100606073747_create_agent_relationships.rb +13 -0
  151. data/spec/dummy/db/migrate/20100607044753_create_manifestation_relationship_types.rb +12 -0
  152. data/spec/dummy/db/migrate/20100814091104_add_position_to_agent_relationship.rb +11 -0
  153. data/spec/dummy/db/migrate/20100925043847_create_resource_import_results.rb +15 -0
  154. data/spec/dummy/db/migrate/20100925074559_create_agent_import_results.rb +11 -0
  155. data/spec/dummy/db/migrate/20101212070145_add_acquired_at_to_item.rb +9 -0
  156. data/spec/dummy/db/migrate/20110222073537_add_url_to_library_group.rb +9 -0
  157. data/spec/dummy/db/migrate/20110301035123_add_pub_date_to_manifestation.rb +9 -0
  158. data/spec/dummy/db/migrate/20110301121550_add_birth_date_and_death_date_to_agent.rb +11 -0
  159. data/spec/dummy/db/migrate/20110301134521_add_expire_date_to_reserve.rb +9 -0
  160. data/spec/dummy/db/migrate/20110318183304_add_valid_period_for_new_user_to_user_group.rb +11 -0
  161. data/spec/dummy/db/migrate/20110328130826_add_current_checkout_count_to_user_group_has_checkout_type.rb +9 -0
  162. data/spec/dummy/db/migrate/20110603184217_add_edit_mode_to_resource_import_file.rb +9 -0
  163. data/spec/dummy/db/migrate/20110619064807_add_edition_string_to_manifestation.rb +9 -0
  164. data/spec/dummy/db/migrate/20110620173525_add_bookstore_id_to_item.rb +11 -0
  165. data/spec/dummy/db/migrate/20110621093332_remove_expire_date_from_reserve.rb +9 -0
  166. data/spec/dummy/db/migrate/20110627034940_create_series_statement_merge_lists.rb +9 -0
  167. data/spec/dummy/db/migrate/20110627035057_create_series_statement_merges.rb +12 -0
  168. data/spec/dummy/db/migrate/20110627122938_add_number_of_day_to_notify_overdue_to_user_group.rb +13 -0
  169. data/spec/dummy/db/migrate/20110913115320_add_lft_and_rgt_to_message.rb +11 -0
  170. data/spec/dummy/db/migrate/20110916091020_add_volume_number_to_manifestation.rb +13 -0
  171. data/spec/dummy/db/migrate/20110916103953_add_manifestaiton_id_to_series_statement.rb +10 -0
  172. data/spec/dummy/db/migrate/20110918162329_add_note_to_series_statement.rb +9 -0
  173. data/spec/dummy/db/migrate/20111124110059_create_create_types.rb +12 -0
  174. data/spec/dummy/db/migrate/20111124110319_create_realize_types.rb +12 -0
  175. data/spec/dummy/db/migrate/20111124110355_create_produce_types.rb +12 -0
  176. data/spec/dummy/db/migrate/20111124112131_add_create_type_to_create.rb +7 -0
  177. data/spec/dummy/db/migrate/20111129044509_add_pickup_location_to_reserve.rb +6 -0
  178. data/spec/dummy/db/migrate/20120105074911_add_isil_to_library.rb +5 -0
  179. data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +6 -0
  180. data/spec/dummy/db/migrate/20120125152919_add_title_subseries_transcription_to_series_statement.rb +6 -0
  181. data/spec/dummy/db/migrate/20120129014038_create_budget_types.rb +12 -0
  182. data/spec/dummy/db/migrate/20120129020544_add_budget_type_id_to_item.rb +6 -0
  183. data/spec/dummy/db/migrate/20120319120638_add_content_type_id_to_manifestation.rb +6 -0
  184. data/spec/dummy/db/migrate/20120319173203_create_accepts.rb +14 -0
  185. data/spec/dummy/db/migrate/20120410104851_add_year_of_publication_to_manifestation.rb +5 -0
  186. data/spec/dummy/db/migrate/20120413072700_add_picture_meta_to_picture_file.rb +5 -0
  187. data/spec/dummy/db/migrate/20120413100352_add_fingerprint_to_picture_file.rb +5 -0
  188. data/spec/dummy/db/migrate/20120413161340_add_fingerprint_to_resource_import_file.rb +5 -0
  189. data/spec/dummy/db/migrate/20120413161403_add_fingerprint_to_agent_import_file.rb +5 -0
  190. data/spec/dummy/db/migrate/20120413170705_add_error_message_to_resource_import_file.rb +5 -0
  191. data/spec/dummy/db/migrate/20120413170720_add_error_message_to_agent_import_file.rb +5 -0
  192. data/spec/dummy/db/migrate/20120415164821_add_attachment_meta_to_manifestation.rb +5 -0
  193. data/spec/dummy/db/migrate/20120418081407_add_month_of_publication_to_manifestation.rb +5 -0
  194. data/spec/dummy/db/migrate/20120424103932_add_librarian_id_to_checked_item.rb +5 -0
  195. data/spec/dummy/db/migrate/20120510140958_add_closed_to_shelf.rb +5 -0
  196. data/spec/dummy/db/migrate/20120511072422_add_agent_identifier_to_agent.rb +6 -0
  197. data/spec/dummy/db/migrate/20120602141129_add_edit_mode_to_agent_import_file.rb +5 -0
  198. data/spec/dummy/db/migrate/20121116031206_add_fulltext_content_to_manifestation.rb +5 -0
  199. data/spec/dummy/db/migrate/20130303124821_add_retained_at_to_reserve.rb +5 -0
  200. data/spec/dummy/db/migrate/20130304015019_add_postponed_at_to_reserve.rb +5 -0
  201. data/spec/dummy/db/migrate/20130412083556_add_latitude_and_longitude_to_library.rb +6 -0
  202. data/spec/dummy/db/migrate/20130416054135_add_circulation_status_id_to_item.rb +8 -0
  203. data/spec/dummy/db/migrate/20130421093852_add_periodical_to_manifestation.rb +5 -0
  204. data/spec/dummy/db/migrate/20130421155019_add_creator_string_to_series_statement.rb +7 -0
  205. data/spec/dummy/db/migrate/20130421164124_add_series_master_to_series_statement.rb +5 -0
  206. data/spec/dummy/db/migrate/20130429020822_add_root_manifestation_id_to_series_statement.rb +6 -0
  207. data/spec/dummy/db/migrate/20130506175303_create_identifier_types.rb +12 -0
  208. data/spec/dummy/db/migrate/20130506175834_create_identifiers.rb +15 -0
  209. data/spec/dummy/db/migrate/20130509185724_add_statement_of_responsibility_to_manifestation.rb +5 -0
  210. data/spec/dummy/db/migrate/20130519065638_add_lock_version_to_reserve.rb +5 -0
  211. data/spec/dummy/db/migrate/20130519065837_add_lock_version_to_checkin.rb +5 -0
  212. data/spec/dummy/db/migrate/20140110122216_create_user_import_files.rb +18 -0
  213. data/spec/dummy/db/migrate/20140110131010_create_user_import_results.rb +11 -0
  214. data/spec/dummy/db/migrate/20140518050147_create_reserve_transitions.rb +18 -0
  215. data/spec/dummy/db/migrate/20140518111006_create_message_transitions.rb +18 -0
  216. data/spec/dummy/db/migrate/20140518135713_create_message_request_transitions.rb +18 -0
  217. data/spec/dummy/db/migrate/20140519170214_create_resource_import_file_transitions.rb +18 -0
  218. data/spec/dummy/db/migrate/20140519171220_create_import_request_transitions.rb +18 -0
  219. data/spec/dummy/db/migrate/20140524020735_create_agent_import_file_transitions.rb +18 -0
  220. data/spec/dummy/db/migrate/20140524074813_create_user_import_file_transitions.rb +18 -0
  221. data/spec/dummy/db/migrate/20140528045518_create_user_checkout_stat_transitions.rb +18 -0
  222. data/spec/dummy/db/migrate/20140528045539_create_user_reserve_stat_transitions.rb +18 -0
  223. data/spec/dummy/db/migrate/20140528045600_create_manifestation_checkout_stat_transitions.rb +18 -0
  224. data/spec/dummy/db/migrate/20140528045617_create_manifestation_reserve_stat_transitions.rb +18 -0
  225. data/spec/dummy/db/migrate/20140614065404_create_resource_export_files.rb +11 -0
  226. data/spec/dummy/db/migrate/20140614141500_create_resource_export_file_transitions.rb +18 -0
  227. data/spec/dummy/db/migrate/20140628072217_add_user_encoding_to_user_import_file.rb +5 -0
  228. data/spec/dummy/db/migrate/20140628073524_add_user_encoding_to_agent_import_file.rb +5 -0
  229. data/spec/dummy/db/migrate/20140628073535_add_user_encoding_to_resource_import_file.rb +5 -0
  230. data/spec/dummy/db/migrate/20140709113413_create_user_export_files.rb +11 -0
  231. data/spec/dummy/db/migrate/20140709113905_create_user_export_file_transitions.rb +18 -0
  232. data/spec/dummy/db/migrate/20140720140916_add_binding_item_identifier_to_item.rb +8 -0
  233. data/spec/dummy/db/migrate/20140720170714_add_default_library_id_to_user_import_file.rb +5 -0
  234. data/spec/dummy/db/migrate/20140720170735_add_default_user_group_id_to_user_import_file.rb +5 -0
  235. data/spec/dummy/db/migrate/20140721151416_add_default_shelf_id_to_resource_import_file.rb +5 -0
  236. data/spec/dummy/db/migrate/20140802082007_add_manifestation_id_to_item.rb +6 -0
  237. data/spec/dummy/db/migrate/20140810061942_add_user_id_to_user_checkout_stat.rb +12 -0
  238. data/spec/dummy/db/migrate/20140810091231_add_checkout_icalendar_token_to_profile.rb +6 -0
  239. data/spec/dummy/db/migrate/20140810091417_add_save_checkout_history_to_profile.rb +5 -0
  240. data/spec/dummy/db/migrate/20140813182425_add_publication_place_to_manifestation.rb +5 -0
  241. data/spec/dummy/db/migrate/20140821151023_create_colors.rb +14 -0
  242. data/spec/dummy/db/migrate/20140822114527_add_error_message_to_resource_import_result.rb +5 -0
  243. data/spec/dummy/db/migrate/20140823083524_add_extent_to_manifestation.rb +5 -0
  244. data/spec/dummy/db/migrate/20140823094847_add_dimensions_to_manifestation.rb +5 -0
  245. data/spec/dummy/db/migrate/20140823095740_rename_manifestation_periodical_to_serial.rb +9 -0
  246. data/spec/dummy/db/migrate/20141014065831_add_shelf_id_to_checkout.rb +6 -0
  247. data/spec/dummy/db/migrate/20141020120523_add_library_id_to_checkout.rb +6 -0
  248. data/spec/dummy/db/migrate/20150106001709_create_demands.rb +14 -0
  249. data/spec/dummy/db/migrate/20150117111136_add_foreign_key_to_items_referencing_manifestations.rb +5 -0
  250. data/spec/dummy/db/migrate/20150221063719_add_settings_to_library_group.rb +5 -0
  251. data/spec/dummy/db/migrate/20150506105356_add_error_message_to_user_import_result.rb +5 -0
  252. data/spec/dummy/db/migrate/20150924115059_create_withdraws.rb +13 -0
  253. data/spec/dummy/db/migrate/20151125004028_add_profile_id_to_agent.rb +6 -0
  254. data/spec/dummy/db/migrate/20151213070943_add_translation_table_to_library_group.rb +13 -0
  255. data/spec/dummy/db/migrate/20151213072705_add_footer_banner_to_library_group.rb +9 -0
  256. data/spec/dummy/db/migrate/20160610093229_add_html_snippet_to_library_group.rb +5 -0
  257. data/spec/dummy/db/migrate/20160627232219_add_most_recent_to_user_import_file_transitions.rb +9 -0
  258. data/spec/dummy/db/migrate/20160627232316_add_most_recent_to_user_export_file_transitions.rb +9 -0
  259. data/spec/dummy/db/migrate/20160703184619_add_most_recent_to_reserve_transitions.rb +9 -0
  260. data/spec/dummy/db/migrate/20160703184650_add_most_recent_to_manifestation_checkout_stat_transitions.rb +9 -0
  261. data/spec/dummy/db/migrate/20160703184723_add_most_recent_to_manifestation_reserve_stat_transitions.rb +9 -0
  262. data/spec/dummy/db/migrate/20160703184747_add_most_recent_to_user_checkout_stat_transitions.rb +9 -0
  263. data/spec/dummy/db/migrate/20160703184805_add_most_recent_to_user_reserve_stat_transitions.rb +9 -0
  264. data/spec/dummy/db/migrate/20160703185015_add_most_recent_to_message_transitions.rb +9 -0
  265. data/spec/dummy/db/migrate/20160703190209_add_foreign_key_on_manifestation_id_to_reserve.rb +5 -0
  266. data/spec/dummy/db/schema.rb +1392 -0
  267. data/spec/dummy/public/404.html +54 -13
  268. data/spec/dummy/public/422.html +54 -13
  269. data/spec/dummy/public/500.html +53 -12
  270. data/spec/factories/profile.rb +17 -0
  271. data/spec/factories/user.rb +43 -0
  272. data/spec/factories/user_group.rb +5 -0
  273. data/spec/fixtures/libraries.yml +101 -0
  274. data/spec/fixtures/library_groups.yml +39 -0
  275. data/spec/fixtures/message_requests.yml +26 -0
  276. data/spec/fixtures/message_templates.yml +98 -0
  277. data/spec/fixtures/messages.yml +56 -0
  278. data/spec/fixtures/profiles.yml +103 -0
  279. data/spec/fixtures/roles.yml +39 -0
  280. data/spec/fixtures/user_groups.yml +40 -0
  281. data/spec/fixtures/user_has_roles.yml +40 -0
  282. data/spec/fixtures/users.yml +51 -0
  283. data/spec/models/profile_spec.rb +98 -0
  284. data/spec/models/role_spec.rb +40 -0
  285. data/spec/rails_helper.rb +71 -0
  286. data/spec/requests/profiles_spec.rb +9 -0
  287. data/spec/routing/profiles_routing_spec.rb +35 -0
  288. data/spec/routing/users_spec.rb +14 -0
  289. data/spec/spec_helper.rb +96 -29
  290. data/spec/support/controller_macros.rb +46 -0
  291. data/spec/support/devise.rb +4 -0
  292. metadata +673 -46
  293. data/spec/dummy/script/rails +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6e8b24b0bd4f8d0907cbafacfd99ac90020e98e
4
- data.tar.gz: 45bdd6bc85a9892e3f7d59f772d3ca9f5bfdf166
3
+ metadata.gz: 1822f4c15dae152625288a9a7cb4f1a9a7035756
4
+ data.tar.gz: 778cd3501db1631ad1dfb9c36f99ff07263b7947
5
5
  SHA512:
6
- metadata.gz: 68e6db94d900391bbfd36824d70ed6479f801701581f68cf2cb4b19250a721d10379a8cf64a4cb4a260b65ecc8a49ce58047fedcdbca7d379fc7fcb8b9e1ae0a
7
- data.tar.gz: a9778d548d48e5ef74c99cdfffa3c4c2e5ca3fab799087f863022cb92357aa636b8ae278c8f9c1512d2992decc9f4b97ad38715e5ba8a530796dca63f7a65674
6
+ metadata.gz: 644ae0a3e0e4a8ca5e649d5b22a7f3c9ee4a6b7cf8d4c99b974f0344609914ec4dc40850c5d9cb8f7fbc34905953d3a098c96fc5af5b2d37ceab30a81bb76d0a
7
+ data.tar.gz: dbb0e9fce535cf6f6321d085e6e8d5778ef4af09ddee701d0fbc8e39b8921567720b64d87c488003d0c6751f4c6e88a6268d23bf9cf499cd624e124acf7a37c3
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2014 YOURNAME
1
+ Copyright 2016 Kosuke Tanabe
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,93 @@
1
+ class MyAccountsController < ApplicationController
2
+ before_action :authenticate_user!
3
+ before_action :set_profile
4
+
5
+ def show
6
+ respond_to do |format|
7
+ format.html
8
+ format.html.phone
9
+ format.json { render json: @profile }
10
+ end
11
+ end
12
+
13
+ def edit
14
+ prepare_options
15
+ end
16
+
17
+ def update
18
+ user_attrs = [
19
+ :id, :email, :current_password, :password, :password_confirmation
20
+ ]
21
+ user_attrs += [
22
+ {:user_has_role_attributes => [:id, :role_id]}
23
+ ] if current_user.has_role?('Administrator')
24
+
25
+ user_params = ActionController::Parameters.new(params[:profile][:user_attributes]).permit(*user_attrs)
26
+
27
+ respond_to do |format|
28
+ saved = current_user.update_attributes(user_params)
29
+ @profile.assign_attributes(profile_params)
30
+
31
+ if saved
32
+ if @profile.save
33
+ bypass_sign_in(current_user)
34
+ format.html { redirect_to my_account_url, notice: t('controller.successfully_updated', model: t('activerecord.models.user')) }
35
+ format.json { head :no_content }
36
+ else
37
+ prepare_options
38
+ format.html { render action: "edit" }
39
+ format.json { render json: current_user.errors, status: :unprocessable_entity }
40
+ end
41
+ else
42
+ current_user.errors.full_messages.each do |msg|
43
+ @profile.errors[:base] << msg
44
+ end
45
+ prepare_options
46
+ format.html { render action: "edit" }
47
+ format.json { render json: current_user.errors, status: :unprocessable_entity }
48
+ end
49
+ end
50
+ end
51
+
52
+ def destroy
53
+ @profile.destroy
54
+
55
+ respond_to do |format|
56
+ format.html { redirect_to my_account_url, notice: 'devise.registrations.destroyed' }
57
+ format.json { head :no_content }
58
+ end
59
+ end
60
+
61
+ private
62
+ def set_profile
63
+ @profile = current_user.profile
64
+ authorize @profile
65
+ end
66
+
67
+ def profile_params
68
+ attrs = [
69
+ :full_name, :full_name_transcription, :user_number,
70
+ :library_id, :keyword_list, :note,
71
+ :locale, :required_role_id, :expired_at,
72
+ :locked, :birth_date,
73
+ :save_checkout_history, :checkout_icalendar_token, # EnjuCirculation
74
+ :save_search_history # EnjuSearchLog
75
+ ]
76
+ if current_user.has_role?('Librarian')
77
+ attrs << :user_group_id
78
+ end
79
+ params.require(:profile).permit(*attrs)
80
+ end
81
+
82
+ def prepare_options
83
+ @user_groups = UserGroup.order(:position)
84
+ @roles = Role.order(:position)
85
+ @libraries = Library.order(:position)
86
+ @languages = Language.order(:position)
87
+ if current_user.active_for_authentication?
88
+ current_user.locked = '0'
89
+ else
90
+ current_user.locked = '1'
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,219 @@
1
+ class ProfilesController < ApplicationController
2
+ before_action :set_profile, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+ before_action :prepare_options, only: [:new, :edit]
5
+
6
+ # GET /profiles
7
+ # GET /profiles.json
8
+ def index
9
+ if params[:username].present?
10
+ profile = User.where(username: params[:username]).first.try(:profile)
11
+ if profile
12
+ redirect_to profile
13
+ return
14
+ end
15
+ end
16
+ query = flash[:query] = params[:query].to_s
17
+ @query = query.dup
18
+ @count = {}
19
+
20
+ sort = {sort_by: 'created_at', order: 'desc'}
21
+ case params[:sort_by]
22
+ when 'username'
23
+ sort[:sort_by] = 'username'
24
+ end
25
+ case params[:order]
26
+ when 'asc'
27
+ sort[:order] = 'asc'
28
+ when 'desc'
29
+ sort[:order] = 'desc'
30
+ end
31
+
32
+ query = params[:query]
33
+ page = params[:page] || 1
34
+ role = current_user.try(:role) || Role.default_role
35
+
36
+ search = Profile.search
37
+ search.build do
38
+ fulltext query if query
39
+ with(:required_role_id).less_than_or_equal_to role.id
40
+ order_by sort[:sort_by], sort[:order]
41
+ end
42
+ search.query.paginate(page.to_i, Profile.default_per_page)
43
+ @profiles = search.execute!.results
44
+ @count[:query_result] = @profiles.total_entries
45
+
46
+ respond_to do |format|
47
+ format.html # index.html.erb
48
+ format.json { render json: @profiles }
49
+ end
50
+ end
51
+
52
+ # GET /profiles/1
53
+ # GET /profiles/1.json
54
+ def show
55
+ if @profile.user == current_user
56
+ redirect_to my_account_url
57
+ return
58
+ end
59
+
60
+ respond_to do |format|
61
+ format.html # show.html.erb
62
+ format.html.phone
63
+ format.json { render json: @profile }
64
+ end
65
+ end
66
+
67
+ # GET /profiles/new
68
+ def new
69
+ @profile = Profile.new
70
+ @profile.user = User.new
71
+ @profile.user_group = current_user.profile.user_group
72
+ @profile.library = current_user.profile.library
73
+ @profile.locale = current_user.profile.locale
74
+
75
+ respond_to do |format|
76
+ format.html # new.html.erb
77
+ format.json { render json: @profile }
78
+ end
79
+ end
80
+
81
+ # GET /profiles/1/edit
82
+ def edit
83
+ if defined?(EnjuCirculation)
84
+ if params[:mode] == 'feed_token'
85
+ if params[:disable] == 'true'
86
+ @profile.delete_checkout_icalendar_token
87
+ else
88
+ @profile.reset_checkout_icalendar_token
89
+ end
90
+ render partial: 'feed_token', locals: {profile: @profile}
91
+ return
92
+ end
93
+ end
94
+ if @profile.user == current_user
95
+ redirect_to edit_my_account_url
96
+ return
97
+ end
98
+ if @profile.user.try(:locked_at?)
99
+ @profile.user.locked = true
100
+ end
101
+ end
102
+
103
+ # POST /profiles
104
+ # POST /profiles.json
105
+ def create
106
+ if current_user.has_role?('Librarian')
107
+ @profile = Profile.new(profile_params)
108
+ if @profile.user
109
+ password = @profile.user.set_auto_generated_password
110
+ end
111
+ else
112
+ @profile = Profile.new(profile_params)
113
+ end
114
+
115
+ respond_to do |format|
116
+ if @profile.save
117
+ if @profile.user
118
+ @profile.user.role = Role.where(name: 'User').first
119
+ flash[:temporary_password] = password
120
+ end
121
+ format.html { redirect_to @profile, notice: t('controller.successfully_created', model: t('activerecord.models.profile')) }
122
+ format.json { render json: @profile, status: :created, location: @profile }
123
+ else
124
+ prepare_options
125
+ format.html { render action: "new" }
126
+ format.json { render json: @profile.errors, status: :unprocessable_entity }
127
+ end
128
+ end
129
+ end
130
+
131
+ # PUT /profiles/1
132
+ # PUT /profiles/1.json
133
+ def update
134
+ @profile.update_attributes(profile_update_params)
135
+ if @profile.user
136
+ if @profile.user.auto_generated_password == "1"
137
+ password = @profile.user.set_auto_generated_password
138
+ end
139
+ end
140
+
141
+ respond_to do |format|
142
+ if @profile.save
143
+ flash[:temporary_password] = password
144
+ format.html { redirect_to @profile, notice: t('controller.successfully_updated', model: t('activerecord.models.profile')) }
145
+ format.json { head :no_content }
146
+ else
147
+ prepare_options
148
+ format.html { render action: "edit" }
149
+ format.json { render json: @profile.errors, status: :unprocessable_entity }
150
+ end
151
+ end
152
+ end
153
+
154
+ # DELETE /profiles/1
155
+ # DELETE /profiles/1.json
156
+ def destroy
157
+ @profile.destroy
158
+
159
+ respond_to do |format|
160
+ format.html { redirect_to profiles_url, notice: t('controller.successfully_deleted', model: t('activerecord.models.profile')) }
161
+ format.json { head :no_content }
162
+ end
163
+ end
164
+
165
+ private
166
+ def set_profile
167
+ @profile = Profile.find(params[:id])
168
+ authorize @profile
169
+ end
170
+
171
+ def check_policy
172
+ authorize Profile
173
+ end
174
+
175
+ def profile_params
176
+ attrs = [
177
+ :full_name, :full_name_transcription,
178
+ :keyword_list, :locale,
179
+ :save_checkout_history, :checkout_icalendar_token, # EnjuCirculation
180
+ :save_search_history, # EnjuSearchLog
181
+ ]
182
+ attrs += [
183
+ :library_id, :expired_at, :birth_date,
184
+ :user_group_id, :required_role_id, :note, :user_number, {
185
+ :user_attributes => [
186
+ :id, :username, :email, :current_password, :locked,
187
+ {:user_has_role_attributes => [:id, :role_id]}
188
+ ]
189
+ }
190
+ ] if current_user.has_role?('Librarian')
191
+ params.require(:profile).permit(*attrs)
192
+ end
193
+
194
+ def profile_update_params
195
+ attrs = [
196
+ :full_name, :full_name_transcription,
197
+ :keyword_list, :locale,
198
+ :save_checkout_history, :checkout_icalendar_token, # EnjuCirculation
199
+ :save_search_history, # EnjuSearchLog
200
+ ]
201
+ attrs += [
202
+ :library_id, :expired_at, :birth_date,
203
+ :user_group_id, :required_role_id, :note, :user_number, {
204
+ :user_attributes => [
205
+ :id, :email, :current_password, :auto_generated_password, :locked,
206
+ {:user_has_role_attributes => [:id, :role_id]}
207
+ ]
208
+ }
209
+ ] if current_user.has_role?('Librarian')
210
+ params.require(:profile).permit(*attrs)
211
+ end
212
+
213
+ def prepare_options
214
+ @user_groups = UserGroup.all
215
+ @roles = Role.all
216
+ @libraries = Library.all
217
+ @languages = Language.all
218
+ end
219
+ end
@@ -0,0 +1,61 @@
1
+ class RolesController < ApplicationController
2
+ before_action :set_role, only: [:show, :edit, :update, :destroy]
3
+ before_action :check_policy, only: [:index, :new, :create]
4
+
5
+ # GET /roles
6
+ # GET /roles.json
7
+ def index
8
+ @roles = Role.order(:position)
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.json { render json: @roles }
13
+ end
14
+ end
15
+
16
+ # GET /roles/1
17
+ # GET /roles/1.json
18
+ def show
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.json { render json: @role }
22
+ end
23
+ end
24
+
25
+ # GET /roles/1/edit
26
+ def edit
27
+ end
28
+
29
+ # PUT /roles/1
30
+ # PUT /roles/1.json
31
+ def update
32
+ if params[:move]
33
+ move_position(@role, params[:move])
34
+ return
35
+ end
36
+
37
+ respond_to do |format|
38
+ if @role.update_attributes(role_params)
39
+ format.html { redirect_to @role, notice: t('controller.successfully_updated', model: t('activerecord.models.role')) }
40
+ format.json { head :no_content }
41
+ else
42
+ format.html { render action: "edit" }
43
+ format.json { render json: @role.errors, status: :unprocessable_entity }
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+ def set_role
50
+ @role = Role.find(params[:id])
51
+ authorize @role
52
+ end
53
+
54
+ def check_policy
55
+ authorize Role
56
+ end
57
+
58
+ def role_params
59
+ params.require(:role).permit(:name, :display_name, :note)
60
+ end
61
+ end
@@ -0,0 +1,38 @@
1
+ module MasterModel
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ acts_as_list
6
+ validates_uniqueness_of :name, case_sensitive: false
7
+ validates :name, presence: true
8
+ validate :name do
9
+ valid_name?
10
+ end
11
+ validate :display_name do
12
+ valid_yaml?
13
+ end
14
+ validates :display_name, presence: true
15
+ before_validation :set_display_name, on: :create
16
+ strip_attributes only: :name
17
+ end
18
+
19
+ # 表示名を設定します。
20
+ def set_display_name
21
+ self.display_name = "#{I18n.locale}: #{name}" if display_name.blank?
22
+ end
23
+
24
+ private
25
+ def valid_name?
26
+ unless name =~ /\A[a-z][0-9a-z_]*[0-9a-z]\z/
27
+ errors.add(:name, I18n.t('page.only_lowercase_letters_and_numbers_are_allowed'))
28
+ end
29
+ end
30
+
31
+ def valid_yaml?
32
+ begin
33
+ YAML.load(display_name)
34
+ rescue Psych::SyntaxError
35
+ errors.add(:display_name, I18n.t('page.cannot_parse_yaml_header'))
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,9 @@
1
+ class Identity < ActiveRecord::Base
2
+ belongs_to :profile
3
+ validates :name, presence: true, uniqueness: {scope: :provider}
4
+ validates :provider, presence: true
5
+
6
+ def self.find_for_oauth(auth)
7
+ where(name: auth.uid, provider: auth.provider).first_or_create
8
+ end
9
+ end
@@ -0,0 +1,101 @@
1
+ class Profile < ActiveRecord::Base
2
+ enju_search_log_profile_model if defined?(EnjuSearchLog)
3
+
4
+ scope :administrators, -> { joins(user: :role).where('roles.name = ?', 'Administrator') }
5
+ scope :librarians, -> { joins(user: :role).where('roles.name = ? OR roles.name = ?', 'Administrator', 'Librarian') }
6
+ belongs_to :user, dependent: :destroy
7
+ belongs_to :library, validate: true
8
+ belongs_to :user_group
9
+ belongs_to :required_role, class_name: 'Role', foreign_key: 'required_role_id' #, validate: true
10
+ has_many :identities
11
+ has_many :agents
12
+ accepts_nested_attributes_for :identities, allow_destroy: true, reject_if: :all_blank
13
+
14
+ validates_associated :user_group, :library
15
+ validates_associated :user
16
+ validates_presence_of :user_group, :library, :locale #, :user_number
17
+ validates :user_number, uniqueness: true, format: { with: /\A[0-9A-Za-z_]+\z/ }, allow_blank: true
18
+ validates :user_id, uniqueness: true, allow_blank: true
19
+ validates :birth_date, format: { with: /\A\d{4}-\d{1,2}-\d{1,2}\z/ }, allow_blank: true
20
+
21
+ strip_attributes only: :user_number
22
+
23
+ attr_accessor :birth_date
24
+
25
+ searchable do
26
+ text :user_number, :full_name, :full_name_transcription, :note
27
+ string :user_number
28
+ text :username do
29
+ user.try(:username)
30
+ end
31
+ text :email do
32
+ user.try(:email)
33
+ end
34
+ string :username do
35
+ user.try(:username)
36
+ end
37
+ string :email do
38
+ user.try(:email)
39
+ end
40
+ time :created_at
41
+ time :updated_at
42
+ boolean :active do
43
+ user.try(:active_for_authentication?)
44
+ end
45
+ integer :required_role_id
46
+ end
47
+
48
+ before_validation :set_role_and_agent, on: :create
49
+ before_save :set_expired_at, :set_date_of_birth
50
+ accepts_nested_attributes_for :user
51
+
52
+ # 既定のユーザ権限を設定します。
53
+ # @return [void]
54
+ def set_role_and_agent
55
+ self.required_role = Role.where(name: 'Librarian').first unless required_role
56
+ self.locale = I18n.default_locale.to_s unless locale
57
+ end
58
+
59
+ # ユーザの有効期限を設定します。
60
+ # @return [Time]
61
+ def set_expired_at
62
+ if expired_at.blank?
63
+ if user_group.valid_period_for_new_user > 0
64
+ self.expired_at = user_group.valid_period_for_new_user.days.from_now.end_of_day
65
+ end
66
+ end
67
+ end
68
+
69
+ # ユーザの誕生日を設定します。
70
+ # @return [Time]
71
+ def set_date_of_birth
72
+ self.date_of_birth = Time.zone.parse(birth_date) if birth_date
73
+ rescue ArgumentError
74
+ nil
75
+ end
76
+ end
77
+
78
+ # == Schema Information
79
+ #
80
+ # Table name: profiles
81
+ #
82
+ # id :integer not null, primary key
83
+ # user_id :integer
84
+ # user_group_id :integer
85
+ # library_id :integer
86
+ # locale :string
87
+ # user_number :string
88
+ # full_name :text
89
+ # note :text
90
+ # keyword_list :text
91
+ # required_role_id :integer
92
+ # created_at :datetime
93
+ # updated_at :datetime
94
+ # checkout_icalendar_token :string
95
+ # save_checkout_history :boolean default(FALSE), not null
96
+ # expired_at :datetime
97
+ # save_search_history :boolean
98
+ # share_bookmarks :boolean
99
+ # full_name_transcription :text
100
+ # date_of_birth :datetime
101
+ #