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,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Matcher
6
+ class PatronCirculationPolicies < Base
7
+ REGEXP = /^(.{5})\s([0-9#]{2})\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([CF])\s([+A])\s([DMY\s])\s([0-9]{8})\s([0-9]{10})\s([YN])\s([YN])\s([YN])\s([0-9]{2})\s([YN])\s([YN])\s([YN])\s([YN])$/
8
+
9
+ def initialize(string)
10
+ super(REGEXP, string)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Matcher
6
+ class PatronStatuses < Base
7
+ REGEXP = /^BOR-STATUS\s{10}\s.{5}\sL\s(.{50})\s(.*)$/
8
+
9
+ def initialize(string)
10
+ super(REGEXP, string)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Matcher
6
+ class SubLibraries < Base
7
+ REGEXP = /^(.{5})\s([1-6]{1})\s(.{5})\s([L,H,A,R,S]{1})\s(.{1,30})/
8
+
9
+ def initialize(string)
10
+ super(REGEXP, string)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class PatronCirculationPolicies < Base
6
+ FILENAME = 'tab31'
7
+
8
+ def initialize(admin_library)
9
+ super(admin_library, FILENAME)
10
+ end
11
+
12
+ def all
13
+ rows.map do |row|
14
+ sub_library = sub_libraries.find do |sub_library|
15
+ sub_library.code == row.sub_library_code
16
+ end
17
+ unless sub_library.nil?
18
+ status = patron_statuses[admin_library].find do |patron_status|
19
+ patron_status.code == row.patron_status_code
20
+ end
21
+ if status.nil? && row.patron_status_code == '##'
22
+ status = Aleph::Patron::Status.new('##')
23
+ end
24
+ unless status.nil?
25
+ identifier =
26
+ Aleph::Patron::CirculationPolicy::Identifier.new(status, sub_library)
27
+ privileges =
28
+ Aleph::Patron::CirculationPolicy::Privileges.new(row)
29
+ Aleph::Patron::CirculationPolicy.new(identifier, privileges)
30
+ end
31
+ end
32
+ end.compact
33
+ end
34
+
35
+ private
36
+ def sub_libraries
37
+ @sub_libraries ||= tables_manager.sub_libraries
38
+ end
39
+
40
+ def patron_statuses
41
+ @patron_statuses ||= tables_manager.patron_statuses
42
+ end
43
+
44
+ def tables_manager
45
+ @tables_manager ||= Aleph::TablesManager.instance
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class PatronStatuses < Base
6
+ FILENAME = 'pc_tab_exp_field_extended.eng'
7
+
8
+ def initialize(admin_library)
9
+ super(admin_library, FILENAME)
10
+ end
11
+
12
+ def all
13
+ rows.map { |row| Aleph::Patron::Status.new(row.code, row.display) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class Base
7
+ def self.attr_ordered_keys(*ordered_keys)
8
+ ordered_keys.each_with_index do |key, index|
9
+ define_method(key) do
10
+ eval("@#{key} ||= data[#{index}].strip")
11
+ end
12
+ end
13
+ end
14
+
15
+ attr_reader :data
16
+
17
+ def initialize(data)
18
+ @data = data
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class Collections < Base
7
+ attr_ordered_keys :code, :sub_library_code, :alpha, :display
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class ItemCirculationPolicies < Base
7
+ attr_ordered_keys :sub_library_code, :item_status_code,
8
+ :item_processing_status_code, :alpha, :display, :loanable,
9
+ :renewable, :requestable, :photocopyable, :displayable,
10
+ :specific_item, :limit_hold, :recallable, :rush_recallable,
11
+ :reloaning_limit, :bookable, :booking_hours
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class ItemDisplayMasks < Base
7
+ attr_ordered_keys :display, :mask
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class PatronCirculationPolicies < Base
7
+ attr_ordered_keys :sub_library_code, :patron_status_code, :borrow,
8
+ :photocopy, :override, :request_multiple, :check_loan, :request,
9
+ :renew, :ignore_late_return, :photocopy_charge,
10
+ :expiration_date_operator, :expiration_date_operator_type,
11
+ :expiration_date_parameter, :cash_overspend_limit, :request_on_shelf,
12
+ :loan_display, :reading_room_permission, :default_hold_priority,
13
+ :book, :ignore_closing_hours_for_booking,
14
+ :automatically_create_aleph_record, :rush_cataloging
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class PatronStatuses < Base
7
+ attr_ordered_keys :display, :code
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Row
6
+ class SubLibraries < Base
7
+ attr_ordered_keys :code, :type, :admin_library_code, :alpha, :display
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class SubLibraries < Base
6
+ ADMIN_LIBRARY = AdminLibrary.new('alephe')
7
+ FILENAME = 'tab_sub_library.eng'
8
+
9
+ def initialize
10
+ super(ADMIN_LIBRARY, FILENAME)
11
+ end
12
+
13
+ def rows
14
+ @rows ||= super.reject { |row| irrelevant_codes.include?(row.code) }
15
+ end
16
+
17
+ def all
18
+ rows.map do |row|
19
+ admin_library = AdminLibrary.new(row.admin_library_code)
20
+ SubLibrary.new(row.code, row.display, admin_library)
21
+ end
22
+ end
23
+
24
+ private
25
+ def irrelevant_codes
26
+ @irrelevant_codes ||= Config.irrelevant_sub_libraries
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ class SubLibraries < Base
5
+ def all
6
+ @all ||= Reader::SubLibraries.new.all
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,66 @@
1
+ module Exlibris
2
+ module Aleph
3
+ require 'singleton'
4
+ class TablesManager
5
+
6
+ # Number of seconds before the table is
7
+ # considered expired, 86400 seconds is 1 day
8
+ TIME_TO_LIVE = 86400
9
+
10
+ include Singleton
11
+
12
+ def expired?
13
+ Time.now > expiration_date
14
+ end
15
+
16
+ def sub_libraries
17
+ reset! if expired?
18
+ @sub_libraries ||= Table::SubLibraries.new
19
+ end
20
+
21
+ def collections
22
+ reset! if expired?
23
+ @collections ||= Table::Collections.new
24
+ end
25
+
26
+ def patron_statuses
27
+ reset! if expired?
28
+ @patron_statuses ||= Table::Patron::Statuses.new
29
+ end
30
+
31
+ def patron_circulation_policies
32
+ reset! if expired?
33
+ @patron_circulation_policies ||= Table::Patron::CirculationPolicies.new
34
+ end
35
+
36
+ def item_circulation_policies
37
+ reset! if expired?
38
+ @item_circulation_policies ||= Table::Item::CirculationPolicies.new
39
+ end
40
+
41
+ def item_display_masks
42
+ reset! if expired?
43
+ @item_display_masks ||= Table::Item::DisplayMasks.new
44
+ end
45
+
46
+ private
47
+ def initialize
48
+ expiration_date
49
+ end
50
+
51
+ def expiration_date
52
+ @expiration_date ||= Time.now + TIME_TO_LIVE
53
+ end
54
+
55
+ def reset!
56
+ @expiration_date = nil
57
+ @sub_libraries = nil
58
+ @collections = nil
59
+ @patron_statuses = nil
60
+ @patron_circulation_policies = nil
61
+ @item_circulation_policies = nil
62
+ @item_display_masks = nil
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,5 +1,5 @@
1
1
  module Exlibris
2
2
  module Aleph
3
- VERSION = "1.1.0"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+ module Exlibris
3
+ module Aleph
4
+ describe AdminLibrary do
5
+ let(:code) { 'ADM50' }
6
+ subject(:admin_library) { AdminLibrary.new(code) }
7
+ it { should be_a AdminLibrary }
8
+ describe '#code' do
9
+ subject { admin_library.code }
10
+ it { should eq code }
11
+ end
12
+ describe '#normalized_code' do
13
+ subject { admin_library.normalized_code }
14
+ it { should eq code.downcase }
15
+ end
16
+ describe '#display' do
17
+ subject { admin_library.display }
18
+ xit { should eq 'Admin Library' }
19
+ end
20
+ describe '#==' do
21
+ subject { admin_library == other_object }
22
+ context 'when the other object is an Exlibris::Aleph::AdminLibrary' do
23
+ context 'and the code is the same' do
24
+ let(:other_object) { AdminLibrary.new(code) }
25
+ it { should be_true }
26
+ end
27
+ context 'but the code is different' do
28
+ let(:other_object) { AdminLibrary.new("ADM51") }
29
+ it { should be_false }
30
+ end
31
+ end
32
+ context 'when the other object is not an Exlibris::Aleph::AdminLibrary' do
33
+ let(:other_object) { "string" }
34
+ it { should be_false }
35
+ end
36
+ end
37
+ describe '#===' do
38
+ subject { admin_library === other_object }
39
+ context 'when the other object is an Exlibris::Aleph::AdminLibrary' do
40
+ context 'and the code is the same' do
41
+ let(:other_object) { AdminLibrary.new(code) }
42
+ it { should be_true }
43
+ end
44
+ context 'but the code is different' do
45
+ let(:other_object) { AdminLibrary.new("ADM51") }
46
+ it { should be_false }
47
+ end
48
+ end
49
+ context 'when the other object is not an Exlibris::Aleph::AdminLibrary' do
50
+ let(:other_object) { "string" }
51
+ it { should be_false }
52
+ end
53
+ end
54
+ describe '#eql?' do
55
+ subject { admin_library.eql?(other_object) }
56
+ context 'when the other object is an Exlibris::Aleph::AdminLibrary' do
57
+ context 'and the code is the same' do
58
+ let(:other_object) { AdminLibrary.new(code) }
59
+ it { should be_true }
60
+ end
61
+ context 'but the code is different' do
62
+ let(:other_object) { AdminLibrary.new("ADM51") }
63
+ it { should be_false }
64
+ end
65
+ end
66
+ context 'when the other object is not an Exlibris::Aleph::AdminLibrary' do
67
+ let(:other_object) { "string" }
68
+ it { should be_false }
69
+ end
70
+ end
71
+ describe '#hash' do
72
+ subject { admin_library.hash }
73
+ it { should eq code.hash }
74
+ end
75
+ context 'when initialized with a code argument that is not a String' do
76
+ let(:code) { Hash.new }
77
+ it 'should raise an ArgumentError' do
78
+ expect { subject }.to raise_error ArgumentError
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end