exlibris-aleph 1.1.0 → 2.0.0

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 (268) hide show
  1. data/README.md +199 -82
  2. data/Rakefile +8 -14
  3. data/lib/exlibris-aleph.rb +0 -3
  4. data/lib/exlibris/aleph/admin_library.rb +27 -0
  5. data/lib/exlibris/aleph/api/base.rb +27 -0
  6. data/lib/exlibris/aleph/api/client/base.rb +86 -0
  7. data/lib/exlibris/aleph/api/client/patron.rb +20 -0
  8. data/lib/exlibris/aleph/api/client/patron/address.rb +22 -0
  9. data/lib/exlibris/aleph/api/client/patron/record.rb +23 -0
  10. data/lib/exlibris/aleph/api/client/patron/record/item.rb +26 -0
  11. data/lib/exlibris/aleph/api/client/patron/record/item/create_hold.rb +31 -0
  12. data/lib/exlibris/aleph/api/client/patron/record/item/create_hold/parameters.rb +55 -0
  13. data/lib/exlibris/aleph/api/client/patron/record/item/hold.rb +29 -0
  14. data/lib/exlibris/aleph/api/client/patron/status.rb +22 -0
  15. data/lib/exlibris/aleph/api/client/record.rb +21 -0
  16. data/lib/exlibris/aleph/api/client/record/filters.rb +23 -0
  17. data/lib/exlibris/aleph/api/client/record/holding.rb +23 -0
  18. data/lib/exlibris/aleph/api/client/record/holdings.rb +23 -0
  19. data/lib/exlibris/aleph/api/client/record/item.rb +23 -0
  20. data/lib/exlibris/aleph/api/client/record/items.rb +23 -0
  21. data/lib/exlibris/aleph/api/reader/base.rb +15 -0
  22. data/lib/exlibris/aleph/api/reader/patron.rb +19 -0
  23. data/lib/exlibris/aleph/api/reader/patron/address.rb +90 -0
  24. data/lib/exlibris/aleph/api/reader/patron/record.rb +38 -0
  25. data/lib/exlibris/aleph/api/reader/patron/record/item.rb +77 -0
  26. data/lib/exlibris/aleph/api/reader/patron/record/item/create_hold.rb +33 -0
  27. data/lib/exlibris/aleph/api/reader/patron/record/item/hold.rb +56 -0
  28. data/lib/exlibris/aleph/api/reader/patron/status.rb +33 -0
  29. data/lib/exlibris/aleph/api/reader/record.rb +10 -0
  30. data/lib/exlibris/aleph/api/reader/record/item.rb +45 -0
  31. data/lib/exlibris/aleph/collection.rb +26 -0
  32. data/lib/exlibris/aleph/config.rb +17 -57
  33. data/lib/exlibris/aleph/holding.rb +59 -0
  34. data/lib/exlibris/aleph/holding/metadata.rb +28 -0
  35. data/lib/exlibris/aleph/holdings.rb +51 -0
  36. data/lib/exlibris/aleph/item.rb +138 -0
  37. data/lib/exlibris/aleph/item/call_number.rb +14 -0
  38. data/lib/exlibris/aleph/item/circulation_policy.rb +30 -0
  39. data/lib/exlibris/aleph/item/circulation_policy/display.rb +16 -0
  40. data/lib/exlibris/aleph/item/circulation_policy/identifier.rb +34 -0
  41. data/lib/exlibris/aleph/item/circulation_policy/privileges.rb +72 -0
  42. data/lib/exlibris/aleph/item/circulation_status.rb +31 -0
  43. data/lib/exlibris/aleph/item/display_mask.rb +19 -0
  44. data/lib/exlibris/aleph/item/opac_note.rb +17 -0
  45. data/lib/exlibris/aleph/item/processing_status.rb +23 -0
  46. data/lib/exlibris/aleph/item/queue.rb +32 -0
  47. data/lib/exlibris/aleph/item/status.rb +23 -0
  48. data/lib/exlibris/aleph/items.rb +51 -0
  49. data/lib/exlibris/aleph/metadata.rb +25 -0
  50. data/lib/exlibris/aleph/patron.rb +18 -82
  51. data/lib/exlibris/aleph/patron/address.rb +56 -0
  52. data/lib/exlibris/aleph/patron/circulation_policy.rb +26 -0
  53. data/lib/exlibris/aleph/patron/circulation_policy/identifier.rb +29 -0
  54. data/lib/exlibris/aleph/patron/circulation_policy/privileges.rb +56 -0
  55. data/lib/exlibris/aleph/patron/record.rb +39 -0
  56. data/lib/exlibris/aleph/patron/record/circulation_policy.rb +18 -0
  57. data/lib/exlibris/aleph/patron/record/circulation_policy/privileges.rb +42 -0
  58. data/lib/exlibris/aleph/patron/record/item.rb +63 -0
  59. data/lib/exlibris/aleph/patron/record/item/circulation_policy.rb +21 -0
  60. data/lib/exlibris/aleph/patron/record/item/circulation_policy/privileges.rb +39 -0
  61. data/lib/exlibris/aleph/patron/record/item/create_hold.rb +43 -0
  62. data/lib/exlibris/aleph/patron/record/item/hold.rb +41 -0
  63. data/lib/exlibris/aleph/patron/status.rb +19 -0
  64. data/lib/exlibris/aleph/pickup_location.rb +12 -0
  65. data/lib/exlibris/aleph/record.rb +14 -43
  66. data/lib/exlibris/aleph/record/metadata.rb +8 -0
  67. data/lib/exlibris/aleph/sub_library.rb +30 -0
  68. data/lib/exlibris/aleph/table/base.rb +22 -0
  69. data/lib/exlibris/aleph/table/collections.rb +17 -0
  70. data/lib/exlibris/aleph/table/item/circulation_policies.rb +65 -0
  71. data/lib/exlibris/aleph/table/item/display_masks.rb +19 -0
  72. data/lib/exlibris/aleph/table/patron/circulation_policies.rb +47 -0
  73. data/lib/exlibris/aleph/table/patron/statuses.rb +19 -0
  74. data/lib/exlibris/aleph/table/reader/base.rb +57 -0
  75. data/lib/exlibris/aleph/table/reader/collections.rb +35 -0
  76. data/lib/exlibris/aleph/table/reader/item_circulation_policies.rb +50 -0
  77. data/lib/exlibris/aleph/table/reader/item_display_masks.rb +19 -0
  78. data/lib/exlibris/aleph/table/reader/matcher/base.rb +30 -0
  79. data/lib/exlibris/aleph/table/reader/matcher/collections.rb +17 -0
  80. data/lib/exlibris/aleph/table/reader/matcher/item_circulation_policies.rb +17 -0
  81. data/lib/exlibris/aleph/table/reader/matcher/item_display_masks.rb +17 -0
  82. data/lib/exlibris/aleph/table/reader/matcher/patron_circulation_policies.rb +17 -0
  83. data/lib/exlibris/aleph/table/reader/matcher/patron_statuses.rb +17 -0
  84. data/lib/exlibris/aleph/table/reader/matcher/sub_libraries.rb +17 -0
  85. data/lib/exlibris/aleph/table/reader/patron_circulation_policies.rb +51 -0
  86. data/lib/exlibris/aleph/table/reader/patron_statuses.rb +19 -0
  87. data/lib/exlibris/aleph/table/reader/row/base.rb +25 -0
  88. data/lib/exlibris/aleph/table/reader/row/collections.rb +13 -0
  89. data/lib/exlibris/aleph/table/reader/row/item_circulation_policies.rb +17 -0
  90. data/lib/exlibris/aleph/table/reader/row/item_display_masks.rb +13 -0
  91. data/lib/exlibris/aleph/table/reader/row/patron_circulation_policies.rb +20 -0
  92. data/lib/exlibris/aleph/table/reader/row/patron_statuses.rb +13 -0
  93. data/lib/exlibris/aleph/table/reader/row/sub_libraries.rb +13 -0
  94. data/lib/exlibris/aleph/table/reader/sub_libraries.rb +32 -0
  95. data/lib/exlibris/aleph/table/sub_libraries.rb +11 -0
  96. data/lib/exlibris/aleph/tables_manager.rb +66 -0
  97. data/lib/exlibris/aleph/version.rb +1 -1
  98. data/spec/exlibris/aleph/admin_library_spec.rb +83 -0
  99. data/spec/exlibris/aleph/api/base_spec.rb +23 -0
  100. data/spec/exlibris/aleph/api/client/base_spec.rb +40 -0
  101. data/spec/exlibris/aleph/api/client/patron/address_spec.rb +40 -0
  102. data/spec/exlibris/aleph/api/client/patron/record/item/create_hold/parameters_spec.rb +101 -0
  103. data/spec/exlibris/aleph/api/client/patron/record/item/create_hold_spec.rb +102 -0
  104. data/spec/exlibris/aleph/api/client/patron/record/item/hold_spec.rb +89 -0
  105. data/spec/exlibris/aleph/api/client/patron/record/item_spec.rb +52 -0
  106. data/spec/exlibris/aleph/api/client/patron/record_spec.rb +45 -0
  107. data/spec/exlibris/aleph/api/client/patron/status_spec.rb +40 -0
  108. data/spec/exlibris/aleph/api/client/patron_spec.rb +38 -0
  109. data/spec/exlibris/aleph/api/client/record/filters_spec.rb +46 -0
  110. data/spec/exlibris/aleph/api/client/record/holding_spec.rb +41 -0
  111. data/spec/exlibris/aleph/api/client/record/holdings_spec.rb +46 -0
  112. data/spec/exlibris/aleph/api/client/record/item_spec.rb +41 -0
  113. data/spec/exlibris/aleph/api/client/record/items_spec.rb +46 -0
  114. data/spec/exlibris/aleph/api/client/record_spec.rb +43 -0
  115. data/spec/exlibris/aleph/api/reader/base_spec.rb +18 -0
  116. data/spec/exlibris/aleph/api/reader/patron/address_spec.rb +151 -0
  117. data/spec/exlibris/aleph/api/reader/patron/record/item/create_hold_spec.rb +65 -0
  118. data/spec/exlibris/aleph/api/reader/patron/record/item/hold_spec.rb +145 -0
  119. data/spec/exlibris/aleph/api/reader/patron/record/item_spec.rb +266 -0
  120. data/spec/exlibris/aleph/api/reader/patron/record_spec.rb +98 -0
  121. data/spec/exlibris/aleph/api/reader/patron/status_spec.rb +57 -0
  122. data/spec/exlibris/aleph/api/reader/patron_spec.rb +28 -0
  123. data/spec/exlibris/aleph/api/reader/record/item_spec.rb +178 -0
  124. data/spec/exlibris/aleph/collection_spec.rb +95 -0
  125. data/spec/exlibris/aleph/config_spec.rb +17 -0
  126. data/spec/exlibris/aleph/holding/metadata_spec.rb +57 -0
  127. data/spec/exlibris/aleph/holding_spec.rb +53 -0
  128. data/spec/exlibris/aleph/holdings_spec.rb +59 -0
  129. data/spec/exlibris/aleph/item/call_number_spec.rb +20 -0
  130. data/spec/exlibris/aleph/item/circulation_policy/display_spec.rb +33 -0
  131. data/spec/exlibris/aleph/item/circulation_policy/identifier_spec.rb +154 -0
  132. data/spec/exlibris/aleph/item/circulation_policy/privileges_spec.rb +183 -0
  133. data/spec/exlibris/aleph/item/circulation_policy_spec.rb +146 -0
  134. data/spec/exlibris/aleph/item/circulation_status_spec.rb +83 -0
  135. data/spec/exlibris/aleph/item/display_mask_spec.rb +72 -0
  136. data/spec/exlibris/aleph/item/opac_note_spec.rb +19 -0
  137. data/spec/exlibris/aleph/item/processing_status_spec.rb +75 -0
  138. data/spec/exlibris/aleph/item/queue_spec.rb +31 -0
  139. data/spec/exlibris/aleph/item/status_spec.rb +80 -0
  140. data/spec/exlibris/aleph/item_spec.rb +97 -0
  141. data/spec/exlibris/aleph/items_spec.rb +59 -0
  142. data/spec/exlibris/aleph/metadata_spec.rb +118 -0
  143. data/spec/exlibris/aleph/patron/address_spec.rb +68 -0
  144. data/spec/exlibris/aleph/patron/circulation_policy/identifier_spec.rb +115 -0
  145. data/spec/exlibris/aleph/patron/circulation_policy/privileges_spec.rb +128 -0
  146. data/spec/exlibris/aleph/patron/circulation_policy_spec.rb +119 -0
  147. data/spec/exlibris/aleph/patron/record/circulation_policy/privileges_spec.rb +88 -0
  148. data/spec/exlibris/aleph/patron/record/circulation_policy_spec.rb +37 -0
  149. data/spec/exlibris/aleph/patron/record/item/circulation_policy/privileges_spec.rb +76 -0
  150. data/spec/exlibris/aleph/patron/record/item/circulation_policy_spec.rb +52 -0
  151. data/spec/exlibris/aleph/patron/record/item/create_hold_spec.rb +49 -0
  152. data/spec/exlibris/aleph/patron/record/item/hold_spec.rb +41 -0
  153. data/spec/exlibris/aleph/patron/record/item_spec.rb +64 -0
  154. data/spec/exlibris/aleph/patron/record_spec.rb +30 -0
  155. data/spec/exlibris/aleph/patron/status_spec.rb +72 -0
  156. data/spec/exlibris/aleph/patron_spec.rb +28 -0
  157. data/spec/exlibris/aleph/pickup_location_spec.rb +19 -0
  158. data/spec/exlibris/aleph/record/metadata_spec.rb +120 -0
  159. data/spec/exlibris/aleph/record_spec.rb +44 -0
  160. data/spec/exlibris/aleph/sub_library_spec.rb +110 -0
  161. data/spec/exlibris/aleph/table/base_spec.rb +17 -0
  162. data/spec/exlibris/aleph/table/collections_spec.rb +24 -0
  163. data/spec/exlibris/aleph/table/item/circulation_policies_spec.rb +65 -0
  164. data/spec/exlibris/aleph/table/item/display_masks_spec.rb +26 -0
  165. data/spec/exlibris/aleph/table/patron/circulation_policies_spec.rb +47 -0
  166. data/spec/exlibris/aleph/table/patron/statuses_spec.rb +26 -0
  167. data/spec/exlibris/aleph/table/reader/base_spec.rb +28 -0
  168. data/spec/exlibris/aleph/table/reader/collections_spec.rb +33 -0
  169. data/spec/exlibris/aleph/table/reader/item_circulation_policies_spec.rb +33 -0
  170. data/spec/exlibris/aleph/table/reader/item_display_masks_spec.rb +27 -0
  171. data/spec/exlibris/aleph/table/reader/matcher/base_spec.rb +32 -0
  172. data/spec/exlibris/aleph/table/reader/matcher/collections_spec.rb +39 -0
  173. data/spec/exlibris/aleph/table/reader/matcher/item_circulation_policies_spec.rb +39 -0
  174. data/spec/exlibris/aleph/table/reader/matcher/item_display_masks_spec.rb +40 -0
  175. data/spec/exlibris/aleph/table/reader/matcher/patron_circulation_policies_spec.rb +40 -0
  176. data/spec/exlibris/aleph/table/reader/matcher/patron_statuses_spec.rb +40 -0
  177. data/spec/exlibris/aleph/table/reader/matcher/sub_libraries_spec.rb +40 -0
  178. data/spec/exlibris/aleph/table/reader/patron_circulation_policies_spec.rb +27 -0
  179. data/spec/exlibris/aleph/table/reader/patron_statuses_spec.rb +27 -0
  180. data/spec/exlibris/aleph/table/reader/row/base_spec.rb +20 -0
  181. data/spec/exlibris/aleph/table/reader/row/collections_spec.rb +37 -0
  182. data/spec/exlibris/aleph/table/reader/row/item_circulation_policies_spec.rb +89 -0
  183. data/spec/exlibris/aleph/table/reader/row/item_display_masks_spec.rb +29 -0
  184. data/spec/exlibris/aleph/table/reader/row/patron_circulation_policies_spec.rb +115 -0
  185. data/spec/exlibris/aleph/table/reader/row/patron_statuses_spec.rb +29 -0
  186. data/spec/exlibris/aleph/table/reader/row/sub_libraries_spec.rb +41 -0
  187. data/spec/exlibris/aleph/table/reader/sub_libraries_spec.rb +36 -0
  188. data/spec/exlibris/aleph/table/sub_libraries_spec.rb +19 -0
  189. data/spec/exlibris/aleph/tables_manager_spec.rb +120 -0
  190. data/spec/exlibris/aleph_spec.rb +5 -0
  191. data/spec/spec_helper.rb +27 -0
  192. data/spec/support/mnt/aleph_tab/adm50/tab/filename +0 -0
  193. data/{test → spec/support}/mnt/aleph_tab/alephe/tab/tab_sub_library.eng +0 -0
  194. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/pc_tab_exp_field_extended.eng +0 -0
  195. data/{test/mnt/aleph_tab → spec/support/mnt/aleph_tab/nyu50/tab}/tab15.eng +2 -0
  196. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/tab16 +0 -0
  197. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/tab31 +0 -0
  198. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/tab37 +0 -0
  199. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/tab40.eng +0 -0
  200. data/{test → spec/support}/mnt/aleph_tab/nyu50/tab/tab_www_item_desc.eng +0 -0
  201. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/pc_tab_exp_field_extended.eng +0 -0
  202. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab15.eng +0 -0
  203. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab16 +0 -0
  204. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab31 +0 -0
  205. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab37 +0 -0
  206. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab40.eng +0 -0
  207. data/{test → spec/support}/mnt/aleph_tab/nyu51/tab/tab_www_item_desc.eng +0 -0
  208. data/spec/vcr_cassettes/patron.yml +1443 -0
  209. data/spec/vcr_cassettes/record.yml +763 -0
  210. metadata +351 -165
  211. data/lib/exlibris/aleph/abstract.rb +0 -28
  212. data/lib/exlibris/aleph/rest/base.rb +0 -56
  213. data/lib/exlibris/aleph/tab_helper.rb +0 -303
  214. data/lib/exlibris/aleph/tabs_parser/base.rb +0 -49
  215. data/lib/exlibris/aleph/tabs_parser/pc_tab_exp_field_extended.rb +0 -20
  216. data/lib/exlibris/aleph/tabs_parser/sub_library.rb +0 -32
  217. data/lib/exlibris/aleph/tabs_parser/tab15_by_item_process_status.rb +0 -33
  218. data/lib/exlibris/aleph/tabs_parser/tab15_by_item_status.rb +0 -33
  219. data/lib/exlibris/aleph/tabs_parser/tab31.rb +0 -39
  220. data/lib/exlibris/aleph/tabs_parser/tab37.rb +0 -63
  221. data/lib/exlibris/aleph/tabs_parser/tab40.rb +0 -20
  222. data/lib/exlibris/aleph/tabs_parser/tab_sub_library.rb +0 -21
  223. data/lib/exlibris/aleph/tabs_parser/tab_www_item_desc.rb +0 -20
  224. data/lib/exlibris/aleph/task_installer.rb +0 -25
  225. data/lib/exlibris/aleph/write_attributes.rb +0 -38
  226. data/lib/exlibris/aleph/xml_util.rb +0 -50
  227. data/lib/exlibris/aleph/xservice/bor_auth.rb +0 -47
  228. data/lib/tasks/exlibris-aleph_tasks.rake +0 -48
  229. data/test/config/aleph/alephe/sub_libraries.yml +0 -801
  230. data/test/config/aleph/nyu50/collections.yml +0 -1168
  231. data/test/config/aleph/nyu50/item_permissions_by_item_process_status.yml +0 -61876
  232. data/test/config/aleph/nyu50/item_permissions_by_item_status.yml +0 -17319
  233. data/test/config/aleph/nyu50/items.yml +0 -617
  234. data/test/config/aleph/nyu50/patron_permissions.yml +0 -19720
  235. data/test/config/aleph/nyu50/patrons.yml +0 -249
  236. data/test/config/aleph/nyu50/pickup_locations.yml +0 -2910
  237. data/test/config/aleph/nyu51/collections.yml +0 -41
  238. data/test/config/aleph/nyu51/item_permissions_by_item_process_status.yml +0 -7689
  239. data/test/config/aleph/nyu51/item_permissions_by_item_status.yml +0 -430
  240. data/test/config/aleph/nyu51/items.yml +0 -617
  241. data/test/config/aleph/nyu51/patron_permissions.yml +0 -6588
  242. data/test/config/aleph/nyu51/patrons.yml +0 -237
  243. data/test/config/aleph/nyu51/pickup_locations.yml +0 -456
  244. data/test/config_test.rb +0 -24
  245. data/test/exlibris-aleph_test.rb +0 -7
  246. data/test/mnt/aleph_tab/nyu50/tab/tab15.eng +0 -4742
  247. data/test/mnt/aleph_tab/pc_tab_exp_field_extended.eng +0 -158
  248. data/test/mnt/aleph_tab/tab16 +0 -3792
  249. data/test/mnt/aleph_tab/tab31 +0 -998
  250. data/test/mnt/aleph_tab/tab37 +0 -405
  251. data/test/mnt/aleph_tab/tab40.eng +0 -335
  252. data/test/mnt/aleph_tab/tab_sub_library.eng +0 -378
  253. data/test/mnt/aleph_tab/tab_www_item_desc.eng +0 -208
  254. data/test/patron_test.rb +0 -98
  255. data/test/record_benchmarks.rb +0 -26
  256. data/test/record_test.rb +0 -64
  257. data/test/support/config.yml +0 -2
  258. data/test/tab_helper_benchmarks.rb +0 -53
  259. data/test/tab_helper_test.rb +0 -192
  260. data/test/test_helper.rb +0 -46
  261. data/test/vcr_cassettes/bor_auth.yml +0 -42
  262. data/test/vcr_cassettes/patron.yml +0 -142
  263. data/test/vcr_cassettes/patron_address.yml +0 -45
  264. data/test/vcr_cassettes/patron_bogus_url.yml +0 -731
  265. data/test/vcr_cassettes/patron_error.yml +0 -93
  266. data/test/vcr_cassettes/record.yml +0 -146
  267. data/test/vcr_cassettes/record_bogus_url.yml +0 -690
  268. data/test/xservice/bor_auth_test.rb +0 -28
data/README.md CHANGED
@@ -7,87 +7,204 @@
7
7
  # Exlibris::Aleph
8
8
  Exlibris::Aleph offers a set of libraries for interacting with the ExLibris Aleph ILS.
9
9
 
10
- ## Exlibris::Aleph::Patron
11
- Exlibris::Aleph::Patron provides access to the Aleph Patron REST API.
12
-
13
- ### Example of Exlibris::Aleph::Patron in action
14
- patron =
15
- Exlibris::Aleph::Patron.
16
- new(patron_id: "S0M31D", rest_url: "http://aleph.institution.edu")
17
- patron.address # Returns a Hash of the of patron's address
18
- patron.loans # Returns an Array of institution Hashes, each containing an Array of the patron's loans for that institution
19
- patron.renew_loans # Renews all loans
20
- patron.renew_loans("ADM5000000001") # Renews loan of item 00000001 in ADM50
21
- patron.place_hold("ADM50", "SBLIB", "00000001", "00000001", {:pickup_location => "SBLIB"}) # Places hold on the specified item for pickup at SBLIB
10
+ ## Config
11
+ There are several configuration options
12
+ - `base_url`: a String representing the base url for Aleph, e.g. http://aleph.library.edu
13
+ - `rest_url`: a String representing rest url for the Aleph REST API, e.g. http://aleph.library.edu:1891
14
+ - `adms`: an Array of administrative library codes, e.g. ['ADM50', 'ADM51']
15
+ - `table_path`: the path to the Aleph tables on the system
16
+ - `irrelevant_sub_libraries`: an Array or Sub Library codes to ignore
17
+
18
+ An example:
19
+
20
+ ```ruby
21
+ Exlibris::Aleph.configure do |config|
22
+ config.base_url = 'http://aleph.library.edu'
23
+ config.rest_url = 'http://aleph.library.edu:1891'
24
+ config.adms = ['ADM50', 'ADM51']
25
+ config.table_path = "/mnt/aleph_tab"
26
+ end
27
+
28
+ ```
29
+
30
+ ## Basic Concepts
31
+ - `AdminLibrary`: an administrative library
32
+ ```ruby
33
+ admin_library = AdminLibrary.new('ADM50')
34
+ # => Exlibris::Aleph::AdminLibrary
35
+
36
+ admin_library.code
37
+ # => 'ADM50'
38
+ ```
39
+ - `SubLibrary`: a sub library
40
+ ```ruby
41
+ sub_library = SubLibrary.new('SUB', 'Sub Library', admin_library)
42
+ # => Exlibris::Aleph::SubLibrary
43
+
44
+ sub_library.code
45
+ # => 'SUB'
46
+
47
+ sub_library.display
48
+ # => 'Sub Library'
49
+
50
+ sub_library.admin_library
51
+ # => Exlibris::Aleph::AdminLibrary
52
+ ```
53
+ - `Collection`: a collection
54
+ ```ruby
55
+ collection = Collection.new('MAIN', 'Main Collection', sub_library)
56
+ # => Exlibris::Aleph::Collection
57
+
58
+ collection.code
59
+ # => 'MAIN'
60
+
61
+ collection.display
62
+ # => 'Main Collection'
63
+
64
+ collection.sub_library
65
+ # => Exlibris::Aleph::SubLibrary
66
+ ```
67
+ - `PickupLocation`: a pickup location
68
+ - `Patron::Status`: a patron status
69
+ ```ruby
70
+ patron_status = Exlibris::Aleph::Patron::Status.new('01', 'Regular patron')
71
+ # => Exlibris::Aleph::Patron::Status
72
+
73
+ patron_status.code
74
+ # => '01'
75
+
76
+ patron_status.display
77
+ # => 'Regular patron'
78
+ ```
79
+ - `Item::Status`: an item status
80
+ ```ruby
81
+ item_status = Exlibris::Aleph::Item::Status.new('01', 'Regular loan')
82
+ # => Exlibris::Aleph::Item::Status
83
+
84
+ item_status.code
85
+ # => '01'
86
+
87
+ item_status.display
88
+ # => 'Regular loan'
89
+ ```
90
+ - `Item::ProcessingStatus`: an item circulation status
91
+ ```ruby
92
+ processing_status = Exlibris::Aleph::Item::ProcessingStatus.new('DP', 'Depository')
93
+ # => Exlibris::Aleph::Item::ProcessingStatus
94
+
95
+ processing_status.code
96
+ # => 'DP'
97
+
98
+ processing_status.display
99
+ # => 'Depository'
100
+ ```
101
+ - `Item::CirculationStatus`
102
+ - `Item::CallNumber`
103
+
104
+ ## Record
105
+ The primary interface for an Aleph record
106
+
107
+ An example:
108
+
109
+ ```ruby
110
+ record_id = '000000001'
111
+
112
+ admin_library = Exlibris::Aleph::AdminLibrary.new('BIB01')
113
+ # => Exlibris::Aleph::AdminLibrary
114
+
115
+ record = Exlibris::Aleph::Record.new(record_id, admin_library)
116
+ # => Exlibris::Aleph::Record
117
+
118
+ bibliographic_metadata = record.metadata
119
+ # => Exlibris::Aleph::Record::Metadata
120
+
121
+ bibliographic_marc_record = bibliographic_metadata.marc_record
122
+ # => returns a MARC::Record
123
+
124
+ holdings = record.holdings
125
+ # => Exlibris::Aleph::Holdings
126
+
127
+ holdings.each do |holding|
128
+
129
+ holding.is_a?(Exlibris::Aleph::Holding)
130
+ # => true
22
131
 
23
- ## Exlibris::Aleph::Record
24
- Provides access to the Aleph Record REST API.
25
-
26
- ### Example of Exlibris::Aleph::Record in action
27
- record =
28
- Exlibris::Aleph::Record.
29
- new(bib_library: "ADM50", record_id: "00000001", rest_url: "http://aleph.institution.edu")
30
- record.bib # Returns a MARC::Record with bibliographic metadata
31
- record.holdings # Returns and Array of MARC::Records respresenting the record's holdings
32
- record.items # Returns and Array of Hashes representing the record's items
33
-
34
- ## Exlibris::Aleph.configure
35
- Exlibris::Aleph can be configured at startup in an initializer.
36
-
37
- # Placed this in an initializer.
38
- Exlibris::Aleph.configure { |c|
39
- c.base_url = "http://aleph.institution.edu"
40
- c.tab_path = "/mnt/aleph_tab"
41
- c.adms = ["ADM50", "ADM51"]
42
- }
43
-
44
- It can also read from a yaml file.
45
-
46
- # Placed this in an initializer.
47
- Exlibris::Aleph.configure { |c|
48
- config.load_yaml File.expand_path("#{File.dirname(__FILE__)}/../config/aleph.yml", __FILE__)
49
- }
50
-
51
- ## Exlibris::Aleph::TabHelper
52
- Exlibris::Aleph::TabHelper provides a way to access the various tab settings for patrons, patron\_permissions, items, item_permission (both by item status and by item processing status), collections and pickup locations. It also provides convenience methods for common tasks like getting the pickup location for a given combination of item status, item process status and borrower status or getting an item's web text. Support a
53
-
54
- ### Example of Exlibris::Aleph::TabHelper in action
55
- # Placed this in an initializer.
56
- Exlibris::Aleph.configure { |c|
57
- c.tab_path = "/mnt/aleph_tab"
58
- c.adms = ["ADM50", "ADM51"]
59
- }
60
-
61
- # Rake task to refresh the config yml files
62
- rake exlibris:aleph:refresh
63
-
64
- # Get an instance of TabHelper
65
- helper = Exlibris::Aleph::TabHelper.instance
66
- helper.sub_library_text("SBLIB") # Returns display text for the give code
67
- helper.sub_library_adm("SBLIB") # Returns ADM for the give code
68
- helper.item_pickup_locations({:adm_library_code => "ADM50", :sub_library_code => "SBLIB", :bor_status => "51"}) # Returns the pickup locations for the given parameters
69
- helper.collection_text({:adm_library_code => "ADM50", :sub_library_code => "SBLIB", :collection_code => "MAIN"}) # Returns the collection display text for the give parameters
70
- helper.item_web_text({:adm_library_code => "ADM50", :item_process_status => "Item Process Status"}) # Returns the web text for the given parameters
71
- helper.item_web_text({:adm_library_code => "ADM50", :sub_library_code => "SBLIB", :item_process_status_code => "DP"}) # Returns the web text for the given parameters
72
-
73
- ### Configure irrelevant sub libraries for TabHelper
74
- To configure the gem to ignore sub libraries pulled from Aleph but not relevant to working with permissions call the following setter with an array of sub library Aleph codes.
75
-
76
- # Place this in an initializer to replace the current irrelevant sub libraries.
77
- Exlibris::Aleph.configure { |c|
78
- c.irrelevant_sub_libraries = ["IRRLIB1", "IRRLIB2"]
79
- }
80
-
81
- ## Rake task
82
- Exlibris::Aleph has a rake task that refreshes the mounted tables. Outside of Rails add `require 'exlibris-aleph'` to your Rakefile.
83
- Inside of Rails it should just work.
84
-
85
- ## Exlibris::Aleph::BorAuth
86
- Exlibris::Aleph::BorAuth provides access to the BorAuth Aleph XService.
87
-
88
- ### Example of Exlibris::Aleph::BorAuth in action
89
- bor_auth =
90
- Exlibris::Aleph::BorAuth.
91
- new("http://aleph.institution.edu", "ADM50", "SBLIB", "N", "S0M31D", "V3R1F1C@T10N")
92
- permissions = bor_auth.permissions # Return a Hash of permissions based on the Exlibris::Aleph::BorAuth instance
132
+ holding_metadata = holding.metadata
133
+ # => Exlibris::Aleph::Holding::Metadata
134
+
135
+ holding_marc_record = holding_metadata.marc_record
136
+ # => returns a MARC::Record
137
+ end
138
+
139
+ items = record.items
140
+ # => Exlibris::Aleph::Items
141
+
142
+ items.each do |item|
143
+
144
+ item.is_a?(Exlibris::Aleph::Item)
145
+ # => true
146
+
147
+ item_collection = item.collection
148
+ # => Exlibris::Aleph::Collection
149
+
150
+ item_status = item.status
151
+ # => Exlibris::Aleph::Item::Status
152
+
153
+ item_processing_status = item.processing_status
154
+ # => Exlibris::Aleph::Item::ProcessingStatus
155
+
156
+ item_circulation_status = item.circulation_status
157
+ # => Exlibris::Aleph::Item::CirculationStatus
158
+
159
+ item_call_number = item.call_number
160
+ # => Exlibris::Aleph::Item::CallNumber
161
+
162
+ item_opac_note = item.opac_note
163
+ # => Exlibris::Aleph::Item::OpacNote
164
+
165
+ item_queue = item.queue
166
+ # => Exlibris::Aleph::Item::Queue
167
+
168
+ item_on_shelf = item.on_shelf?
169
+ # => true
170
+ end
171
+ ```
172
+
173
+ ## Patron
174
+ The primary interface for an Aleph patron
175
+
176
+ An example:
177
+
178
+ ```ruby
179
+ patron_id = 'N1234567890'
180
+
181
+ patron = Exlibris::Aleph::Patron.new(patron_id)
182
+ # => Exlibris::Aleph::Patron
183
+
184
+ address = patron.address
185
+ # => Exlibris::Aleph::Patron::Address
186
+
187
+ record_id = 'BIB01000000001'
188
+
189
+ patron_record = patron.record(record_id)
190
+ # => Exlibris::Aleph::Patron::Record
191
+
192
+ patron_record_circulation_policy = patron_record.circulation_policy
193
+ # => Exlibris::Aleph::Patron::Record::CirculationPolicy
194
+
195
+ item_id = 'ADM5000000000101'
196
+
197
+ patron_record_item = patron_record.item(item_id)
198
+ # => Exlibris::Aleph::Patron::Record::Item
199
+
200
+ patron_record_item_item = patron_record_item.item
201
+ # => Exlibris::Aleph::Item
202
+
203
+ patron_record_item_circulation_policy = patron_record_item.circulation_policy
204
+ # => Exlibris::Aleph::Patron::Record::Item::CirculationPolicy
205
+
206
+ ```
207
+
208
+ ## Tables
209
+ `Tables` are accessed through the `TablesManager`.
93
210
 
data/Rakefile CHANGED
@@ -1,18 +1,12 @@
1
1
  #!/usr/bin/env rake
2
- begin
3
- require 'bundler/setup'
4
- rescue LoadError
5
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
- end
7
- Bundler::GemHelper.install_tasks
2
+ #!/usr/bin/env rake
3
+ require 'bundler/gem_tasks'
8
4
 
9
- require 'rake/testtask'
10
- Rake::TestTask.new(:test) do |t|
11
- t.libs << 'lib'
12
- t.libs << 'test'
13
- t.pattern = 'test/**/*_test.rb'
14
- t.verbose = false
15
- end
16
- task :default => :test
5
+ # Add the RSpec rake tasks tasks and append to default
6
+ require 'rspec/core/rake_task'
7
+ desc 'Default: run specs'
8
+ task :default => :spec
9
+ desc "Run specs"
10
+ RSpec::Core::RakeTask.new
17
11
 
18
12
  require 'exlibris-aleph'
@@ -1,6 +1,3 @@
1
- # Leverage ActiveSupport core extensions
2
- require 'active_support/core_ext'
3
- require 'active_support/builder'
4
1
  require 'marc'
5
2
  require "require_all"
6
3
  require_all "#{File.dirname(__FILE__)}/exlibris/"
@@ -0,0 +1,27 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class AdminLibrary
4
+ attr_reader :code
5
+
6
+ def initialize(code)
7
+ unless code.is_a?(String)
8
+ raise ArgumentError.new("Expecting #{code} to be a String")
9
+ end
10
+ @code = code
11
+ end
12
+
13
+ def normalized_code
14
+ @normalized_code ||= code.downcase
15
+ end
16
+
17
+ def ==(other_object)
18
+ other_object.instance_of?(self.class) && code == other_object.code
19
+ end
20
+ alias_method :eql?, :==
21
+
22
+ def hash
23
+ code.hash
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module API
4
+ class Base
5
+ extend Forwardable
6
+
7
+ protected
8
+ def client
9
+ raise RuntimeError.new('Should be implmented in sub classes')
10
+ end
11
+
12
+ def reader
13
+ @reader ||= reader_constant.new(client.root)
14
+ end
15
+
16
+ private
17
+ def reader_constant
18
+ eval("Reader::#{demodulized_class_name}")
19
+ end
20
+
21
+ def demodulized_class_name
22
+ @demodulized_class_name ||= self.class.name.split('::').last
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,86 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module API
4
+ module Client
5
+ require 'faraday'
6
+ require 'multi_xml'
7
+ class Base
8
+
9
+ DEFAULT_REQUEST_METHOD = :get
10
+
11
+ VALID_VIEWS = ['full', 'brief']
12
+
13
+ attr_reader :query
14
+
15
+ def initialize(query={})
16
+ unless query.is_a?(Hash)
17
+ raise ArgumentError.new("Expecting #{query} to be a Hash")
18
+ end
19
+ view = query[:view]
20
+ unless view.nil? || VALID_VIEWS.include?(view)
21
+ raise ArgumentError.new("Expecting #{view} to be one of #{VALID_VIEWS.join(', ')}")
22
+ end
23
+ @query ||= query.map { |key, value| "#{key}=#{value}"}.join('&')
24
+ end
25
+
26
+ def error?
27
+ reply_code != '0000'
28
+ end
29
+
30
+ def reply_code
31
+ @reply_code ||= root['reply_code']
32
+ end
33
+
34
+ def reply_text
35
+ @reply_text ||= root['reply_text']
36
+ end
37
+
38
+ def root
39
+ @root ||= to_h[root_key]
40
+ end
41
+
42
+ def to_h
43
+ @hash ||= MultiXml.parse(to_xml)
44
+ end
45
+
46
+ def to_xml
47
+ @xml ||= body.to_s
48
+ end
49
+
50
+ protected
51
+ def path
52
+ @path ||= '/rest-dlf'
53
+ end
54
+
55
+ private
56
+ def root_key
57
+ @root_key ||= to_h.keys.first
58
+ end
59
+
60
+ def body
61
+ @body ||= response.body
62
+ end
63
+
64
+ def response
65
+ @response ||= send(request_method)
66
+ end
67
+
68
+ def get
69
+ connection.get("#{path}?#{query}")
70
+ end
71
+
72
+ def request_method
73
+ @request_method ||= DEFAULT_REQUEST_METHOD
74
+ end
75
+
76
+ def connection
77
+ @connection ||= Faraday.new(url: rest_url)
78
+ end
79
+ def rest_url
80
+ @rest_url ||= Config.rest_url
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end