exlibris-aleph 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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