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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.rubocop.yml +182 -0
- data/.travis.yml +18 -0
- data/ANALYTICAL-PRECISION +56 -0
- data/Changes +36 -0
- data/Developers.mk +129 -0
- data/Gemfile +15 -0
- data/LICENSE +25 -0
- data/Makefile +70 -0
- data/README.md +361 -0
- data/Rakefile +12 -0
- data/Repository.mk +69 -0
- data/appveyor.yml +23 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/sisimai.rb +95 -0
- data/lib/sisimai/address.rb +224 -0
- data/lib/sisimai/arf.rb +338 -0
- data/lib/sisimai/data.rb +409 -0
- data/lib/sisimai/data/json.rb +40 -0
- data/lib/sisimai/data/yaml.rb +32 -0
- data/lib/sisimai/datetime.rb +511 -0
- data/lib/sisimai/mail.rb +82 -0
- data/lib/sisimai/mail/maildir.rb +82 -0
- data/lib/sisimai/mail/mbox.rb +69 -0
- data/lib/sisimai/mail/stdin.rb +53 -0
- data/lib/sisimai/mda.rb +152 -0
- data/lib/sisimai/message.rb +525 -0
- data/lib/sisimai/mime.rb +127 -0
- data/lib/sisimai/msp.rb +54 -0
- data/lib/sisimai/msp/de/einsundeins.rb +174 -0
- data/lib/sisimai/msp/de/gmx.rb +197 -0
- data/lib/sisimai/msp/jp/biglobe.rb +179 -0
- data/lib/sisimai/msp/jp/ezweb.rb +292 -0
- data/lib/sisimai/msp/jp/kddi.rb +195 -0
- data/lib/sisimai/msp/ru/mailru.rb +306 -0
- data/lib/sisimai/msp/ru/yandex.rb +241 -0
- data/lib/sisimai/msp/uk/messagelabs.rb +250 -0
- data/lib/sisimai/msp/us/amazonses.rb +248 -0
- data/lib/sisimai/msp/us/amazonworkmail.rb +224 -0
- data/lib/sisimai/msp/us/aol.rb +234 -0
- data/lib/sisimai/msp/us/bigfoot.rb +243 -0
- data/lib/sisimai/msp/us/facebook.rb +306 -0
- data/lib/sisimai/msp/us/google.rb +357 -0
- data/lib/sisimai/msp/us/office365.rb +273 -0
- data/lib/sisimai/msp/us/outlook.rb +242 -0
- data/lib/sisimai/msp/us/receivingses.rb +247 -0
- data/lib/sisimai/msp/us/sendgrid.rb +257 -0
- data/lib/sisimai/msp/us/verizon.rb +311 -0
- data/lib/sisimai/msp/us/yahoo.rb +178 -0
- data/lib/sisimai/msp/us/zoho.rb +198 -0
- data/lib/sisimai/mta.rb +54 -0
- data/lib/sisimai/mta/activehunter.rb +155 -0
- data/lib/sisimai/mta/apachejames.rb +194 -0
- data/lib/sisimai/mta/courier.rb +307 -0
- data/lib/sisimai/mta/domino.rb +209 -0
- data/lib/sisimai/mta/exchange.rb +314 -0
- data/lib/sisimai/mta/exim.rb +549 -0
- data/lib/sisimai/mta/imailserver.rb +227 -0
- data/lib/sisimai/mta/interscanmss.rb +167 -0
- data/lib/sisimai/mta/mailfoundry.rb +173 -0
- data/lib/sisimai/mta/mailmarshalsmtp.rb +206 -0
- data/lib/sisimai/mta/mcafee.rb +201 -0
- data/lib/sisimai/mta/messagingserver.rb +241 -0
- data/lib/sisimai/mta/mfilter.rb +190 -0
- data/lib/sisimai/mta/mxlogic.rb +283 -0
- data/lib/sisimai/mta/notes.rb +206 -0
- data/lib/sisimai/mta/opensmtpd.rb +225 -0
- data/lib/sisimai/mta/postfix.rb +306 -0
- data/lib/sisimai/mta/qmail.rb +335 -0
- data/lib/sisimai/mta/sendmail.rb +317 -0
- data/lib/sisimai/mta/surfcontrol.rb +193 -0
- data/lib/sisimai/mta/userdefined.rb +148 -0
- data/lib/sisimai/mta/v5sendmail.rb +232 -0
- data/lib/sisimai/mta/x1.rb +156 -0
- data/lib/sisimai/mta/x2.rb +157 -0
- data/lib/sisimai/mta/x3.rb +171 -0
- data/lib/sisimai/mta/x4.rb +365 -0
- data/lib/sisimai/mta/x5.rb +208 -0
- data/lib/sisimai/order.rb +220 -0
- data/lib/sisimai/reason.rb +234 -0
- data/lib/sisimai/reason/blocked.rb +105 -0
- data/lib/sisimai/reason/contenterror.rb +53 -0
- data/lib/sisimai/reason/exceedlimit.rb +60 -0
- data/lib/sisimai/reason/expired.rb +53 -0
- data/lib/sisimai/reason/filtered.rb +98 -0
- data/lib/sisimai/reason/hasmoved.rb +45 -0
- data/lib/sisimai/reason/hostunknown.rb +79 -0
- data/lib/sisimai/reason/mailboxfull.rb +118 -0
- data/lib/sisimai/reason/mailererror.rb +55 -0
- data/lib/sisimai/reason/mesgtoobig.rb +82 -0
- data/lib/sisimai/reason/networkerror.rb +58 -0
- data/lib/sisimai/reason/norelaying.rb +71 -0
- data/lib/sisimai/reason/notaccept.rb +63 -0
- data/lib/sisimai/reason/onhold.rb +45 -0
- data/lib/sisimai/reason/rejected.rb +101 -0
- data/lib/sisimai/reason/securityerror.rb +72 -0
- data/lib/sisimai/reason/spamdetected.rb +172 -0
- data/lib/sisimai/reason/suspend.rb +58 -0
- data/lib/sisimai/reason/systemerror.rb +69 -0
- data/lib/sisimai/reason/systemfull.rb +45 -0
- data/lib/sisimai/reason/toomanyconn.rb +73 -0
- data/lib/sisimai/reason/userunknown.rb +194 -0
- data/lib/sisimai/rfc2606.rb +24 -0
- data/lib/sisimai/rfc3464.rb +497 -0
- data/lib/sisimai/rfc3834.rb +150 -0
- data/lib/sisimai/rfc5322.rb +204 -0
- data/lib/sisimai/rhost.rb +47 -0
- data/lib/sisimai/rhost/googleapps.rb +237 -0
- data/lib/sisimai/smtp.rb +58 -0
- data/lib/sisimai/smtp/reply.rb +84 -0
- data/lib/sisimai/smtp/status.rb +758 -0
- data/lib/sisimai/string.rb +65 -0
- data/lib/sisimai/time.rb +11 -0
- data/lib/sisimai/version.rb +4 -0
- data/set-of-emails/README.md +35 -0
- data/set-of-emails/mailbox/mbox-0 +2467 -0
- data/set-of-emails/mailbox/mbox-1 +71 -0
- data/set-of-emails/maildir/bsd/README.md +261 -0
- data/set-of-emails/maildir/bsd/activehunter-01.eml +54 -0
- data/set-of-emails/maildir/bsd/activehunter-02.eml +53 -0
- data/set-of-emails/maildir/bsd/apachejames-01.eml +46 -0
- data/set-of-emails/maildir/bsd/arf-01.eml +66 -0
- data/set-of-emails/maildir/bsd/arf-02.eml +68 -0
- data/set-of-emails/maildir/bsd/arf-03.eml +56 -0
- data/set-of-emails/maildir/bsd/arf-04.eml +89 -0
- data/set-of-emails/maildir/bsd/arf-05.eml +82 -0
- data/set-of-emails/maildir/bsd/arf-06.eml +166 -0
- data/set-of-emails/maildir/bsd/arf-07.eml +59 -0
- data/set-of-emails/maildir/bsd/arf-08.eml +103 -0
- data/set-of-emails/maildir/bsd/arf-09.eml +104 -0
- data/set-of-emails/maildir/bsd/arf-10.eml +56 -0
- data/set-of-emails/maildir/bsd/arf-11.eml +37 -0
- data/set-of-emails/maildir/bsd/arf-12.eml +40 -0
- data/set-of-emails/maildir/bsd/arf-13.eml +76 -0
- data/set-of-emails/maildir/bsd/arf-14.eml +333 -0
- data/set-of-emails/maildir/bsd/arf-15.eml +66 -0
- data/set-of-emails/maildir/bsd/courier-01.eml +79 -0
- data/set-of-emails/maildir/bsd/courier-02.eml +83 -0
- data/set-of-emails/maildir/bsd/courier-03.eml +85 -0
- data/set-of-emails/maildir/bsd/courier-04.eml +87 -0
- data/set-of-emails/maildir/bsd/de-einsundeins-01.eml +38 -0
- data/set-of-emails/maildir/bsd/de-gmx-01.eml +52 -0
- data/set-of-emails/maildir/bsd/de-gmx-02.eml +51 -0
- data/set-of-emails/maildir/bsd/de-gmx-03.eml +56 -0
- data/set-of-emails/maildir/bsd/de-gmx-04.eml +51 -0
- data/set-of-emails/maildir/bsd/domino-01.eml +33 -0
- data/set-of-emails/maildir/bsd/domino-02.eml +83 -0
- data/set-of-emails/maildir/bsd/exchange-01.eml +31 -0
- data/set-of-emails/maildir/bsd/exchange-02.eml +67 -0
- data/set-of-emails/maildir/bsd/exchange-03.eml +52 -0
- data/set-of-emails/maildir/bsd/exchange-04.eml +28 -0
- data/set-of-emails/maildir/bsd/exchange-05.eml +56 -0
- data/set-of-emails/maildir/bsd/exchange-06.eml +151 -0
- data/set-of-emails/maildir/bsd/exim-01.eml +46 -0
- data/set-of-emails/maildir/bsd/exim-02.eml +41 -0
- data/set-of-emails/maildir/bsd/exim-03.eml +42 -0
- data/set-of-emails/maildir/bsd/exim-04.eml +46 -0
- data/set-of-emails/maildir/bsd/exim-05.eml +49 -0
- data/set-of-emails/maildir/bsd/exim-06.eml +44 -0
- data/set-of-emails/maildir/bsd/exim-07.eml +28 -0
- data/set-of-emails/maildir/bsd/exim-08.eml +42 -0
- data/set-of-emails/maildir/bsd/exim-09.eml +169 -0
- data/set-of-emails/maildir/bsd/exim-10.eml +718 -0
- data/set-of-emails/maildir/bsd/exim-11.eml +718 -0
- data/set-of-emails/maildir/bsd/exim-12.eml +75 -0
- data/set-of-emails/maildir/bsd/exim-13.eml +145 -0
- data/set-of-emails/maildir/bsd/exim-14.eml +32 -0
- data/set-of-emails/maildir/bsd/exim-15.eml +49 -0
- data/set-of-emails/maildir/bsd/exim-16.eml +98 -0
- data/set-of-emails/maildir/bsd/exim-17.eml +50 -0
- data/set-of-emails/maildir/bsd/exim-18.eml +96 -0
- data/set-of-emails/maildir/bsd/exim-19.eml +52 -0
- data/set-of-emails/maildir/bsd/exim-20.eml +159 -0
- data/set-of-emails/maildir/bsd/exim-21.eml +150 -0
- data/set-of-emails/maildir/bsd/exim-22.eml +50 -0
- data/set-of-emails/maildir/bsd/exim-23.eml +57 -0
- data/set-of-emails/maildir/bsd/exim-24.eml +107 -0
- data/set-of-emails/maildir/bsd/exim-25.eml +18 -0
- data/set-of-emails/maildir/bsd/exim-26.eml +111 -0
- data/set-of-emails/maildir/bsd/exim-27.eml +120 -0
- data/set-of-emails/maildir/bsd/exim-28.eml +148 -0
- data/set-of-emails/maildir/bsd/google-apps-01.eml +66 -0
- data/set-of-emails/maildir/bsd/imailserver-01.eml +27 -0
- data/set-of-emails/maildir/bsd/imailserver-02.eml +36 -0
- data/set-of-emails/maildir/bsd/imailserver-03.eml +28 -0
- data/set-of-emails/maildir/bsd/imailserver-04.eml +15 -0
- data/set-of-emails/maildir/bsd/imailserver-05.eml +92 -0
- data/set-of-emails/maildir/bsd/imailserver-06.eml +29 -0
- data/set-of-emails/maildir/bsd/interscanmss-01.eml +49 -0
- data/set-of-emails/maildir/bsd/interscanmss-02.eml +259 -0
- data/set-of-emails/maildir/bsd/jp-biglobe-01.eml +43 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-01.eml +36 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-02.eml +65 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-03.eml +35 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-04.eml +38 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-05.eml +38 -0
- data/set-of-emails/maildir/bsd/jp-ezweb-06.eml +33 -0
- data/set-of-emails/maildir/bsd/jp-kddi-01.eml +49 -0
- data/set-of-emails/maildir/bsd/jp-kddi-02.eml +54 -0
- data/set-of-emails/maildir/bsd/jp-kddi-03.eml +54 -0
- data/set-of-emails/maildir/bsd/mailfoundry-01.eml +50 -0
- data/set-of-emails/maildir/bsd/mailfoundry-02.eml +49 -0
- data/set-of-emails/maildir/bsd/mailmarshalsmtp-01.eml +43 -0
- data/set-of-emails/maildir/bsd/mcafee-01.eml +63 -0
- data/set-of-emails/maildir/bsd/mcafee-02.eml +65 -0
- data/set-of-emails/maildir/bsd/mcafee-03.eml +59 -0
- data/set-of-emails/maildir/bsd/messagingserver-01.eml +102 -0
- data/set-of-emails/maildir/bsd/messagingserver-02.eml +72 -0
- data/set-of-emails/maildir/bsd/messagingserver-03.eml +70 -0
- data/set-of-emails/maildir/bsd/messagingserver-04.eml +102 -0
- data/set-of-emails/maildir/bsd/messagingserver-05.eml +98 -0
- data/set-of-emails/maildir/bsd/messagingserver-06.eml +101 -0
- data/set-of-emails/maildir/bsd/messagingserver-07.eml +129 -0
- data/set-of-emails/maildir/bsd/mfilter-01.eml +49 -0
- data/set-of-emails/maildir/bsd/mfilter-02.eml +48 -0
- data/set-of-emails/maildir/bsd/mfilter-03.eml +43 -0
- data/set-of-emails/maildir/bsd/mxlogic-01.eml +47 -0
- data/set-of-emails/maildir/bsd/mxlogic-02.eml +44 -0
- data/set-of-emails/maildir/bsd/mxlogic-03.eml +46 -0
- data/set-of-emails/maildir/bsd/notes-01.eml +42 -0
- data/set-of-emails/maildir/bsd/notes-02.eml +42 -0
- data/set-of-emails/maildir/bsd/notes-03.eml +38 -0
- data/set-of-emails/maildir/bsd/notes-04.eml +181 -0
- data/set-of-emails/maildir/bsd/opensmtpd-01.eml +33 -0
- data/set-of-emails/maildir/bsd/opensmtpd-02.eml +33 -0
- data/set-of-emails/maildir/bsd/opensmtpd-03.eml +36 -0
- data/set-of-emails/maildir/bsd/opensmtpd-04.eml +40 -0
- data/set-of-emails/maildir/bsd/opensmtpd-05.eml +36 -0
- data/set-of-emails/maildir/bsd/postfix-01.eml +60 -0
- data/set-of-emails/maildir/bsd/postfix-02.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-03.eml +71 -0
- data/set-of-emails/maildir/bsd/postfix-04.eml +89 -0
- data/set-of-emails/maildir/bsd/postfix-05.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-06.eml +72 -0
- data/set-of-emails/maildir/bsd/postfix-07.eml +74 -0
- data/set-of-emails/maildir/bsd/postfix-08.eml +78 -0
- data/set-of-emails/maildir/bsd/postfix-09.eml +76 -0
- data/set-of-emails/maildir/bsd/postfix-10.eml +73 -0
- data/set-of-emails/maildir/bsd/postfix-11.eml +86 -0
- data/set-of-emails/maildir/bsd/postfix-12.eml +71 -0
- data/set-of-emails/maildir/bsd/postfix-13.eml +81 -0
- data/set-of-emails/maildir/bsd/postfix-14.eml +68 -0
- data/set-of-emails/maildir/bsd/postfix-15.eml +69 -0
- data/set-of-emails/maildir/bsd/postfix-16.eml +73 -0
- data/set-of-emails/maildir/bsd/postfix-17.eml +68 -0
- data/set-of-emails/maildir/bsd/postfix-18.eml +121 -0
- data/set-of-emails/maildir/bsd/postfix-19.eml +105 -0
- data/set-of-emails/maildir/bsd/postfix-20.eml +231 -0
- data/set-of-emails/maildir/bsd/postfix-21.eml +60 -0
- data/set-of-emails/maildir/bsd/qmail-01.eml +40 -0
- data/set-of-emails/maildir/bsd/qmail-02.eml +35 -0
- data/set-of-emails/maildir/bsd/qmail-03.eml +22 -0
- data/set-of-emails/maildir/bsd/qmail-04.eml +31 -0
- data/set-of-emails/maildir/bsd/qmail-05.eml +31 -0
- data/set-of-emails/maildir/bsd/qmail-06.eml +39 -0
- data/set-of-emails/maildir/bsd/qmail-07.eml +22 -0
- data/set-of-emails/maildir/bsd/qmail-08.eml +23 -0
- data/set-of-emails/maildir/bsd/qmail-09.eml +103 -0
- data/set-of-emails/maildir/bsd/rfc3464-01.eml +60 -0
- data/set-of-emails/maildir/bsd/rfc3464-02.eml +43 -0
- data/set-of-emails/maildir/bsd/rfc3464-03.eml +40 -0
- data/set-of-emails/maildir/bsd/rfc3464-04.eml +50 -0
- data/set-of-emails/maildir/bsd/rfc3464-05.eml +63 -0
- data/set-of-emails/maildir/bsd/rfc3464-06.eml +48 -0
- data/set-of-emails/maildir/bsd/rfc3464-07.eml +88 -0
- data/set-of-emails/maildir/bsd/rfc3464-08.eml +70 -0
- data/set-of-emails/maildir/bsd/rfc3464-09.eml +93 -0
- data/set-of-emails/maildir/bsd/rfc3464-10.eml +467 -0
- data/set-of-emails/maildir/bsd/rfc3464-11.eml +1171 -0
- data/set-of-emails/maildir/bsd/rfc3464-12.eml +101 -0
- data/set-of-emails/maildir/bsd/rfc3464-13.eml +131 -0
- data/set-of-emails/maildir/bsd/rfc3464-14.eml +121 -0
- data/set-of-emails/maildir/bsd/rfc3464-15.eml +144 -0
- data/set-of-emails/maildir/bsd/rfc3464-16.eml +36 -0
- data/set-of-emails/maildir/bsd/rfc3464-17.eml +109 -0
- data/set-of-emails/maildir/bsd/rfc3464-18.eml +149 -0
- data/set-of-emails/maildir/bsd/rfc3464-19.eml +65 -0
- data/set-of-emails/maildir/bsd/rfc3464-20.eml +145 -0
- data/set-of-emails/maildir/bsd/rfc3464-21.eml +146 -0
- data/set-of-emails/maildir/bsd/rfc3464-22.eml +105 -0
- data/set-of-emails/maildir/bsd/rfc3464-23.eml +21 -0
- data/set-of-emails/maildir/bsd/rfc3464-24.eml +27 -0
- data/set-of-emails/maildir/bsd/rfc3464-25.eml +33 -0
- data/set-of-emails/maildir/bsd/rfc3464-26.eml +98 -0
- data/set-of-emails/maildir/bsd/rfc3464-27.eml +180 -0
- data/set-of-emails/maildir/bsd/rfc3464-28.eml +122 -0
- data/set-of-emails/maildir/bsd/rfc3834-01.eml +37 -0
- data/set-of-emails/maildir/bsd/rfc3834-02.eml +51 -0
- data/set-of-emails/maildir/bsd/rfc3834-03.eml +33 -0
- data/set-of-emails/maildir/bsd/ru-mailru-01.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-mailru-02.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-mailru-03.eml +62 -0
- data/set-of-emails/maildir/bsd/ru-mailru-04.eml +54 -0
- data/set-of-emails/maildir/bsd/ru-yandex-01.eml +102 -0
- data/set-of-emails/maildir/bsd/ru-yandex-02.eml +113 -0
- data/set-of-emails/maildir/bsd/ru-yandex-03.eml +101 -0
- data/set-of-emails/maildir/bsd/sendmail-01.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-02.eml +82 -0
- data/set-of-emails/maildir/bsd/sendmail-03.eml +76 -0
- data/set-of-emails/maildir/bsd/sendmail-04.eml +63 -0
- data/set-of-emails/maildir/bsd/sendmail-05.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-06.eml +67 -0
- data/set-of-emails/maildir/bsd/sendmail-07.eml +65 -0
- data/set-of-emails/maildir/bsd/sendmail-08.eml +62 -0
- data/set-of-emails/maildir/bsd/sendmail-09.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-10.eml +82 -0
- data/set-of-emails/maildir/bsd/sendmail-11.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-12.eml +62 -0
- data/set-of-emails/maildir/bsd/sendmail-13.eml +66 -0
- data/set-of-emails/maildir/bsd/sendmail-14.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-15.eml +60 -0
- data/set-of-emails/maildir/bsd/sendmail-16.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-17.eml +68 -0
- data/set-of-emails/maildir/bsd/sendmail-18.eml +64 -0
- data/set-of-emails/maildir/bsd/sendmail-19.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-20.eml +120 -0
- data/set-of-emails/maildir/bsd/sendmail-21.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-22.eml +73 -0
- data/set-of-emails/maildir/bsd/sendmail-23.eml +137 -0
- data/set-of-emails/maildir/bsd/sendmail-24.eml +66 -0
- data/set-of-emails/maildir/bsd/sendmail-25.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-26.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-27.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-28.eml +69 -0
- data/set-of-emails/maildir/bsd/sendmail-29.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-30.eml +68 -0
- data/set-of-emails/maildir/bsd/sendmail-31.eml +80 -0
- data/set-of-emails/maildir/bsd/sendmail-32.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-33.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-34.eml +75 -0
- data/set-of-emails/maildir/bsd/sendmail-35.eml +70 -0
- data/set-of-emails/maildir/bsd/sendmail-36.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-37.eml +71 -0
- data/set-of-emails/maildir/bsd/sendmail-38.eml +167 -0
- data/set-of-emails/maildir/bsd/surfcontrol-01.eml +79 -0
- data/set-of-emails/maildir/bsd/surfcontrol-02.eml +70 -0
- data/set-of-emails/maildir/bsd/surfcontrol-03.eml +70 -0
- data/set-of-emails/maildir/bsd/uk-messagelabs-01.eml +76 -0
- data/set-of-emails/maildir/bsd/us-amazonses-01.eml +59 -0
- data/set-of-emails/maildir/bsd/us-amazonses-02.eml +177 -0
- data/set-of-emails/maildir/bsd/us-amazonses-03.eml +55 -0
- data/set-of-emails/maildir/bsd/us-amazonses-04.eml +55 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-01.eml +156 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-02.eml +160 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-03.eml +161 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-04.eml +156 -0
- data/set-of-emails/maildir/bsd/us-amazonworkmail-05.eml +157 -0
- data/set-of-emails/maildir/bsd/us-aol-01.eml +1258 -0
- data/set-of-emails/maildir/bsd/us-aol-02.eml +1257 -0
- data/set-of-emails/maildir/bsd/us-aol-03.eml +1264 -0
- data/set-of-emails/maildir/bsd/us-aol-04.eml +1260 -0
- data/set-of-emails/maildir/bsd/us-bigfoot-01.eml +64 -0
- data/set-of-emails/maildir/bsd/us-facebook-01.eml +40 -0
- data/set-of-emails/maildir/bsd/us-facebook-02.eml +42 -0
- data/set-of-emails/maildir/bsd/us-google-01.eml +70 -0
- data/set-of-emails/maildir/bsd/us-google-02.eml +50 -0
- data/set-of-emails/maildir/bsd/us-google-03.eml +51 -0
- data/set-of-emails/maildir/bsd/us-google-04.eml +82 -0
- data/set-of-emails/maildir/bsd/us-google-05.eml +50 -0
- data/set-of-emails/maildir/bsd/us-google-06.eml +56 -0
- data/set-of-emails/maildir/bsd/us-google-07.eml +42 -0
- data/set-of-emails/maildir/bsd/us-google-08.eml +59 -0
- data/set-of-emails/maildir/bsd/us-google-09.eml +76 -0
- data/set-of-emails/maildir/bsd/us-google-10.eml +69 -0
- data/set-of-emails/maildir/bsd/us-google-11.eml +68 -0
- data/set-of-emails/maildir/bsd/us-google-12.eml +76 -0
- data/set-of-emails/maildir/bsd/us-google-13.eml +79 -0
- data/set-of-emails/maildir/bsd/us-google-14.eml +304 -0
- data/set-of-emails/maildir/bsd/us-office365-01.eml +102 -0
- data/set-of-emails/maildir/bsd/us-outlook-01.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-02.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-03.eml +72 -0
- data/set-of-emails/maildir/bsd/us-outlook-04.eml +79 -0
- data/set-of-emails/maildir/bsd/us-outlook-05.eml +85 -0
- data/set-of-emails/maildir/bsd/us-outlook-06.eml +75 -0
- data/set-of-emails/maildir/bsd/us-outlook-07.eml +70 -0
- data/set-of-emails/maildir/bsd/us-receivingses-01.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-02.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-03.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-04.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-05.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-06.eml +74 -0
- data/set-of-emails/maildir/bsd/us-receivingses-07.eml +74 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-01.eml +95 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-02.eml +98 -0
- data/set-of-emails/maildir/bsd/us-sendgrid-03.eml +100 -0
- data/set-of-emails/maildir/bsd/us-verizon-01.eml +31 -0
- data/set-of-emails/maildir/bsd/us-yahoo-01.eml +78 -0
- data/set-of-emails/maildir/bsd/us-yahoo-02.eml +79 -0
- data/set-of-emails/maildir/bsd/us-yahoo-03.eml +93 -0
- data/set-of-emails/maildir/bsd/us-yahoo-04.eml +94 -0
- data/set-of-emails/maildir/bsd/us-yahoo-05.eml +94 -0
- data/set-of-emails/maildir/bsd/us-zoho-01.eml +40 -0
- data/set-of-emails/maildir/bsd/us-zoho-02.eml +38 -0
- data/set-of-emails/maildir/bsd/us-zoho-03.eml +37 -0
- data/set-of-emails/maildir/bsd/us-zoho-04.eml +47 -0
- data/set-of-emails/maildir/bsd/us-zoho-05.eml +37 -0
- data/set-of-emails/maildir/bsd/v5sendmail-01.eml +24 -0
- data/set-of-emails/maildir/bsd/v5sendmail-02.eml +26 -0
- data/set-of-emails/maildir/bsd/v5sendmail-03.eml +29 -0
- data/set-of-emails/maildir/bsd/v5sendmail-04.eml +29 -0
- data/set-of-emails/maildir/bsd/v5sendmail-05.eml +42 -0
- data/set-of-emails/maildir/bsd/v5sendmail-06.eml +28 -0
- data/set-of-emails/maildir/bsd/v5sendmail-07.eml +35 -0
- data/set-of-emails/maildir/bsd/x1-01.eml +61 -0
- data/set-of-emails/maildir/bsd/x1-02.eml +62 -0
- data/set-of-emails/maildir/bsd/x2-01.eml +41 -0
- data/set-of-emails/maildir/bsd/x2-02.eml +46 -0
- data/set-of-emails/maildir/bsd/x2-03.eml +34 -0
- data/set-of-emails/maildir/bsd/x2-04.eml +0 -0
- data/set-of-emails/maildir/bsd/x2-05.eml +98 -0
- data/set-of-emails/maildir/bsd/x3-01.eml +61 -0
- data/set-of-emails/maildir/bsd/x3-02.eml +64 -0
- data/set-of-emails/maildir/bsd/x3-03.eml +59 -0
- data/set-of-emails/maildir/bsd/x3-04.eml +106 -0
- data/set-of-emails/maildir/bsd/x4-01.eml +92 -0
- data/set-of-emails/maildir/bsd/x4-02.eml +112 -0
- data/set-of-emails/maildir/bsd/x4-03.eml +245 -0
- data/set-of-emails/maildir/bsd/x4-04.eml +81 -0
- data/set-of-emails/maildir/bsd/x4-05.eml +121 -0
- data/set-of-emails/maildir/bsd/x4-06.eml +32 -0
- data/set-of-emails/maildir/bsd/x4-07.eml +153 -0
- data/set-of-emails/maildir/bsd/x5-01.eml +155 -0
- data/set-of-emails/maildir/dos/activehunter-01.eml +54 -0
- data/set-of-emails/maildir/dos/apachejames-01.eml +46 -0
- data/set-of-emails/maildir/dos/arf-01.eml +66 -0
- data/set-of-emails/maildir/dos/courier-01.eml +79 -0
- data/set-of-emails/maildir/dos/de-einsundeins-01.eml +38 -0
- data/set-of-emails/maildir/dos/de-gmx-01.eml +52 -0
- data/set-of-emails/maildir/dos/domino-01.eml +33 -0
- data/set-of-emails/maildir/dos/exchange-01.eml +31 -0
- data/set-of-emails/maildir/dos/exim-01.eml +46 -0
- data/set-of-emails/maildir/dos/google-apps-01.eml +66 -0
- data/set-of-emails/maildir/dos/imailserver-01.eml +27 -0
- data/set-of-emails/maildir/dos/interscanmss-01.eml +49 -0
- data/set-of-emails/maildir/dos/jp-biglobe-01.eml +43 -0
- data/set-of-emails/maildir/dos/jp-ezweb-01.eml +36 -0
- data/set-of-emails/maildir/dos/jp-kddi-01.eml +49 -0
- data/set-of-emails/maildir/dos/mailfoundry-01.eml +50 -0
- data/set-of-emails/maildir/dos/mailmarshalsmtp-01.eml +43 -0
- data/set-of-emails/maildir/dos/mcafee-01.eml +63 -0
- data/set-of-emails/maildir/dos/messagingserver-01.eml +102 -0
- data/set-of-emails/maildir/dos/mfilter-01.eml +49 -0
- data/set-of-emails/maildir/dos/mxlogic-01.eml +47 -0
- data/set-of-emails/maildir/dos/notes-01.eml +42 -0
- data/set-of-emails/maildir/dos/opensmtpd-01.eml +33 -0
- data/set-of-emails/maildir/dos/postfix-01.eml +60 -0
- data/set-of-emails/maildir/dos/qmail-01.eml +40 -0
- data/set-of-emails/maildir/dos/rfc3464-01.eml +59 -0
- data/set-of-emails/maildir/dos/rfc3834-01.eml +37 -0
- data/set-of-emails/maildir/dos/ru-mailru-01.eml +54 -0
- data/set-of-emails/maildir/dos/ru-yandex-01.eml +102 -0
- data/set-of-emails/maildir/dos/sendmail-01.eml +69 -0
- data/set-of-emails/maildir/dos/surfcontrol-01.eml +79 -0
- data/set-of-emails/maildir/dos/uk-messagelabs-01.eml +76 -0
- data/set-of-emails/maildir/dos/us-amazonses-01.eml +59 -0
- data/set-of-emails/maildir/dos/us-aol-01.eml +1258 -0
- data/set-of-emails/maildir/dos/us-bigfoot-01.eml +64 -0
- data/set-of-emails/maildir/dos/us-facebook-01.eml +40 -0
- data/set-of-emails/maildir/dos/us-google-01.eml +70 -0
- data/set-of-emails/maildir/dos/us-outlook-01.eml +72 -0
- data/set-of-emails/maildir/dos/us-receivingses-01.eml +74 -0
- data/set-of-emails/maildir/dos/us-sendgrid-01.eml +95 -0
- data/set-of-emails/maildir/dos/us-verizon-01.eml +31 -0
- data/set-of-emails/maildir/dos/us-yahoo-01.eml +78 -0
- data/set-of-emails/maildir/dos/us-zoho-01.eml +40 -0
- data/set-of-emails/maildir/dos/v5sendmail-01.eml +24 -0
- data/set-of-emails/maildir/dos/x1-01.eml +61 -0
- data/set-of-emails/maildir/dos/x2-01.eml +41 -0
- data/set-of-emails/maildir/dos/x3-01.eml +61 -0
- data/set-of-emails/maildir/dos/x4-01.eml +90 -0
- data/set-of-emails/maildir/dos/x5-01.eml +155 -0
- data/set-of-emails/maildir/err/make-test-01.eml +70 -0
- data/set-of-emails/maildir/err/make-test-02.eml +70 -0
- data/set-of-emails/maildir/err/make-test-03.eml +64 -0
- data/set-of-emails/maildir/err/make-test-04.eml +64 -0
- data/set-of-emails/maildir/err/make-test-05.eml +66 -0
- data/set-of-emails/maildir/err/make-test-06.eml +118 -0
- data/set-of-emails/maildir/err/make-test-07.eml +26 -0
- data/set-of-emails/maildir/err/make-test-08.eml +67 -0
- data/set-of-emails/maildir/err/make-test-09.eml +55 -0
- data/set-of-emails/maildir/err/make-test-10.eml +69 -0
- data/set-of-emails/maildir/err/make-test-11.eml +64 -0
- data/set-of-emails/maildir/err/make-test-12.eml +66 -0
- data/set-of-emails/maildir/err/make-test-13.eml +67 -0
- data/set-of-emails/maildir/err/make-test-14.eml +66 -0
- data/set-of-emails/maildir/err/make-test-15.eml +70 -0
- data/set-of-emails/maildir/err/make-test-16.eml +68 -0
- data/set-of-emails/maildir/err/make-test-17.eml +68 -0
- data/set-of-emails/maildir/err/make-test-18.eml +68 -0
- data/set-of-emails/maildir/err/make-test-19.eml +69 -0
- data/set-of-emails/maildir/err/make-test-20.eml +67 -0
- data/set-of-emails/maildir/err/make-test-21.eml +69 -0
- data/set-of-emails/maildir/err/make-test-22.eml +66 -0
- data/set-of-emails/maildir/err/make-test-23.eml +70 -0
- data/set-of-emails/maildir/err/make-test-24.eml +69 -0
- data/set-of-emails/maildir/err/make-test-25.eml +67 -0
- data/set-of-emails/maildir/err/make-test-26.eml +69 -0
- data/set-of-emails/maildir/err/make-test-27.eml +69 -0
- data/set-of-emails/maildir/err/make-test-28.eml +66 -0
- data/set-of-emails/maildir/err/make-test-29.eml +68 -0
- data/set-of-emails/maildir/err/make-test-30.eml +68 -0
- data/set-of-emails/maildir/err/make-test-31.eml +80 -0
- data/set-of-emails/maildir/err/make-test-32.eml +66 -0
- data/set-of-emails/maildir/err/make-test-33.eml +68 -0
- data/set-of-emails/maildir/err/make-test-34.eml +56 -0
- data/set-of-emails/maildir/err/make-test-35.eml +59 -0
- data/set-of-emails/maildir/err/make-test-36.eml +53 -0
- data/set-of-emails/maildir/err/make-test-37.eml +62 -0
- data/set-of-emails/maildir/mac/activehunter-01.eml +1 -2
- data/set-of-emails/maildir/mac/apachejames-01.eml +1 -4
- data/set-of-emails/maildir/mac/arf-01.eml +1 -3
- data/set-of-emails/maildir/mac/courier-01.eml +1 -6
- data/set-of-emails/maildir/mac/de-einsundeins-01.eml +1 -1
- data/set-of-emails/maildir/mac/de-gmx-01.eml +1 -1
- data/set-of-emails/maildir/mac/domino-01.eml +1 -0
- data/set-of-emails/maildir/mac/exchange-01.eml +1 -0
- data/set-of-emails/maildir/mac/exim-01.eml +1 -1
- data/set-of-emails/maildir/mac/google-apps-01.eml +1 -4
- data/set-of-emails/maildir/mac/imailserver-01.eml +1 -0
- data/set-of-emails/maildir/mac/interscanmss-01.eml +1 -2
- data/set-of-emails/maildir/mac/jp-biglobe-01.eml +1 -2
- data/set-of-emails/maildir/mac/jp-ezweb-01.eml +1 -1
- data/set-of-emails/maildir/mac/jp-kddi-01.eml +1 -2
- data/set-of-emails/maildir/mac/mailfoundry-01.eml +1 -2
- data/set-of-emails/maildir/mac/mailmarshalsmtp-01.eml +1 -2
- data/set-of-emails/maildir/mac/mcafee-01.eml +1 -4
- data/set-of-emails/maildir/mac/messagingserver-01.eml +1 -4
- data/set-of-emails/maildir/mac/mfilter-01.eml +1 -3
- data/set-of-emails/maildir/mac/mxlogic-01.eml +1 -1
- data/set-of-emails/maildir/mac/notes-01.eml +1 -2
- data/set-of-emails/maildir/mac/opensmtpd-01.eml +1 -0
- data/set-of-emails/maildir/mac/postfix-01.eml +1 -3
- data/set-of-emails/maildir/mac/qmail-01.eml +1 -1
- data/set-of-emails/maildir/mac/rfc3464-01.eml +1 -4
- data/set-of-emails/maildir/mac/rfc3834-01.eml +1 -0
- data/set-of-emails/maildir/mac/ru-mailru-01.eml +1 -1
- data/set-of-emails/maildir/mac/ru-yandex-01.eml +1 -4
- data/set-of-emails/maildir/mac/sendmail-01.eml +1 -4
- data/set-of-emails/maildir/mac/surfcontrol-01.eml +1 -5
- data/set-of-emails/maildir/mac/uk-messagelabs-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-amazonses-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-aol-01.eml +1 -15
- data/set-of-emails/maildir/mac/us-bigfoot-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-facebook-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-google-01.eml +1 -1
- data/set-of-emails/maildir/mac/us-outlook-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-receivingses-01.eml +1 -4
- data/set-of-emails/maildir/mac/us-sendgrid-01.eml +1 -3
- data/set-of-emails/maildir/mac/us-verizon-01.eml +1 -2
- data/set-of-emails/maildir/mac/us-yahoo-01.eml +1 -1
- data/set-of-emails/maildir/mac/us-zoho-01.eml +1 -2
- data/set-of-emails/maildir/mac/v5sendmail-01.eml +1 -0
- data/set-of-emails/maildir/mac/x1-01.eml +1 -4
- data/set-of-emails/maildir/mac/x2-01.eml +1 -1
- data/set-of-emails/maildir/mac/x3-01.eml +1 -3
- data/set-of-emails/maildir/mac/x4-01.eml +1 -2
- data/set-of-emails/maildir/mac/x5-01.eml +1 -8
- data/set-of-emails/maildir/not/is-not-bounce-01.eml +25 -0
- data/set-of-emails/to-be-debugged-because/reason-is-onhold/onhold-0001.eml +85 -0
- data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0002.eml +27 -0
- data/set-of-emails/to-be-debugged-because/reason-is-undefined/undefined-0003.eml +78 -0
- data/set-of-emails/to-be-debugged-because/sisimai-cannot-parse-yet/cannot-parse-this-email-0002.eml +25 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-01.eml +79 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-02.eml +72 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/issue-106-03.eml +68 -0
- data/set-of-emails/to-be-debugged-because/something-is-wrong/no-message-id-from-pr-150.eml +75 -0
- data/set-of-emails/to-be-parsed-for-test/README.md +20 -0
- data/sisimai-java.gemspec +29 -0
- data/sisimai.gemspec +28 -0
- 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
|
+
|