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,28 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Holding
4
+ require 'marc'
5
+ class Metadata < Exlibris::Aleph::Metadata
6
+ attr_reader :marc_xml
7
+
8
+ def initialize(marc_xml)
9
+ marc_xml.gsub!('<holding>', '<record>')
10
+ marc_xml.gsub!('</holding>', '</record>')
11
+ @marc_xml = marc_xml.strip
12
+ end
13
+
14
+ def sub_location
15
+ @sub_location ||= location['b'] unless location.nil?
16
+ end
17
+
18
+ def shelving_location
19
+ @shelving_location ||= location['c'] unless location.nil?
20
+ end
21
+
22
+ def location
23
+ @location ||= marc_record['852'] unless marc_record.nil?
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Holdings
4
+
5
+ extend Forwardable
6
+ def_delegators :to_a, :each, :size
7
+
8
+ include Enumerable
9
+
10
+ attr_reader :record_id
11
+
12
+ def initialize(record_id)
13
+ @record_id = record_id
14
+ end
15
+
16
+ def to_a
17
+ @array ||= ids.map { |id| Holding.new(record_id, id) }
18
+ end
19
+
20
+ private
21
+ def client
22
+ @client ||= API::Client::Record::Holdings.new(record_id)
23
+ end
24
+
25
+ def root
26
+ @root ||= client.root
27
+ end
28
+
29
+ def holdings_root
30
+ @holdings_root ||= root['holdings']
31
+ end
32
+
33
+ def holdings
34
+ @holdings ||= holdings_root['holding'] unless holdings_root.nil?
35
+ end
36
+
37
+ def ids
38
+ @ids ||= begin
39
+ if holdings.nil?
40
+ []
41
+ else
42
+ holdings.map do |holding|
43
+ href = (holdings.size > 1) ? holding['href'] : holding[1]
44
+ href.split('/').pop
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,138 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ ON_SHELF_VALUES = ['On Shelf']
5
+
6
+ attr_reader :record_id, :id
7
+
8
+ def initialize(record_id, id)
9
+ @record_id = record_id
10
+ @id = id
11
+ end
12
+
13
+ def collection
14
+ unless client.error?
15
+ @collection ||=
16
+ Collection.new(collection_code, collection_display, sub_library)
17
+ end
18
+ end
19
+
20
+ def call_number
21
+ unless client.error?
22
+ @call_number ||=
23
+ CallNumber.new(reader.classification, reader.description)
24
+ end
25
+ end
26
+
27
+ def circulation_status
28
+ unless client.error?
29
+ @circulation_status ||=
30
+ CirculationStatus.new(reader.circulation_status_value)
31
+ end
32
+ end
33
+
34
+ def status
35
+ unless client.error?
36
+ @status ||= Status.new(status_code, status_display)
37
+ end
38
+ end
39
+
40
+ def processing_status
41
+ unless client.error?
42
+ @processing_status ||=
43
+ ProcessingStatus.new(processing_status_code, processing_status_display)
44
+ end
45
+ end
46
+
47
+ def opac_note
48
+ unless client.error?
49
+ @opac_note ||= OpacNote.new(reader.opac_note)
50
+ end
51
+ end
52
+
53
+ def queue
54
+ unless client.error?
55
+ @queue ||= Queue.new(reader.queue)
56
+ end
57
+ end
58
+
59
+ def on_shelf?
60
+ !client.error? && ON_SHELF_VALUES.include?(circulation_status.value)
61
+ end
62
+
63
+ def circulation_policy
64
+ unless client.error?
65
+ @circulation_policy ||=
66
+ circulation_policies.find_by_identifier(circulation_policy_identifier)
67
+ end
68
+ end
69
+
70
+ private
71
+ def client
72
+ @client ||= API::Client::Record::Item.new(record_id, id)
73
+ end
74
+
75
+ def root
76
+ @root ||= client.root
77
+ end
78
+
79
+ def reader
80
+ @reader ||= API::Reader::Record::Item.new(root)
81
+ end
82
+
83
+ def admin_library
84
+ @admin_library ||= AdminLibrary.new(reader.admin_library_code)
85
+ end
86
+
87
+ def sub_library
88
+ @sub_library ||=
89
+ SubLibrary.new(sub_library_code, sub_library_display, admin_library)
90
+ end
91
+
92
+ def sub_library_code
93
+ @sub_library_code ||= reader.sub_library_code
94
+ end
95
+
96
+ def sub_library_display
97
+ @sub_library_display ||= reader.sub_library_display
98
+ end
99
+
100
+ def collection_code
101
+ @collection_code ||= reader.collection_code
102
+ end
103
+
104
+ def collection_display
105
+ @collection_display ||= reader.collection_display
106
+ end
107
+
108
+ def status_code
109
+ @status_code ||= (reader.status_code || '##')
110
+ end
111
+
112
+ def status_display
113
+ @status_display ||= reader.status_display
114
+ end
115
+
116
+ def processing_status_code
117
+ @processing_status_code ||= (reader.processing_status_code || '##')
118
+ end
119
+
120
+ def processing_status_display
121
+ @processing_status_display ||= reader.processing_status_display
122
+ end
123
+
124
+ def circulation_policies
125
+ tables_manager.item_circulation_policies
126
+ end
127
+
128
+ def tables_manager
129
+ @tables_manager ||= TablesManager.instance
130
+ end
131
+
132
+ def circulation_policy_identifier
133
+ @circulation_policy_identifier ||=
134
+ CirculationPolicy::Identifier.new(status, processing_status, sub_library)
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,14 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CallNumber
5
+ attr_reader :classification, :description
6
+
7
+ def initialize(classification, description)
8
+ @classification = classification
9
+ @description = description
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CirculationPolicy
5
+ attr_reader :identifier, :display, :privileges
6
+
7
+ def initialize(identifier, display, privileges)
8
+ unless identifier.is_a?(Identifier)
9
+ raise ArgumentError.new("Expecting #{identifier} to be a Item::CirculationPolicy::Identifier")
10
+ end
11
+ unless display.is_a?(Display)
12
+ raise ArgumentError.new("Expecting #{identifier} to be a Item::CirculationPolicy::Display")
13
+ end
14
+ unless privileges.is_a?(Privileges)
15
+ raise ArgumentError.new("Expecting #{privileges} to be a Item::CirculationPolicy::Privileges")
16
+ end
17
+ @identifier = identifier
18
+ @display = display
19
+ @privileges = privileges
20
+ end
21
+
22
+ def ==(other_object)
23
+ (other_object.instance_of?(self.class) &&
24
+ identifier == other_object.identifier)
25
+ end
26
+ alias_method :eql?, :==
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CirculationPolicy
5
+ class Display
6
+ attr_reader :value, :mask
7
+
8
+ def initialize(value, mask=nil)
9
+ @value = value
10
+ @mask = (mask || value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CirculationPolicy
5
+ class Identifier
6
+ attr_reader :status, :processing_status, :sub_library
7
+
8
+ def initialize(status, processing_status, sub_library)
9
+ unless status.is_a?(Status)
10
+ raise ArgumentError.new("Expecting #{status} to be a Item::Status")
11
+ end
12
+ unless processing_status.is_a?(ProcessingStatus)
13
+ raise ArgumentError.new("Expecting #{processing_status} to be a Item::ProcessingStatus")
14
+ end
15
+ unless sub_library.is_a?(SubLibrary)
16
+ raise ArgumentError.new("Expecting #{sub_library} to be a SubLibrary")
17
+ end
18
+ @status = status
19
+ @processing_status = processing_status
20
+ @sub_library = sub_library
21
+ end
22
+
23
+ def ==(other_object)
24
+ (other_object.instance_of?(self.class) &&
25
+ status == other_object.status &&
26
+ processing_status == other_object.processing_status &&
27
+ sub_library == other_object.sub_library)
28
+ end
29
+ alias_method :eql?, :==
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,72 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CirculationPolicy
5
+ class Privileges
6
+ attr_reader :loanable, :renewable, :requestable, :photocopyable,
7
+ :displayable, :specific_item, :limit_hold, :recallable,
8
+ :rush_recallable, :reloaning_limit, :bookable, :booking_hours
9
+
10
+ def initialize(row)
11
+ @loanable = row.loanable
12
+ @renewable = row.renewable
13
+ @requestable = row.requestable
14
+ @photocopyable = row.photocopyable
15
+ @displayable = row.displayable
16
+ @specific_item = row.specific_item
17
+ @limit_hold = row.limit_hold
18
+ @recallable = row.recallable
19
+ @rush_recallable = row.rush_recallable
20
+ @reloaning_limit = row.reloaning_limit
21
+ @bookable = row.bookable
22
+ @booking_hours = row.booking_hours
23
+ end
24
+
25
+ def loanable?
26
+ loanable == 'Y'
27
+ end
28
+
29
+ def renewable?
30
+ renewable == 'Y'
31
+ end
32
+
33
+ def requestable?
34
+ always_requestable? || requestable == 'Y'
35
+ end
36
+
37
+ def always_requestable?
38
+ requestable == 'C'
39
+ end
40
+
41
+ def photocopyable?
42
+ photocopyable == 'Y'
43
+ end
44
+
45
+ def displayable?
46
+ displayable == 'Y'
47
+ end
48
+
49
+ def specific_item?
50
+ specific_item == 'Y'
51
+ end
52
+
53
+ def limit_hold?
54
+ limit_hold == 'Y'
55
+ end
56
+
57
+ def recallable?
58
+ recallable == 'Y'
59
+ end
60
+
61
+ def rush_recallable?
62
+ rush_recallable == 'Y'
63
+ end
64
+
65
+ def bookable?
66
+ bookable == 'Y'
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,31 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class CirculationStatus
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_s
12
+ value
13
+ end
14
+
15
+ def due_date
16
+ @due_date ||= due_date_match[0] unless due_date_match.nil?
17
+ end
18
+
19
+ def ==(other_object)
20
+ other_object.instance_of?(self.class) && value == other_object.value
21
+ end
22
+ alias_method :eql?, :==
23
+
24
+ private
25
+ def due_date_match
26
+ @due_date_match ||= value.match(/\d{2}\/\d{2}\/\d{2}/)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class DisplayMask
5
+ attr_reader :value, :mask
6
+
7
+ def initialize(value, mask)
8
+ @value = value
9
+ @mask = mask
10
+ end
11
+
12
+ def ==(other_object)
13
+ other_object.instance_of?(self.class) && value == other_object.value
14
+ end
15
+ alias_method :eql?, :==
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ class Item
4
+ class OpacNote
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ def to_s
12
+ value
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end