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
@@ -0,0 +1,39 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ attr_reader :patron_id, :id
6
+
7
+ def initialize(patron_id, id)
8
+ @patron_id = patron_id
9
+ @id = id
10
+ end
11
+
12
+ def circulation_policy
13
+ @circulation_policy ||= CirculationPolicy.new(privileges)
14
+ end
15
+
16
+ def item(item_id)
17
+ Item.new(patron_id, id, item_id)
18
+ end
19
+
20
+ private
21
+ def privileges
22
+ @privileges ||= CirculationPolicy::Privileges.new(reader)
23
+ end
24
+
25
+ def client
26
+ @client ||= API::Client::Patron::Record.new(patron_id, id)
27
+ end
28
+
29
+ def root
30
+ @root ||= client.root
31
+ end
32
+
33
+ def reader
34
+ @reader ||= API::Reader::Patron::Record.new(root)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class CirculationPolicy
6
+ attr_reader :privileges
7
+
8
+ def initialize(privileges)
9
+ unless privileges.is_a?(Privileges)
10
+ raise ArgumentError.new("Expecting #{privileges} to be a Privileges")
11
+ end
12
+ @privileges = privileges
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class CirculationPolicy
6
+ class Privileges
7
+ attr_reader :hold_request, :short_loan, :ill,
8
+ :booking_request, :acquisition_request
9
+
10
+ def initialize(privileges)
11
+ @hold_request = privileges.hold_request
12
+ @short_loan = privileges.short_loan
13
+ @ill = privileges.ill
14
+ @booking_request = privileges.booking_request
15
+ @acquisition_request = privileges.acquisition_request
16
+ end
17
+
18
+ def hold_request?
19
+ hold_request == 'Y'
20
+ end
21
+
22
+ def short_loan?
23
+ short_loan == 'Y'
24
+ end
25
+
26
+ def ill?
27
+ ill == 'Y'
28
+ end
29
+
30
+ def booking_request?
31
+ booking_request == 'Y'
32
+ end
33
+
34
+ def acquisition_request?
35
+ acquisition_request == 'Y'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,63 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class Item
6
+ attr_reader :patron_id, :record_id, :id
7
+
8
+ def initialize(patron_id, record_id, id)
9
+ @patron_id = patron_id
10
+ @record_id = record_id
11
+ @id = id
12
+ end
13
+
14
+ def item
15
+ @item ||= Aleph::Item.new(record_id, id).tap do |item|
16
+ client = self.send(:client)
17
+ root = self.send(:root)
18
+ reader = self.send(:reader)
19
+ item.instance_eval { instance_variable_set(:@client, client) }
20
+ item.instance_eval { instance_variable_set(:@root, root) }
21
+ item.instance_eval { instance_variable_set(:@reader, reader) }
22
+ end
23
+ end
24
+
25
+ def circulation_policy
26
+ @circulation_policy ||=
27
+ CirculationPolicy.new(privileges, *pickup_locations)
28
+ end
29
+
30
+ def hold
31
+ @hold ||= Hold.new(patron_id, record_id, id)
32
+ end
33
+
34
+ def create_hold(parameters)
35
+ CreateHold.new(patron_id, record_id, id, parameters)
36
+ end
37
+
38
+ private
39
+ def privileges
40
+ @privileges ||= CirculationPolicy::Privileges.new(reader)
41
+ end
42
+
43
+ def pickup_locations
44
+ @pickup_locations ||= reader.pickup_locations
45
+ end
46
+
47
+ def client
48
+ @client ||=
49
+ API::Client::Patron::Record::Item.new(patron_id, record_id, id)
50
+ end
51
+
52
+ def root
53
+ @root ||= client.root
54
+ end
55
+
56
+ def reader
57
+ @reader ||= API::Reader::Patron::Record::Item.new(root)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,21 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class Item
6
+ class CirculationPolicy
7
+ attr_reader :privileges, :pickup_locations
8
+
9
+ def initialize(privileges, *pickup_locations)
10
+ unless privileges.is_a?(Privileges)
11
+ raise ArgumentError.new("Expecting #{privileges} to be a Privileges")
12
+ end
13
+ @privileges = privileges
14
+ @pickup_locations = pickup_locations
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,39 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class Item
6
+ class CirculationPolicy
7
+ class Privileges
8
+ attr_reader :hold_request, :short_loan, :photocopy_request,
9
+ :booking_request
10
+
11
+ def initialize(privileges)
12
+ @hold_request = privileges.hold_request
13
+ @short_loan = privileges.short_loan
14
+ @photocopy_request = privileges.photocopy_request
15
+ @booking_request = privileges.booking_request
16
+ end
17
+
18
+ def hold_request?
19
+ hold_request == 'Y'
20
+ end
21
+
22
+ def short_loan?
23
+ short_loan == 'Y'
24
+ end
25
+
26
+ def photocopy_request?
27
+ photocopy_request == 'Y'
28
+ end
29
+
30
+ def booking_request?
31
+ booking_request == 'Y'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class Item
6
+ class CreateHold
7
+ attr_reader :patron_id, :record_id, :item_id, :parameters
8
+
9
+ def initialize(patron_id, record_id, item_id, parameters)
10
+ @patron_id = patron_id
11
+ @record_id = record_id
12
+ @item_id = item_id
13
+ @parameters =
14
+ API::Client::Patron::Record::Item::CreateHold::Parameters.new(parameters)
15
+ end
16
+
17
+ def note
18
+ @note ||= reader.note
19
+ end
20
+
21
+ def error?
22
+ reader.type == 'error'
23
+ end
24
+
25
+ private
26
+ def client
27
+ @client ||=
28
+ API::Client::Patron::Record::Item::CreateHold.new(patron_id, record_id, item_id, parameters)
29
+ end
30
+
31
+ def root
32
+ @root ||= client.root
33
+ end
34
+
35
+ def reader
36
+ @reader ||= API::Reader::Patron::Record::Item::CreateHold.new(root)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Record
5
+ class Item
6
+ class Hold
7
+ attr_reader :patron_id, :record_id, :item_id
8
+
9
+ def initialize(patron_id, record_id, item_id)
10
+ @patron_id = patron_id
11
+ @record_id = record_id
12
+ @item_id = item_id
13
+ end
14
+
15
+ def pickup_locations
16
+ @pickup_locations ||= reader.pickup_locations
17
+ end
18
+
19
+ def allowed?
20
+ reader.allowed == 'Y'
21
+ end
22
+
23
+ private
24
+ def client
25
+ @client ||=
26
+ API::Client::Patron::Record::Item::Hold.new(patron_id, record_id, item_id)
27
+ end
28
+
29
+ def root
30
+ @root ||= client.root
31
+ end
32
+
33
+ def reader
34
+ @reader ||= API::Reader::Patron::Record::Item::Hold.new(root)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Patron
4
+ class Status
5
+ attr_reader :code, :display
6
+
7
+ def initialize(code, display=nil)
8
+ @code = code
9
+ @display = display
10
+ end
11
+
12
+ def ==(other_object)
13
+ other_object.instance_of?(self.class) && code == other_object.code
14
+ end
15
+ alias_method :eql?, :==
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class PickupLocation
4
+ attr_reader :code, :display
5
+
6
+ def initialize(code, display)
7
+ @code = code
8
+ @display = display
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,58 +1,29 @@
1
1
  module Exlibris
2
2
  module Aleph
3
- require 'marc'
4
- # ==Overview
5
- # Provides access to the Aleph Record REST API.
6
- class Record < Rest::Base
7
- attr_accessor :bib_library, :record_id
3
+ class Record
8
4
 
9
- def initialize(*args)
10
- super
11
- end
5
+ attr_reader :id
12
6
 
13
- # Returns a MARC::Record that contains the bib data
14
- # Every method call refreshes the data from the underlying API.
15
- # Raises an exception if the response is not valid XML or there are errors.
16
- def bib
17
- self.response = self.class.get("#{record_url}?view=full")
18
- raise_error_if("Error getting bib from Aleph REST APIs.") {
19
- (response.parsed_response["get_record"].nil? or response.parsed_response["get_record"]["record"].nil?)
20
- }
21
- MARC::XMLReader.new(StringIO.new(xml(xml: response.body).at_xpath("get-record/record").to_xml(xml_options).strip)).first
7
+ def initialize(id)
8
+ @id = id
22
9
  end
23
10
 
24
- # Returns an array of items. Each item is represented as a Hash.
25
- # Every method call refreshes the data from the underlying API.
26
- # Raises an exception if the response is not valid XML or there are errors.
27
- def items
28
- # Since we're parsing xml, this will raise an error
29
- # if the response isn't xml.
30
- self.response = self.class.get("#{record_url}/items?view=full")
31
- raise_error_if("Error getting items from Aleph REST APIs.") {
32
- (response.parsed_response["get_item_list"].nil? or response.parsed_response["get_item_list"]["items"].nil?)
33
- }
34
- [response.parsed_response["get_item_list"]["items"]["item"]].flatten
11
+ def metadata
12
+ @metadata ||= Metadata.new(client.to_xml) unless client.error?
35
13
  end
36
14
 
37
- # Returns an array of holdings. Each holding is represented as a MARC::Record.
38
- # Every method call refreshes the data from the underlying API.
39
- # Raises an exception if there are errors.
40
15
  def holdings
41
- self.response = self.class.get("#{record_url}/holdings?view=full")
42
- raise_error_if("Error getting holdings from Aleph REST APIs.") {
43
- (response.parsed_response["get_hol_list"].nil? or response.parsed_response["get_hol_list"]["holdings"].nil?)
44
- }
45
- xml(xml: response.body).xpath("get-hol-list/holdings/holding").collect{ |holding|
46
- # Change the tag name to record so that the MARC::XMLReader can parse it.
47
- holding.name = "record"
48
- MARC::XMLReader.new(StringIO.new(holding.to_xml(xml_options).strip)).first
49
- }
16
+ @holdings ||= Holdings.new(id).to_a
17
+ end
18
+
19
+ def items
20
+ @items ||= Items.new(id).to_a
50
21
  end
51
22
 
52
- def record_url
53
- @record_url ||= "#{rest_url}/record/#{bib_library}#{record_id}"
23
+ private
24
+ def client
25
+ @client ||= API::Client::Record.new(id, {view: 'full'})
54
26
  end
55
- private :record_url
56
27
  end
57
28
  end
58
29
  end
@@ -0,0 +1,8 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Record
4
+ class Metadata < Exlibris::Aleph::Metadata
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class SubLibrary
4
+ attr_reader :code, :display, :admin_library
5
+
6
+ def initialize(code, display, admin_library)
7
+ unless admin_library.nil? || admin_library.is_a?(AdminLibrary)
8
+ raise ArgumentError.new("Expecting #{admin_library} to be an AdminLibrary")
9
+ end
10
+ @code = code
11
+ @display = display
12
+ @admin_library = admin_library
13
+ end
14
+
15
+ def to_s
16
+ display
17
+ end
18
+
19
+ def ==(other_object)
20
+ other_object.instance_of?(self.class) && code == other_object.code &&
21
+ admin_library == other_object.admin_library
22
+ end
23
+ alias_method :eql?, :==
24
+
25
+ def hash
26
+ code.hash
27
+ end
28
+ end
29
+ end
30
+ end