relaton 2.2.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (702) hide show
  1. checksums.yaml +4 -4
  2. data/{docs/README.adoc → README.adoc} +165 -38
  3. data/bin/console +0 -1
  4. data/lib/relaton/3gpp/bibdata.rb +9 -0
  5. data/lib/relaton/3gpp/bibitem.rb +9 -0
  6. data/lib/relaton/3gpp/bibliography.rb +123 -0
  7. data/lib/relaton/3gpp/data_fetcher.rb +303 -0
  8. data/lib/relaton/3gpp/docidentifier.rb +114 -0
  9. data/lib/relaton/3gpp/doctype.rb +9 -0
  10. data/lib/relaton/3gpp/ext.rb +31 -0
  11. data/lib/relaton/3gpp/item.rb +18 -0
  12. data/lib/relaton/3gpp/item_data.rb +15 -0
  13. data/lib/relaton/3gpp/parser.rb +400 -0
  14. data/lib/relaton/3gpp/processor.rb +71 -0
  15. data/lib/relaton/3gpp/release.rb +34 -0
  16. data/lib/relaton/3gpp/util.rb +8 -0
  17. data/lib/relaton/3gpp.rb +29 -0
  18. data/lib/relaton/adobe/bibdata.rb +8 -0
  19. data/lib/relaton/adobe/bibitem.rb +8 -0
  20. data/lib/relaton/adobe/bibliography.rb +92 -0
  21. data/lib/relaton/adobe/docidentifier.rb +49 -0
  22. data/lib/relaton/adobe/doctype.rb +14 -0
  23. data/lib/relaton/adobe/ext.rb +32 -0
  24. data/lib/relaton/adobe/item.rb +15 -0
  25. data/lib/relaton/adobe/item_base.rb +18 -0
  26. data/lib/relaton/adobe/item_data.rb +6 -0
  27. data/lib/relaton/adobe/processor.rb +45 -0
  28. data/lib/relaton/adobe/util.rb +8 -0
  29. data/lib/relaton/adobe.rb +37 -0
  30. data/lib/relaton/bib/converter/asciibib/to_asciibib.rb +663 -0
  31. data/lib/relaton/bib/converter/asciibib.rb +13 -0
  32. data/lib/relaton/bib/converter/bibtex/from_bibtex.rb +245 -0
  33. data/lib/relaton/bib/converter/bibtex/to_bibtex.rb +341 -0
  34. data/lib/relaton/bib/converter/bibtex.rb +23 -0
  35. data/lib/relaton/bib/converter/bibxml/from_rfcxml.rb +386 -0
  36. data/lib/relaton/bib/converter/bibxml/from_rfcxml_referencegroup.rb +71 -0
  37. data/lib/relaton/bib/converter/bibxml/to_rfcxml.rb +308 -0
  38. data/lib/relaton/bib/converter/bibxml/to_rfcxml_referencegroup.rb +52 -0
  39. data/lib/relaton/bib/converter/bibxml.rb +51 -0
  40. data/lib/relaton/bib/hash_parser_v1.rb +767 -0
  41. data/lib/relaton/bib/item_data.rb +229 -0
  42. data/lib/relaton/bib/model/abstract.rb +16 -0
  43. data/lib/relaton/bib/model/address.rb +22 -0
  44. data/lib/relaton/bib/model/affiliation.rb +16 -0
  45. data/lib/relaton/bib/model/bibdata.rb +11 -0
  46. data/lib/relaton/bib/model/bibdata_shared.rb +12 -0
  47. data/lib/relaton/bib/model/bibitem.rb +11 -0
  48. data/lib/relaton/bib/model/bibitem_shared.rb +12 -0
  49. data/lib/relaton/bib/model/contact.rb +18 -0
  50. data/lib/relaton/bib/model/contribution_info.rb +15 -0
  51. data/lib/relaton/bib/model/contributor.rb +29 -0
  52. data/lib/relaton/bib/model/copyright.rb +27 -0
  53. data/lib/relaton/bib/model/date.rb +31 -0
  54. data/lib/relaton/bib/model/depiction.rb +16 -0
  55. data/lib/relaton/bib/model/docidentifier.rb +49 -0
  56. data/lib/relaton/bib/model/doctype.rb +14 -0
  57. data/lib/relaton/bib/model/edition.rb +14 -0
  58. data/lib/relaton/bib/model/ext.rb +39 -0
  59. data/lib/relaton/bib/model/extent.rb +16 -0
  60. data/lib/relaton/bib/model/formattedref.rb +43 -0
  61. data/lib/relaton/bib/model/full_name_type.rb +64 -0
  62. data/lib/relaton/bib/model/fullname.rb +11 -0
  63. data/lib/relaton/bib/model/ics.rb +49 -0
  64. data/lib/relaton/bib/model/image.rb +28 -0
  65. data/lib/relaton/bib/model/item.rb +96 -0
  66. data/lib/relaton/bib/model/item_base.rb +20 -0
  67. data/lib/relaton/bib/model/item_shared.rb +88 -0
  68. data/lib/relaton/bib/model/keyword.rb +30 -0
  69. data/lib/relaton/bib/model/locality.rb +18 -0
  70. data/lib/relaton/bib/model/locality_stack.rb +14 -0
  71. data/lib/relaton/bib/model/localized_string.rb +48 -0
  72. data/lib/relaton/bib/model/localized_string_attrs.rb +24 -0
  73. data/lib/relaton/bib/model/logo.rb +14 -0
  74. data/lib/relaton/bib/model/medium.rb +22 -0
  75. data/lib/relaton/bib/model/note.rb +16 -0
  76. data/lib/relaton/bib/model/organization.rb +13 -0
  77. data/lib/relaton/bib/model/organization_type.rb +42 -0
  78. data/lib/relaton/bib/model/person.rb +36 -0
  79. data/lib/relaton/bib/model/phone.rb +14 -0
  80. data/lib/relaton/bib/model/place.rb +33 -0
  81. data/lib/relaton/bib/model/price.rb +14 -0
  82. data/lib/relaton/bib/model/relation.rb +43 -0
  83. data/lib/relaton/bib/model/series.rb +34 -0
  84. data/lib/relaton/bib/model/size.rb +23 -0
  85. data/lib/relaton/bib/model/source_locality_stack.rb +14 -0
  86. data/lib/relaton/bib/model/status.rb +27 -0
  87. data/lib/relaton/bib/model/structured_identifier.rb +49 -0
  88. data/lib/relaton/bib/model/subdivision.rb +16 -0
  89. data/lib/relaton/bib/model/title.rb +56 -0
  90. data/lib/relaton/bib/model/type/plain_date.rb +16 -0
  91. data/lib/relaton/bib/model/type/string_date.rb +48 -0
  92. data/lib/relaton/bib/model/uri.rb +18 -0
  93. data/lib/relaton/bib/model/validity.rb +16 -0
  94. data/lib/relaton/bib/model/version.rb +43 -0
  95. data/lib/relaton/bib/namespace_helper.rb +21 -0
  96. data/lib/relaton/bib/sanitizer.rb +264 -0
  97. data/lib/relaton/bib/util.rb +18 -0
  98. data/lib/relaton/bib/versions.json +35 -0
  99. data/lib/relaton/bib.rb +46 -0
  100. data/lib/relaton/bipm/bibliography.rb +231 -0
  101. data/lib/relaton/bipm/converter/asciibib.rb +64 -0
  102. data/lib/relaton/bipm/data_fetcher.rb +81 -0
  103. data/lib/relaton/bipm/data_outcomes_parser.rb +656 -0
  104. data/lib/relaton/bipm/id_parser.rb +278 -0
  105. data/lib/relaton/bipm/item_data.rb +47 -0
  106. data/lib/relaton/bipm/model/bibdata.rb +9 -0
  107. data/lib/relaton/bipm/model/bibitem.rb +9 -0
  108. data/lib/relaton/bipm/model/comment_period.rb +13 -0
  109. data/lib/relaton/bipm/model/doctype.rb +12 -0
  110. data/lib/relaton/bipm/model/ext.rb +38 -0
  111. data/lib/relaton/bipm/model/item.rb +11 -0
  112. data/lib/relaton/bipm/model/structured_identifier.rb +36 -0
  113. data/lib/relaton/bipm/processor.rb +69 -0
  114. data/lib/relaton/bipm/rawdata_bipm_metrologia/affiliations.rb +111 -0
  115. data/lib/relaton/bipm/rawdata_bipm_metrologia/fetcher.rb +172 -0
  116. data/lib/relaton/bipm/rawdata_bipm_metrologia/niso_jats_parser.rb +353 -0
  117. data/lib/relaton/bipm/si_brochure_parser.rb +188 -0
  118. data/lib/relaton/bipm/util.rb +8 -0
  119. data/lib/relaton/bipm.rb +38 -0
  120. data/lib/relaton/bsi/bibliography.rb +196 -0
  121. data/lib/relaton/bsi/hit.rb +28 -0
  122. data/lib/relaton/bsi/hit_collection.rb +113 -0
  123. data/lib/relaton/bsi/item_data.rb +13 -0
  124. data/lib/relaton/bsi/model/bibdata.rb +8 -0
  125. data/lib/relaton/bsi/model/bibitem.rb +8 -0
  126. data/lib/relaton/bsi/model/docidentifier.rb +107 -0
  127. data/lib/relaton/bsi/model/doctype.rb +14 -0
  128. data/lib/relaton/bsi/model/ext.rb +17 -0
  129. data/lib/relaton/bsi/model/item.rb +17 -0
  130. data/lib/relaton/bsi/model/item_base.rb +22 -0
  131. data/lib/relaton/bsi/model/relation.rb +9 -0
  132. data/lib/relaton/bsi/processor.rb +43 -0
  133. data/lib/relaton/bsi/schema.json +24882 -0
  134. data/lib/relaton/bsi/scraper.rb +288 -0
  135. data/lib/relaton/bsi/util.rb +8 -0
  136. data/lib/relaton/bsi.rb +25 -0
  137. data/lib/relaton/calconnect/bibliography.rb +93 -0
  138. data/lib/relaton/calconnect/data_fetcher.rb +174 -0
  139. data/lib/relaton/calconnect/docidentifier.rb +80 -0
  140. data/lib/relaton/calconnect/hit.rb +14 -0
  141. data/lib/relaton/calconnect/hit_collection.rb +92 -0
  142. data/lib/relaton/calconnect/item_data.rb +12 -0
  143. data/lib/relaton/calconnect/model/bibdata.rb +8 -0
  144. data/lib/relaton/calconnect/model/bibitem.rb +8 -0
  145. data/lib/relaton/calconnect/model/doctype.rb +11 -0
  146. data/lib/relaton/calconnect/model/ext.rb +11 -0
  147. data/lib/relaton/calconnect/model/item.rb +20 -0
  148. data/lib/relaton/calconnect/processor.rb +72 -0
  149. data/lib/relaton/calconnect/scraper.rb +87 -0
  150. data/lib/relaton/calconnect/util.rb +8 -0
  151. data/lib/relaton/calconnect.rb +36 -0
  152. data/lib/relaton/ccsds/bibliography.rb +63 -0
  153. data/lib/relaton/ccsds/data/fetcher.rb +252 -0
  154. data/lib/relaton/ccsds/data/iso_references.rb +30 -0
  155. data/lib/relaton/ccsds/data/parser.rb +194 -0
  156. data/lib/relaton/ccsds/hit.rb +24 -0
  157. data/lib/relaton/ccsds/hit_collection.rb +47 -0
  158. data/lib/relaton/ccsds/item_data.rb +9 -0
  159. data/lib/relaton/ccsds/model/bibdata.rb +8 -0
  160. data/lib/relaton/ccsds/model/bibitem.rb +8 -0
  161. data/lib/relaton/ccsds/model/docidentifier.rb +121 -0
  162. data/lib/relaton/ccsds/model/doctype.rb +9 -0
  163. data/lib/relaton/ccsds/model/ext.rb +19 -0
  164. data/lib/relaton/ccsds/model/item.rb +15 -0
  165. data/lib/relaton/ccsds/processor.rb +68 -0
  166. data/lib/relaton/ccsds/util.rb +10 -0
  167. data/lib/relaton/ccsds.rb +33 -0
  168. data/lib/relaton/cen/bibliography.rb +149 -0
  169. data/lib/relaton/cen/committees.yaml +66 -0
  170. data/lib/relaton/cen/hit.rb +31 -0
  171. data/lib/relaton/cen/hit_collection.rb +116 -0
  172. data/lib/relaton/cen/item_data.rb +7 -0
  173. data/lib/relaton/cen/model/bibdata.rb +8 -0
  174. data/lib/relaton/cen/model/bibitem.rb +8 -0
  175. data/lib/relaton/cen/model/docidentifier.rb +100 -0
  176. data/lib/relaton/cen/model/ext.rb +11 -0
  177. data/lib/relaton/cen/model/item.rb +14 -0
  178. data/lib/relaton/cen/model/structured_identifier.rb +9 -0
  179. data/lib/relaton/cen/processor.rb +45 -0
  180. data/lib/relaton/cen/scraper.rb +218 -0
  181. data/lib/relaton/cen/util.rb +8 -0
  182. data/lib/relaton/cen.rb +30 -0
  183. data/lib/relaton/cie/bibdata.rb +8 -0
  184. data/lib/relaton/cie/bibitem.rb +8 -0
  185. data/lib/relaton/cie/bibliography.rb +31 -0
  186. data/lib/relaton/cie/data_fetcher.rb +540 -0
  187. data/lib/relaton/cie/ext.rb +7 -0
  188. data/lib/relaton/cie/item.rb +11 -0
  189. data/lib/relaton/cie/item_data.rb +6 -0
  190. data/lib/relaton/cie/processor.rb +68 -0
  191. data/lib/relaton/cie/scrapper.rb +52 -0
  192. data/lib/relaton/cie/util.rb +8 -0
  193. data/lib/relaton/cie.rb +29 -0
  194. data/lib/relaton/core/array_wrapper.rb +20 -0
  195. data/lib/relaton/core/data_fetcher.rb +244 -0
  196. data/lib/relaton/core/date_parser.rb +42 -0
  197. data/lib/relaton/core/governor.rb +320 -0
  198. data/lib/relaton/core/hash_keys_sybolizer.rb +19 -0
  199. data/lib/relaton/core/hit.rb +49 -0
  200. data/lib/relaton/core/hit_collection.rb +118 -0
  201. data/lib/relaton/core/pacer.rb +134 -0
  202. data/lib/relaton/core/processor.rb +67 -0
  203. data/lib/relaton/core/request_error.rb +14 -0
  204. data/lib/relaton/core/workers_pool.rb +45 -0
  205. data/lib/relaton/core.rb +12 -0
  206. data/lib/relaton/db/registry.rb +44 -4
  207. data/lib/relaton/db.rb +0 -1
  208. data/lib/relaton/doi/crossref.rb +89 -0
  209. data/lib/relaton/doi/parser.rb +921 -0
  210. data/lib/relaton/doi/processor.rb +65 -0
  211. data/lib/relaton/doi/util.rb +8 -0
  212. data/lib/relaton/doi.rb +20 -0
  213. data/lib/relaton/easc/bibdata.rb +8 -0
  214. data/lib/relaton/easc/bibitem.rb +8 -0
  215. data/lib/relaton/easc/bibliography.rb +95 -0
  216. data/lib/relaton/easc/docidentifier.rb +100 -0
  217. data/lib/relaton/easc/doctype.rb +14 -0
  218. data/lib/relaton/easc/ext.rb +44 -0
  219. data/lib/relaton/easc/item.rb +13 -0
  220. data/lib/relaton/easc/item_base.rb +18 -0
  221. data/lib/relaton/easc/item_data.rb +6 -0
  222. data/lib/relaton/easc/processor.rb +46 -0
  223. data/lib/relaton/easc/util.rb +8 -0
  224. data/lib/relaton/easc.rb +35 -0
  225. data/lib/relaton/ecma/bibdata.rb +8 -0
  226. data/lib/relaton/ecma/bibitem.rb +8 -0
  227. data/lib/relaton/ecma/bibliography.rb +149 -0
  228. data/lib/relaton/ecma/data_fetcher.rb +162 -0
  229. data/lib/relaton/ecma/data_parser.rb +49 -0
  230. data/lib/relaton/ecma/docidentifier.rb +124 -0
  231. data/lib/relaton/ecma/edition_parser.rb +80 -0
  232. data/lib/relaton/ecma/ext.rb +7 -0
  233. data/lib/relaton/ecma/item.rb +13 -0
  234. data/lib/relaton/ecma/item_data.rb +6 -0
  235. data/lib/relaton/ecma/memento_parser.rb +60 -0
  236. data/lib/relaton/ecma/page_fetcher.rb +39 -0
  237. data/lib/relaton/ecma/parser_common.rb +33 -0
  238. data/lib/relaton/ecma/processor.rb +69 -0
  239. data/lib/relaton/ecma/standard_parser.rb +134 -0
  240. data/lib/relaton/ecma/util.rb +8 -0
  241. data/lib/relaton/ecma.rb +33 -0
  242. data/lib/relaton/etsi/bibdata.rb +10 -0
  243. data/lib/relaton/etsi/bibitem.rb +10 -0
  244. data/lib/relaton/etsi/bibliography.rb +111 -0
  245. data/lib/relaton/etsi/data_fetcher.rb +167 -0
  246. data/lib/relaton/etsi/data_parser.rb +208 -0
  247. data/lib/relaton/etsi/doctype.rb +30 -0
  248. data/lib/relaton/etsi/ext.rb +31 -0
  249. data/lib/relaton/etsi/item.rb +15 -0
  250. data/lib/relaton/etsi/item_data.rb +6 -0
  251. data/lib/relaton/etsi/processor.rb +71 -0
  252. data/lib/relaton/etsi/pubid.rb +37 -0
  253. data/lib/relaton/etsi/status.rb +13 -0
  254. data/lib/relaton/etsi/util.rb +8 -0
  255. data/lib/relaton/etsi.rb +26 -0
  256. data/lib/relaton/gb/bibdata.rb +8 -0
  257. data/lib/relaton/gb/bibitem.rb +8 -0
  258. data/lib/relaton/gb/bibliography.rb +171 -0
  259. data/lib/relaton/gb/ccs.rb +14 -0
  260. data/lib/relaton/gb/committee.rb +13 -0
  261. data/lib/relaton/gb/docidentifier.rb +72 -0
  262. data/lib/relaton/gb/doctype.rb +9 -0
  263. data/lib/relaton/gb/ext.rb +36 -0
  264. data/lib/relaton/gb/gb_scraper.rb +61 -0
  265. data/lib/relaton/gb/gb_type.rb +20 -0
  266. data/lib/relaton/gb/hit.rb +48 -0
  267. data/lib/relaton/gb/hit_collection.rb +19 -0
  268. data/lib/relaton/gb/item.rb +13 -0
  269. data/lib/relaton/gb/item_data.rb +6 -0
  270. data/lib/relaton/gb/processor.rb +49 -0
  271. data/lib/relaton/gb/project_number.rb +38 -0
  272. data/lib/relaton/gb/scraper.rb +221 -0
  273. data/lib/relaton/gb/sec_scraper.rb +92 -0
  274. data/lib/relaton/gb/stage_name.rb +13 -0
  275. data/lib/relaton/gb/structured_identifier.rb +26 -0
  276. data/lib/relaton/gb/t_scraper.rb +126 -0
  277. data/lib/relaton/gb/util.rb +8 -0
  278. data/lib/relaton/gb/yaml/prefixes.yaml +200 -0
  279. data/lib/relaton/gb.rb +33 -0
  280. data/lib/relaton/gost/bibdata.rb +8 -0
  281. data/lib/relaton/gost/bibitem.rb +8 -0
  282. data/lib/relaton/gost/bibliography.rb +107 -0
  283. data/lib/relaton/gost/docidentifier.rb +80 -0
  284. data/lib/relaton/gost/doctype.rb +16 -0
  285. data/lib/relaton/gost/ext.rb +46 -0
  286. data/lib/relaton/gost/item.rb +15 -0
  287. data/lib/relaton/gost/item_base.rb +18 -0
  288. data/lib/relaton/gost/item_data.rb +6 -0
  289. data/lib/relaton/gost/processor.rb +49 -0
  290. data/lib/relaton/gost/util.rb +8 -0
  291. data/lib/relaton/gost.rb +36 -0
  292. data/lib/relaton/iala/bibdata.rb +8 -0
  293. data/lib/relaton/iala/bibitem.rb +8 -0
  294. data/lib/relaton/iala/bibliography.rb +146 -0
  295. data/lib/relaton/iala/docidentifier.rb +89 -0
  296. data/lib/relaton/iala/doctype.rb +18 -0
  297. data/lib/relaton/iala/ext.rb +32 -0
  298. data/lib/relaton/iala/item.rb +21 -0
  299. data/lib/relaton/iala/item_base.rb +18 -0
  300. data/lib/relaton/iala/item_data.rb +6 -0
  301. data/lib/relaton/iala/processor.rb +43 -0
  302. data/lib/relaton/iala/relation.rb +7 -0
  303. data/lib/relaton/iala/util.rb +8 -0
  304. data/lib/relaton/iala.rb +35 -0
  305. data/lib/relaton/iana/bibdata.rb +8 -0
  306. data/lib/relaton/iana/bibitem.rb +8 -0
  307. data/lib/relaton/iana/bibliography.rb +100 -0
  308. data/lib/relaton/iana/data_fetcher.rb +101 -0
  309. data/lib/relaton/iana/item.rb +7 -0
  310. data/lib/relaton/iana/item_data.rb +6 -0
  311. data/lib/relaton/iana/parser.rb +146 -0
  312. data/lib/relaton/iana/processor.rb +70 -0
  313. data/lib/relaton/iana/util.rb +8 -0
  314. data/lib/relaton/iana.rb +40 -0
  315. data/lib/relaton/iec/bibliography.rb +283 -0
  316. data/lib/relaton/iec/data_fetcher.rb +222 -0
  317. data/lib/relaton/iec/data_parser.rb +391 -0
  318. data/lib/relaton/iec/hit.rb +26 -0
  319. data/lib/relaton/iec/hit_collection.rb +138 -0
  320. data/lib/relaton/iec/item_data.rb +7 -0
  321. data/lib/relaton/iec/model/bibdata.rb +8 -0
  322. data/lib/relaton/iec/model/bibitem.rb +8 -0
  323. data/lib/relaton/iec/model/docidentifier.rb +135 -0
  324. data/lib/relaton/iec/model/doctype.rb +12 -0
  325. data/lib/relaton/iec/model/ext.rb +53 -0
  326. data/lib/relaton/iec/model/item.rb +20 -0
  327. data/lib/relaton/iec/model/item_base.rb +12 -0
  328. data/lib/relaton/iec/model/relation.rb +7 -0
  329. data/lib/relaton/iec/model/stage_name.rb +13 -0
  330. data/lib/relaton/iec/processor.rb +74 -0
  331. data/lib/relaton/iec/statuses.yml +199 -0
  332. data/lib/relaton/iec/util.rb +8 -0
  333. data/lib/relaton/iec.rb +98 -0
  334. data/lib/relaton/ieee/balloting_group.rb +13 -0
  335. data/lib/relaton/ieee/bibdata.rb +8 -0
  336. data/lib/relaton/ieee/bibitem.rb +8 -0
  337. data/lib/relaton/ieee/bibliography.rb +73 -0
  338. data/lib/relaton/ieee/converter/bibxml/from_rfcxml.rb +10 -0
  339. data/lib/relaton/ieee/converter/bibxml/from_rfcxml_referencegroup.rb +10 -0
  340. data/lib/relaton/ieee/converter/bibxml.rb +20 -0
  341. data/lib/relaton/ieee/data_fetcher.rb +771 -0
  342. data/lib/relaton/ieee/doctype.rb +9 -0
  343. data/lib/relaton/ieee/editorial_group.rb +19 -0
  344. data/lib/relaton/ieee/ext.rb +36 -0
  345. data/lib/relaton/ieee/idams_parser.rb +330 -0
  346. data/lib/relaton/ieee/item.rb +11 -0
  347. data/lib/relaton/ieee/item_data.rb +7 -0
  348. data/lib/relaton/ieee/processor.rb +71 -0
  349. data/lib/relaton/ieee/rawbib_id_parser.rb +753 -0
  350. data/lib/relaton/ieee/util.rb +8 -0
  351. data/lib/relaton/ieee.rb +30 -0
  352. data/lib/relaton/ietf/bibdata.rb +8 -0
  353. data/lib/relaton/ietf/bibitem.rb +8 -0
  354. data/lib/relaton/ietf/bibliography.rb +35 -0
  355. data/lib/relaton/ietf/bibxml_parser.rb +232 -0
  356. data/lib/relaton/ietf/data_fetcher.rb +561 -0
  357. data/lib/relaton/ietf/doctype.rb +9 -0
  358. data/lib/relaton/ietf/ext.rb +63 -0
  359. data/lib/relaton/ietf/item.rb +16 -0
  360. data/lib/relaton/ietf/item_base.rb +18 -0
  361. data/lib/relaton/ietf/item_data.rb +6 -0
  362. data/lib/relaton/ietf/processing_instructions.rb +79 -0
  363. data/lib/relaton/ietf/processor.rb +72 -0
  364. data/lib/relaton/ietf/relation.rb +9 -0
  365. data/lib/relaton/ietf/rfc/abstract.rb +19 -0
  366. data/lib/relaton/ietf/rfc/author.rb +21 -0
  367. data/lib/relaton/ietf/rfc/entry.rb +446 -0
  368. data/lib/relaton/ietf/rfc/entry_date.rb +21 -0
  369. data/lib/relaton/ietf/rfc/format.rb +19 -0
  370. data/lib/relaton/ietf/rfc/index.rb +46 -0
  371. data/lib/relaton/ietf/rfc/is_also.rb +21 -0
  372. data/lib/relaton/ietf/rfc/keywords.rb +19 -0
  373. data/lib/relaton/ietf/rfc/rfc_index_namespace.rb +11 -0
  374. data/lib/relaton/ietf/scraper.rb +101 -0
  375. data/lib/relaton/ietf/util.rb +8 -0
  376. data/lib/relaton/ietf/wg_name_resolver.rb +42 -0
  377. data/lib/relaton/ietf.rb +30 -0
  378. data/lib/relaton/iho/bibdata.rb +8 -0
  379. data/lib/relaton/iho/bibitem.rb +8 -0
  380. data/lib/relaton/iho/bibliography.rb +114 -0
  381. data/lib/relaton/iho/comment_period.rb +13 -0
  382. data/lib/relaton/iho/docidentifier.rb +31 -0
  383. data/lib/relaton/iho/doctype.rb +10 -0
  384. data/lib/relaton/iho/ext.rb +20 -0
  385. data/lib/relaton/iho/hash_parser_v1.rb +144 -0
  386. data/lib/relaton/iho/item.rb +20 -0
  387. data/lib/relaton/iho/item_base.rb +18 -0
  388. data/lib/relaton/iho/item_data.rb +6 -0
  389. data/lib/relaton/iho/processor.rb +54 -0
  390. data/lib/relaton/iho/relation.rb +9 -0
  391. data/lib/relaton/iho/structured_identifier.rb +20 -0
  392. data/lib/relaton/iho/util.rb +8 -0
  393. data/lib/relaton/iho.rb +27 -0
  394. data/lib/relaton/index/config.rb +52 -0
  395. data/lib/relaton/index/file_io.rb +305 -0
  396. data/lib/relaton/index/file_storage.rb +66 -0
  397. data/lib/relaton/index/pool.rb +46 -0
  398. data/lib/relaton/index/shard_source.rb +201 -0
  399. data/lib/relaton/index/type.rb +210 -0
  400. data/lib/relaton/index/util.rb +18 -0
  401. data/lib/relaton/index.rb +61 -0
  402. data/lib/relaton/isbn/isbn.rb +61 -0
  403. data/lib/relaton/isbn/open_library.rb +43 -0
  404. data/lib/relaton/isbn/parser.rb +88 -0
  405. data/lib/relaton/isbn/processor.rb +48 -0
  406. data/lib/relaton/isbn/util.rb +8 -0
  407. data/lib/relaton/isbn.rb +19 -0
  408. data/lib/relaton/iso/bibliography.rb +412 -0
  409. data/lib/relaton/iso/data_fetcher.rb +338 -0
  410. data/lib/relaton/iso/data_parser.rb +458 -0
  411. data/lib/relaton/iso/hash_parser_v1.rb +177 -0
  412. data/lib/relaton/iso/hit.rb +57 -0
  413. data/lib/relaton/iso/hit_collection.rb +196 -0
  414. data/lib/relaton/iso/item_data.rb +50 -0
  415. data/lib/relaton/iso/model/bibdata.rb +10 -0
  416. data/lib/relaton/iso/model/bibitem.rb +8 -0
  417. data/lib/relaton/iso/model/contributor.rb +6 -0
  418. data/lib/relaton/iso/model/contributor_info.rb +9 -0
  419. data/lib/relaton/iso/model/docidentifier.rb +146 -0
  420. data/lib/relaton/iso/model/doctype.rb +13 -0
  421. data/lib/relaton/iso/model/ext.rb +35 -0
  422. data/lib/relaton/iso/model/item.rb +17 -0
  423. data/lib/relaton/iso/model/item_base.rb +22 -0
  424. data/lib/relaton/iso/model/organization.rb +9 -0
  425. data/lib/relaton/iso/model/project_number.rb +22 -0
  426. data/lib/relaton/iso/model/relation.rb +9 -0
  427. data/lib/relaton/iso/model/stagename.rb +14 -0
  428. data/lib/relaton/iso/model/structured_identifier.rb +31 -0
  429. data/lib/relaton/iso/processor.rb +85 -0
  430. data/lib/relaton/iso/scraper.rb +635 -0
  431. data/lib/relaton/iso/type/pubid.rb +50 -0
  432. data/lib/relaton/iso/util.rb +8 -0
  433. data/lib/relaton/iso.rb +30 -0
  434. data/lib/relaton/itu/bibliography.rb +95 -0
  435. data/lib/relaton/itu/data_crawler_r.rb +664 -0
  436. data/lib/relaton/itu/data_fetcher.rb +550 -0
  437. data/lib/relaton/itu/data_merge_r.rb +149 -0
  438. data/lib/relaton/itu/data_parser_r.rb +214 -0
  439. data/lib/relaton/itu/data_parser_t.rb +228 -0
  440. data/lib/relaton/itu/family_cache.rb +177 -0
  441. data/lib/relaton/itu/governor.rb +56 -0
  442. data/lib/relaton/itu/hit.rb +28 -0
  443. data/lib/relaton/itu/hit_collection.rb +299 -0
  444. data/lib/relaton/itu/item_data.rb +6 -0
  445. data/lib/relaton/itu/model/approval_stage.rb +13 -0
  446. data/lib/relaton/itu/model/bibdata.rb +8 -0
  447. data/lib/relaton/itu/model/bibitem.rb +8 -0
  448. data/lib/relaton/itu/model/docidentifier.rb +75 -0
  449. data/lib/relaton/itu/model/doctype.rb +13 -0
  450. data/lib/relaton/itu/model/ext.rb +47 -0
  451. data/lib/relaton/itu/model/item.rb +13 -0
  452. data/lib/relaton/itu/model/meeting.rb +13 -0
  453. data/lib/relaton/itu/model/meeting_date.rb +15 -0
  454. data/lib/relaton/itu/model/question.rb +13 -0
  455. data/lib/relaton/itu/model/recommendation_status.rb +11 -0
  456. data/lib/relaton/itu/model/structured_identifier.rb +38 -0
  457. data/lib/relaton/itu/processor.rb +72 -0
  458. data/lib/relaton/itu/pubid.rb +199 -0
  459. data/lib/relaton/itu/radio_regulations_parser.rb +70 -0
  460. data/lib/relaton/itu/recommendation_fields.rb +334 -0
  461. data/lib/relaton/itu/recommendation_parser.rb +30 -0
  462. data/lib/relaton/itu/scraper.rb +203 -0
  463. data/lib/relaton/itu/util.rb +8 -0
  464. data/lib/relaton/itu.rb +34 -0
  465. data/lib/relaton/jcgm/bibdata.rb +8 -0
  466. data/lib/relaton/jcgm/bibitem.rb +8 -0
  467. data/lib/relaton/jcgm/bibliography.rb +97 -0
  468. data/lib/relaton/jcgm/data_fetcher.rb +81 -0
  469. data/lib/relaton/jcgm/docidentifier.rb +102 -0
  470. data/lib/relaton/jcgm/doctype.rb +12 -0
  471. data/lib/relaton/jcgm/ext.rb +23 -0
  472. data/lib/relaton/jcgm/item.rb +20 -0
  473. data/lib/relaton/jcgm/item_base.rb +18 -0
  474. data/lib/relaton/jcgm/item_data.rb +6 -0
  475. data/lib/relaton/jcgm/meetings_parser.rb +175 -0
  476. data/lib/relaton/jcgm/processor.rb +71 -0
  477. data/lib/relaton/jcgm/relation.rb +9 -0
  478. data/lib/relaton/jcgm/structured_identifier.rb +40 -0
  479. data/lib/relaton/jcgm/util.rb +8 -0
  480. data/lib/relaton/jcgm.rb +24 -0
  481. data/lib/relaton/jis/bibdata.rb +8 -0
  482. data/lib/relaton/jis/bibitem.rb +8 -0
  483. data/lib/relaton/jis/bibliography.rb +73 -0
  484. data/lib/relaton/jis/data_fetcher.rb +183 -0
  485. data/lib/relaton/jis/docidentifier.rb +120 -0
  486. data/lib/relaton/jis/doctype.rb +9 -0
  487. data/lib/relaton/jis/ext.rb +13 -0
  488. data/lib/relaton/jis/hit.rb +88 -0
  489. data/lib/relaton/jis/hit_collection.rb +128 -0
  490. data/lib/relaton/jis/item.rb +22 -0
  491. data/lib/relaton/jis/item_base.rb +26 -0
  492. data/lib/relaton/jis/item_data.rb +8 -0
  493. data/lib/relaton/jis/processor.rb +55 -0
  494. data/lib/relaton/jis/relation.rb +11 -0
  495. data/lib/relaton/jis/scraper.rb +232 -0
  496. data/lib/relaton/jis/structured_identifier.rb +13 -0
  497. data/lib/relaton/jis/util.rb +8 -0
  498. data/lib/relaton/jis.rb +32 -0
  499. data/lib/relaton/logger/channels/gh_issue.rb +143 -0
  500. data/lib/relaton/logger/config.rb +34 -0
  501. data/lib/relaton/logger/formatter_json.rb +8 -0
  502. data/lib/relaton/logger/formatter_string.rb +12 -0
  503. data/lib/relaton/logger/log.rb +64 -0
  504. data/lib/relaton/logger/log_device.rb +27 -0
  505. data/lib/relaton/logger/pool.rb +24 -0
  506. data/lib/relaton/logger.rb +18 -0
  507. data/lib/relaton/nist/bibdata.rb +8 -0
  508. data/lib/relaton/nist/bibitem.rb +8 -0
  509. data/lib/relaton/nist/bibliography.rb +191 -0
  510. data/lib/relaton/nist/comment_period.rb +15 -0
  511. data/lib/relaton/nist/data_fetcher.rb +134 -0
  512. data/lib/relaton/nist/date.rb +7 -0
  513. data/lib/relaton/nist/docidentifier.rb +165 -0
  514. data/lib/relaton/nist/doctype.rb +7 -0
  515. data/lib/relaton/nist/ext.rb +16 -0
  516. data/lib/relaton/nist/hit.rb +18 -0
  517. data/lib/relaton/nist/hit_collection.rb +362 -0
  518. data/lib/relaton/nist/item.rb +19 -0
  519. data/lib/relaton/nist/item_base.rb +16 -0
  520. data/lib/relaton/nist/item_data.rb +6 -0
  521. data/lib/relaton/nist/mods_parser.rb +302 -0
  522. data/lib/relaton/nist/processor.rb +69 -0
  523. data/lib/relaton/nist/pubs_export.rb +69 -0
  524. data/lib/relaton/nist/relation.rb +10 -0
  525. data/lib/relaton/nist/scraper.rb +293 -0
  526. data/lib/relaton/nist/series.yaml +49 -0
  527. data/lib/relaton/nist/util.rb +8 -0
  528. data/lib/relaton/nist.rb +34 -0
  529. data/lib/relaton/oasis/bibdata.rb +8 -0
  530. data/lib/relaton/oasis/bibitem.rb +8 -0
  531. data/lib/relaton/oasis/bibliography.rb +201 -0
  532. data/lib/relaton/oasis/browser_agent.rb +71 -0
  533. data/lib/relaton/oasis/data_fetcher.rb +130 -0
  534. data/lib/relaton/oasis/data_parser.rb +305 -0
  535. data/lib/relaton/oasis/data_parser_utils.rb +330 -0
  536. data/lib/relaton/oasis/data_part_parser.rb +239 -0
  537. data/lib/relaton/oasis/docidentifier.rb +54 -0
  538. data/lib/relaton/oasis/doctype.rb +7 -0
  539. data/lib/relaton/oasis/ext.rb +19 -0
  540. data/lib/relaton/oasis/item.rb +14 -0
  541. data/lib/relaton/oasis/item_data.rb +6 -0
  542. data/lib/relaton/oasis/processor.rb +74 -0
  543. data/lib/relaton/oasis/util.rb +8 -0
  544. data/lib/relaton/oasis.rb +41 -0
  545. data/lib/relaton/ogc/bibdata.rb +8 -0
  546. data/lib/relaton/ogc/bibitem.rb +8 -0
  547. data/lib/relaton/ogc/bibliography.rb +64 -0
  548. data/lib/relaton/ogc/data_fetcher.rb +131 -0
  549. data/lib/relaton/ogc/docidentifier.rb +111 -0
  550. data/lib/relaton/ogc/doctype.rb +12 -0
  551. data/lib/relaton/ogc/ext.rb +15 -0
  552. data/lib/relaton/ogc/hit.rb +18 -0
  553. data/lib/relaton/ogc/hit_collection.rb +111 -0
  554. data/lib/relaton/ogc/item.rb +13 -0
  555. data/lib/relaton/ogc/item_data.rb +6 -0
  556. data/lib/relaton/ogc/processor.rb +59 -0
  557. data/lib/relaton/ogc/scraper.rb +225 -0
  558. data/lib/relaton/ogc/util.rb +8 -0
  559. data/lib/relaton/ogc.rb +30 -0
  560. data/lib/relaton/oiml/bibdata.rb +8 -0
  561. data/lib/relaton/oiml/bibitem.rb +8 -0
  562. data/lib/relaton/oiml/bibliography.rb +169 -0
  563. data/lib/relaton/oiml/docidentifier.rb +48 -0
  564. data/lib/relaton/oiml/doctype.rb +13 -0
  565. data/lib/relaton/oiml/ext.rb +42 -0
  566. data/lib/relaton/oiml/item.rb +20 -0
  567. data/lib/relaton/oiml/item_base.rb +18 -0
  568. data/lib/relaton/oiml/item_data.rb +6 -0
  569. data/lib/relaton/oiml/processor.rb +54 -0
  570. data/lib/relaton/oiml/relation.rb +9 -0
  571. data/lib/relaton/oiml/util.rb +8 -0
  572. data/lib/relaton/oiml.rb +24 -0
  573. data/lib/relaton/omg/bibdata.rb +8 -0
  574. data/lib/relaton/omg/bibitem.rb +8 -0
  575. data/lib/relaton/omg/bibliography.rb +31 -0
  576. data/lib/relaton/omg/docidentifier.rb +67 -0
  577. data/lib/relaton/omg/ext.rb +7 -0
  578. data/lib/relaton/omg/item.rb +9 -0
  579. data/lib/relaton/omg/item_data.rb +6 -0
  580. data/lib/relaton/omg/processor.rb +35 -0
  581. data/lib/relaton/omg/scraper.rb +186 -0
  582. data/lib/relaton/omg/util.rb +8 -0
  583. data/lib/relaton/omg.rb +25 -0
  584. data/lib/relaton/plateau/bibdata.rb +8 -0
  585. data/lib/relaton/plateau/bibitem.rb +8 -0
  586. data/lib/relaton/plateau/bibliography.rb +31 -0
  587. data/lib/relaton/plateau/data_fetcher.rb +176 -0
  588. data/lib/relaton/plateau/doctype.rb +7 -0
  589. data/lib/relaton/plateau/ext.rb +23 -0
  590. data/lib/relaton/plateau/handbook_parser.rb +102 -0
  591. data/lib/relaton/plateau/hit.rb +21 -0
  592. data/lib/relaton/plateau/hit_collection.rb +79 -0
  593. data/lib/relaton/plateau/item.rb +12 -0
  594. data/lib/relaton/plateau/item_data.rb +6 -0
  595. data/lib/relaton/plateau/parser.rb +101 -0
  596. data/lib/relaton/plateau/processor.rb +51 -0
  597. data/lib/relaton/plateau/technical_report_parser.rb +98 -0
  598. data/lib/relaton/plateau/util.rb +8 -0
  599. data/lib/relaton/plateau.rb +29 -0
  600. data/lib/relaton/sdo/config.rb +34 -0
  601. data/lib/relaton/sdo/fetcher.rb +52 -0
  602. data/lib/relaton/sdo/logo.rb +95 -0
  603. data/lib/relaton/sdo/name.rb +26 -0
  604. data/lib/relaton/sdo/organization.rb +71 -0
  605. data/lib/relaton/sdo/store.rb +49 -0
  606. data/lib/relaton/sdo.rb +29 -0
  607. data/lib/relaton/un/bibdata.rb +8 -0
  608. data/lib/relaton/un/bibitem.rb +8 -0
  609. data/lib/relaton/un/bibliography.rb +48 -0
  610. data/lib/relaton/un/doctype.rb +10 -0
  611. data/lib/relaton/un/ext.rb +30 -0
  612. data/lib/relaton/un/hit.rb +56 -0
  613. data/lib/relaton/un/hit_collection.rb +61 -0
  614. data/lib/relaton/un/item.rb +11 -0
  615. data/lib/relaton/un/item_data.rb +6 -0
  616. data/lib/relaton/un/parser.rb +108 -0
  617. data/lib/relaton/un/processor.rb +38 -0
  618. data/lib/relaton/un/session.rb +25 -0
  619. data/lib/relaton/un/token_generator.rb +105 -0
  620. data/lib/relaton/un/util.rb +8 -0
  621. data/lib/relaton/un/wasm/decoder.rb +434 -0
  622. data/lib/relaton/un/wasm/instance.rb +101 -0
  623. data/lib/relaton/un/wasm/interpreter.rb +613 -0
  624. data/lib/relaton/un/wasm/memory.rb +112 -0
  625. data/lib/relaton/un/wasm/module.rb +47 -0
  626. data/lib/relaton/un/wasm.rb +17 -0
  627. data/lib/relaton/un/wasm_v_bg.wasm +0 -0
  628. data/lib/relaton/un.rb +28 -0
  629. data/lib/relaton/version.rb +1 -1
  630. data/lib/relaton/w3c/bibdata.rb +8 -0
  631. data/lib/relaton/w3c/bibitem.rb +8 -0
  632. data/lib/relaton/w3c/bibliography.rb +174 -0
  633. data/lib/relaton/w3c/data_fetcher.rb +487 -0
  634. data/lib/relaton/w3c/data_parser.rb +379 -0
  635. data/lib/relaton/w3c/docidentifier.rb +48 -0
  636. data/lib/relaton/w3c/doctype.rb +7 -0
  637. data/lib/relaton/w3c/ext.rb +11 -0
  638. data/lib/relaton/w3c/governor.rb +32 -0
  639. data/lib/relaton/w3c/item.rb +15 -0
  640. data/lib/relaton/w3c/item_data.rb +6 -0
  641. data/lib/relaton/w3c/processor.rb +49 -0
  642. data/lib/relaton/w3c/pubid.rb +85 -0
  643. data/lib/relaton/w3c/safe_realize.rb +148 -0
  644. data/lib/relaton/w3c/util.rb +8 -0
  645. data/lib/relaton/w3c.rb +36 -0
  646. data/lib/relaton/xsf/bibdata.rb +8 -0
  647. data/lib/relaton/xsf/bibitem.rb +8 -0
  648. data/lib/relaton/xsf/bibliography.rb +84 -0
  649. data/lib/relaton/xsf/data_fetcher.rb +106 -0
  650. data/lib/relaton/xsf/docidentifier.rb +46 -0
  651. data/lib/relaton/xsf/hit.rb +17 -0
  652. data/lib/relaton/xsf/hit_collection.rb +52 -0
  653. data/lib/relaton/xsf/item.rb +13 -0
  654. data/lib/relaton/xsf/item_data.rb +6 -0
  655. data/lib/relaton/xsf/processor.rb +51 -0
  656. data/lib/relaton/xsf/util.rb +9 -0
  657. data/lib/relaton/xsf.rb +34 -0
  658. data/lib/relaton-core.rb +1 -0
  659. data/lib/relaton.rb +85 -0
  660. metadata +775 -161
  661. data/.github/workflows/rake.yml +0 -14
  662. data/.github/workflows/release.yml +0 -24
  663. data/.github/workflows/rubocop.yml +0 -48
  664. data/.gitignore +0 -12
  665. data/.rspec +0 -3
  666. data/CLAUDE.md +0 -78
  667. data/Gemfile +0 -29
  668. data/Rakefile +0 -6
  669. data/docs/CHANGELOG.adoc +0 -16
  670. data/docs/VERSIONING_POLICY.adoc +0 -38
  671. data/docs/navigation.adoc +0 -6
  672. data/lib/relaton/db/version.rb +0 -5
  673. data/relaton.gemspec +0 -72
  674. data/spec/relaton/config_spec.rb +0 -10
  675. data/spec/relaton/db_cache_spec.rb +0 -51
  676. data/spec/relaton/db_spec.rb +0 -567
  677. data/spec/relaton/registry_spec.rb +0 -178
  678. data/spec/relaton/util_spec.rb +0 -3
  679. data/spec/relaton_meta_spec.rb +0 -25
  680. data/spec/relaton_spec.rb +0 -800
  681. data/spec/spec_helper.rb +0 -45
  682. data/spec/support/gb_t_20223_2006.xml +0 -33
  683. data/spec/support/iso_111111119115_1.xml +0 -0
  684. data/spec/support/iso_19115_1.xml +0 -115
  685. data/spec/support/iso_19115_2.xml +0 -95
  686. data/spec/support/rfc_8341.xml +0 -46
  687. data/spec/vcr_cassetes/api_relaton_org.yml +0 -121
  688. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +0 -140
  689. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +0 -202
  690. data/spec/vcr_cassetes/cipm_meeting_43.yml +0 -1505
  691. data/spec/vcr_cassetes/gb_t_20223_2006.yml +0 -729
  692. data/spec/vcr_cassetes/iso_111111119115_1.yml +0 -12951
  693. data/spec/vcr_cassetes/iso_19115_1.yml +0 -17334
  694. data/spec/vcr_cassetes/iso_19115_1_2.yml +0 -322
  695. data/spec/vcr_cassetes/iso_19115_1_std.yml +0 -17334
  696. data/spec/vcr_cassetes/iso_19115_all_parts.yml +0 -185
  697. data/spec/vcr_cassetes/iso_19133_2005.yml +0 -144
  698. data/spec/vcr_cassetes/iso_combined_applied.yml +0 -318
  699. data/spec/vcr_cassetes/iso_combined_included.yml +0 -318
  700. data/spec/vcr_cassetes/ogc_19_025r1.yml +0 -374
  701. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +0 -317
  702. data/spec/vcr_cassetes/rfc_8341.yml +0 -1278
@@ -0,0 +1,65 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Doi
5
+ class Processor < Core::Processor
6
+ attr_reader :idtype
7
+
8
+ def initialize # rubocop:disable Lint/MissingSuper
9
+ @short = :relaton_doi
10
+ @prefix = "DOI"
11
+ @defaultprefix = %r{^doi:}
12
+ @idtype = "DOI"
13
+ end
14
+
15
+ # @param code [String] DOI
16
+ # @param date [String, nil] year
17
+ # @param opts [Hash]
18
+ # @return [RelatonBib::BibliographicItem]
19
+ def get(code, _date, _opts)
20
+ require_relative "../doi"
21
+ Crossref.get(code)
22
+ end
23
+
24
+ #
25
+ # @param [String] source source name
26
+ # @param [Hash] opts
27
+ # @option opts [String] :output directory to output documents
28
+ # @option opts [String] :format
29
+ #
30
+ def fetch_data(_source, _opts)
31
+ Util.info "This processor does not support fetching data by source name. Use `get` method with DOI instead."
32
+ end
33
+
34
+ # @param xml [String]
35
+ # @return [Bib::ItemData]
36
+ def from_xml(xml)
37
+ require_relative "../doi"
38
+ Bib::Item.from_xml xml
39
+ end
40
+
41
+ # @param yaml [String]
42
+ # @return [Bib::ItemData]
43
+ def from_yaml(yaml)
44
+ require_relative "../doi"
45
+ Bib::Item.from_yaml yaml
46
+ end
47
+
48
+ # Returns hash of XML grammar
49
+ # @return [String]
50
+ def grammar_hash
51
+ require_relative "../doi"
52
+ @grammar_hash ||= ::Relaton::Doi.grammar_hash
53
+ end
54
+
55
+ def remove_index_file
56
+ require_relative "../doi" # defines Util — needed when called cold
57
+ Util.info "This processor does not support index file. No action taken."
58
+ end
59
+
60
+ # Returns number of threads
61
+ # @return [Integer]
62
+ def threads = 2
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Doi
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-doi".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/bipm"
4
+ require "relaton/ietf"
5
+ require "relaton/ieee"
6
+ require "relaton/nist"
7
+ require_relative "version"
8
+ require_relative "doi/util"
9
+ require_relative "doi/parser"
10
+ require_relative "doi/crossref"
11
+
12
+ module Relaton
13
+ module Doi
14
+ extend self
15
+
16
+ def grammar_hash
17
+ Digest::MD5.hexdigest Relaton::VERSION
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Easc
3
+ class Bibdata < Item
4
+ model ItemData
5
+ include Bib::BibdataShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Easc
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,95 @@
1
+ require "net/http"
2
+
3
+ module Relaton
4
+ module Easc
5
+ # Index-backed retrieval for the EASC flavor (no scraping). Mirrors
6
+ # Relaton::Oiml::Bibliography: it parses the reference with
7
+ # Pubid::Easc, narrows the pre-built `relaton-data-easc` index by
8
+ # number, fetches the matching per-document YAML over Net::HTTP, and
9
+ # deserializes it into a Relaton::Easc::Item.
10
+ module Bibliography
11
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-easc/main/".freeze
12
+
13
+ class << self
14
+ #
15
+ # Search for an EASC publication by its identifier.
16
+ #
17
+ # @param text [String, Pubid::Easc::Identifier] the EASC reference to
18
+ # look up (e.g. "ПМГ 03-2025", "РМГ 151-2025", or the Latin
19
+ # transliteration "PMG 03-2025")
20
+ # @param year [String, nil] the edition year (optional; usually embedded
21
+ # in the reference)
22
+ # @param _opts [Hash] options (unused)
23
+ #
24
+ # @return [Relaton::Easc::Item, nil] the publication or nil if not found
25
+ #
26
+ def search(text, year = nil, _opts = {})
27
+ pubid = text.is_a?(String) ? ::Pubid::Easc.parse(text) : text
28
+ Util.info "Fetching from Relaton repository ...", key: pubid.to_s
29
+ # Pass the pubid so Relaton::Index narrows candidates by number via
30
+ # binary search before applying the block. Every row's `:id` is a
31
+ # Pubid::Easc::Identifier (deserialized via the `pubid_class` passed to
32
+ # #index), so the block compares pubids and picks the latest edition.
33
+ row = index.search(pubid) { |r| pubid_match?(r[:id], pubid, year) }
34
+ .max_by { |r| r[:id].year.to_i }
35
+ unless row
36
+ Util.info "Not found.", key: pubid.to_s
37
+ return
38
+ end
39
+
40
+ uri = URI("#{ENDPOINT}#{row[:file]}")
41
+ resp = Net::HTTP.get_response uri
42
+ unless resp.code == "200"
43
+ raise Relaton::RequestError, "Could not access #{uri}: HTTP #{resp.code}"
44
+ end
45
+
46
+ item = Relaton::Easc::Item.from_yaml resp.body
47
+ Util.info "Found: `#{item.docidentifier.first&.content}`", key: pubid.to_s
48
+ item.tap { |i| i.fetched = Date.today.to_s }
49
+ rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
50
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
51
+ Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
52
+ Errno::ETIMEDOUT => e
53
+ raise Relaton::RequestError, "Could not access #{uri}: #{e.message}"
54
+ end
55
+
56
+ #
57
+ # Fetch an EASC publication. EASC citations are always dated
58
+ # (e.g. "ПМГ 03-2025"), so there is no undated/most-recent handling to
59
+ # mirror from the ISO/OIML fetchers — `get` just returns what `search`
60
+ # resolves.
61
+ #
62
+ # @see #search
63
+ #
64
+ def get(ref, year = nil, opts = {})
65
+ search(ref, year, opts)
66
+ end
67
+
68
+ private
69
+
70
+ def index
71
+ Relaton::Index.find_or_create(
72
+ :easc,
73
+ url: "#{ENDPOINT}#{INDEXFILE}.zip",
74
+ file: "#{INDEXFILE}.yaml",
75
+ pubid_class: ::Pubid::Easc::Identifier,
76
+ )
77
+ end
78
+
79
+ # Both `row_id` and `query` are Pubid::Easc::Identifier instances. A row
80
+ # matches when its series, defense variant, and number are equal (so a
81
+ # ПМГ never matches a РМГ, and the «В» defense variant never matches the
82
+ # plain series). Year is nil-tolerant: an unqualified query finds the
83
+ # latest edition (selected by `max_by` in #search); the `year` argument
84
+ # lets a caller pin an edition the reference string omitted.
85
+ def pubid_match?(row_id, query, year)
86
+ wanted_year = (query.year || year)&.to_s
87
+ row_id.series == query.series &&
88
+ row_id.variant.to_s == query.variant.to_s &&
89
+ row_id.number.to_s == query.number.to_s &&
90
+ (wanted_year.nil? || row_id.year.to_s == wanted_year)
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,100 @@
1
+ module Relaton
2
+ module Easc
3
+ # Structured EASC document identifier. The docid string is the canonical
4
+ # citation form (e.g. "ПМГ 03-2025", "РМГ 151-2025"), parsed into a
5
+ # `Pubid::Easc::Identifier` kept in `@pubid` while the lutaml `content`
6
+ # attribute stays a plain string for serialization.
7
+ #
8
+ # Parsing is **soft**: `content=` lazily requires pubid and rescues
9
+ # `LoadError`/`StandardError`, so a missing gem or non-EASC content leaves
10
+ # `@pubid` nil rather than raising.
11
+ #
12
+ # This was an empty subclass, which meant it inherited
13
+ # `Bib::Docidentifier`'s abstract `remove_part!` / `remove_date!` /
14
+ # `to_all_parts!`. `Bib::ItemData` broadcasts all three to every
15
+ # docidentifier, so `#to_all_parts` and `#to_most_recent_reference` raised
16
+ # `NotImplementedError` on **every** EASC item — and it descends from
17
+ # `ScriptError`, so a caller's `rescue => e` did not catch it.
18
+ class Docidentifier < Bib::Docidentifier
19
+ attr_reader :pubid
20
+
21
+ # Capture the inherited content setter before overriding #content=, so
22
+ # #refresh_content! can write the re-rendered string back WITHOUT
23
+ # re-parsing (a re-parse would rebuild @pubid and discard in-place
24
+ # mutations such as `all_parts = true`).
25
+ alias_method :store_content, :content=
26
+
27
+ def initialize(attrs = {}, options = {})
28
+ pubid = attrs.is_a?(Hash) ? attrs.delete(:pubid) : nil
29
+ attrs[:content] ||= pubid.to_s if pubid
30
+ super
31
+ @pubid = pubid if pubid
32
+ end
33
+
34
+ def content=(value)
35
+ super
36
+ return unless value
37
+
38
+ @pubid = begin
39
+ require "pubid"
40
+ ::Pubid::Easc.parse(value)
41
+ rescue LoadError, StandardError
42
+ nil
43
+ end
44
+ end
45
+
46
+ # `Pubid::Easc::Identifier` models publisher/series/variant/number/year,
47
+ # so the mapping is EASC-specific:
48
+ #
49
+ # - **`remove_date!` → clears `year`.** EASC carries no separate date
50
+ # component; the year is the edition discriminator, so clearing it
51
+ # yields the undated ("most recent") reference: `ПМГ 03-2025` →
52
+ # `ПМГ 03`.
53
+ # - **`remove_part!` → clears the (unused) `part`/`subpart`.** EASC models
54
+ # no part, so this is a no-op for the rendered string; implemented so it
55
+ # never raises, and it starts working if pubid-easc ever adds one.
56
+ # - **`to_all_parts!` → both, then wraps `@pubid` in pubid's `AllParts`.**
57
+ # `content` stays the plain stripped id — EASC's own renderer has no
58
+ # "(all parts)" marker, and `content` is cached from the pre-wrap
59
+ # pubid on purpose. `#pubid` itself, read directly, now answers
60
+ # `all_parts? == true` and renders WITH pubid's generic marker
61
+ # (`#to_s`), since it's the wrapper.
62
+ #
63
+ # All three no-op safely when `@pubid` is nil.
64
+
65
+ def remove_part!
66
+ clear_attr!(:part)
67
+ end
68
+
69
+ def remove_date!
70
+ clear_attr!(:year)
71
+ end
72
+
73
+ def to_all_parts!
74
+ return if !@pubid || @pubid.all_parts?
75
+
76
+ # `#exclude` (no args) rebuilds a full independent copy — `remove_part!`
77
+ # / `remove_date!` mutate `@pubid` in place, so a bare reference here
78
+ # would lose the original year to that mutation too.
79
+ original = @pubid.exclude
80
+ remove_part!
81
+ remove_date!
82
+ @pubid = original.to_all_parts
83
+ end
84
+
85
+ private
86
+
87
+ def clear_attr!(attr)
88
+ return unless @pubid && @pubid.respond_to?("#{attr}=")
89
+
90
+ @pubid.public_send("#{attr}=", nil)
91
+ @pubid.subpart = nil if attr == :part && @pubid.respond_to?(:subpart=)
92
+ refresh_content!
93
+ end
94
+
95
+ def refresh_content!
96
+ store_content(@pubid.to_s) if @pubid
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,14 @@
1
+ module Relaton
2
+ module Easc
3
+ # EASC document types. Two series, both issued by the Eurasian
4
+ # Economic Standards Council:
5
+ # * PMG — ПМГ (Правила по межгосударственной стандартизации)
6
+ # * RMG — РМГ (Рекомендации по межгосударственной стандартизации)
7
+ class Doctype < Bib::Doctype
8
+ TYPES = %w[
9
+ pmg
10
+ rmg
11
+ ].freeze
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,44 @@
1
+ module Relaton
2
+ module Easc
3
+ # EASC bibliographic item extension. Adds EASC-specific structured
4
+ # metadata on top of the shared Relaton::Bib::Ext so the fields
5
+ # round-trip through both XML and YAML without per-repo merge hacks.
6
+ #
7
+ # Fields:
8
+ # * urn — urn:easc:<series>:...
9
+ # * webpage — mgscatalog.by detail URL
10
+ # * session — МГС council session that adopted the doc
11
+ # (e.g. "67МГС", "19МГС")
12
+ # * developer — Разработчик (e.g. "Российская Федерация")
13
+ # * joining_states — country codes of states that joined
14
+ # (collection: e.g. ["АРМ", "БЕИ", "КАЗ"])
15
+ # * assigned_to — Закреплен за (e.g. "МТК 536 Методология...")
16
+ class Ext < Bib::Ext
17
+ attribute :doctype, Doctype
18
+ attribute :urn, :string
19
+ attribute :webpage, :string
20
+ attribute :session, :string
21
+ attribute :developer, :string
22
+ attribute :joining_states, :string, collection: true, initialize_empty: true
23
+ attribute :assigned_to, :string
24
+
25
+ xml do
26
+ map_element "urn", to: :urn
27
+ map_element "webpage", to: :webpage
28
+ map_element "session", to: :session
29
+ map_element "developer", to: :developer
30
+ map_element "joining_states", to: :joining_states
31
+ map_element "assigned_to", to: :assigned_to
32
+ end
33
+
34
+ key_value do
35
+ map_element "urn", to: :urn
36
+ map_element "webpage", to: :webpage
37
+ map_element "session", to: :session
38
+ map_element "developer", to: :developer
39
+ map_element "joining_states", to: :joining_states
40
+ map_element "assigned_to", to: :assigned_to
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,13 @@
1
+ module Relaton
2
+ module Easc
3
+ # EASC bibliographic item. Re-declares +ext+ to use the typed Ext
4
+ # subclass so EASC-specific fields round-trip natively.
5
+ class Item < Bib::Item
6
+ model ItemData
7
+
8
+ attribute :ext, Ext
9
+ attribute :docidentifier, Docidentifier, collection: true,
10
+ initialize_empty: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ module Relaton
2
+ module Easc
3
+ class ItemBase < Lutaml::Model::Serializable
4
+ include Bib::NamespaceHelper
5
+
6
+ attr_accessor :type
7
+
8
+ model ItemData
9
+
10
+ instance_exec(&Bib::ItemShared::ATTRIBUTES)
11
+
12
+ xml do
13
+ map_attribute "type", to: :type
14
+ instance_exec(&Bib::ItemShared::XML_BODY)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module Relaton
2
+ module Easc
3
+ class ItemData < Bib::ItemData
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,46 @@
1
+ require "relaton/core/processor"
2
+
3
+ module Relaton
4
+ module Easc
5
+ # Relaton processor for the EASC flavor. Registered by
6
+ # Relaton::Db::Registry when the unified gem loads (see
7
+ # lib/relaton/db/registry.rb). Supports `relaton fetch easc ...`
8
+ # once the relaton-data-easc dataset is installed.
9
+ class Processor < Core::Processor
10
+ attr_reader :idtype
11
+
12
+ def initialize
13
+ @short = :relaton_easc
14
+ @prefix = "EASC"
15
+ # Both Cyrillic and Latin series prefixes route here.
16
+ @defaultprefix = %r{^(?:ПМГ|РМГ|PMG|RMG)\b}
17
+ @idtype = "EASC"
18
+ end
19
+
20
+ def get(code, date, opts)
21
+ require_relative "../easc"
22
+ Bibliography.get(code, date, opts)
23
+ end
24
+
25
+ def from_xml(xml)
26
+ require_relative "../easc"
27
+ Item.from_xml xml
28
+ end
29
+
30
+ def from_yaml(yaml)
31
+ require_relative "../easc"
32
+ Item.from_yaml(yaml)
33
+ end
34
+
35
+ def grammar_hash
36
+ require_relative "../easc"
37
+ @grammar_hash ||= ::Relaton::Easc.grammar_hash
38
+ end
39
+
40
+ def remove_index_file
41
+ require_relative "../easc"
42
+ Relaton::Index.find_or_create(:easc, url: true, file: "#{INDEXFILE}.yaml").remove_file
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Easc
3
+ module Util
4
+ extend Relaton::Bib::Util
5
+ PROGNAME = "relaton-easc".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "relaton/bib"
4
+ require "relaton/index"
5
+ require "relaton/version"
6
+ require "pubid"
7
+
8
+ # Relaton::Easc is the EASC (Евразийский экономический совет /
9
+ # Eurasian Economic Standards Council) flavor of the unified relaton
10
+ # gem. Adds typed Ext fields (urn, webpage, session, developer,
11
+ # joining_states) so they round-trip natively through YAML and XML
12
+ # without per-repo merge hacks.
13
+ module Relaton
14
+ module Easc
15
+ INDEXFILE = "index-v2".freeze
16
+
17
+ class Error < StandardError; end
18
+
19
+ autoload :Doctype, "relaton/easc/doctype"
20
+ autoload :Ext, "relaton/easc/ext"
21
+ autoload :ItemData, "relaton/easc/item_data"
22
+ autoload :ItemBase, "relaton/easc/item_base"
23
+ autoload :Item, "relaton/easc/item"
24
+ autoload :Bibitem, "relaton/easc/bibitem"
25
+ autoload :Bibdata, "relaton/easc/bibdata"
26
+ autoload :Docidentifier, "relaton/easc/docidentifier"
27
+ autoload :Util, "relaton/easc/util"
28
+ autoload :Bibliography, "relaton/easc/bibliography"
29
+ autoload :Processor, "relaton/easc/processor"
30
+
31
+ def self.grammar_hash
32
+ Digest::MD5.hexdigest Relaton::VERSION
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ecma
3
+ class Bibdata < Item
4
+ model ItemData
5
+ include Bib::BibdataShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Relaton
2
+ module Ecma
3
+ class Bibitem < Item
4
+ model ItemData
5
+ include Bib::BibitemShared
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal:true
2
+
3
+ require "mechanize"
4
+
5
+ module Relaton
6
+ module Ecma
7
+ # ECMA bibliography module
8
+ module Bibliography
9
+ ENDPOINT = "https://raw.githubusercontent.com/relaton/relaton-data-ecma/refs/heads/v2/"
10
+
11
+ class << self
12
+ # @return [Relaton::Index::Type]
13
+ def index
14
+ Relaton::Index.find_or_create(
15
+ :ECMA, url: "#{ENDPOINT}#{INDEXFILE}.zip", file: "#{INDEXFILE}.yaml",
16
+ pubid_class: ::Pubid::Ecma::Identifier
17
+ )
18
+ end
19
+
20
+ #
21
+ # Search the index for a reference.
22
+ #
23
+ # **The pubid is passed to `Index::Type#search`, not the string.**
24
+ # `search_candidates` narrows only when the argument is not a `String`,
25
+ # and a block alone never narrows — so the plain string this used to
26
+ # pass disabled the binary search however the index was built.
27
+ # `pubid_class:` on the index alone fixes nothing; both had to change
28
+ # together.
29
+ #
30
+ # A reference pubid cannot parse finds nothing. There is deliberately no
31
+ # substring-scan fallback here (the OGC idiom): an ECMA id renders as
32
+ # `ECMA-262 ed17`, so a substring scan would answer a truncated
33
+ # reference like `ECMA-26` with every ECMA-26x document — an ambiguous
34
+ # answer is worse than none. By the same trade-off, a reference must now
35
+ # parse WHOLE: the old regex was unanchored at the end, so
36
+ # `ECMA-6 (draft)` silently resolved to ECMA-6 and now does not. See
37
+ # lib/relaton/ecma/CLAUDE.md for the measured table.
38
+ #
39
+ # The rows are selected with pubid's subset match `pubid === row`, the
40
+ # default of `Index::Type#search`. An `edition` or a `volume` that the
41
+ # reference omits matches any value, so a bare `ECMA-269` reaches the
42
+ # edition rows. pubid declares `part` strict for ECMA, so a bare
43
+ # `ECMA-418` does not match `ECMA-418-1`. The class must be identical,
44
+ # which keeps `ECMA-100` and `ECMA TR/100` apart.
45
+ #
46
+ # @param ref [String] the ECMA reference (e.g. "ECMA-6", "ECMA-269 ed3 vol2")
47
+ #
48
+ # @return [Array<Hash>] matching index rows
49
+ #
50
+ def search(ref)
51
+ pubid = parse_ref ref
52
+ return [] unless pubid
53
+
54
+ index.search(pubid)
55
+ end
56
+
57
+ #
58
+ # Parse a user reference into a `Pubid::Ecma::Identifier`, or nil.
59
+ #
60
+ # `Pubid::Ecma` takes the space form (`ECMA 6`) as well as the hyphen
61
+ # one, and parses the ` ed<N>` / ` vol<N>` suffixes the old bespoke
62
+ # regex accepted, so every reference shape the flavor has to handle
63
+ # parses without normalization here.
64
+ #
65
+ # @param ref [String]
66
+ # @return [Pubid::Ecma::Identifier, nil]
67
+ #
68
+ # An unrecognized reference **raises**; like ISO, ETSI and 3GPP we let it
69
+ # propagate. relaton-cli rescues `Pubid::Errors::Error` and renders
70
+ # `"..." is not a recognized standards identifier`
71
+ # (`gems/relaton-cli/lib/relaton/cli/command.rb:324`), and `Db#fetch`
72
+ # logs it through the `StandardError` arm at `lib/relaton/db.rb:122`.
73
+ # Rescuing here would collapse "this identifier is malformed" into "no
74
+ # such document", leaving a caller unable to tell them apart.
75
+ def parse_ref(ref)
76
+ ::Pubid::Ecma::Identifier.parse ref.to_s.strip
77
+ end
78
+
79
+ # @param code [String] the ECMA standard Code to look up (e..g "ECMA-6")
80
+ # @param year [String] not used
81
+ # @param opts [Hash] not used
82
+ # @return [Relaton::Ecma::ItemData] Relaton of reference
83
+ def get(code, _year = nil, _opts = {})
84
+ Util.info "Fetching from Relaton repository ...", key: code
85
+ result = fetch_doc(code)
86
+ if result
87
+ Util.info "Found: `#{result.docidentifier.first.content}`", key: code
88
+ else
89
+ Util.info "Not found.", key: code
90
+ end
91
+ result
92
+ end
93
+
94
+ private
95
+
96
+ #
97
+ # The index row for a reference: latest edition, then lowest volume.
98
+ #
99
+ # That is the selection order the bespoke `compare_edition_volume` +
100
+ # `min` implemented, kept deliberately — but the edition is now compared
101
+ # segment-wise as INTEGERS. Comparing the rendered strings made "9" beat
102
+ # "17" and "5" beat "5.1", so 5 of the 421 document families returned an
103
+ # older document than the reference asked for: ECMA-262 answered ed9
104
+ # (2018-06) where ed17 (2026-06) exists, ECMA-74 ed9 (2005-12) where
105
+ # ed22 (2025-12) exists, and likewise 402, 328 and 109.
106
+ #
107
+ # `r[:file]` breaks the tie, because the index sort is not stable.
108
+ #
109
+ # @param ref [String]
110
+ # @return [Hash, nil]
111
+ #
112
+ def best_match(ref)
113
+ search(ref).max_by { |r| [edition_key(r[:id].edition), -r[:id].volume.to_i, r[:file]] }
114
+ end
115
+
116
+ #
117
+ # Order key for an ECMA edition: its dot-separated segments as integers.
118
+ #
119
+ # `[]` for an absent edition, which therefore sorts below every present
120
+ # one — right for the 64 edition-less rows (mementos, a few reports),
121
+ # none of which shares a document with an edition-bearing row.
122
+ #
123
+ # @param edition [String, nil]
124
+ # @return [Array<Integer>]
125
+ #
126
+ def edition_key(edition)
127
+ edition.to_s.split(".").map(&:to_i)
128
+ end
129
+
130
+ def fetch_doc(code)
131
+ row = best_match code
132
+ return unless row
133
+
134
+ url = "#{ENDPOINT}#{row[:file]}"
135
+ resp = Mechanize.new.get(url)
136
+ Item.from_yaml(resp.body).tap { |item| item.fetched = Date.today.to_s }
137
+ rescue Mechanize::ResponseCodeError => e
138
+ return if e.response_code == "404"
139
+
140
+ raise Relaton::RequestError, "No document found for #{code} reference. #{e.message}"
141
+ rescue Mechanize::RedirectLimitReachedError, Timeout::Error,
142
+ Mechanize::UnauthorizedError, Mechanize::UnsupportedSchemeError,
143
+ Mechanize::ResponseReadError, Mechanize::ChunkedTerminationError => e
144
+ raise Relaton::RequestError, "No document found for #{code} reference. #{e.message}"
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end