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,22 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ class Base
5
+
6
+ extend Forwardable
7
+ def_delegators :all, :each, :[]
8
+
9
+ include Enumerable
10
+
11
+ def all
12
+ raise RuntimeError.new('Should be implmented in sub classes')
13
+ end
14
+
15
+ protected
16
+ def admin_libraries
17
+ @admin_libraries ||= Config.admin_libraries
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ class Collections < Base
5
+ def all
6
+ @all ||= begin
7
+ Hash[
8
+ admin_libraries.map do |admin_library|
9
+ [admin_library, Reader::Collections.new(admin_library).all]
10
+ end
11
+ ]
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,65 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Item
5
+ class CirculationPolicies < Table::Base
6
+ def all
7
+ @all ||= begin
8
+ Hash[
9
+ admin_libraries.map do |admin_library|
10
+ [admin_library, Reader::ItemCirculationPolicies.new(admin_library).all]
11
+ end
12
+ ]
13
+ end
14
+ end
15
+
16
+ def find_by_identifier(identifier)
17
+ unless identifier.is_a?(Aleph::Item::CirculationPolicy::Identifier)
18
+ raise ArgumentError.new("Expecting #{identifier} to be a CirculationPolicy::Identifier")
19
+ end
20
+ sub_library = identifier.sub_library
21
+ circulation_policy = _find_by_identifier(identifier)
22
+ # Try with a "generic" item status
23
+ if circulation_policy.nil?
24
+ processing_status = identifier.processing_status
25
+ generic_status_identifier =
26
+ Aleph::Item::CirculationPolicy::Identifier.new(generic_status, processing_status, sub_library)
27
+ circulation_policy = _find_by_identifier(generic_status_identifier)
28
+ end
29
+ # Try with a "generic" item processing status
30
+ if circulation_policy.nil?
31
+ status = identifier.status
32
+ generic_processing_status_identifier =
33
+ Aleph::Item::CirculationPolicy::Identifier.new(status, generic_processing_status, sub_library)
34
+ circulation_policy = _find_by_identifier(generic_processing_status_identifier)
35
+ end
36
+ # Try with both a "generic" item status AND a "generic" item processing status
37
+ if circulation_policy.nil?
38
+ generic_identifier =
39
+ Aleph::Item::CirculationPolicy::Identifier.new(generic_status, generic_processing_status, sub_library)
40
+ circulation_policy = _find_by_identifier(generic_identifier)
41
+ end
42
+ circulation_policy
43
+ end
44
+
45
+ private
46
+ def generic_status
47
+ @generic_status ||= Aleph::Item::Status.new('##')
48
+ end
49
+
50
+ def generic_processing_status
51
+ @generic_processing_status ||= Aleph::Item::ProcessingStatus.new('##')
52
+ end
53
+
54
+ def _find_by_identifier(identifier)
55
+ sub_library = identifier.sub_library
56
+ admin_library = sub_library.admin_library
57
+ all[admin_library].find do |circulation_policy|
58
+ circulation_policy.identifier == identifier
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Item
5
+ class DisplayMasks < Table::Base
6
+ def all
7
+ @all ||= begin
8
+ Hash[
9
+ admin_libraries.map do |admin_library|
10
+ [admin_library, Reader::ItemDisplayMasks.new(admin_library).all]
11
+ end
12
+ ]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,47 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Patron
5
+ class CirculationPolicies < Table::Base
6
+ def all
7
+ @all ||= begin
8
+ Hash[
9
+ admin_libraries.map do |admin_library|
10
+ [admin_library, Reader::PatronCirculationPolicies.new(admin_library).all]
11
+ end
12
+ ]
13
+ end
14
+ end
15
+
16
+ def find_by_identifier(identifier)
17
+ unless identifier.is_a?(Aleph::Patron::CirculationPolicy::Identifier)
18
+ raise ArgumentError.new("Expecting #{identifier} to be a CirculationPolicy::Identifier")
19
+ end
20
+ sub_library = identifier.sub_library
21
+ circulation_policy = _find_by_identifier(identifier)
22
+ # Try with a "generic" patron status
23
+ if circulation_policy.nil?
24
+ generic_status_identifier =
25
+ Aleph::Patron::CirculationPolicy::Identifier.new(generic_status, sub_library)
26
+ circulation_policy = _find_by_identifier(generic_status_identifier)
27
+ end
28
+ circulation_policy
29
+ end
30
+
31
+ private
32
+ def generic_status
33
+ @generic_status ||= Aleph::Patron::Status.new('##')
34
+ end
35
+
36
+ def _find_by_identifier(identifier)
37
+ sub_library = identifier.sub_library
38
+ admin_library = sub_library.admin_library
39
+ all[admin_library].find do |circulation_policy|
40
+ circulation_policy.identifier == identifier
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Patron
5
+ class Statuses < Table::Base
6
+ def all
7
+ @all ||= begin
8
+ Hash[
9
+ admin_libraries.map do |admin_library|
10
+ [admin_library, Reader::PatronStatuses.new(admin_library).all]
11
+ end
12
+ ]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,57 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class Base
6
+ attr_reader :admin_library, :filename
7
+
8
+ def initialize(admin_library, filename)
9
+ @admin_library = admin_library
10
+ @filename = filename
11
+ end
12
+
13
+ def all
14
+ raise RuntimeError.new('Should be implmented in sub classes')
15
+ end
16
+
17
+ protected
18
+ def rows
19
+ @rows ||= file.map do |line|
20
+ matcher = matcher_constant.new(line)
21
+ row_contant.new(matcher.matched_data) if matcher.matches?
22
+ end.compact
23
+ end
24
+
25
+ private
26
+ def file
27
+ @file ||= File.new(absolute_path)
28
+ end
29
+
30
+ def absolute_path
31
+ @absolute_path ||= "#{table_path}/#{relative_path}/#{filename}"
32
+ end
33
+
34
+ def relative_path
35
+ @relative_path ||= "#{admin_library.normalized_code}/tab"
36
+ end
37
+
38
+ def table_path
39
+ @table_path ||= Config.table_path
40
+ end
41
+
42
+ def matcher_constant
43
+ eval("Matcher::#{demodulized_class_name}")
44
+ end
45
+
46
+ def row_contant
47
+ eval("Row::#{demodulized_class_name}")
48
+ end
49
+
50
+ def demodulized_class_name
51
+ @demodulized_class_name ||= self.class.name.split('::').last
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,35 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class Collections < Base
6
+ FILENAME = 'tab40.eng'
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
+ Collection.new(row.code, row.display, sub_library)
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+ def sub_libraries
25
+ @sub_libraries ||= tables_manager.sub_libraries
26
+ end
27
+
28
+ def tables_manager
29
+ @tables_manager ||= Aleph::TablesManager.instance
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class ItemCirculationPolicies < Base
6
+ FILENAME = 'tab15.eng'
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 = Aleph::Item::Status.new(row.item_status_code)
19
+ processing_status =
20
+ Aleph::Item::ProcessingStatus.new(row.item_processing_status_code)
21
+ identifier =
22
+ Aleph::Item::CirculationPolicy::Identifier.new(status, processing_status, sub_library)
23
+ display_mask = item_display_masks[admin_library].find do |item_display_mask|
24
+ item_display_mask.value == row.display
25
+ end
26
+ mask = (display_mask.nil?) ? nil : display_mask.mask
27
+ display = Aleph::Item::CirculationPolicy::Display.new(row.display, mask)
28
+ privileges = Aleph::Item::CirculationPolicy::Privileges.new(row)
29
+ Aleph::Item::CirculationPolicy.new(identifier, display, privileges)
30
+ end
31
+ end.compact
32
+ end
33
+
34
+ private
35
+ def sub_libraries
36
+ @sub_libraries ||= tables_manager.sub_libraries
37
+ end
38
+
39
+ def item_display_masks
40
+ @item_display_masks ||= tables_manager.item_display_masks
41
+ end
42
+
43
+ def tables_manager
44
+ @tables_manager ||= Aleph::TablesManager.instance
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ class ItemDisplayMasks < Base
6
+ FILENAME = 'tab_www_item_desc.eng'
7
+
8
+ def initialize(admin_library)
9
+ super(admin_library, FILENAME)
10
+ end
11
+
12
+ def all
13
+ rows.map { |row| Aleph::Item::DisplayMask.new(row.display, row.mask) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Matcher
6
+ class Base
7
+ attr_reader :regexp, :string
8
+
9
+ def initialize(regexp, string)
10
+ @regexp = regexp
11
+ @string = string
12
+ end
13
+
14
+ def match_data
15
+ @match_data ||= regexp.match(string)
16
+ end
17
+
18
+ def matched_data
19
+ @matched_data ||= match_data.captures
20
+ end
21
+
22
+ def matches?
23
+ regexp === string
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ module Exlibris
2
+ module Aleph
3
+ module Table
4
+ module Reader
5
+ module Matcher
6
+ class Collections < Base
7
+ REGEXP = /^(.{5})\s(.{5})\s(L)\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 ItemCirculationPolicies < Base
7
+ REGEXP = /^(.{5})\s([0-9#]{2})\s([A-Z#]{2})\s(L)\s(.{30})\s([YN])\s([YN])\s([YNCT])\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([YN])\s([0-9]{2})\s([YNC])\s([AOC])/
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 ItemDisplayMasks < Base
7
+ REGEXP = /^ITEM-STATUS \s(.{80})\s(.*)$/
8
+
9
+ def initialize(string)
10
+ super(REGEXP, string)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end