enju_trunk_subject 1.0.4

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 (280) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +36 -0
  5. data/app/controllers/classification_types_controller.rb +13 -0
  6. data/app/controllers/classifications_controller.rb +114 -0
  7. data/app/controllers/subject_has_classifications_controller.rb +97 -0
  8. data/app/controllers/subject_heading_type_has_subjects_controller.rb +80 -0
  9. data/app/controllers/subject_heading_types_controller.rb +13 -0
  10. data/app/controllers/subject_types_controller.rb +13 -0
  11. data/app/controllers/subjects_controller.rb +216 -0
  12. data/app/controllers/work_has_subjects_controller.rb +107 -0
  13. data/app/models/classification.rb +89 -0
  14. data/app/models/classification_type.rb +20 -0
  15. data/app/models/enju_subject/ability.rb +55 -0
  16. data/app/models/subject.rb +100 -0
  17. data/app/models/subject_has_classification.rb +37 -0
  18. data/app/models/subject_heading_type.rb +21 -0
  19. data/app/models/subject_heading_type_has_subject.rb +22 -0
  20. data/app/models/subject_type.rb +20 -0
  21. data/app/models/work_has_subject.rb +35 -0
  22. data/app/views/classification_types/_form.html.erb +19 -0
  23. data/app/views/classification_types/edit.html.erb +13 -0
  24. data/app/views/classification_types/index.html.erb +45 -0
  25. data/app/views/classification_types/new.html.erb +12 -0
  26. data/app/views/classification_types/show.html.erb +30 -0
  27. data/app/views/classifications/_form.html.erb +27 -0
  28. data/app/views/classifications/edit.html.erb +13 -0
  29. data/app/views/classifications/index.html.erb +54 -0
  30. data/app/views/classifications/new.html.erb +12 -0
  31. data/app/views/classifications/show.html.erb +34 -0
  32. data/app/views/manifestations/_classification_detail.html.erb +14 -0
  33. data/app/views/manifestations/_subject_detail.html.erb +14 -0
  34. data/app/views/manifestations/_subject_facet.html.erb +18 -0
  35. data/app/views/manifestations/_subject_form.html.erb +21 -0
  36. data/app/views/subject_has_classifications/edit.html.erb +30 -0
  37. data/app/views/subject_has_classifications/index.html.erb +38 -0
  38. data/app/views/subject_has_classifications/new.html.erb +32 -0
  39. data/app/views/subject_has_classifications/show.html.erb +22 -0
  40. data/app/views/subject_heading_type_has_subjects/edit.html.erb +28 -0
  41. data/app/views/subject_heading_type_has_subjects/index.html.erb +30 -0
  42. data/app/views/subject_heading_type_has_subjects/new.html.erb +27 -0
  43. data/app/views/subject_heading_type_has_subjects/show.html.erb +23 -0
  44. data/app/views/subject_heading_types/_form.html.erb +19 -0
  45. data/app/views/subject_heading_types/edit.html.erb +13 -0
  46. data/app/views/subject_heading_types/index.html.erb +43 -0
  47. data/app/views/subject_heading_types/new.html.erb +12 -0
  48. data/app/views/subject_heading_types/show.html.erb +27 -0
  49. data/app/views/subject_types/_form.html.erb +19 -0
  50. data/app/views/subject_types/edit.html.erb +13 -0
  51. data/app/views/subject_types/index.html.erb +43 -0
  52. data/app/views/subject_types/new.html.erb +12 -0
  53. data/app/views/subject_types/show.html.erb +29 -0
  54. data/app/views/subjects/_form.html.erb +42 -0
  55. data/app/views/subjects/_index.html.erb +48 -0
  56. data/app/views/subjects/_index_classification.html.erb +57 -0
  57. data/app/views/subjects/_index_work.html.erb +60 -0
  58. data/app/views/subjects/_show_work_list.html.erb +15 -0
  59. data/app/views/subjects/edit.html.erb +13 -0
  60. data/app/views/subjects/index.atom.builder +10 -0
  61. data/app/views/subjects/index.html.erb +7 -0
  62. data/app/views/subjects/index.rss.builder +29 -0
  63. data/app/views/subjects/new.html.erb +12 -0
  64. data/app/views/subjects/show.html.erb +69 -0
  65. data/app/views/subjects/show.js.erb +1 -0
  66. data/app/views/work_has_subjects/_form.html.erb +24 -0
  67. data/app/views/work_has_subjects/edit.html.erb +29 -0
  68. data/app/views/work_has_subjects/index.html.erb +31 -0
  69. data/app/views/work_has_subjects/new.html.erb +42 -0
  70. data/app/views/work_has_subjects/show.html.erb +25 -0
  71. data/config/locales/translation_en.yml +35 -0
  72. data/config/locales/translation_ja.yml +39 -0
  73. data/config/routes.rb +7 -0
  74. data/db/fixtures/classification_types.yml +7 -0
  75. data/db/fixtures/subject_types.yml +28 -0
  76. data/db/migrate/029_create_subjects.rb +28 -0
  77. data/db/migrate/142_create_classifications.rb +19 -0
  78. data/db/migrate/144_create_classification_types.rb +16 -0
  79. data/db/migrate/145_create_subject_heading_types.rb +16 -0
  80. data/db/migrate/146_create_subject_types.rb +16 -0
  81. data/db/migrate/20110913120629_add_lft_and_rgt_to_classification.rb +11 -0
  82. data/db/migrate/20140427142354_add_classifiation_identifier_to_classification.rb +6 -0
  83. data/lib/enju_subject.rb +33 -0
  84. data/lib/enju_subject/engine.rb +8 -0
  85. data/lib/enju_subject/manifestation.rb +31 -0
  86. data/lib/enju_subject/master_model.rb +41 -0
  87. data/lib/enju_subject/version.rb +3 -0
  88. data/lib/generators/enju_subject/setup/USAGE +8 -0
  89. data/lib/generators/enju_subject/setup/setup_generator.rb +10 -0
  90. data/lib/generators/enju_subject/setup/templates/db/fixtures/classification_types.yml +13 -0
  91. data/lib/generators/enju_subject/setup/templates/db/fixtures/subject_heading_types.yml +39 -0
  92. data/lib/generators/enju_subject/setup/templates/db/fixtures/subject_types.yml +28 -0
  93. data/lib/tasks/enju_subject_tasks.rake +19 -0
  94. data/spec/controllers/classification_types_controller_spec.rb +445 -0
  95. data/spec/controllers/classifications_controller_spec.rb +441 -0
  96. data/spec/controllers/subject_heading_types_controller_spec.rb +445 -0
  97. data/spec/controllers/subject_types_controller_spec.rb +447 -0
  98. data/spec/controllers/subjects_controller_spec.rb +437 -0
  99. data/spec/dummy/Rakefile +7 -0
  100. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  101. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  102. data/spec/dummy/app/controllers/application_controller.rb +47 -0
  103. data/spec/dummy/app/helpers/application_helper.rb +21 -0
  104. data/spec/dummy/app/models/ability.rb +59 -0
  105. data/spec/dummy/app/models/setting.rb +4 -0
  106. data/spec/dummy/app/models/user.rb +43 -0
  107. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  108. data/spec/dummy/config.ru +4 -0
  109. data/spec/dummy/config/application.rb +46 -0
  110. data/spec/dummy/config/application.yml +38 -0
  111. data/spec/dummy/config/boot.rb +10 -0
  112. data/spec/dummy/config/database.yml +25 -0
  113. data/spec/dummy/config/environment.rb +5 -0
  114. data/spec/dummy/config/environments/development.rb +30 -0
  115. data/spec/dummy/config/environments/production.rb +60 -0
  116. data/spec/dummy/config/environments/test.rb +39 -0
  117. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  118. data/spec/dummy/config/initializers/devise.rb +207 -0
  119. data/spec/dummy/config/initializers/inflections.rb +10 -0
  120. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  121. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  122. data/spec/dummy/config/initializers/session_store.rb +8 -0
  123. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  124. data/spec/dummy/config/locales/devise.en.yml +57 -0
  125. data/spec/dummy/config/locales/en.yml +18 -0
  126. data/spec/dummy/config/locales/ja.yml +18 -0
  127. data/spec/dummy/config/routes.rb +60 -0
  128. data/spec/dummy/db/fixtures/roles.yml +25 -0
  129. data/spec/dummy/db/migrate/001_create_agents.rb +53 -0
  130. data/spec/dummy/db/migrate/005_create_manifestations.rb +56 -0
  131. data/spec/dummy/db/migrate/006_create_items.rb +24 -0
  132. data/spec/dummy/db/migrate/012_create_owns.rb +12 -0
  133. data/spec/dummy/db/migrate/015_create_creates.rb +12 -0
  134. data/spec/dummy/db/migrate/047_create_produces.rb +12 -0
  135. data/spec/dummy/db/migrate/059_create_libraries.rb +28 -0
  136. data/spec/dummy/db/migrate/069_create_shelves.rb +15 -0
  137. data/spec/dummy/db/migrate/073_create_carrier_types.rb +11 -0
  138. data/spec/dummy/db/migrate/077_create_user_groups.rb +12 -0
  139. data/spec/dummy/db/migrate/080_create_library_groups.rb +18 -0
  140. data/spec/dummy/db/migrate/112_create_frequencies.rb +12 -0
  141. data/spec/dummy/db/migrate/117_create_form_of_works.rb +12 -0
  142. data/spec/dummy/db/migrate/120_create_baskets.rb +12 -0
  143. data/spec/dummy/db/migrate/124_create_bookstores.rb +17 -0
  144. data/spec/dummy/db/migrate/125_create_donates.rb +12 -0
  145. data/spec/dummy/db/migrate/130_create_request_status_types.rb +12 -0
  146. data/spec/dummy/db/migrate/131_create_request_types.rb +12 -0
  147. data/spec/dummy/db/migrate/20080830154109_create_realizes.rb +13 -0
  148. data/spec/dummy/db/migrate/20080830172106_create_exemplifies.rb +13 -0
  149. data/spec/dummy/db/migrate/20080905191442_create_agent_types.rb +12 -0
  150. data/spec/dummy/db/migrate/20081006090811_create_subscriptions.rb +17 -0
  151. data/spec/dummy/db/migrate/20081006093246_create_subscribes.rb +14 -0
  152. data/spec/dummy/db/migrate/20081023092436_create_search_engines.rb +17 -0
  153. data/spec/dummy/db/migrate/20081025083323_create_countries.rb +28 -0
  154. data/spec/dummy/db/migrate/20081025083905_create_languages.rb +23 -0
  155. data/spec/dummy/db/migrate/20081027150907_create_picture_files.rb +15 -0
  156. data/spec/dummy/db/migrate/20081028083142_create_agent_import_files.rb +22 -0
  157. data/spec/dummy/db/migrate/20081028083208_create_resource_import_files.rb +22 -0
  158. data/spec/dummy/db/migrate/20090705133942_add_attachments_picture_to_picture_file.rb +15 -0
  159. data/spec/dummy/db/migrate/20090705212043_add_attachments_attachment_to_manifestation.rb +15 -0
  160. data/spec/dummy/db/migrate/20090719201843_create_extents.rb +12 -0
  161. data/spec/dummy/db/migrate/20090720091106_create_medium_of_performances.rb +12 -0
  162. data/spec/dummy/db/migrate/20090720091429_create_content_types.rb +12 -0
  163. data/spec/dummy/db/migrate/20090812151902_create_agent_relationship_types.rb +12 -0
  164. data/spec/dummy/db/migrate/20091012101112_add_dcndl_schema.rb +27 -0
  165. data/spec/dummy/db/migrate/20091025080447_create_licenses.rb +12 -0
  166. data/spec/dummy/db/migrate/20091202124834_create_versions.rb +18 -0
  167. data/spec/dummy/db/migrate/20091214131723_create_series_statements.rb +13 -0
  168. data/spec/dummy/db/migrate/20100129142347_create_import_requests.rb +15 -0
  169. data/spec/dummy/db/migrate/20100211105551_add_admin_networks_to_library_group.rb +9 -0
  170. data/spec/dummy/db/migrate/20100223121519_rename_series_statement_title_to_original_title.rb +13 -0
  171. data/spec/dummy/db/migrate/20100321235924_add_series_statement_identifier_to_series_statement.rb +10 -0
  172. data/spec/dummy/db/migrate/20100525124311_create_manifestation_relationships.rb +13 -0
  173. data/spec/dummy/db/migrate/20100606073747_create_agent_relationships.rb +13 -0
  174. data/spec/dummy/db/migrate/20100607044753_create_manifestation_relationship_types.rb +12 -0
  175. data/spec/dummy/db/migrate/20100814091104_add_position_to_agent_relationship.rb +11 -0
  176. data/spec/dummy/db/migrate/20100925043847_create_resource_import_results.rb +15 -0
  177. data/spec/dummy/db/migrate/20100925074559_create_agent_import_results.rb +12 -0
  178. data/spec/dummy/db/migrate/20101212070145_add_acquired_at_to_item.rb +9 -0
  179. data/spec/dummy/db/migrate/20110222073537_add_url_to_library_group.rb +9 -0
  180. data/spec/dummy/db/migrate/20110301035123_add_pub_date_to_manifestation.rb +9 -0
  181. data/spec/dummy/db/migrate/20110301121550_add_birth_date_and_death_date_to_agent.rb +11 -0
  182. data/spec/dummy/db/migrate/20110425133109_add_issn_to_series_statement.rb +9 -0
  183. data/spec/dummy/db/migrate/20110603184217_add_edit_mode_to_resource_import_file.rb +9 -0
  184. data/spec/dummy/db/migrate/20110618091240_add_periodical_to_series_statement.rb +9 -0
  185. data/spec/dummy/db/migrate/20110619064807_add_edition_string_to_manifestation.rb +9 -0
  186. data/spec/dummy/db/migrate/20110620173525_add_bookstore_id_to_item.rb +11 -0
  187. data/spec/dummy/db/migrate/20110627034940_create_series_statement_merge_lists.rb +9 -0
  188. data/spec/dummy/db/migrate/20110627035057_create_series_statement_merges.rb +12 -0
  189. data/spec/dummy/db/migrate/20110627122938_add_number_of_day_to_notify_overdue_to_user_group.rb +13 -0
  190. data/spec/dummy/db/migrate/20110820131417_create_series_has_manifestations.rb +13 -0
  191. data/spec/dummy/db/migrate/20110916053430_rename_manifestation_number_list_to_number_string.rb +13 -0
  192. data/spec/dummy/db/migrate/20110916091020_add_volume_number_to_manifestation.rb +13 -0
  193. data/spec/dummy/db/migrate/20110916103953_add_manifestaiton_id_to_series_statement.rb +10 -0
  194. data/spec/dummy/db/migrate/20110918162329_add_note_to_series_statement.rb +9 -0
  195. data/spec/dummy/db/migrate/20111009183423_add_ndc_to_manifestation.rb +9 -0
  196. data/spec/dummy/db/migrate/20111124110059_create_create_types.rb +12 -0
  197. data/spec/dummy/db/migrate/20111124110319_create_realize_types.rb +12 -0
  198. data/spec/dummy/db/migrate/20111124110355_create_produce_types.rb +12 -0
  199. data/spec/dummy/db/migrate/20111124112131_add_create_type_to_create.rb +7 -0
  200. data/spec/dummy/db/migrate/20111201121844_create_roles.rb +12 -0
  201. data/spec/dummy/db/migrate/20111201155456_create_users.rb +8 -0
  202. data/spec/dummy/db/migrate/20111201155513_add_devise_to_users.rb +49 -0
  203. data/spec/dummy/db/migrate/20111201163718_create_user_has_roles.rb +10 -0
  204. data/spec/dummy/db/migrate/20120105074911_add_isil_to_library.rb +5 -0
  205. data/spec/dummy/db/migrate/20120125152919_add_title_subseries_transcription_to_series_statement.rb +6 -0
  206. data/spec/dummy/db/migrate/20120129014038_create_budget_types.rb +12 -0
  207. data/spec/dummy/db/migrate/20120129020544_add_budget_type_id_to_item.rb +6 -0
  208. data/spec/dummy/db/migrate/20120319120638_add_content_type_id_to_manifestation.rb +6 -0
  209. data/spec/dummy/db/migrate/20120319173203_create_accepts.rb +14 -0
  210. data/spec/dummy/db/migrate/20120410104851_add_year_of_publication_to_manifestation.rb +5 -0
  211. data/spec/dummy/db/migrate/20120413072700_add_picture_meta_to_picture_file.rb +5 -0
  212. data/spec/dummy/db/migrate/20120413100352_add_fingerprint_to_picture_file.rb +5 -0
  213. data/spec/dummy/db/migrate/20120413161340_add_fingerprint_to_resource_import_file.rb +5 -0
  214. data/spec/dummy/db/migrate/20120413161403_add_fingerprint_to_agent_import_file.rb +5 -0
  215. data/spec/dummy/db/migrate/20120413170705_add_error_message_to_resource_import_file.rb +5 -0
  216. data/spec/dummy/db/migrate/20120413170720_add_error_message_to_agent_import_file.rb +5 -0
  217. data/spec/dummy/db/migrate/20120415060308_rename_resource_import_file_imported_at_to_executed_at.rb +9 -0
  218. data/spec/dummy/db/migrate/20120415164821_add_attachment_meta_to_manifestation.rb +5 -0
  219. data/spec/dummy/db/migrate/20120418081407_add_month_of_publication_to_manifestation.rb +5 -0
  220. data/spec/dummy/db/migrate/20120510140958_add_closed_to_shelf.rb +5 -0
  221. data/spec/dummy/db/migrate/20120511072422_add_agent_identifier_to_agent.rb +6 -0
  222. data/spec/dummy/db/migrate/20120602141129_add_edit_mode_to_agent_import_file.rb +5 -0
  223. data/spec/dummy/db/migrate/20130221154434_add_additional_attributes_to_user.rb +26 -0
  224. data/spec/dummy/db/migrate/20130421093852_add_periodical_to_manifestation.rb +5 -0
  225. data/spec/dummy/db/migrate/20130421155019_add_creator_string_to_series_statement.rb +7 -0
  226. data/spec/dummy/db/migrate/20130421164124_add_series_master_to_series_statement.rb +5 -0
  227. data/spec/dummy/db/migrate/20130506175303_create_identifier_types.rb +12 -0
  228. data/spec/dummy/db/migrate/20130506175834_create_identifiers.rb +15 -0
  229. data/spec/dummy/db/migrate/20130509185724_add_statement_of_responsibility_to_manifestation.rb +5 -0
  230. data/spec/dummy/db/schema.rb +901 -0
  231. data/spec/dummy/db/seeds.rb +32 -0
  232. data/spec/dummy/public/404.html +26 -0
  233. data/spec/dummy/public/422.html +26 -0
  234. data/spec/dummy/public/500.html +26 -0
  235. data/spec/dummy/public/favicon.ico +0 -0
  236. data/spec/dummy/script/rails +6 -0
  237. data/spec/dummy/spec/fixtures/subjects.yml +72 -0
  238. data/spec/dummy/test/fixtures/user_groups.yml +13 -0
  239. data/spec/dummy/test/fixtures/user_has_roles.yml +9 -0
  240. data/spec/dummy/test/fixtures/users.yml +11 -0
  241. data/spec/dummy/test/unit/user_group_test.rb +7 -0
  242. data/spec/dummy/test/unit/user_has_role_test.rb +7 -0
  243. data/spec/dummy/test/unit/user_test.rb +7 -0
  244. data/spec/factories/classification.rb +6 -0
  245. data/spec/factories/classification_type.rb +5 -0
  246. data/spec/factories/manifestation.rb +6 -0
  247. data/spec/factories/subject.rb +7 -0
  248. data/spec/factories/subject_heading_type.rb +5 -0
  249. data/spec/factories/subject_heading_type_has_subject.rb +6 -0
  250. data/spec/factories/subject_type.rb +5 -0
  251. data/spec/factories/user.rb +34 -0
  252. data/spec/fixtures/agent_types.yml +35 -0
  253. data/spec/fixtures/agents.yml +143 -0
  254. data/spec/fixtures/carrier_types.yml +51 -0
  255. data/spec/fixtures/classification_types.yml +188 -0
  256. data/spec/fixtures/classifications.yml +118 -0
  257. data/spec/fixtures/languages.yml +1901 -0
  258. data/spec/fixtures/library_groups.yml +33 -0
  259. data/spec/fixtures/manifestations.yml +22 -0
  260. data/spec/fixtures/roles.yml +21 -0
  261. data/spec/fixtures/shtsv.tsv +3 -0
  262. data/spec/fixtures/subject_heading_types.yml +39 -0
  263. data/spec/fixtures/subject_types.yml +42 -0
  264. data/spec/fixtures/subjects.yml +80 -0
  265. data/spec/fixtures/user_groups.yml +25 -0
  266. data/spec/fixtures/user_has_roles.yml +41 -0
  267. data/spec/fixtures/users.yml +69 -0
  268. data/spec/models/classification_spec.rb +46 -0
  269. data/spec/models/classification_type_spec.rb +21 -0
  270. data/spec/models/subject_heading_type_spec.rb +21 -0
  271. data/spec/models/subject_spec.rb +33 -0
  272. data/spec/models/subject_type_spec.rb +21 -0
  273. data/spec/requests/subjects_spec.rb +9 -0
  274. data/spec/routing/subject_heading_types_routing_spec.rb +35 -0
  275. data/spec/routing/subject_types_routing_spec.rb +35 -0
  276. data/spec/routing/subjects_routing_spec.rb +35 -0
  277. data/spec/spec_helper.rb +45 -0
  278. data/spec/support/controller_macros.rb +48 -0
  279. data/spec/support/devise.rb +3 -0
  280. metadata +675 -0
@@ -0,0 +1,107 @@
1
+ class WorkHasSubjectsController < ApplicationController
2
+ load_and_authorize_resource
3
+ helper_method :get_work, :get_subject
4
+ after_filter :solr_commit, :only => [:create, :update, :destroy]
5
+ cache_sweeper :subject_sweeper, :only => [:create, :update, :destroy]
6
+
7
+ # GET /work_has_subjects
8
+ # GET /work_has_subjects.json
9
+ def index
10
+ get_work; get_subject
11
+ if @work
12
+ @work_has_subjects = @work.work_has_subjects.page(params[:page])
13
+ elsif @subject
14
+ @work_has_subjects = @subject.work_has_subjects.page(params[:page])
15
+ else
16
+ @work_has_subjects = WorkHasSubject.page(params[:page])
17
+ end
18
+
19
+ respond_to do |format|
20
+ format.html # index.html.erb
21
+ format.json { render :json => @work_has_subjects }
22
+ end
23
+ end
24
+
25
+ # GET /work_has_subjects/1
26
+ # GET /work_has_subjects/1.json
27
+ def show
28
+ respond_to do |format|
29
+ format.html # show.html.erb
30
+ format.json { render :json => @work_has_subject }
31
+ end
32
+ end
33
+
34
+ # GET /work_has_subjects/new
35
+ # GET /work_has_subjects/new.json
36
+ def new
37
+ get_work; get_subject
38
+ @work_has_subject = WorkHasSubject.new(:work => @work, :subject => @subject)
39
+
40
+ respond_to do |format|
41
+ format.html # new.html.erb
42
+ format.json { render :json => @work_has_subject }
43
+ end
44
+ end
45
+
46
+ # GET /work_has_subjects/1/edit
47
+ def edit
48
+ end
49
+
50
+ # POST /work_has_subjects
51
+ # POST /work_has_subjects.json
52
+ def create
53
+ @work_has_subject = WorkHasSubject.new(params[:work_has_subject])
54
+
55
+ respond_to do |format|
56
+ if @work_has_subject.save
57
+ format.html { redirect_to @work_has_subject, :notice => t('controller.successfully_created', :model => t('activerecord.models.work_has_subject')) }
58
+ format.json { render :json => @work_has_subject, :status => :created, :location => @work_has_subject }
59
+ else
60
+ format.html { render :action => "new" }
61
+ format.json { render :json => @work_has_subject.errors, :status => :unprocessable_entity }
62
+ end
63
+ end
64
+ end
65
+
66
+ # PUT /work_has_subjects/1
67
+ # PUT /work_has_subjects/1.json
68
+ def update
69
+ get_work
70
+ if @work and params[:move]
71
+ move_position(@work_has_subject, params[:move], false)
72
+ redirect_to work_work_has_subjects_url(@work)
73
+ return
74
+ end
75
+
76
+ respond_to do |format|
77
+ if @work_has_subject.update_attributes(params[:work_has_subject])
78
+ format.html { redirect_to @work_has_subject, :notice => t('controller.successfully_updated', :model => t('activerecord.models.work_has_subject')) }
79
+ format.json { head :no_content }
80
+ else
81
+ format.html { render :action => "edit" }
82
+ format.json { render :json => @work_has_subject.errors, :status => :unprocessable_entity }
83
+ end
84
+ end
85
+ end
86
+
87
+ # DELETE /work_has_subjects/1
88
+ # DELETE /work_has_subjects/1.json
89
+ def destroy
90
+ get_work; get_subject
91
+ @work_has_subject.destroy
92
+
93
+ respond_to do |format|
94
+ format.html {
95
+ case
96
+ when @work
97
+ redirect_to work_work_has_subjects_url(@work)
98
+ when @subject
99
+ redirect_to subject_work_has_subjects_url(@subject)
100
+ else
101
+ redirect_to work_has_subjects_url
102
+ end
103
+ }
104
+ format.json { head :no_content }
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,89 @@
1
+ # coding: utf-8
2
+ class Classification < ActiveRecord::Base
3
+ attr_accessible :parent_id, :category, :note, :classification_type_id, :classifiation_identifier
4
+ has_many :subject_has_classifications, :dependent => :destroy
5
+ has_many :subjects, :through => :subject_has_classifications
6
+ belongs_to :classification_type, :validate => true
7
+ #has_many_polymorphs :subjects, :from => [:concepts, :places], :through => :subject_has_classifications
8
+
9
+ validates_associated :classification_type
10
+ validates_presence_of :category, :classification_type, :classifiation_identifier
11
+ validates_uniqueness_of :classifiation_identifier, :scope => :classification_type_id
12
+ searchable do
13
+ text :category, :note, :subject, :classifiation_identifier
14
+ integer :subject_ids, :multiple => true
15
+ integer :classification_type_id
16
+ end
17
+ #acts_as_nested_set
18
+ #acts_as_taggable_on :tags
19
+ normalize_attributes :category
20
+
21
+ paginates_per 10
22
+
23
+ def self.import_from_tsv(filename)
24
+ logger.info "import_from_tsv start"
25
+
26
+ cnt = 0
27
+ ndc9 = ClassificationType.where(name: "ndc9").first
28
+ unless ndc9
29
+ logger.fatal "ndc9 not found"
30
+ raise ActiveRecord::RecordNotFound("ndc9 not found")
31
+ end
32
+
33
+ Classification.destroy_all(classification_type_id: ndc9.id)
34
+
35
+ open(filename) do |file|
36
+ file.each do |line|
37
+ if cnt == 0
38
+ else
39
+ rows = line.split("\t")
40
+ if rows[9].present?
41
+ ndcs = rows[9].split(';')
42
+ ndcs.each do |ndc|
43
+ logger.debug "ndc=#{ndc} ndlsh=#{rows[0]}"
44
+ parent_id = nil
45
+ category = rows[0].strip
46
+ identifier = ndc.strip
47
+ c = Classification.where(classification_type_id: ndc9.id, classifiation_identifier: identifier)
48
+ if c.blank?
49
+ c = Classification.new
50
+ c.parent_id = parent_id
51
+ c.category = category
52
+ c.classifiation_identifier = identifier
53
+ c.classification_type = ndc9
54
+ c.save!
55
+ end
56
+ end
57
+ end
58
+ end
59
+ cnt = cnt + 1
60
+ end
61
+ end
62
+
63
+ logger.info "import_from_tsv end"
64
+ end
65
+
66
+ private
67
+ def subject
68
+ subjects.collect{|s| [s.term, s.term_transcription]}
69
+ end
70
+
71
+ end
72
+
73
+
74
+ # == Schema Information
75
+ #
76
+ # Table name: classifications
77
+ #
78
+ # id :integer not null, primary key
79
+ # parent_id :integer
80
+ # category :string(255) not null
81
+ # note :text
82
+ # classification_type_id :integer not null
83
+ # created_at :datetime not null
84
+ # updated_at :datetime not null
85
+ # lft :integer
86
+ # rgt :integer
87
+ # manifestation_id :integer
88
+ #
89
+
@@ -0,0 +1,20 @@
1
+ class ClassificationType < ActiveRecord::Base
2
+ attr_accessible :name, :display_name, :note
3
+ include MasterModel
4
+ default_scope :order => 'position'
5
+ has_many :classifications
6
+ end
7
+
8
+ # == Schema Information
9
+ #
10
+ # Table name: classification_types
11
+ #
12
+ # id :integer not null, primary key
13
+ # name :string(255) not null
14
+ # display_name :text
15
+ # note :text
16
+ # position :integer
17
+ # created_at :datetime
18
+ # updated_at :datetime
19
+ #
20
+
@@ -0,0 +1,55 @@
1
+ module EnjuSubject
2
+ class Ability
3
+ include CanCan::Ability
4
+
5
+ def initialize(user, ip_address = nil)
6
+ case user.try(:role).try(:name)
7
+ when 'Administrator'
8
+ can :manage, [
9
+ Classification,
10
+ Subject
11
+ ]
12
+ if LibraryGroup.site_config.network_access_allowed?(ip_address)
13
+ can [:read, :create, :update], ClassificationType
14
+ can [:destroy, :delete], ClassificationType do |classification_type|
15
+ classification_type.classifications.empty?
16
+ end
17
+ can :manage, [
18
+ Classification,
19
+ Subject,
20
+ SubjectHeadingType,
21
+ SubjectType
22
+ ]
23
+ else
24
+ can :read, [
25
+ ClassificationType,
26
+ SubjectHeadingType,
27
+ SubjectType
28
+ ]
29
+ end
30
+ when 'Librarian'
31
+ can :read, [
32
+ Classification,
33
+ ClassificationType,
34
+ Subject,
35
+ SubjectType,
36
+ SubjectHeadingType
37
+ ]
38
+ when 'User'
39
+ can :read, [
40
+ Classification,
41
+ ClassificationType,
42
+ Subject,
43
+ SubjectHeadingType
44
+ ]
45
+ else
46
+ can :read, [
47
+ Classification,
48
+ ClassificationType,
49
+ Subject,
50
+ SubjectHeadingType
51
+ ]
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ class Subject < ActiveRecord::Base
3
+ attr_accessor :classification_id, :subject_heading_type_id
4
+
5
+ attr_accessible :parent_id, :use_term_id, :term, :term_transcription,
6
+ :subject_type_id, :note, :required_role_id, :subject_heading_type_id,
7
+ :term_alternative
8
+
9
+ has_paper_trail
10
+
11
+ # belongs_to :manifestation
12
+ belongs_to :subject_type
13
+ belongs_to :subject_heading_type
14
+ belongs_to :subject_type, :validate => true
15
+ belongs_to :required_role, :class_name => 'Role', :foreign_key => 'required_role_id'
16
+
17
+ has_many :work_has_subjects, :dependent => :destroy
18
+ has_many :works, :through => :work_has_subjects, :class_name => 'Manifestation'
19
+
20
+ has_many :subject_has_classifications, :dependent => :destroy
21
+ has_many :classifications, :through => :subject_has_classifications, :class_name => 'Classification'
22
+
23
+ has_many :subject_heading_type_has_subjects
24
+ has_many :subject_heading_types, :through => :subject_heading_type_has_subjects, :class_name => 'SubjectHeadingType'
25
+
26
+ validates_associated :subject_type
27
+ validates_presence_of :term, :subject_type
28
+
29
+
30
+ searchable do
31
+ text :term
32
+ time :created_at
33
+ integer :required_role_id
34
+ integer :work_ids, :multiple => true
35
+ integer :subject_heading_type_ids, :multiple => true
36
+ end
37
+
38
+ normalize_attributes :term
39
+
40
+ paginates_per 10
41
+
42
+ def subject_heading_type
43
+ self.subject_heading_types.first
44
+ end
45
+
46
+ def self.import_subjects(subject_lists, subject_transcriptions = nil)
47
+ return [] if subject_lists.blank?
48
+ subjects = subject_lists.gsub(';', ';').split(/;/)
49
+ transcriptions = []
50
+ if subject_transcriptions.present?
51
+ transcriptions = subject_transcriptions.gsub(';', ';').split(/;/)
52
+ transcriptions = transcriptions.uniq.compact
53
+ end
54
+ list = []
55
+ subjects.compact.uniq.each_with_index do |s, i|
56
+ s = s.to_s.exstrip_with_full_size_space
57
+ next if s == ""
58
+ subject = Subject.where(:term => s).first
59
+ term_transcription = transcriptions[i].exstrip_with_full_size_space rescue nil
60
+ unless subject
61
+ # TODO: Subject typeの設定
62
+ subject = Subject.new(
63
+ :term => s,
64
+ :term_transcription => term_transcription,
65
+ :subject_type_id => 1,
66
+ )
67
+ subject.required_role = Role.where(:name => 'Guest').first
68
+ subject.save
69
+ else
70
+ if term_transcription
71
+ subject.term_transcription = term_transcription
72
+ subject.save
73
+ end
74
+ end
75
+ list << subject
76
+ end
77
+ list
78
+ end
79
+
80
+ end
81
+
82
+ # == Schema Information
83
+ #
84
+ # Table name: subjects
85
+ #
86
+ # id :integer not null, primary key
87
+ # parent_id :integer
88
+ # use_term_id :integer
89
+ # term :string(255)
90
+ # term_transcription :text
91
+ # subject_type_id :integer not null
92
+ # scope_note :text
93
+ # note :text
94
+ # required_role_id :integer default(1), not null
95
+ # lock_version :integer default(0), not null
96
+ # created_at :datetime
97
+ # updated_at :datetime
98
+ # deleted_at :datetime
99
+ #
100
+
@@ -0,0 +1,37 @@
1
+ class SubjectHasClassification < ActiveRecord::Base
2
+ attr_accessible :subject_id, :classification_id
3
+ belongs_to :subject #, :polymorphic => true, :validate => true
4
+ belongs_to :classification, :validate => true
5
+
6
+ validates_associated :subject, :classification
7
+ validates_presence_of :subject, :classification
8
+ validates_uniqueness_of :classification_id, :scope => :subject_id
9
+
10
+ #def after_save
11
+ # if self.subject
12
+ # self.subject.reload
13
+ # self.subject.save
14
+ # end
15
+ # if self.classification
16
+ # self.classification.reload
17
+ # self.classification.save
18
+ # end
19
+ #end
20
+
21
+ #def after_destroy
22
+ # after_save
23
+ #end
24
+ end
25
+
26
+ # == Schema Information
27
+ #
28
+ # Table name: subject_has_classifications
29
+ #
30
+ # id :integer not null, primary key
31
+ # subject_id :integer
32
+ # subject_type :string(255)
33
+ # classification_id :integer not null
34
+ # created_at :datetime
35
+ # updated_at :datetime
36
+ #
37
+
@@ -0,0 +1,21 @@
1
+ class SubjectHeadingType < ActiveRecord::Base
2
+ attr_accessible :name, :display_name, :note
3
+ include MasterModel
4
+ #has_many_polymorphs :subjects, :from => [:concepts, :places], :through => :subject_heading_type_has_subjects
5
+ has_many :subject_heading_type_has_subjects
6
+ has_many :subjects, :through => :subject_heading_type_has_subjects
7
+ end
8
+
9
+ # == Schema Information
10
+ #
11
+ # Table name: subject_heading_types
12
+ #
13
+ # id :integer not null, primary key
14
+ # name :string(255) not null
15
+ # display_name :text
16
+ # note :text
17
+ # position :integer
18
+ # created_at :datetime
19
+ # updated_at :datetime
20
+ #
21
+
@@ -0,0 +1,22 @@
1
+ class SubjectHeadingTypeHasSubject < ActiveRecord::Base
2
+ attr_accessible :subject_id, :subject_heading_type_id
3
+ belongs_to :subject #, :polymorphic => true
4
+ belongs_to :subject_heading_type
5
+
6
+ validates_presence_of :subject, :subject_heading_type
7
+ validates_associated :subject, :subject_heading_type
8
+ validates_uniqueness_of :subject_id, :scope => :subject_heading_type_id
9
+ end
10
+
11
+ # == Schema Information
12
+ #
13
+ # Table name: subject_heading_type_has_subjects
14
+ #
15
+ # id :integer not null, primary key
16
+ # subject_id :integer not null
17
+ # subject_type :string(255)
18
+ # subject_heading_type_id :integer not null
19
+ # created_at :datetime
20
+ # updated_at :datetime
21
+ #
22
+