sisimai 4.16.0-java

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sisimai might be problematic. Click here for more details.

Files changed (574) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +182 -0
  5. data/.travis.yml +18 -0
  6. data/ANALYTICAL-PRECISION +56 -0
  7. data/Changes +36 -0
  8. data/Developers.mk +129 -0
  9. data/Gemfile +15 -0
  10. data/LICENSE +25 -0
  11. data/Makefile +70 -0
  12. data/README.md +361 -0
  13. data/Rakefile +12 -0
  14. data/Repository.mk +69 -0
  15. data/appveyor.yml +23 -0
  16. data/bin/console +14 -0
  17. data/bin/setup +7 -0
  18. data/lib/sisimai.rb +95 -0
  19. data/lib/sisimai/address.rb +224 -0
  20. data/lib/sisimai/arf.rb +338 -0
  21. data/lib/sisimai/data.rb +409 -0
  22. data/lib/sisimai/data/json.rb +40 -0
  23. data/lib/sisimai/data/yaml.rb +32 -0
  24. data/lib/sisimai/datetime.rb +511 -0
  25. data/lib/sisimai/mail.rb +82 -0
  26. data/lib/sisimai/mail/maildir.rb +82 -0
  27. data/lib/sisimai/mail/mbox.rb +69 -0
  28. data/lib/sisimai/mail/stdin.rb +53 -0
  29. data/lib/sisimai/mda.rb +152 -0
  30. data/lib/sisimai/message.rb +525 -0
  31. data/lib/sisimai/mime.rb +127 -0
  32. data/lib/sisimai/msp.rb +54 -0
  33. data/lib/sisimai/msp/de/einsundeins.rb +174 -0
  34. data/lib/sisimai/msp/de/gmx.rb +197 -0
  35. data/lib/sisimai/msp/jp/biglobe.rb +179 -0
  36. data/lib/sisimai/msp/jp/ezweb.rb +292 -0
  37. data/lib/sisimai/msp/jp/kddi.rb +195 -0
  38. data/lib/sisimai/msp/ru/mailru.rb +306 -0
  39. data/lib/sisimai/msp/ru/yandex.rb +241 -0
  40. data/lib/sisimai/msp/uk/messagelabs.rb +250 -0
  41. data/lib/sisimai/msp/us/amazonses.rb +248 -0
  42. data/lib/sisimai/msp/us/amazonworkmail.rb +224 -0
  43. data/lib/sisimai/msp/us/aol.rb +234 -0
  44. data/lib/sisimai/msp/us/bigfoot.rb +243 -0
  45. data/lib/sisimai/msp/us/facebook.rb +306 -0
  46. data/lib/sisimai/msp/us/google.rb +357 -0
  47. data/lib/sisimai/msp/us/office365.rb +273 -0
  48. data/lib/sisimai/msp/us/outlook.rb +242 -0
  49. data/lib/sisimai/msp/us/receivingses.rb +247 -0
  50. data/lib/sisimai/msp/us/sendgrid.rb +257 -0
  51. data/lib/sisimai/msp/us/verizon.rb +311 -0
  52. data/lib/sisimai/msp/us/yahoo.rb +178 -0
  53. data/lib/sisimai/msp/us/zoho.rb +198 -0
  54. data/lib/sisimai/mta.rb +54 -0
  55. data/lib/sisimai/mta/activehunter.rb +155 -0
  56. data/lib/sisimai/mta/apachejames.rb +194 -0
  57. data/lib/sisimai/mta/courier.rb +307 -0
  58. data/lib/sisimai/mta/domino.rb +209 -0
  59. data/lib/sisimai/mta/exchange.rb +314 -0
  60. data/lib/sisimai/mta/exim.rb +549 -0
  61. data/lib/sisimai/mta/imailserver.rb +227 -0
  62. data/lib/sisimai/mta/interscanmss.rb +167 -0
  63. data/lib/sisimai/mta/mailfoundry.rb +173 -0
  64. data/lib/sisimai/mta/mailmarshalsmtp.rb +206 -0
  65. data/lib/sisimai/mta/mcafee.rb +201 -0
  66. data/lib/sisimai/mta/messagingserver.rb +241 -0
  67. data/lib/sisimai/mta/mfilter.rb +190 -0
  68. data/lib/sisimai/mta/mxlogic.rb +283 -0
  69. data/lib/sisimai/mta/notes.rb +206 -0
  70. data/lib/sisimai/mta/opensmtpd.rb +225 -0
  71. data/lib/sisimai/mta/postfix.rb +306 -0
  72. data/lib/sisimai/mta/qmail.rb +335 -0
  73. data/lib/sisimai/mta/sendmail.rb +317 -0
  74. data/lib/sisimai/mta/surfcontrol.rb +193 -0
  75. data/lib/sisimai/mta/userdefined.rb +148 -0
  76. data/lib/sisimai/mta/v5sendmail.rb +232 -0
  77. data/lib/sisimai/mta/x1.rb +156 -0
  78. data/lib/sisimai/mta/x2.rb +157 -0
  79. data/lib/sisimai/mta/x3.rb +171 -0
  80. data/lib/sisimai/mta/x4.rb +365 -0
  81. data/lib/sisimai/mta/x5.rb +208 -0
  82. data/lib/sisimai/order.rb +220 -0
  83. data/lib/sisimai/reason.rb +234 -0
  84. data/lib/sisimai/reason/blocked.rb +105 -0
  85. data/lib/sisimai/reason/contenterror.rb +53 -0
  86. data/lib/sisimai/reason/exceedlimit.rb +60 -0
  87. data/lib/sisimai/reason/expired.rb +53 -0
  88. data/lib/sisimai/reason/filtered.rb +98 -0
  89. data/lib/sisimai/reason/hasmoved.rb +45 -0
  90. data/lib/sisimai/reason/hostunknown.rb +79 -0
  91. data/lib/sisimai/reason/mailboxfull.rb +118 -0
  92. data/lib/sisimai/reason/mailererror.rb +55 -0
  93. data/lib/sisimai/reason/mesgtoobig.rb +82 -0
  94. data/lib/sisimai/reason/networkerror.rb +58 -0
  95. data/lib/sisimai/reason/norelaying.rb +71 -0
  96. data/lib/sisimai/reason/notaccept.rb +63 -0
  97. data/lib/sisimai/reason/onhold.rb +45 -0
  98. data/lib/sisimai/reason/rejected.rb +101 -0
  99. data/lib/sisimai/reason/securityerror.rb +72 -0
  100. data/lib/sisimai/reason/spamdetected.rb +172 -0
  101. data/lib/sisimai/reason/suspend.rb +58 -0
  102. data/lib/sisimai/reason/systemerror.rb +69 -0
  103. data/lib/sisimai/reason/systemfull.rb +45 -0
  104. data/lib/sisimai/reason/toomanyconn.rb +73 -0
  105. data/lib/sisimai/reason/userunknown.rb +194 -0
  106. data/lib/sisimai/rfc2606.rb +24 -0
  107. data/lib/sisimai/rfc3464.rb +497 -0
  108. data/lib/sisimai/rfc3834.rb +150 -0
  109. data/lib/sisimai/rfc5322.rb +204 -0
  110. data/lib/sisimai/rhost.rb +47 -0
  111. data/lib/sisimai/rhost/googleapps.rb +237 -0
  112. data/lib/sisimai/smtp.rb +58 -0
  113. data/lib/sisimai/smtp/reply.rb +84 -0
  114. data/lib/sisimai/smtp/status.rb +758 -0
  115. data/lib/sisimai/string.rb +65 -0
  116. data/lib/sisimai/time.rb +11 -0
  117. data/lib/sisimai/version.rb +4 -0
  118. data/set-of-emails/README.md +35 -0
  119. data/set-of-emails/mailbox/mbox-0 +2467 -0
  120. data/set-of-emails/mailbox/mbox-1 +71 -0
  121. data/set-of-emails/maildir/bsd/README.md +261 -0
  122. data/set-of-emails/maildir/bsd/activehunter-01.eml +54 -0
  123. data/set-of-emails/maildir/bsd/activehunter-02.eml +53 -0
  124. data/set-of-emails/maildir/bsd/apachejames-01.eml +46 -0
  125. data/set-of-emails/maildir/bsd/arf-01.eml +66 -0
  126. data/set-of-emails/maildir/bsd/arf-02.eml +68 -0
  127. data/set-of-emails/maildir/bsd/arf-03.eml +56 -0
  128. data/set-of-emails/maildir/bsd/arf-04.eml +89 -0
  129. data/set-of-emails/maildir/bsd/arf-05.eml +82 -0
  130. data/set-of-emails/maildir/bsd/arf-06.eml +166 -0
  131. data/set-of-emails/maildir/bsd/arf-07.eml +59 -0
  132. data/set-of-emails/maildir/bsd/arf-08.eml +103 -0
  133. data/set-of-emails/maildir/bsd/arf-09.eml +104 -0
  134. data/set-of-emails/maildir/bsd/arf-10.eml +56 -0
  135. data/set-of-emails/maildir/bsd/arf-11.eml +37 -0
  136. data/set-of-emails/maildir/bsd/arf-12.eml +40 -0
  137. data/set-of-emails/maildir/bsd/arf-13.eml +76 -0
  138. data/set-of-emails/maildir/bsd/arf-14.eml +333 -0
  139. data/set-of-emails/maildir/bsd/arf-15.eml +66 -0
  140. data/set-of-emails/maildir/bsd/courier-01.eml +79 -0
  141. data/set-of-emails/maildir/bsd/courier-02.eml +83 -0
  142. data/set-of-emails/maildir/bsd/courier-03.eml +85 -0
  143. data/set-of-emails/maildir/bsd/courier-04.eml +87 -0
  144. data/set-of-emails/maildir/bsd/de-einsundeins-01.eml +38 -0
  145. data/set-of-emails/maildir/bsd/de-gmx-01.eml +52 -0
  146. data/set-of-emails/maildir/bsd/de-gmx-02.eml +51 -0
  147. data/set-of-emails/maildir/bsd/de-gmx-03.eml +56 -0
  148. data/set-of-emails/maildir/bsd/de-gmx-04.eml +51 -0
  149. data/set-of-emails/maildir/bsd/domino-01.eml +33 -0
  150. data/set-of-emails/maildir/bsd/domino-02.eml +83 -0
  151. data/set-of-emails/maildir/bsd/exchange-01.eml +31 -0
  152. data/set-of-emails/maildir/bsd/exchange-02.eml +67 -0
  153. data/set-of-emails/maildir/bsd/exchange-03.eml +52 -0
  154. data/set-of-emails/maildir/bsd/exchange-04.eml +28 -0
  155. data/set-of-emails/maildir/bsd/exchange-05.eml +56 -0
  156. data/set-of-emails/maildir/bsd/exchange-06.eml +151 -0
  157. data/set-of-emails/maildir/bsd/exim-01.eml +46 -0
  158. data/set-of-emails/maildir/bsd/exim-02.eml +41 -0
  159. data/set-of-emails/maildir/bsd/exim-03.eml +42 -0
  160. data/set-of-emails/maildir/bsd/exim-04.eml +46 -0
  161. data/set-of-emails/maildir/bsd/exim-05.eml +49 -0
  162. data/set-of-emails/maildir/bsd/exim-06.eml +44 -0
  163. data/set-of-emails/maildir/bsd/exim-07.eml +28 -0
  164. data/set-of-emails/maildir/bsd/exim-08.eml +42 -0
  165. data/set-of-emails/maildir/bsd/exim-09.eml +169 -0
  166. data/set-of-emails/maildir/bsd/exim-10.eml +718 -0
  167. data/set-of-emails/maildir/bsd/exim-11.eml +718 -0
  168. data/set-of-emails/maildir/bsd/exim-12.eml +75 -0
  169. data/set-of-emails/maildir/bsd/exim-13.eml +145 -0
  170. data/set-of-emails/maildir/bsd/exim-14.eml +32 -0
  171. data/set-of-emails/maildir/bsd/exim-15.eml +49 -0
  172. data/set-of-emails/maildir/bsd/exim-16.eml +98 -0
  173. data/set-of-emails/maildir/bsd/exim-17.eml +50 -0
  174. data/set-of-emails/maildir/bsd/exim-18.eml +96 -0
  175. data/set-of-emails/maildir/bsd/exim-19.eml +52 -0
  176. data/set-of-emails/maildir/bsd/exim-20.eml +159 -0
  177. data/set-of-emails/maildir/bsd/exim-21.eml +150 -0
  178. data/set-of-emails/maildir/bsd/exim-22.eml +50 -0
  179. data/set-of-emails/maildir/bsd/exim-23.eml +57 -0
  180. data/set-of-emails/maildir/bsd/exim-24.eml +107 -0
  181. data/set-of-emails/maildir/bsd/exim-25.eml +18 -0
  182. data/set-of-emails/maildir/bsd/exim-26.eml +111 -0
  183. data/set-of-emails/maildir/bsd/exim-27.eml +120 -0
  184. data/set-of-emails/maildir/bsd/exim-28.eml +148 -0
  185. data/set-of-emails/maildir/bsd/google-apps-01.eml +66 -0
  186. data/set-of-emails/maildir/bsd/imailserver-01.eml +27 -0
  187. data/set-of-emails/maildir/bsd/imailserver-02.eml +36 -0
  188. data/set-of-emails/maildir/bsd/imailserver-03.eml +28 -0
  189. data/set-of-emails/maildir/bsd/imailserver-04.eml +15 -0
  190. data/set-of-emails/maildir/bsd/imailserver-05.eml +92 -0
  191. data/set-of-emails/maildir/bsd/imailserver-06.eml +29 -0
  192. data/set-of-emails/maildir/bsd/interscanmss-01.eml +49 -0
  193. data/set-of-emails/maildir/bsd/interscanmss-02.eml +259 -0
  194. data/set-of-emails/maildir/bsd/jp-biglobe-01.eml +43 -0
  195. data/set-of-emails/maildir/bsd/jp-ezweb-01.eml +36 -0
  196. data/set-of-emails/maildir/bsd/jp-ezweb-02.eml +65 -0
  197. data/set-of-emails/maildir/bsd/jp-ezweb-03.eml +35 -0
  198. data/set-of-emails/maildir/bsd/jp-ezweb-04.eml +38 -0
  199. data/set-of-emails/maildir/bsd/jp-ezweb-05.eml +38 -0
  200. data/set-of-emails/maildir/bsd/jp-ezweb-06.eml +33 -0
  201. data/set-of-emails/maildir/bsd/jp-kddi-01.eml +49 -0
  202. data/set-of-emails/maildir/bsd/jp-kddi-02.eml +54 -0
  203. data/set-of-emails/maildir/bsd/jp-kddi-03.eml +54 -0
  204. data/set-of-emails/maildir/bsd/mailfoundry-01.eml +50 -0
  205. data/set-of-emails/maildir/bsd/mailfoundry-02.eml +49 -0
  206. data/set-of-emails/maildir/bsd/mailmarshalsmtp-01.eml +43 -0
  207. data/set-of-emails/maildir/bsd/mcafee-01.eml +63 -0
  208. data/set-of-emails/maildir/bsd/mcafee-02.eml +65 -0
  209. data/set-of-emails/maildir/bsd/mcafee-03.eml +59 -0
  210. data/set-of-emails/maildir/bsd/messagingserver-01.eml +102 -0
  211. data/set-of-emails/maildir/bsd/messagingserver-02.eml +72 -0
  212. data/set-of-emails/maildir/bsd/messagingserver-03.eml +70 -0
  213. data/set-of-emails/maildir/bsd/messagingserver-04.eml +102 -0
  214. data/set-of-emails/maildir/bsd/messagingserver-05.eml +98 -0
  215. data/set-of-emails/maildir/bsd/messagingserver-06.eml +101 -0
  216. data/set-of-emails/maildir/bsd/messagingserver-07.eml +129 -0
  217. data/set-of-emails/maildir/bsd/mfilter-01.eml +49 -0
  218. data/set-of-emails/maildir/bsd/mfilter-02.eml +48 -0
  219. data/set-of-emails/maildir/bsd/mfilter-03.eml +43 -0
  220. data/set-of-emails/maildir/bsd/mxlogic-01.eml +47 -0
  221. data/set-of-emails/maildir/bsd/mxlogic-02.eml +44 -0
  222. data/set-of-emails/maildir/bsd/mxlogic-03.eml +46 -0
  223. data/set-of-emails/maildir/bsd/notes-01.eml +42 -0
  224. data/set-of-emails/maildir/bsd/notes-02.eml +42 -0
  225. data/set-of-emails/maildir/bsd/notes-03.eml +38 -0
  226. data/set-of-emails/maildir/bsd/notes-04.eml +181 -0
  227. data/set-of-emails/maildir/bsd/opensmtpd-01.eml +33 -0
  228. data/set-of-emails/maildir/bsd/opensmtpd-02.eml +33 -0
  229. data/set-of-emails/maildir/bsd/opensmtpd-03.eml +36 -0
  230. data/set-of-emails/maildir/bsd/opensmtpd-04.eml +40 -0
  231. data/set-of-emails/maildir/bsd/opensmtpd-05.eml +36 -0
  232. data/set-of-emails/maildir/bsd/postfix-01.eml +60 -0
  233. data/set-of-emails/maildir/bsd/postfix-02.eml +78 -0
  234. data/set-of-emails/maildir/bsd/postfix-03.eml +71 -0
  235. data/set-of-emails/maildir/bsd/postfix-04.eml +89 -0
  236. data/set-of-emails/maildir/bsd/postfix-05.eml +78 -0
  237. data/set-of-emails/maildir/bsd/postfix-06.eml +72 -0
  238. data/set-of-emails/maildir/bsd/postfix-07.eml +74 -0
  239. data/set-of-emails/maildir/bsd/postfix-08.eml +78 -0
  240. data/set-of-emails/maildir/bsd/postfix-09.eml +76 -0
  241. data/set-of-emails/maildir/bsd/postfix-10.eml +73 -0
  242. data/set-of-emails/maildir/bsd/postfix-11.eml +86 -0
  243. data/set-of-emails/maildir/bsd/postfix-12.eml +71 -0
  244. data/set-of-emails/maildir/bsd/postfix-13.eml +81 -0
  245. data/set-of-emails/maildir/bsd/postfix-14.eml +68 -0
  246. data/set-of-emails/maildir/bsd/postfix-15.eml +69 -0
  247. data/set-of-emails/maildir/bsd/postfix-16.eml +73 -0
  248. data/set-of-emails/maildir/bsd/postfix-17.eml +68 -0
  249. data/set-of-emails/maildir/bsd/postfix-18.eml +121 -0
  250. data/set-of-emails/maildir/bsd/postfix-19.eml +105 -0
  251. data/set-of-emails/maildir/bsd/postfix-20.eml +231 -0
  252. data/set-of-emails/maildir/bsd/postfix-21.eml +60 -0
  253. data/set-of-emails/maildir/bsd/qmail-01.eml +40 -0
  254. data/set-of-emails/maildir/bsd/qmail-02.eml +35 -0
  255. data/set-of-emails/maildir/bsd/qmail-03.eml +22 -0
  256. data/set-of-emails/maildir/bsd/qmail-04.eml +31 -0
  257. data/set-of-emails/maildir/bsd/qmail-05.eml +31 -0
  258. data/set-of-emails/maildir/bsd/qmail-06.eml +39 -0
  259. data/set-of-emails/maildir/bsd/qmail-07.eml +22 -0
  260. data/set-of-emails/maildir/bsd/qmail-08.eml +23 -0
  261. data/set-of-emails/maildir/bsd/qmail-09.eml +103 -0
  262. data/set-of-emails/maildir/bsd/rfc3464-01.eml +60 -0
  263. data/set-of-emails/maildir/bsd/rfc3464-02.eml +43 -0
  264. data/set-of-emails/maildir/bsd/rfc3464-03.eml +40 -0
  265. data/set-of-emails/maildir/bsd/rfc3464-04.eml +50 -0
  266. data/set-of-emails/maildir/bsd/rfc3464-05.eml +63 -0
  267. data/set-of-emails/maildir/bsd/rfc3464-06.eml +48 -0
  268. data/set-of-emails/maildir/bsd/rfc3464-07.eml +88 -0
  269. data/set-of-emails/maildir/bsd/rfc3464-08.eml +70 -0
  270. data/set-of-emails/maildir/bsd/rfc3464-09.eml +93 -0
  271. data/set-of-emails/maildir/bsd/rfc3464-10.eml +467 -0
  272. data/set-of-emails/maildir/bsd/rfc3464-11.eml +1171 -0
  273. data/set-of-emails/maildir/bsd/rfc3464-12.eml +101 -0
  274. data/set-of-emails/maildir/bsd/rfc3464-13.eml +131 -0
  275. data/set-of-emails/maildir/bsd/rfc3464-14.eml +121 -0
  276. data/set-of-emails/maildir/bsd/rfc3464-15.eml +144 -0
  277. data/set-of-emails/maildir/bsd/rfc3464-16.eml +36 -0
  278. data/set-of-emails/maildir/bsd/rfc3464-17.eml +109 -0
  279. data/set-of-emails/maildir/bsd/rfc3464-18.eml +149 -0
  280. data/set-of-emails/maildir/bsd/rfc3464-19.eml +65 -0
  281. data/set-of-emails/maildir/bsd/rfc3464-20.eml +145 -0
  282. data/set-of-emails/maildir/bsd/rfc3464-21.eml +146 -0
  283. data/set-of-emails/maildir/bsd/rfc3464-22.eml +105 -0
  284. data/set-of-emails/maildir/bsd/rfc3464-23.eml +21 -0
  285. data/set-of-emails/maildir/bsd/rfc3464-24.eml +27 -0
  286. data/set-of-emails/maildir/bsd/rfc3464-25.eml +33 -0
  287. data/set-of-emails/maildir/bsd/rfc3464-26.eml +98 -0
  288. data/set-of-emails/maildir/bsd/rfc3464-27.eml +180 -0
  289. data/set-of-emails/maildir/bsd/rfc3464-28.eml +122 -0
  290. data/set-of-emails/maildir/bsd/rfc3834-01.eml +37 -0
  291. data/set-of-emails/maildir/bsd/rfc3834-02.eml +51 -0
  292. data/set-of-emails/maildir/bsd/rfc3834-03.eml +33 -0
  293. data/set-of-emails/maildir/bsd/ru-mailru-01.eml +54 -0
  294. data/set-of-emails/maildir/bsd/ru-mailru-02.eml +54 -0
  295. data/set-of-emails/maildir/bsd/ru-mailru-03.eml +62 -0
  296. data/set-of-emails/maildir/bsd/ru-mailru-04.eml +54 -0
  297. data/set-of-emails/maildir/bsd/ru-yandex-01.eml +102 -0
  298. data/set-of-emails/maildir/bsd/ru-yandex-02.eml +113 -0
  299. data/set-of-emails/maildir/bsd/ru-yandex-03.eml +101 -0
  300. data/set-of-emails/maildir/bsd/sendmail-01.eml +70 -0
  301. data/set-of-emails/maildir/bsd/sendmail-02.eml +82 -0
  302. data/set-of-emails/maildir/bsd/sendmail-03.eml +76 -0
  303. data/set-of-emails/maildir/bsd/sendmail-04.eml +63 -0
  304. data/set-of-emails/maildir/bsd/sendmail-05.eml +64 -0
  305. data/set-of-emails/maildir/bsd/sendmail-06.eml +67 -0
  306. data/set-of-emails/maildir/bsd/sendmail-07.eml +65 -0
  307. data/set-of-emails/maildir/bsd/sendmail-08.eml +62 -0
  308. data/set-of-emails/maildir/bsd/sendmail-09.eml +60 -0
  309. data/set-of-emails/maildir/bsd/sendmail-10.eml +82 -0
  310. data/set-of-emails/maildir/bsd/sendmail-11.eml +60 -0
  311. data/set-of-emails/maildir/bsd/sendmail-12.eml +62 -0
  312. data/set-of-emails/maildir/bsd/sendmail-13.eml +66 -0
  313. data/set-of-emails/maildir/bsd/sendmail-14.eml +64 -0
  314. data/set-of-emails/maildir/bsd/sendmail-15.eml +60 -0
  315. data/set-of-emails/maildir/bsd/sendmail-16.eml +69 -0
  316. data/set-of-emails/maildir/bsd/sendmail-17.eml +68 -0
  317. data/set-of-emails/maildir/bsd/sendmail-18.eml +64 -0
  318. data/set-of-emails/maildir/bsd/sendmail-19.eml +71 -0
  319. data/set-of-emails/maildir/bsd/sendmail-20.eml +120 -0
  320. data/set-of-emails/maildir/bsd/sendmail-21.eml +69 -0
  321. data/set-of-emails/maildir/bsd/sendmail-22.eml +73 -0
  322. data/set-of-emails/maildir/bsd/sendmail-23.eml +137 -0
  323. data/set-of-emails/maildir/bsd/sendmail-24.eml +66 -0
  324. data/set-of-emails/maildir/bsd/sendmail-25.eml +70 -0
  325. data/set-of-emails/maildir/bsd/sendmail-26.eml +71 -0
  326. data/set-of-emails/maildir/bsd/sendmail-27.eml +69 -0
  327. data/set-of-emails/maildir/bsd/sendmail-28.eml +69 -0
  328. data/set-of-emails/maildir/bsd/sendmail-29.eml +70 -0
  329. data/set-of-emails/maildir/bsd/sendmail-30.eml +68 -0
  330. data/set-of-emails/maildir/bsd/sendmail-31.eml +80 -0
  331. data/set-of-emails/maildir/bsd/sendmail-32.eml +71 -0
  332. data/set-of-emails/maildir/bsd/sendmail-33.eml +71 -0
  333. data/set-of-emails/maildir/bsd/sendmail-34.eml +75 -0
  334. data/set-of-emails/maildir/bsd/sendmail-35.eml +70 -0
  335. data/set-of-emails/maildir/bsd/sendmail-36.eml +71 -0
  336. data/set-of-emails/maildir/bsd/sendmail-37.eml +71 -0
  337. data/set-of-emails/maildir/bsd/sendmail-38.eml +167 -0
  338. data/set-of-emails/maildir/bsd/surfcontrol-01.eml +79 -0
  339. data/set-of-emails/maildir/bsd/surfcontrol-02.eml +70 -0
  340. data/set-of-emails/maildir/bsd/surfcontrol-03.eml +70 -0
  341. data/set-of-emails/maildir/bsd/uk-messagelabs-01.eml +76 -0
  342. data/set-of-emails/maildir/bsd/us-amazonses-01.eml +59 -0
  343. data/set-of-emails/maildir/bsd/us-amazonses-02.eml +177 -0
  344. data/set-of-emails/maildir/bsd/us-amazonses-03.eml +55 -0
  345. data/set-of-emails/maildir/bsd/us-amazonses-04.eml +55 -0
  346. data/set-of-emails/maildir/bsd/us-amazonworkmail-01.eml +156 -0
  347. data/set-of-emails/maildir/bsd/us-amazonworkmail-02.eml +160 -0
  348. data/set-of-emails/maildir/bsd/us-amazonworkmail-03.eml +161 -0
  349. data/set-of-emails/maildir/bsd/us-amazonworkmail-04.eml +156 -0
  350. data/set-of-emails/maildir/bsd/us-amazonworkmail-05.eml +157 -0
  351. data/set-of-emails/maildir/bsd/us-aol-01.eml +1258 -0
  352. data/set-of-emails/maildir/bsd/us-aol-02.eml +1257 -0
  353. data/set-of-emails/maildir/bsd/us-aol-03.eml +1264 -0
  354. data/set-of-emails/maildir/bsd/us-aol-04.eml +1260 -0
  355. data/set-of-emails/maildir/bsd/us-bigfoot-01.eml +64 -0
  356. data/set-of-emails/maildir/bsd/us-facebook-01.eml +40 -0
  357. data/set-of-emails/maildir/bsd/us-facebook-02.eml +42 -0
  358. data/set-of-emails/maildir/bsd/us-google-01.eml +70 -0
  359. data/set-of-emails/maildir/bsd/us-google-02.eml +50 -0
  360. data/set-of-emails/maildir/bsd/us-google-03.eml +51 -0
  361. data/set-of-emails/maildir/bsd/us-google-04.eml +82 -0
  362. data/set-of-emails/maildir/bsd/us-google-05.eml +50 -0
  363. data/set-of-emails/maildir/bsd/us-google-06.eml +56 -0
  364. data/set-of-emails/maildir/bsd/us-google-07.eml +42 -0
  365. data/set-of-emails/maildir/bsd/us-google-08.eml +59 -0
  366. data/set-of-emails/maildir/bsd/us-google-09.eml +76 -0
  367. data/set-of-emails/maildir/bsd/us-google-10.eml +69 -0
  368. data/set-of-emails/maildir/bsd/us-google-11.eml +68 -0
  369. data/set-of-emails/maildir/bsd/us-google-12.eml +76 -0
  370. data/set-of-emails/maildir/bsd/us-google-13.eml +79 -0
  371. data/set-of-emails/maildir/bsd/us-google-14.eml +304 -0
  372. data/set-of-emails/maildir/bsd/us-office365-01.eml +102 -0
  373. data/set-of-emails/maildir/bsd/us-outlook-01.eml +72 -0
  374. data/set-of-emails/maildir/bsd/us-outlook-02.eml +72 -0
  375. data/set-of-emails/maildir/bsd/us-outlook-03.eml +72 -0
  376. data/set-of-emails/maildir/bsd/us-outlook-04.eml +79 -0
  377. data/set-of-emails/maildir/bsd/us-outlook-05.eml +85 -0
  378. data/set-of-emails/maildir/bsd/us-outlook-06.eml +75 -0
  379. data/set-of-emails/maildir/bsd/us-outlook-07.eml +70 -0
  380. data/set-of-emails/maildir/bsd/us-receivingses-01.eml +74 -0
  381. data/set-of-emails/maildir/bsd/us-receivingses-02.eml +74 -0
  382. data/set-of-emails/maildir/bsd/us-receivingses-03.eml +74 -0
  383. data/set-of-emails/maildir/bsd/us-receivingses-04.eml +74 -0
  384. data/set-of-emails/maildir/bsd/us-receivingses-05.eml +74 -0
  385. data/set-of-emails/maildir/bsd/us-receivingses-06.eml +74 -0
  386. data/set-of-emails/maildir/bsd/us-receivingses-07.eml +74 -0
  387. data/set-of-emails/maildir/bsd/us-sendgrid-01.eml +95 -0
  388. data/set-of-emails/maildir/bsd/us-sendgrid-02.eml +98 -0
  389. data/set-of-emails/maildir/bsd/us-sendgrid-03.eml +100 -0
  390. data/set-of-emails/maildir/bsd/us-verizon-01.eml +31 -0
  391. data/set-of-emails/maildir/bsd/us-yahoo-01.eml +78 -0
  392. data/set-of-emails/maildir/bsd/us-yahoo-02.eml +79 -0
  393. data/set-of-emails/maildir/bsd/us-yahoo-03.eml +93 -0
  394. data/set-of-emails/maildir/bsd/us-yahoo-04.eml +94 -0
  395. data/set-of-emails/maildir/bsd/us-yahoo-05.eml +94 -0
  396. data/set-of-emails/maildir/bsd/us-zoho-01.eml +40 -0
  397. data/set-of-emails/maildir/bsd/us-zoho-02.eml +38 -0
  398. data/set-of-emails/maildir/bsd/us-zoho-03.eml +37 -0
  399. data/set-of-emails/maildir/bsd/us-zoho-04.eml +47 -0
  400. data/set-of-emails/maildir/bsd/us-zoho-05.eml +37 -0
  401. data/set-of-emails/maildir/bsd/v5sendmail-01.eml +24 -0
  402. data/set-of-emails/maildir/bsd/v5sendmail-02.eml +26 -0
  403. data/set-of-emails/maildir/bsd/v5sendmail-03.eml +29 -0
  404. data/set-of-emails/maildir/bsd/v5sendmail-04.eml +29 -0
  405. data/set-of-emails/maildir/bsd/v5sendmail-05.eml +42 -0
  406. data/set-of-emails/maildir/bsd/v5sendmail-06.eml +28 -0
  407. data/set-of-emails/maildir/bsd/v5sendmail-07.eml +35 -0
  408. data/set-of-emails/maildir/bsd/x1-01.eml +61 -0
  409. data/set-of-emails/maildir/bsd/x1-02.eml +62 -0
  410. data/set-of-emails/maildir/bsd/x2-01.eml +41 -0
  411. data/set-of-emails/maildir/bsd/x2-02.eml +46 -0
  412. data/set-of-emails/maildir/bsd/x2-03.eml +34 -0
  413. data/set-of-emails/maildir/bsd/x2-04.eml +0 -0
  414. data/set-of-emails/maildir/bsd/x2-05.eml +98 -0
  415. data/set-of-emails/maildir/bsd/x3-01.eml +61 -0
  416. data/set-of-emails/maildir/bsd/x3-02.eml +64 -0
  417. data/set-of-emails/maildir/bsd/x3-03.eml +59 -0
  418. data/set-of-emails/maildir/bsd/x3-04.eml +106 -0
  419. data/set-of-emails/maildir/bsd/x4-01.eml +92 -0
  420. data/set-of-emails/maildir/bsd/x4-02.eml +112 -0
  421. data/set-of-emails/maildir/bsd/x4-03.eml +245 -0
  422. data/set-of-emails/maildir/bsd/x4-04.eml +81 -0
  423. data/set-of-emails/maildir/bsd/x4-05.eml +121 -0
  424. data/set-of-emails/maildir/bsd/x4-06.eml +32 -0
  425. data/set-of-emails/maildir/bsd/x4-07.eml +153 -0
  426. data/set-of-emails/maildir/bsd/x5-01.eml +155 -0
  427. data/set-of-emails/maildir/dos/activehunter-01.eml +54 -0
  428. data/set-of-emails/maildir/dos/apachejames-01.eml +46 -0
  429. data/set-of-emails/maildir/dos/arf-01.eml +66 -0
  430. data/set-of-emails/maildir/dos/courier-01.eml +79 -0
  431. data/set-of-emails/maildir/dos/de-einsundeins-01.eml +38 -0
  432. data/set-of-emails/maildir/dos/de-gmx-01.eml +52 -0
  433. data/set-of-emails/maildir/dos/domino-01.eml +33 -0
  434. data/set-of-emails/maildir/dos/exchange-01.eml +31 -0
  435. data/set-of-emails/maildir/dos/exim-01.eml +46 -0
  436. data/set-of-emails/maildir/dos/google-apps-01.eml +66 -0
  437. data/set-of-emails/maildir/dos/imailserver-01.eml +27 -0
  438. data/set-of-emails/maildir/dos/interscanmss-01.eml +49 -0
  439. data/set-of-emails/maildir/dos/jp-biglobe-01.eml +43 -0
  440. data/set-of-emails/maildir/dos/jp-ezweb-01.eml +36 -0
  441. data/set-of-emails/maildir/dos/jp-kddi-01.eml +49 -0
  442. data/set-of-emails/maildir/dos/mailfoundry-01.eml +50 -0
  443. data/set-of-emails/maildir/dos/mailmarshalsmtp-01.eml +43 -0
  444. data/set-of-emails/maildir/dos/mcafee-01.eml +63 -0
  445. data/set-of-emails/maildir/dos/messagingserver-01.eml +102 -0
  446. data/set-of-emails/maildir/dos/mfilter-01.eml +49 -0
  447. data/set-of-emails/maildir/dos/mxlogic-01.eml +47 -0
  448. data/set-of-emails/maildir/dos/notes-01.eml +42 -0
  449. data/set-of-emails/maildir/dos/opensmtpd-01.eml +33 -0
  450. data/set-of-emails/maildir/dos/postfix-01.eml +60 -0
  451. data/set-of-emails/maildir/dos/qmail-01.eml +40 -0
  452. data/set-of-emails/maildir/dos/rfc3464-01.eml +59 -0
  453. data/set-of-emails/maildir/dos/rfc3834-01.eml +37 -0
  454. data/set-of-emails/maildir/dos/ru-mailru-01.eml +54 -0
  455. data/set-of-emails/maildir/dos/ru-yandex-01.eml +102 -0
  456. data/set-of-emails/maildir/dos/sendmail-01.eml +69 -0
  457. data/set-of-emails/maildir/dos/surfcontrol-01.eml +79 -0
  458. data/set-of-emails/maildir/dos/uk-messagelabs-01.eml +76 -0
  459. data/set-of-emails/maildir/dos/us-amazonses-01.eml +59 -0
  460. data/set-of-emails/maildir/dos/us-aol-01.eml +1258 -0
  461. data/set-of-emails/maildir/dos/us-bigfoot-01.eml +64 -0
  462. data/set-of-emails/maildir/dos/us-facebook-01.eml +40 -0
  463. data/set-of-emails/maildir/dos/us-google-01.eml +70 -0
  464. data/set-of-emails/maildir/dos/us-outlook-01.eml +72 -0
  465. data/set-of-emails/maildir/dos/us-receivingses-01.eml +74 -0
  466. data/set-of-emails/maildir/dos/us-sendgrid-01.eml +95 -0
  467. data/set-of-emails/maildir/dos/us-verizon-01.eml +31 -0
  468. data/set-of-emails/maildir/dos/us-yahoo-01.eml +78 -0
  469. data/set-of-emails/maildir/dos/us-zoho-01.eml +40 -0
  470. data/set-of-emails/maildir/dos/v5sendmail-01.eml +24 -0
  471. data/set-of-emails/maildir/dos/x1-01.eml +61 -0
  472. data/set-of-emails/maildir/dos/x2-01.eml +41 -0
  473. data/set-of-emails/maildir/dos/x3-01.eml +61 -0
  474. data/set-of-emails/maildir/dos/x4-01.eml +90 -0
  475. data/set-of-emails/maildir/dos/x5-01.eml +155 -0
  476. data/set-of-emails/maildir/err/make-test-01.eml +70 -0
  477. data/set-of-emails/maildir/err/make-test-02.eml +70 -0
  478. data/set-of-emails/maildir/err/make-test-03.eml +64 -0
  479. data/set-of-emails/maildir/err/make-test-04.eml +64 -0
  480. data/set-of-emails/maildir/err/make-test-05.eml +66 -0
  481. data/set-of-emails/maildir/err/make-test-06.eml +118 -0
  482. data/set-of-emails/maildir/err/make-test-07.eml +26 -0
  483. data/set-of-emails/maildir/err/make-test-08.eml +67 -0
  484. data/set-of-emails/maildir/err/make-test-09.eml +55 -0
  485. data/set-of-emails/maildir/err/make-test-10.eml +69 -0
  486. data/set-of-emails/maildir/err/make-test-11.eml +64 -0
  487. data/set-of-emails/maildir/err/make-test-12.eml +66 -0
  488. data/set-of-emails/maildir/err/make-test-13.eml +67 -0
  489. data/set-of-emails/maildir/err/make-test-14.eml +66 -0
  490. data/set-of-emails/maildir/err/make-test-15.eml +70 -0
  491. data/set-of-emails/maildir/err/make-test-16.eml +68 -0
  492. data/set-of-emails/maildir/err/make-test-17.eml +68 -0
  493. data/set-of-emails/maildir/err/make-test-18.eml +68 -0
  494. data/set-of-emails/maildir/err/make-test-19.eml +69 -0
  495. data/set-of-emails/maildir/err/make-test-20.eml +67 -0
  496. data/set-of-emails/maildir/err/make-test-21.eml +69 -0
  497. data/set-of-emails/maildir/err/make-test-22.eml +66 -0
  498. data/set-of-emails/maildir/err/make-test-23.eml +70 -0
  499. data/set-of-emails/maildir/err/make-test-24.eml +69 -0
  500. data/set-of-emails/maildir/err/make-test-25.eml +67 -0
  501. data/set-of-emails/maildir/err/make-test-26.eml +69 -0
  502. data/set-of-emails/maildir/err/make-test-27.eml +69 -0
  503. data/set-of-emails/maildir/err/make-test-28.eml +66 -0
  504. data/set-of-emails/maildir/err/make-test-29.eml +68 -0
  505. data/set-of-emails/maildir/err/make-test-30.eml +68 -0
  506. data/set-of-emails/maildir/err/make-test-31.eml +80 -0
  507. data/set-of-emails/maildir/err/make-test-32.eml +66 -0
  508. data/set-of-emails/maildir/err/make-test-33.eml +68 -0
  509. data/set-of-emails/maildir/err/make-test-34.eml +56 -0
  510. data/set-of-emails/maildir/err/make-test-35.eml +59 -0
  511. data/set-of-emails/maildir/err/make-test-36.eml +53 -0
  512. data/set-of-emails/maildir/err/make-test-37.eml +62 -0
  513. data/set-of-emails/maildir/mac/activehunter-01.eml +1 -2
  514. data/set-of-emails/maildir/mac/apachejames-01.eml +1 -4
  515. data/set-of-emails/maildir/mac/arf-01.eml +1 -3
  516. data/set-of-emails/maildir/mac/courier-01.eml +1 -6
  517. data/set-of-emails/maildir/mac/de-einsundeins-01.eml +1 -1
  518. data/set-of-emails/maildir/mac/de-gmx-01.eml +1 -1
  519. data/set-of-emails/maildir/mac/domino-01.eml +1 -0
  520. data/set-of-emails/maildir/mac/exchange-01.eml +1 -0
  521. data/set-of-emails/maildir/mac/exim-01.eml +1 -1
  522. data/set-of-emails/maildir/mac/google-apps-01.eml +1 -4
  523. data/set-of-emails/maildir/mac/imailserver-01.eml +1 -0
  524. data/set-of-emails/maildir/mac/interscanmss-01.eml +1 -2
  525. data/set-of-emails/maildir/mac/jp-biglobe-01.eml +1 -2
  526. data/set-of-emails/maildir/mac/jp-ezweb-01.eml +1 -1
  527. data/set-of-emails/maildir/mac/jp-kddi-01.eml +1 -2
  528. data/set-of-emails/maildir/mac/mailfoundry-01.eml +1 -2
  529. data/set-of-emails/maildir/mac/mailmarshalsmtp-01.eml +1 -2
  530. data/set-of-emails/maildir/mac/mcafee-01.eml +1 -4
  531. data/set-of-emails/maildir/mac/messagingserver-01.eml +1 -4
  532. data/set-of-emails/maildir/mac/mfilter-01.eml +1 -3
  533. data/set-of-emails/maildir/mac/mxlogic-01.eml +1 -1
  534. data/set-of-emails/maildir/mac/notes-01.eml +1 -2
  535. data/set-of-emails/maildir/mac/opensmtpd-01.eml +1 -0
  536. data/set-of-emails/maildir/mac/postfix-01.eml +1 -3
  537. data/set-of-emails/maildir/mac/qmail-01.eml +1 -1
  538. data/set-of-emails/maildir/mac/rfc3464-01.eml +1 -4
  539. data/set-of-emails/maildir/mac/rfc3834-01.eml +1 -0
  540. data/set-of-emails/maildir/mac/ru-mailru-01.eml +1 -1
  541. data/set-of-emails/maildir/mac/ru-yandex-01.eml +1 -4
  542. data/set-of-emails/maildir/mac/sendmail-01.eml +1 -4
  543. data/set-of-emails/maildir/mac/surfcontrol-01.eml +1 -5
  544. data/set-of-emails/maildir/mac/uk-messagelabs-01.eml +1 -4
  545. data/set-of-emails/maildir/mac/us-amazonses-01.eml +1 -4
  546. data/set-of-emails/maildir/mac/us-aol-01.eml +1 -15
  547. data/set-of-emails/maildir/mac/us-bigfoot-01.eml +1 -4
  548. data/set-of-emails/maildir/mac/us-facebook-01.eml +1 -4
  549. data/set-of-emails/maildir/mac/us-google-01.eml +1 -1
  550. data/set-of-emails/maildir/mac/us-outlook-01.eml +1 -4
  551. data/set-of-emails/maildir/mac/us-receivingses-01.eml +1 -4
  552. data/set-of-emails/maildir/mac/us-sendgrid-01.eml +1 -3
  553. data/set-of-emails/maildir/mac/us-verizon-01.eml +1 -2
  554. data/set-of-emails/maildir/mac/us-yahoo-01.eml +1 -1
  555. data/set-of-emails/maildir/mac/us-zoho-01.eml +1 -2
  556. data/set-of-emails/maildir/mac/v5sendmail-01.eml +1 -0
  557. data/set-of-emails/maildir/mac/x1-01.eml +1 -4
  558. data/set-of-emails/maildir/mac/x2-01.eml +1 -1
  559. data/set-of-emails/maildir/mac/x3-01.eml +1 -3
  560. data/set-of-emails/maildir/mac/x4-01.eml +1 -2
  561. data/set-of-emails/maildir/mac/x5-01.eml +1 -8
  562. data/set-of-emails/maildir/not/is-not-bounce-01.eml +25 -0
  563. data/set-of-emails/to-be-debugged-because/reason-is-onhold/onhold-0001.eml +85 -0
  564. data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0002.eml +27 -0
  565. data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0003.eml +78 -0
  566. data/set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yet/cannot-parse-this-email-0002.eml +25 -0
  567. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml +79 -0
  568. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml +72 -0
  569. data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-03.eml +68 -0
  570. data/set-of-emails/to-be-debugged-because/something-is-wrong/no-message-id-from-pr-150.eml +75 -0
  571. data/set-of-emails/to-be-parsed-for-test/README.md +20 -0
  572. data/sisimai-java.gemspec +29 -0
  573. data/sisimai.gemspec +28 -0
  574. metadata +680 -0
@@ -0,0 +1,40 @@
1
+ module Sisimai
2
+ class Data
3
+ # Sisimai::Data::JSON dumps parsed data object as a JSON format. This class
4
+ # and method should be called from the parent object "Sisimai::Data".
5
+ module JSON
6
+ # Imported from p5-Sisimail/lib/Sisimai/Data/JSON.pm
7
+ class << self
8
+ # Data dumper(JSON)
9
+ # @param [Sisimai::Data] argvs Object
10
+ # @return [String, Nil] Dumped data or Undef if the argument
11
+ # is missing
12
+ def dump(argvs)
13
+ return nil unless argvs
14
+ return nil unless argvs.is_a? Sisimai::Data
15
+
16
+ if RUBY_PLATFORM =~ /java/
17
+ # java-based ruby environment like JRuby.
18
+ begin
19
+ require 'jrjackson'
20
+ jsonstring = JrJackson::Json.dump(argvs.damn)
21
+ rescue
22
+ warn '***warning: Failed to JrJackson::Json.dump'
23
+ end
24
+ else
25
+ # MRI
26
+ begin
27
+ require 'oj'
28
+ jsonstring = Oj.dump(argvs.damn, :mode => :compat)
29
+ rescue
30
+ warn '***warning: Failed to Oj.dump'
31
+ end
32
+ end
33
+
34
+ return jsonstring
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,32 @@
1
+ module Sisimai
2
+ class Data
3
+ # Sisimai::Data::YAML dumps parsed data object as a YAML format. This class
4
+ # and method should be called from the parent object "Sisimai::Data".
5
+ module YAML
6
+ # Imported from p5-Sisimail/lib/Sisimai/Data/YAML.pm
7
+ class << self
8
+ require 'yaml'
9
+
10
+ # Data dumper(YAML)
11
+ # @param [Sisimai::Data] argvs Object
12
+ # @return [String, Undef] Dumped data or Undef if the argument
13
+ # is missing
14
+ def dump(argvs)
15
+ return nil unless argvs
16
+ return nil unless argvs.is_a? Sisimai::Data
17
+
18
+ damneddata = argvs.damn
19
+ yamlstring = nil
20
+
21
+ begin
22
+ yamlstring = ::YAML.dump(damneddata)
23
+ rescue
24
+ warn '***warning: Failed to YAML.dump'
25
+ end
26
+
27
+ return yamlstring
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,511 @@
1
+ module Sisimai
2
+ # Sisimai::DateTime provide methods for dealing date and time.
3
+ module DateTime
4
+ # Imported from p5-Sisimail/lib/Sisimai/DateTime.pm
5
+ require 'date'
6
+
7
+ class << self
8
+ BASE_D = 86400 # 1 day = 86400 sec
9
+ BASE_Y = 365.2425 # 1 year = 365.2425 days
10
+ BASE_L = 29.53059 # 1 lunar month = 29.53059 days
11
+
12
+ CONST_P = 4 * Math.atan2(1, 1) # PI, 3.1415926535
13
+ CONST_E = Math.exp(1) # e, Napier's constant
14
+ TZ_OFFSET = 54000 # Max time zone offset, 54000 seconds
15
+
16
+ TimeUnit = {
17
+ 'o' => (BASE_D * BASE_Y * 4), # Olympiad, 4 years
18
+ 'y' => (BASE_D * BASE_Y), # Year, Gregorian Calendar
19
+ 'q' => (BASE_D * BASE_Y / 4), # Quarter, year/4
20
+ 'l' => (BASE_D * BASE_L), # Lunar month
21
+ 'f' => (BASE_D * 14), # Fortnight, 2 weeks
22
+ 'w' => (BASE_D * 7), # Week, 604800 seconds
23
+ 'd' => BASE_D, # Day
24
+ 'h' => 3600, # Hour
25
+ 'b' => 86.4, # Beat, Swatch internet time: 1000b = 1d
26
+ 'm' => 60, # Minute,
27
+ 's' => 1, # Second
28
+ }
29
+
30
+ MathematicalConstant = {
31
+ 'e' => CONST_E,
32
+ 'p' => CONST_P,
33
+ 'g' => CONST_E**CONST_P,
34
+ }
35
+
36
+ MonthName = {
37
+ 'full' => %w|January February March April May June July August September October November December|,
38
+ 'abbr' => %w|Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec|,
39
+ }
40
+
41
+ DayOfWeek = {
42
+ 'full' => %w|Sunday Monday Tuesday Wednesday Thursday Friday Saturday|,
43
+ 'abbr' => %w|Sun Mon Tue Wed Thu Fri Sat |,
44
+ }
45
+
46
+ HourName = {
47
+ 'full' => [
48
+ 'Midnight', 1, 2, 3, 4, 5, 'Morning', 7, 8, 9, 10, 11,
49
+ 'Noon', 13, 14, 15, 16, 17, 'Evening', 19, 20, 21, 22, 23,
50
+ ],
51
+ 'abbr' => [0..23],
52
+ }
53
+
54
+ TimeZoneAbbr = {
55
+ # http://en.wikipedia.org/wiki/List_of_time_zone_abbreviations
56
+ #'ACDT' => '+1030', # Australian Central Daylight Time UTC+10:30
57
+ #'ACST' => '+0930', # Australian Central Standard Time UTC+09:30
58
+ #'ACT' => '+0800', # ASEAN Common Time UTC+08:00
59
+ 'ADT' => '-0300', # Atlantic Daylight Time UTC-03:00
60
+ #'AEDT' => '+1100', # Australian Eastern Daylight Time UTC+11:00
61
+ #'AEST' => '+1000', # Australian Eastern Standard Time UTC+10:00
62
+ #'AFT' => '+0430', # Afghanistan Time UTC+04:30
63
+ 'AKDT' => '-0800', # Alaska Daylight Time UTC-08:00
64
+ 'AKST' => '-0900', # Alaska Standard Time UTC-09:00
65
+ #'AMST' => '+0500', # Armenia Summer Time UTC+05:00
66
+ #'AMT' => '+0400', # Armenia Time UTC+04:00
67
+ #'ART' => '-0300', # Argentina Time UTC+03:00
68
+ #'AST' => '+0300', # Arab Standard Time (Kuwait, Riyadh) UTC+03:00
69
+ #'AST' => '+0400', # Arabian Standard Time (Abu Dhabi, Muscat) UTC+04:00
70
+ #'AST' => '+0300', # Arabic Standard Time (Baghdad) UTC+03:00
71
+ 'AST' => '-0400', # Atlantic Standard Time UTC-04:00
72
+ #'AWDT' => '+0900', # Australian Western Daylight Time UTC+09:00
73
+ #'AWST' => '+0800', # Australian Western Standard Time UTC+08:00
74
+ #'AZOST'=> '-0100', # Azores Standard Time UTC-01:00
75
+ #'AZT' => '+0400', # Azerbaijan Time UTC+04:00
76
+ #'BDT' => '+0800', # Brunei Time UTC+08:00
77
+ #'BIOT' => '+0600', # British Indian Ocean Time UTC+06:00
78
+ #'BIT' => '-1200', # Baker Island Time UTC-12:00
79
+ #'BOT' => '-0400', # Bolivia Time UTC-04:00
80
+ #'BRT' => '-0300', # Brasilia Time UTC-03:00
81
+ #'BST' => '+0600', # Bangladesh Standard Time UTC+06:00
82
+ #'BST' => '+0100', # British Summer Time (British Standard Time from Feb 1968 to Oct 1971) UTC+01:00
83
+ #'BTT' => '+0600', # Bhutan Time UTC+06:00
84
+ #'CAT' => '+0200', # Central Africa Time UTC+02:00
85
+ #'CCT' => '+0630', # Cocos Islands Time UTC+06:30
86
+ 'CDT' => '-0500', # Central Daylight Time (North America) UTC-05:00
87
+ #'CEDT' => '+0200', # Central European Daylight Time UTC+02:00
88
+ #'CEST' => '+0200', # Central European Summer Time UTC+02:00
89
+ #'CET' => '+0100', # Central European Time UTC+01:00
90
+ #'CHAST'=> '+1245', # Chatham Standard Time UTC+12:45
91
+ #'CIST' => '-0800', # Clipperton Island Standard Time UTC-08:00
92
+ #'CKT' => '-1000', # Cook Island Time UTC-10:00
93
+ #'CLST' => '-0300', # Chile Summer Time UTC-03:00
94
+ #'CLT' => '-0400', # Chile Standard Time UTC-04:00
95
+ #'COST' => '-0400', # Colombia Summer Time UTC-04:00
96
+ #'COT' => '-0500', # Colombia Time UTC-05:00
97
+ 'CST' => '-0600', # Central Standard Time (North America) UTC-06:00
98
+ #'CST' => '+0800', # China Standard Time UTC+08:00
99
+ #'CVT' => '-0100', # Cape Verde Time UTC-01:00
100
+ #'CXT' => '+0700', # Christmas Island Time UTC+07:00
101
+ #'ChST' => '+1000', # Chamorro Standard Time UTC+10:00
102
+ # 'DST' => '' # Daylight saving time Depending
103
+ #'DFT' => '+0100', # AIX specific equivalent of Central European Time UTC+01:00
104
+ #'EAST' => '-0600', # Easter Island Standard Time UTC-06:00
105
+ #'EAT' => '+0300', # East Africa Time UTC+03:00
106
+ #'ECT' => '-0400', # Eastern Caribbean Time (does not recognise DST) UTC-04:00
107
+ #'ECT' => '-0500', # Ecuador Time UTC-05:00
108
+ 'EDT' => '-0400', # Eastern Daylight Time (North America) UTC-04:00
109
+ #'EEDT' => '+0300', # Eastern European Daylight Time UTC+03:00
110
+ #'EEST' => '+0300', # Eastern European Summer Time UTC+03:00
111
+ #'EET' => '+0200', # Eastern European Time UTC+02:00
112
+ 'EST' => '+0500', # Eastern Standard Time (North America) UTC-05:00
113
+ #'FJT' => '+1200', # Fiji Time UTC+12:00
114
+ #'FKST' => '-0400', # Falkland Islands Standard Time UTC-04:00
115
+ #'GALT' => '-0600', # Galapagos Time UTC-06:00
116
+ #'GET' => '+0400', # Georgia Standard Time UTC+04:00
117
+ #'GFT' => '-0300', # French Guiana Time UTC-03:00
118
+ #'GILT' => '+1200', # Gilbert Island Time UTC+12:00
119
+ #'GIT' => '-0900', # Gambier Island Time UTC-09:00
120
+ 'GMT' => '+0000', # Greenwich Mean Time UTC
121
+ #'GST' => '-0200', # South Georgia and the South Sandwich Islands UTC-02:00
122
+ #'GYT' => '-0400', # Guyana Time UTC-04:00
123
+ 'HADT' => '-0900', # Hawaii-Aleutian Daylight Time UTC-09:00
124
+ 'HAST' => '-1000', # Hawaii-Aleutian Standard Time UTC-10:00
125
+ #'HKT' => '+0800', # Hong Kong Time UTC+08:00
126
+ #'HMT' => '+0500', # Heard and McDonald Islands Time UTC+05:00
127
+ 'HST' => '-1000', # Hawaii Standard Time UTC-10:00
128
+ #'IRKT' => '+0800', # Irkutsk Time UTC+08:00
129
+ #'IRST' => '+0330', # Iran Standard Time UTC+03:30
130
+ #'IST' => '+0530', # Indian Standard Time UTC+05:30
131
+ #'IST' => '+0100', # Irish Summer Time UTC+01:00
132
+ #'IST' => '+0200', # Israel Standard Time UTC+02:00
133
+ 'JST' => '+0900', # Japan Standard Time UTC+09:00
134
+ #'KRAT' => '+0700', # Krasnoyarsk Time UTC+07:00
135
+ #'KST' => '+0900', # Korea Standard Time UTC+09:00
136
+ #'LHST' => '+1030', # Lord Howe Standard Time UTC+10:30
137
+ #'LINT' => '+1400', # Line Islands Time UTC+14:00
138
+ #'MAGT' => '+1100', # Magadan Time UTC+11:00
139
+ 'MDT' => '-0600', # Mountain Daylight Time(North America) UTC-06:00
140
+ #'MIT' => '-0930', # Marquesas Islands Time UTC-09:30
141
+ #'MSD' => '+0400', # Moscow Summer Time UTC+04:00
142
+ #'MSK' => '+0300', # Moscow Standard Time UTC+03:00
143
+ #'MST' => '+0800', # Malaysian Standard Time UTC+08:00
144
+ 'MST' => '-0700', # Mountain Standard Time(North America) UTC-07:00
145
+ #'MST' => '+0630', # Myanmar Standard Time UTC+06:30
146
+ #'MUT' => '+0400', # Mauritius Time UTC+04:00
147
+ #'NDT' => '-0230', # Newfoundland Daylight Time UTC-02:30
148
+ #'NFT' => '+1130', # Norfolk Time[1] UTC+11:30
149
+ #'NPT' => '+0545', # Nepal Time UTC+05:45
150
+ #'NST' => '-0330', # Newfoundland Standard Time UTC-03:30
151
+ #'NT' => '-0330', # Newfoundland Time UTC-03:30
152
+ #'OMST' => '+0600', # Omsk Time UTC+06:00
153
+ 'PDT' => '-0700', # Pacific Daylight Time(North America) UTC-07:00
154
+ #'PETT' => '+1200', # Kamchatka Time UTC+12:00
155
+ #'PHOT' => '+1300', # Phoenix Island Time UTC+13:00
156
+ #'PKT' => '+0500', # Pakistan Standard Time UTC+05:00
157
+ 'PST' => '-0800', # Pacific Standard Time (North America) UTC-08:00
158
+ #'PST' => '+0800', # Philippine Standard Time UTC+08:00
159
+ #'RET' => '+0400', # Reunion Time UTC+04:00
160
+ #'SAMT' => '+0400', # Samara Time UTC+04:00
161
+ #'SAST' => '+0200', # South African Standard Time UTC+02:00
162
+ #'SBT' => '+1100', # Solomon Islands Time UTC+11:00
163
+ #'SCT' => '+0400', # Seychelles Time UTC+04:00
164
+ #'SLT' => '+0530', # Sri Lanka Time UTC+05:30
165
+ #'SST' => '-1100', # Samoa Standard Time UTC-11:00
166
+ #'SST' => '+0800', # Singapore Standard Time UTC+08:00
167
+ #'TAHT' => '-1000', # Tahiti Time UTC-10:00
168
+ #'THA' => '+0700', # Thailand Standard Time UTC+07:00
169
+ 'UT' => '-0000', # Coordinated Universal Time UTC
170
+ 'UTC' => '-0000', # Coordinated Universal Time UTC
171
+ #'UYST' => '-0200', # Uruguay Summer Time UTC-02:00
172
+ #'UYT' => '-0300', # Uruguay Standard Time UTC-03:00
173
+ #'VET' => '-0430', # Venezuelan Standard Time UTC-04:30
174
+ #'VLAT' => '+1000', # Vladivostok Time UTC+10:00
175
+ #'WAT' => '+0100', # West Africa Time UTC+01:00
176
+ #'WEDT' => '+0100', # Western European Daylight Time UTC+01:00
177
+ #'WEST' => '+0100', # Western European Summer Time UTC+01:00
178
+ #'WET' => '-0000', # Western European Time UTC
179
+ #'YAKT' => '+0900', # Yakutsk Time UTC+09:00
180
+ #'YEKT' => '+0500', # Yekaterinburg Time UTC+05:00
181
+ }
182
+
183
+ # Convert to second
184
+ # @param [String] argv1 Digit and a unit of time
185
+ # @return [Integer] n: seconds
186
+ # 0: 0 or invalid unit of time
187
+ # @example Get the value of seconds
188
+ # to_second('1d') #=> 86400
189
+ # to_second('2h') #=> 7200
190
+ def to_second(argv1)
191
+ return 0 unless argv1.is_a?(::String)
192
+
193
+ getseconds = 0
194
+ unitoftime = TimeUnit.keys.join
195
+ mathconsts = MathematicalConstant.keys.join
196
+
197
+ if cr = argv1.match(/\A(\d+|\d+[.]\d+)([#{unitoftime}])?\z/)
198
+ # 1d, 1.5w
199
+ n = cr[1].to_f
200
+ u = cr[2] || 'd'
201
+ getseconds = n * TimeUnit[u].to_f
202
+
203
+ elsif cr = argv1.match(/\A(\d+|\d+[.]\d+)?([#{mathconsts}])([#{unitoftime}])?\z/)
204
+ # 1pd, 1.5pw
205
+ n = cr[1].to_f || 1
206
+ n = 1 if n.to_i == 0
207
+ m = MathematicalConstant[cr[2]].to_f
208
+ u = cr[3] || 'd'
209
+ getseconds = n * m * TimeUnit[u].to_f
210
+
211
+ else
212
+ getseconds = 0
213
+
214
+ end
215
+
216
+ return getseconds
217
+ end
218
+
219
+ # Month name list
220
+ # @param [Integer] argv1 Require full name or not
221
+ # @return [Array, String] Month name list or month name
222
+ # @example Get the names of each month
223
+ # monthname() #=> [ 'Jan', 'Feb', ... ]
224
+ # monthname(1) #=> [ 'January', 'February', 'March', ... ]
225
+ def monthname(argv1 = 0)
226
+ value = argv1 > 0 ? 'full' : 'abbr'
227
+ return MonthName[value]
228
+ end
229
+
230
+ # List of day of week
231
+ # @param [Integer] argv1 Require full name
232
+ # @return [Array, String] List of day of week or day of week
233
+ # @example Get the names of each day of week
234
+ # dayofweek() #=> [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]
235
+ # dayofweek(1) #=> [ 'Sunday', 'Monday', 'Tuesday', ... ]
236
+ def dayofweek(argv1 = 0)
237
+ value = argv1 > 0 ? 'full' : 'abbr'
238
+ return DayOfWeek[value]
239
+ end
240
+
241
+ # Hour name list
242
+ # @param [Integer] argv1 Require full name
243
+ # @return [Array, String] Month name
244
+ # @example Get the names of each hour
245
+ # hourname() #=> [ 0, 1, 2, ... 23 ]
246
+ # hourname(1) #=> [ 'Midnight', 1, 2, ... 'Morning', 7, ... 'Noon', ... 23 ]
247
+ def hourname(argv1 = 1)
248
+ value = argv1 > 0 ? 'full' : 'abbr'
249
+ return HourName[value]
250
+ end
251
+
252
+ # Convert from date offset to date string
253
+ # @param [Integer] argv1 Offset of
254
+ # @param [String] argv2 Delimiter character: default is '-'
255
+ # @return [String] Date string
256
+ # @example Get the value of n days before(today is 2015/11/04)
257
+ # o2d(1) #=> 2015-11-03
258
+ # o2d(2,'/') #=> 2015/11/02
259
+ def o2d(argv1 = 0, argv2 = '-')
260
+ piece = ::DateTime.now
261
+
262
+ return piece.strftime('%Y/%m/%d') unless argv1 =~ /\A[-]?\d+\z/
263
+ epoch = piece.to_time.to_i - argv1 * 86400
264
+
265
+ if epoch < 0
266
+ # Negative value
267
+ epoch = 0
268
+
269
+ elsif epoch >= 2**31
270
+ # See http://en.wikipedia.org/wiki/Year_2038_problem
271
+ epoch = 2**31 - 1
272
+ end
273
+ return Time.at(epoch).strftime('%Y' + argv2 + '%m' + argv2 + '%d')
274
+ end
275
+
276
+ # Parse date string; strptime() wrapper
277
+ # @param [String] argv1 Date string
278
+ # @return [String] Converted date string
279
+ # @see http://en.wikipedia.org/wiki/ISO_8601
280
+ # @see http://www.ietf.org/rfc/rfc3339.txt
281
+ # @example Parse date string and convert to generic format string
282
+ # parse("2015-11-03T23:34:45 Tue") #=> Tue, 3 Nov 2015 23:34:45 +0900
283
+ # parse("Tue, Nov 3 2015 2:2:2") #=> Tue, 3 Nov 2015 02:02:02 +0900
284
+ def parse(argv1)
285
+ return nil unless argv1.is_a?(::String)
286
+ return nil unless argv1.size > 0
287
+
288
+ datestring = argv1
289
+ datestring = datestring.sub(/[,](\d+)/, ', \1') # Thu,13 -> Thu, 13
290
+ datestring = datestring.sub(/(\d{1,2}),/, '\1') # Apr,29 -> Apr 29
291
+ timetokens = datestring.split(' ')
292
+ afternoon1 = 0 # (Integer) After noon flag
293
+ altervalue = {} # (Hash) To store alternative values
294
+ v = {
295
+ 'Y' => nil, # (Integer) Year
296
+ 'M' => nil, # (String) Month Abbr.
297
+ 'd' => nil, # (Integer) Day
298
+ 'a' => nil, # (String) Day of week, Abbr.
299
+ 'T' => nil, # (String) Time
300
+ 'z' => nil, # (Integer) Timezone offset
301
+ }
302
+
303
+ while p = timetokens.shift do
304
+ # Parse each piece of time
305
+ if p =~ /\A[A-Z][a-z]{2}[,]?\z/
306
+ # Day of week or Day of week; Thu, Apr, ...
307
+ p.chop if p.length == 4 # Thu, -> Thu
308
+
309
+ if DayOfWeek['abbr'].include?(p)
310
+ # Day of week; Mon, Thu, Sun,...
311
+ v['a'] = p
312
+
313
+ elsif MonthName['abbr'].include?(p)
314
+ # Month name abbr.; Apr, May, ...
315
+ v['M'] = p
316
+
317
+ end
318
+
319
+ elsif p =~ /\A\d{1,4}\z/
320
+ # Year or Day; 2005, 31, 04, 1, ...
321
+ if p.to_i > 31
322
+ # The piece is the value of an year
323
+ v['Y'] = p
324
+
325
+ else
326
+ # The piece is the value of a day
327
+ if v['d']
328
+ # 2-digit year?
329
+ altervalue['Y'] = p unless v['Y']
330
+ else
331
+ # The value is "day"
332
+ v['d'] = p
333
+ end
334
+ end
335
+
336
+ elsif cr = p.match(/\A([0-2]\d):([0-5]\d):([0-5]\d)\z/) ||
337
+ cr = p.match(/\A(\d{1,2})[-:](\d{1,2})[-:](\d{1,2})\z/)
338
+ # Time; 12:34:56, 03:14:15, ...
339
+ # Arrival-Date: 2014-03-26 00-01-19
340
+
341
+ if cr[1].to_i < 24 && cr[2].to_i < 60 && cr[3].to_i < 60
342
+ # Valid time format, maybe...
343
+ v['T'] = sprintf('%02d:%02d:%02d', cr[1].to_i, cr[2].to_i, cr[3].to_i)
344
+ end
345
+
346
+ elsif cr = p.match(/\A([0-2]\d):([0-5]\d)\z/)
347
+ # Time; 12:34 => 12:34:00
348
+ if cr[1].to_i < 24 && cr[2].to_i < 60
349
+ v['T'] = sprintf('%02d:%02d:00', cr[1], cr[2])
350
+ end
351
+
352
+ elsif cr = p.match(/\A(\d\d?):(\d\d?)\z/)
353
+ # Time: 1:4 => 01:04:00
354
+ v['T'] = sprintf('%02d:%02d:00', cr[1], cr[2])
355
+
356
+ elsif p =~ /\A[APap][Mm]\z/
357
+ # AM or PM
358
+ afternoon1 = 1
359
+
360
+ else
361
+ # Timezone offset and others
362
+ if p =~ /\A[-+][01]\d{3}\z/
363
+ # Timezone offset; +0000, +0900, -1000, ...
364
+ v['z'] ||= p
365
+
366
+ elsif p =~ /\A[(]?[A-Z]{2,5}[)]?\z/
367
+ # Timezone abbreviation; JST, GMT, UTC, ...
368
+ v['z'] ||= abbr2tz(p) || '+0000'
369
+
370
+ else
371
+ # Other date format
372
+ if cr = p.match(%r|\A(\d{4})[-/](\d{1,2})[-/](\d{1,2})\z|)
373
+ # Mail.app(MacOS X)'s faked Bounce, Arrival-Date: 2010-06-18 17:17:52 +0900
374
+ v['Y'] = cr[1].to_i
375
+ v['M'] = MonthName['abbr'][cr[2].to_i - 1]
376
+ v['d'] = cr[3].to_i
377
+
378
+ elsif cr = p.match(%r|\A(\d{4})[-/](\d{1,2})[-/](\d{1,2})T([0-2]\d):([0-5]\d):([0-5]\d)\z|)
379
+ # ISO 8601; 2000-04-29T01:23:45
380
+ v['Y'] = cr[1].to_i
381
+ v['M'] = MonthName['abbr'][cr[2].to_i - 1]
382
+
383
+ if cr[3].to_i < 32
384
+ v['d'] = cr[3].to_i
385
+ end
386
+
387
+ if cr[4].to_i < 24 && cr[5].to_i < 60 && cr[6].to_i < 60
388
+ v['T'] = sprintf('%02d:%02d:%02d', cr[4], cr[5], cr[6])
389
+ end
390
+
391
+ elsif cr = p.match(%r|\A(\d{1,2})/(\d{1,2})/(\d{1,2})\z|)
392
+ # 4/29/01 11:34:45 PM
393
+ v['M'] = MonthName['abbr'][cr[1].to_i - 1]
394
+ v['d'] = cr[2].to_i
395
+ v['Y'] = cr[3].to_i + 2000
396
+ v['Y'] -= 100 if v['Y'].to_i > ::DateTime.now.year + 1
397
+ end
398
+ end
399
+ end
400
+ end # End of while()
401
+
402
+ if v['T'] && afternoon1 > 0
403
+ # +12
404
+ t0 = v['T']
405
+ t1 = v['T'].split(':')
406
+ v['T'] = sprintf('%02d:%02d:%02d', t1[0].to_i + 12, t1[1], t1[2])
407
+ v['T'] = t0 if t1[0].to_i > 12
408
+ end
409
+ v['a'] ||= 'Thu' # There is no day of week
410
+
411
+ if !v['Y'].nil? && v['Y'].to_i < 200
412
+ # 99 -> 1999, 102 -> 2002
413
+ v['Y'] = v['Y'].to_i + 1900
414
+ end
415
+ v['z'] ||= ::DateTime.now.zone.delete(':')
416
+
417
+ # Adjust 2-digit Year
418
+ if altervalue['Y'] && !v['Y']
419
+ # Check alternative value(Year)
420
+ if altervalue['Y'].to_i >= 82
421
+ # SMTP was born in 1982
422
+ v['Y'] ||= 1900 + altervalue['Y'].to_i
423
+ else
424
+ # 20XX
425
+ v['Y'] ||= 2000 + altervalue['Y'].to_i
426
+ end
427
+ end
428
+
429
+ # Check each piece
430
+ if v.value?(nil)
431
+ # Strange date format
432
+ warn sprintf(' ***warning: Strange date format [%s]', datestring)
433
+ return nil
434
+ end
435
+
436
+ if v['Y'].to_i < 1902 || v['Y'].to_i > 2037
437
+ # -(2^31) ~ (2^31)
438
+ return nil
439
+ end
440
+
441
+ # Build date string
442
+ # Thu, 29 Apr 2004 10:01:11 +0900
443
+ return sprintf('%s, %s %s %s %s %s', v['a'], v['d'], v['M'], v['Y'], v['T'], v['z'])
444
+ end
445
+
446
+ # Abbreviation -> Tiemzone
447
+ # @param [String] argv1 Abbr. e.g.) JST, GMT, PDT
448
+ # @return [String, Undef] +0900, +0000, -0600 or Undef if the argument is
449
+ # invalid format or not supported abbreviation
450
+ # @example Get the timezone string of "JST"
451
+ # abbr2tz('JST') #=> '+0900'
452
+ def abbr2tz(argv1)
453
+ return nil unless argv1.is_a?(::String)
454
+ return TimeZoneAbbr[argv1]
455
+ end
456
+
457
+ # Convert to second
458
+ # @param [String] argv1 Timezone string e.g) +0900
459
+ # @return [Integer,Undef] n: seconds or Undef it the argument is invalid
460
+ # format string
461
+ # @see second2tz
462
+ # @example Convert '+0900' to seconds
463
+ # tz2second('+0900') #=> 32400
464
+ def tz2second(argv1)
465
+ return nil unless argv1.is_a?(::String)
466
+ ztime = 0
467
+
468
+ if cr = argv1.match(/\A([-+])(\d)(\d)(\d{2})\z/)
469
+ digit = {
470
+ 'operator' => cr[1],
471
+ 'hour-10' => cr[2].to_i,
472
+ 'hour-01' => cr[3].to_i,
473
+ 'minutes' => cr[4].to_i,
474
+ }
475
+ ztime += (digit['hour-10'] * 10 + digit['hour-01']) * 3600
476
+ ztime += (digit['minutes'] * 60)
477
+ ztime *= -1 if digit['operator'] == '-'
478
+
479
+ return nil if ztime.abs > TZ_OFFSET
480
+ return ztime
481
+
482
+ elsif argv1 =~ /\A[A-Za-z]+\z/
483
+ return tz2second(TimeZoneAbbr[argv1])
484
+
485
+ else
486
+ return nil
487
+ end
488
+ end
489
+
490
+ # Convert to Timezone string
491
+ # @param [Integer] argv1 Second to be converted
492
+ # @return [String] Timezone offset string
493
+ # @see tz2second
494
+ # @example Get timezone offset string of specified seconds
495
+ # second2tz(12345) #=> '+0325'
496
+ def second2tz(argv1)
497
+ return '+0000' unless argv1.is_a?(Number)
498
+ digit = { 'operator' => '+' }
499
+
500
+ return '' if argv1.abs > TZ_OFFSET # UTC+14 + 1(DST?)
501
+ digit['operator'] = '-' if argv1 < 0
502
+ digit['hours'] = (argv1.abs / 3600).to_i
503
+ digit['minutes'] = ((argv1.abs % 3600) / 60).to_i
504
+
505
+ timez = sprintf('%s%02d%02d', digit['operator'], digit['hours'], digit['minutes'])
506
+ return timez
507
+ end
508
+ end
509
+ end
510
+ end
511
+