rack-mail_exception 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +38 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/lib/rack/mail_exception.rb +103 -0
- data/test/helper.rb +13 -0
- data/test/test_rack_mail_exception.rb +93 -0
- data/vendor/mail/.bundle/config +2 -0
- data/vendor/mail/CHANGELOG.rdoc +370 -0
- data/vendor/mail/Dependencies.txt +3 -0
- data/vendor/mail/Gemfile +17 -0
- data/vendor/mail/README.rdoc +572 -0
- data/vendor/mail/ROADMAP +92 -0
- data/vendor/mail/Rakefile +41 -0
- data/vendor/mail/TODO.rdoc +9 -0
- data/vendor/mail/lib/mail.rb +76 -0
- data/vendor/mail/lib/mail/attachments_list.rb +99 -0
- data/vendor/mail/lib/mail/body.rb +287 -0
- data/vendor/mail/lib/mail/configuration.rb +67 -0
- data/vendor/mail/lib/mail/core_extensions/blank.rb +26 -0
- data/vendor/mail/lib/mail/core_extensions/nil.rb +11 -0
- data/vendor/mail/lib/mail/core_extensions/string.rb +27 -0
- data/vendor/mail/lib/mail/elements.rb +14 -0
- data/vendor/mail/lib/mail/elements/address.rb +306 -0
- data/vendor/mail/lib/mail/elements/address_list.rb +74 -0
- data/vendor/mail/lib/mail/elements/content_disposition_element.rb +30 -0
- data/vendor/mail/lib/mail/elements/content_location_element.rb +25 -0
- data/vendor/mail/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
- data/vendor/mail/lib/mail/elements/content_type_element.rb +35 -0
- data/vendor/mail/lib/mail/elements/date_time_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/envelope_from_element.rb +34 -0
- data/vendor/mail/lib/mail/elements/message_ids_element.rb +29 -0
- data/vendor/mail/lib/mail/elements/mime_version_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/phrase_list.rb +21 -0
- data/vendor/mail/lib/mail/elements/received_element.rb +30 -0
- data/vendor/mail/lib/mail/encodings.rb +258 -0
- data/vendor/mail/lib/mail/encodings/7bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/8bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/base64.rb +33 -0
- data/vendor/mail/lib/mail/encodings/binary.rb +31 -0
- data/vendor/mail/lib/mail/encodings/quoted_printable.rb +38 -0
- data/vendor/mail/lib/mail/encodings/transfer_encoding.rb +58 -0
- data/vendor/mail/lib/mail/envelope.rb +35 -0
- data/vendor/mail/lib/mail/field.rb +223 -0
- data/vendor/mail/lib/mail/field_list.rb +33 -0
- data/vendor/mail/lib/mail/fields.rb +35 -0
- data/vendor/mail/lib/mail/fields/bcc_field.rb +56 -0
- data/vendor/mail/lib/mail/fields/cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/comments_field.rb +41 -0
- data/vendor/mail/lib/mail/fields/common/address_container.rb +16 -0
- data/vendor/mail/lib/mail/fields/common/common_address.rb +125 -0
- data/vendor/mail/lib/mail/fields/common/common_date.rb +42 -0
- data/vendor/mail/lib/mail/fields/common/common_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/common/common_message_id.rb +43 -0
- data/vendor/mail/lib/mail/fields/common/parameter_hash.rb +52 -0
- data/vendor/mail/lib/mail/fields/content_description_field.rb +19 -0
- data/vendor/mail/lib/mail/fields/content_disposition_field.rb +69 -0
- data/vendor/mail/lib/mail/fields/content_id_field.rb +63 -0
- data/vendor/mail/lib/mail/fields/content_location_field.rb +42 -0
- data/vendor/mail/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/content_type_field.rb +185 -0
- data/vendor/mail/lib/mail/fields/date_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/in_reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/keywords_field.rb +44 -0
- data/vendor/mail/lib/mail/fields/message_id_field.rb +83 -0
- data/vendor/mail/lib/mail/fields/mime_version_field.rb +53 -0
- data/vendor/mail/lib/mail/fields/optional_field.rb +13 -0
- data/vendor/mail/lib/mail/fields/received_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/references_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_bcc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_date_field.rb +35 -0
- data/vendor/mail/lib/mail/fields/resent_from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_message_id_field.rb +34 -0
- data/vendor/mail/lib/mail/fields/resent_sender_field.rb +62 -0
- data/vendor/mail/lib/mail/fields/resent_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/return_path_field.rb +64 -0
- data/vendor/mail/lib/mail/fields/sender_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/structured_field.rb +51 -0
- data/vendor/mail/lib/mail/fields/subject_field.rb +16 -0
- data/vendor/mail/lib/mail/fields/to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/unstructured_field.rb +166 -0
- data/vendor/mail/lib/mail/header.rb +262 -0
- data/vendor/mail/lib/mail/mail.rb +234 -0
- data/vendor/mail/lib/mail/message.rb +1867 -0
- data/vendor/mail/lib/mail/network.rb +9 -0
- data/vendor/mail/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
- data/vendor/mail/lib/mail/network/delivery_methods/sendmail.rb +62 -0
- data/vendor/mail/lib/mail/network/delivery_methods/smtp.rb +110 -0
- data/vendor/mail/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
- data/vendor/mail/lib/mail/network/retriever_methods/imap.rb +18 -0
- data/vendor/mail/lib/mail/network/retriever_methods/pop3.rb +149 -0
- data/vendor/mail/lib/mail/parsers/address_lists.rb +64 -0
- data/vendor/mail/lib/mail/parsers/address_lists.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.rb +387 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.treetop +46 -0
- data/vendor/mail/lib/mail/parsers/content_location.rb +139 -0
- data/vendor/mail/lib/mail/parsers/content_location.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.rb +162 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_type.rb +539 -0
- data/vendor/mail/lib/mail/parsers/content_type.treetop +58 -0
- data/vendor/mail/lib/mail/parsers/date_time.rb +114 -0
- data/vendor/mail/lib/mail/parsers/date_time.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.rb +194 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.treetop +32 -0
- data/vendor/mail/lib/mail/parsers/message_ids.rb +45 -0
- data/vendor/mail/lib/mail/parsers/message_ids.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/mime_version.rb +144 -0
- data/vendor/mail/lib/mail/parsers/mime_version.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.rb +45 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/received.rb +71 -0
- data/vendor/mail/lib/mail/parsers/received.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.rb +464 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.treetop +36 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.rb +5318 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.treetop +410 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
- data/vendor/mail/lib/mail/part.rb +102 -0
- data/vendor/mail/lib/mail/parts_list.rb +34 -0
- data/vendor/mail/lib/mail/patterns.rb +30 -0
- data/vendor/mail/lib/mail/utilities.rb +181 -0
- data/vendor/mail/lib/mail/version.rb +10 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_8.rb +97 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_9.rb +87 -0
- data/vendor/mail/lib/tasks/corpus.rake +125 -0
- data/vendor/mail/lib/tasks/treetop.rake +10 -0
- data/vendor/mail/mail.gemspec +20 -0
- data/vendor/mail/reference/US ASCII Table.txt +130 -0
- data/vendor/mail/reference/rfc1035 Domain Implementation and Specification.txt +3083 -0
- data/vendor/mail/reference/rfc1049 Content-Type Header Field for Internet Messages.txt +451 -0
- data/vendor/mail/reference/rfc1344 Implications of MIME for Internet Mail Gateways.txt +586 -0
- data/vendor/mail/reference/rfc1345 Character Mnemonics & Character Sets.txt +5761 -0
- data/vendor/mail/reference/rfc1524 A User Agent Configuration Mechanism For Multimedia Mail Format Information.txt +675 -0
- data/vendor/mail/reference/rfc1652 SMTP Service Extension for 8bit-MIMEtransport.txt +339 -0
- data/vendor/mail/reference/rfc1892 Multipart Report .txt +227 -0
- data/vendor/mail/reference/rfc1893 Mail System Status Codes.txt +843 -0
- data/vendor/mail/reference/rfc2045 Multipurpose Internet Mail Extensions (1).txt +1739 -0
- data/vendor/mail/reference/rfc2046 Multipurpose Internet Mail Extensions (2).txt +2467 -0
- data/vendor/mail/reference/rfc2047 Multipurpose Internet Mail Extensions (3).txt +843 -0
- data/vendor/mail/reference/rfc2048 Multipurpose Internet Mail Extensions (4).txt +1180 -0
- data/vendor/mail/reference/rfc2049 Multipurpose Internet Mail Extensions (5).txt +1347 -0
- data/vendor/mail/reference/rfc2111 Content-ID and Message-ID URLs.txt +283 -0
- data/vendor/mail/reference/rfc2183 Content-Disposition Header Field.txt +675 -0
- data/vendor/mail/reference/rfc2231 MIME Parameter Value and Encoded Word Extensions.txt +563 -0
- data/vendor/mail/reference/rfc2387 MIME Multipart-Related Content-type.txt +563 -0
- data/vendor/mail/reference/rfc2821 Simple Mail Transfer Protocol.txt +3711 -0
- data/vendor/mail/reference/rfc2822 Internet Message Format.txt +2859 -0
- data/vendor/mail/reference/rfc3462 Reporting of Mail System Administrative Messages.txt +396 -0
- data/vendor/mail/reference/rfc3696 Checking and Transformation of Names.txt +898 -0
- data/vendor/mail/reference/rfc4155 The application-mbox Media Type.txt +502 -0
- data/vendor/mail/reference/rfc4234 Augmented BNF for Syntax Specifications: ABNF.txt +899 -0
- data/vendor/mail/reference/rfc822 Standard for the Format of ARPA Internet Text Messages.txt +2900 -0
- data/vendor/mail/spec/environment.rb +15 -0
- data/vendor/mail/spec/features/making_a_new_message.feature +14 -0
- data/vendor/mail/spec/features/steps/env.rb +6 -0
- data/vendor/mail/spec/features/steps/making_a_new_message_steps.rb +11 -0
- data/vendor/mail/spec/fixtures/attachments/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/attachments/test.gif +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.jpg +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.pdf +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.png +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.tiff +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.zip +0 -0
- data/vendor/mail/spec/fixtures/attachments//343/201/246/343/201/231/343/201/250.txt +2 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_disposition.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_location.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_message_rfc822.eml +92 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_only_email.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_pdf.eml +70 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_encoded_name.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_quoted_filename.eml +60 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/cant_parse_from.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_7-bit.eml +231 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_empty.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_plain.eml +148 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_qp_with_space.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_spam.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_text-html.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_8bits.eml +770 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_semi_colon.eml +269 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_x_uuencode.eml +79 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/empty_group_lists.eml +162 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/header_fields_with_empty_values.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_body.eml +16 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_content_disposition.eml +43 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/multiple_content_types.eml +25 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email11.eml +34 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email12.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email2.eml +114 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email4.eml +59 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email7.eml +66 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_encoded_stack_level_too_deep.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_mimepart_without_content_type.eml +94 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_multipart_mixed_quoted_boundary.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_nested_attachment.eml +100 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_quoted_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/sig_only_email.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/two_from_in_message.eml +42 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment.eml +27 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment_long_name.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce1.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce2.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_422.eml +98 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_530.eml +97 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email10.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email5.eml +19 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email6.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email8.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_bad_time.eml +62 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_double_at_in_header.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_incorrect_header.eml +28 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_multiple_from.eml +30 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_quoted_with_0d0a.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_reply.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_simple.eml +11 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_string_in_date_field.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_trailing_dot.eml +21 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_bad_date.eml +48 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_partially_quoted_subject.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example01.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example02.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example03.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example04.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example05.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example06.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example07.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example08.eml +12 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example09.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example10.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example11.eml +6 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example12.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example13.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/sample_output_multipart +0 -0
- data/vendor/mail/spec/mail/attachments_list_spec.rb +214 -0
- data/vendor/mail/spec/mail/body_spec.rb +385 -0
- data/vendor/mail/spec/mail/configuration_spec.rb +19 -0
- data/vendor/mail/spec/mail/core_extensions/string_spec.rb +62 -0
- data/vendor/mail/spec/mail/core_extensions_spec.rb +99 -0
- data/vendor/mail/spec/mail/elements/address_list_spec.rb +109 -0
- data/vendor/mail/spec/mail/elements/address_spec.rb +609 -0
- data/vendor/mail/spec/mail/elements/date_time_element_spec.rb +20 -0
- data/vendor/mail/spec/mail/elements/envelope_from_element_spec.rb +31 -0
- data/vendor/mail/spec/mail/elements/message_ids_element_spec.rb +43 -0
- data/vendor/mail/spec/mail/elements/phrase_list_spec.rb +22 -0
- data/vendor/mail/spec/mail/elements/received_element_spec.rb +34 -0
- data/vendor/mail/spec/mail/encoding_spec.rb +189 -0
- data/vendor/mail/spec/mail/encodings/base64_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings/quoted_printable_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings_spec.rb +664 -0
- data/vendor/mail/spec/mail/example_emails_spec.rb +303 -0
- data/vendor/mail/spec/mail/field_list_spec.rb +33 -0
- data/vendor/mail/spec/mail/field_spec.rb +198 -0
- data/vendor/mail/spec/mail/fields/bcc_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/cc_field_spec.rb +79 -0
- data/vendor/mail/spec/mail/fields/comments_field_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/address_container_spec.rb +18 -0
- data/vendor/mail/spec/mail/fields/common/common_address_spec.rb +132 -0
- data/vendor/mail/spec/mail/fields/common/common_date_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/common_field_spec.rb +69 -0
- data/vendor/mail/spec/mail/fields/common/common_message_id_spec.rb +30 -0
- data/vendor/mail/spec/mail/fields/common/parameter_hash_spec.rb +56 -0
- data/vendor/mail/spec/mail/fields/content_description_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/content_disposition_field_spec.rb +55 -0
- data/vendor/mail/spec/mail/fields/content_id_field_spec.rb +117 -0
- data/vendor/mail/spec/mail/fields/content_location_field_spec.rb +46 -0
- data/vendor/mail/spec/mail/fields/content_transfer_encoding_field_spec.rb +113 -0
- data/vendor/mail/spec/mail/fields/content_type_field_spec.rb +678 -0
- data/vendor/mail/spec/mail/fields/date_field_spec.rb +73 -0
- data/vendor/mail/spec/mail/fields/envelope_spec.rb +48 -0
- data/vendor/mail/spec/mail/fields/from_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/in_reply_to_field_spec.rb +62 -0
- data/vendor/mail/spec/mail/fields/keywords_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/message_id_field_spec.rb +147 -0
- data/vendor/mail/spec/mail/fields/mime_version_field_spec.rb +166 -0
- data/vendor/mail/spec/mail/fields/received_field_spec.rb +44 -0
- data/vendor/mail/spec/mail/fields/references_field_spec.rb +35 -0
- data/vendor/mail/spec/mail/fields/reply_to_field_spec.rb +67 -0
- data/vendor/mail/spec/mail/fields/resent_bcc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_cc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_date_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/resent_from_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_message_id_field_spec.rb +24 -0
- data/vendor/mail/spec/mail/fields/resent_sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/resent_to_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/return_path_field_spec.rb +52 -0
- data/vendor/mail/spec/mail/fields/sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/structured_field_spec.rb +72 -0
- data/vendor/mail/spec/mail/fields/to_field_spec.rb +92 -0
- data/vendor/mail/spec/mail/fields/unstructured_field_spec.rb +134 -0
- data/vendor/mail/spec/mail/header_spec.rb +578 -0
- data/vendor/mail/spec/mail/mail_spec.rb +34 -0
- data/vendor/mail/spec/mail/message_spec.rb +1409 -0
- data/vendor/mail/spec/mail/mime_messages_spec.rb +435 -0
- data/vendor/mail/spec/mail/multipart_report_spec.rb +112 -0
- data/vendor/mail/spec/mail/network/delivery_methods/file_delivery_spec.rb +79 -0
- data/vendor/mail/spec/mail/network/delivery_methods/sendmail_spec.rb +125 -0
- data/vendor/mail/spec/mail/network/delivery_methods/smtp_spec.rb +133 -0
- data/vendor/mail/spec/mail/network/delivery_methods/test_mailer_spec.rb +57 -0
- data/vendor/mail/spec/mail/network/retriever_methods/pop3_spec.rb +180 -0
- data/vendor/mail/spec/mail/network_spec.rb +359 -0
- data/vendor/mail/spec/mail/parsers/address_lists_parser_spec.rb +15 -0
- data/vendor/mail/spec/mail/parsers/content_transfer_encoding_parser_spec.rb +72 -0
- data/vendor/mail/spec/mail/part_spec.rb +129 -0
- data/vendor/mail/spec/mail/parts_list_spec.rb +12 -0
- data/vendor/mail/spec/mail/round_tripping_spec.rb +44 -0
- data/vendor/mail/spec/mail/utilities_spec.rb +327 -0
- data/vendor/mail/spec/mail/version_specific/escape_paren_1_8_spec.rb +32 -0
- data/vendor/mail/spec/matchers/break_down_to.rb +35 -0
- data/vendor/mail/spec/spec_helper.rb +163 -0
- metadata +442 -0
@@ -0,0 +1,241 @@
|
|
1
|
+
module Mail
|
2
|
+
grammar RFC2822Obsolete
|
3
|
+
|
4
|
+
rule obs_qp
|
5
|
+
"\\" [\x00-\x7F]
|
6
|
+
end
|
7
|
+
|
8
|
+
rule obs_text
|
9
|
+
LF* CR* (obs_char LF* CR*)*
|
10
|
+
end
|
11
|
+
|
12
|
+
rule obs_char
|
13
|
+
[\x00-\x09] / # %d0-127 except CR and
|
14
|
+
[\x0B-\x0C] / # LF
|
15
|
+
[\x0E-\x7F]
|
16
|
+
end
|
17
|
+
|
18
|
+
rule obs_utext
|
19
|
+
obs_text
|
20
|
+
end
|
21
|
+
|
22
|
+
rule obs_phrase
|
23
|
+
(word / ".")+
|
24
|
+
end
|
25
|
+
|
26
|
+
rule obs_phrase_list
|
27
|
+
phrase / (phrase? CFWS? "," CFWS?)+ phrase?
|
28
|
+
end
|
29
|
+
|
30
|
+
rule obs_FWS
|
31
|
+
WSP+ (CRLF WSP+)*
|
32
|
+
end
|
33
|
+
|
34
|
+
rule obs_day_of_week
|
35
|
+
CFWS? day_name CFWS?
|
36
|
+
end
|
37
|
+
|
38
|
+
rule obs_year
|
39
|
+
CFWS? (DIGIT DIGIT) CFWS?
|
40
|
+
end
|
41
|
+
|
42
|
+
rule obs_month
|
43
|
+
CFWS month_name CFWS
|
44
|
+
end
|
45
|
+
|
46
|
+
rule obs_day
|
47
|
+
CFWS? (DIGIT / (DIGIT DIGIT)) CFWS?
|
48
|
+
end
|
49
|
+
|
50
|
+
rule obs_hour
|
51
|
+
CFWS? (DIGIT DIGIT) CFWS?
|
52
|
+
end
|
53
|
+
|
54
|
+
rule obs_minute
|
55
|
+
CFWS? (DIGIT DIGIT) CFWS?
|
56
|
+
end
|
57
|
+
|
58
|
+
rule obs_second
|
59
|
+
CFWS? (DIGIT DIGIT) CFWS?
|
60
|
+
end
|
61
|
+
|
62
|
+
rule obs_zone
|
63
|
+
"UT" / "GMT" / # Universal Time
|
64
|
+
# North American UT
|
65
|
+
# offsets
|
66
|
+
"EST" / "EDT" / # Eastern: - 5/ - 4
|
67
|
+
"CST" / "CDT" / # Central: - 6/ - 5
|
68
|
+
"MST" / "MDT" / # Mountain: - 7/ - 6
|
69
|
+
"PST" / "PDT" / # Pacific: - 8/ - 7
|
70
|
+
#
|
71
|
+
[\x41-\x49] / # Military zones - "A"
|
72
|
+
[\x4B-\x5A] / # through "I" and "K"
|
73
|
+
[\x61-\x69] / # through "Z", both
|
74
|
+
[\x6B-\x7A] # upper and lower case
|
75
|
+
end
|
76
|
+
|
77
|
+
rule obs_angle_addr
|
78
|
+
CFWS? "<" obs_route? addr_spec ">" CFWS?
|
79
|
+
end
|
80
|
+
|
81
|
+
rule obs_route
|
82
|
+
CFWS? obs_domain_list ":" CFWS?
|
83
|
+
end
|
84
|
+
|
85
|
+
rule obs_domain_list
|
86
|
+
"@" domain (("," )* CFWS? "@" domain)*
|
87
|
+
end
|
88
|
+
|
89
|
+
rule obs_local_part
|
90
|
+
word ("." word)*
|
91
|
+
end
|
92
|
+
|
93
|
+
rule obs_domain
|
94
|
+
atom ("." atom)*
|
95
|
+
end
|
96
|
+
|
97
|
+
rule obs_mbox_list
|
98
|
+
(mailbox? CFWS? "," CFWS?)+ mailbox?
|
99
|
+
end
|
100
|
+
|
101
|
+
rule obs_addr_list
|
102
|
+
(address? CFWS? "," CFWS?)+ address?
|
103
|
+
end
|
104
|
+
|
105
|
+
rule obs_fields
|
106
|
+
(obs_return /
|
107
|
+
obs_received /
|
108
|
+
obs_orig_date /
|
109
|
+
obs_from /
|
110
|
+
obs_sender /
|
111
|
+
obs_reply_to /
|
112
|
+
obs_to /
|
113
|
+
obs_cc /
|
114
|
+
obs_bcc /
|
115
|
+
obs_message_id /
|
116
|
+
obs_in_reply_to /
|
117
|
+
obs_references /
|
118
|
+
obs_subject /
|
119
|
+
obs_comments /
|
120
|
+
obs_keywords /
|
121
|
+
obs_resent_date /
|
122
|
+
obs_resent_from /
|
123
|
+
obs_resent_send /
|
124
|
+
obs_resent_rply /
|
125
|
+
obs_resent_to /
|
126
|
+
obs_resent_cc /
|
127
|
+
obs_resent_bcc /
|
128
|
+
obs_resent_mid /
|
129
|
+
obs_optional)*
|
130
|
+
end
|
131
|
+
|
132
|
+
rule obs_orig_date
|
133
|
+
"Date" WSP* ":" date_time CRLF
|
134
|
+
end
|
135
|
+
|
136
|
+
rule obs_from
|
137
|
+
"From" WSP* ":" mailbox_list CRLF
|
138
|
+
end
|
139
|
+
|
140
|
+
rule obs_sender
|
141
|
+
"Sender" WSP* ":" mailbox CRLF
|
142
|
+
end
|
143
|
+
|
144
|
+
rule obs_reply_to
|
145
|
+
"Reply-To" WSP* ":" mailbox_list CRLF
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
rule obs_to
|
150
|
+
"To" WSP* ":" address_list CRLF
|
151
|
+
end
|
152
|
+
|
153
|
+
rule obs_cc
|
154
|
+
"Cc" WSP* ":" address_list CRLF
|
155
|
+
end
|
156
|
+
|
157
|
+
rule obs_bcc
|
158
|
+
"Bcc" WSP* ":" (address_list / CFWS?) CRLF
|
159
|
+
end
|
160
|
+
|
161
|
+
rule obs_message_id
|
162
|
+
"Message-ID" WSP* ":" msg_id CRLF
|
163
|
+
end
|
164
|
+
|
165
|
+
rule obs_in_reply_to
|
166
|
+
"In-Reply-To" WSP* ":" (phrase / msg_id)* CRLF
|
167
|
+
end
|
168
|
+
|
169
|
+
rule obs_references
|
170
|
+
"References" WSP* ":" (phrase / msg_id)* CRLF
|
171
|
+
end
|
172
|
+
|
173
|
+
rule obs_id_left
|
174
|
+
local_part
|
175
|
+
end
|
176
|
+
|
177
|
+
rule obs_id_right
|
178
|
+
domain
|
179
|
+
end
|
180
|
+
|
181
|
+
rule obs_subject
|
182
|
+
"Subject" WSP* ":" unstructured CRLF
|
183
|
+
end
|
184
|
+
|
185
|
+
rule obs_comments
|
186
|
+
"Comments" WSP* ":" unstructured CRLF
|
187
|
+
end
|
188
|
+
|
189
|
+
rule obs_keywords
|
190
|
+
"Keywords" WSP* ":" obs_phrase_list CRLF
|
191
|
+
end
|
192
|
+
|
193
|
+
rule obs_resent_from
|
194
|
+
"Resent-From" WSP* ":" mailbox_list CRLF
|
195
|
+
end
|
196
|
+
|
197
|
+
rule obs_resent_send
|
198
|
+
"Resent-Sender" WSP* ":" mailbox CRLF
|
199
|
+
end
|
200
|
+
|
201
|
+
rule obs_resent_date
|
202
|
+
"Resent-Date" WSP* ":" date_time CRLF
|
203
|
+
end
|
204
|
+
|
205
|
+
rule obs_resent_to
|
206
|
+
"Resent-To" WSP* ":" address_list CRLF
|
207
|
+
end
|
208
|
+
|
209
|
+
rule obs_resent_cc
|
210
|
+
"Resent-Cc" WSP* ":" address_list CRLF
|
211
|
+
end
|
212
|
+
|
213
|
+
rule obs_resent_bcc
|
214
|
+
"Resent-Bcc" WSP* ":" (address_list / CFWS?) CRLF
|
215
|
+
end
|
216
|
+
|
217
|
+
rule obs_resent_mid
|
218
|
+
"Resent-Message-ID" WSP* ":" msg_id CRLF
|
219
|
+
end
|
220
|
+
|
221
|
+
rule obs_resent_rply
|
222
|
+
"Resent-Reply-To" WSP* ":" address_list CRLF
|
223
|
+
end
|
224
|
+
|
225
|
+
rule obs_return
|
226
|
+
"Return-Path" WSP* ":" path CRLF
|
227
|
+
end
|
228
|
+
|
229
|
+
rule obs_received
|
230
|
+
"Received" WSP* ":" name_val_list CRLF
|
231
|
+
end
|
232
|
+
|
233
|
+
rule obs_path
|
234
|
+
obs_angle_addr
|
235
|
+
end
|
236
|
+
|
237
|
+
rule obs_optional
|
238
|
+
field_name WSP* ":" unstructured CRLF
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mail
|
3
|
+
class Part < Message
|
4
|
+
|
5
|
+
# Creates a new empty Content-ID field and inserts it in the correct order
|
6
|
+
# into the Header. The ContentIdField object will automatically generate
|
7
|
+
# a unique content ID if you try and encode it or output it to_s without
|
8
|
+
# specifying a content id.
|
9
|
+
#
|
10
|
+
# It will preserve the content ID you specify if you do.
|
11
|
+
def add_content_id(content_id_val = '')
|
12
|
+
header['content-id'] = content_id_val
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns true if the part has a content ID field, the field may or may
|
16
|
+
# not have a value, but the field exists or not.
|
17
|
+
def has_content_id?
|
18
|
+
header.has_content_id?
|
19
|
+
end
|
20
|
+
|
21
|
+
def inline_content_id
|
22
|
+
add_content_id unless has_content_id?
|
23
|
+
uri_escape(unbracket(content_id))
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_required_fields
|
27
|
+
add_content_id unless has_content_id?
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
def delivery_status_report_part?
|
32
|
+
main_type =~ /message/i && sub_type =~ /delivery-status/i
|
33
|
+
end
|
34
|
+
|
35
|
+
def delivery_status_data
|
36
|
+
delivery_status_report_part? ? parse_delivery_status_report : {}
|
37
|
+
end
|
38
|
+
|
39
|
+
def bounced?
|
40
|
+
if action.is_a?(Array)
|
41
|
+
!!(action.first =~ /failed/i)
|
42
|
+
else
|
43
|
+
!!(action =~ /failed/i)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
# Either returns the action if the message has just a single report, or an
|
49
|
+
# array of all the actions, one for each report
|
50
|
+
def action
|
51
|
+
get_return_values('action')
|
52
|
+
end
|
53
|
+
|
54
|
+
def final_recipient
|
55
|
+
get_return_values('final-recipient')
|
56
|
+
end
|
57
|
+
|
58
|
+
def error_status
|
59
|
+
get_return_values('status')
|
60
|
+
end
|
61
|
+
|
62
|
+
def diagnostic_code
|
63
|
+
get_return_values('diagnostic-code')
|
64
|
+
end
|
65
|
+
|
66
|
+
def remote_mta
|
67
|
+
get_return_values('remote-mta')
|
68
|
+
end
|
69
|
+
|
70
|
+
def retryable?
|
71
|
+
!(error_status =~ /^5/)
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def get_return_values(key)
|
77
|
+
if delivery_status_data[key].is_a?(Array)
|
78
|
+
delivery_status_data[key].map { |a| a.value }
|
79
|
+
else
|
80
|
+
delivery_status_data[key].value
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# A part may not have a header.... so, just init a body if no header
|
85
|
+
def parse_message
|
86
|
+
header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}/m, 2)
|
87
|
+
if header_part =~ HEADER_LINE
|
88
|
+
self.header = header_part
|
89
|
+
self.body = body_part
|
90
|
+
else
|
91
|
+
self.header = "Content-Type: text/plain\r\n"
|
92
|
+
self.body = header_part
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def parse_delivery_status_report
|
97
|
+
@delivery_status_data ||= Header.new(body.to_s.gsub("\r\n\r\n", "\r\n"))
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Mail
|
2
|
+
class PartsList < Array
|
3
|
+
|
4
|
+
def attachments
|
5
|
+
Mail::AttachmentsList.new(self)
|
6
|
+
end
|
7
|
+
|
8
|
+
def collect
|
9
|
+
if block_given?
|
10
|
+
ary = PartsList.new
|
11
|
+
each { |o| ary << yield(o) }
|
12
|
+
ary
|
13
|
+
else
|
14
|
+
to_a
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
alias :collect :map
|
19
|
+
|
20
|
+
def sort!(order)
|
21
|
+
sorted = self.sort do |a, b|
|
22
|
+
# OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a
|
23
|
+
# single email message... please show me a use case and I'll put more work into this method,
|
24
|
+
# in the meantime, it works :)
|
25
|
+
a_order = order.index(a[:content_type].string.downcase) || 10000
|
26
|
+
b_order = order.index(b[:content_type].string.downcase) || 10000
|
27
|
+
a_order <=> b_order
|
28
|
+
end
|
29
|
+
self.clear
|
30
|
+
sorted.each { |p| self << p }
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: us-ascii
|
2
|
+
module Mail
|
3
|
+
module Patterns
|
4
|
+
white_space = %Q|\x9\x20|
|
5
|
+
text = %Q|\x1-\x8\xB\xC\xE-\x7f|
|
6
|
+
field_name = %Q|\x21-\x39\x3b-\x7e|
|
7
|
+
qp_safe = %Q|\x20-\x3c\x3e-\x7e|
|
8
|
+
|
9
|
+
aspecial = %Q|()<>[]:;@\\,."| # RFC5322
|
10
|
+
tspecial = %Q|()<>@,;:\\"/[]?=| # RFC2045
|
11
|
+
lwsp = %Q| \t\r\n|
|
12
|
+
control = %Q|\x00-\x1f\x7f-\xff|
|
13
|
+
|
14
|
+
CRLF = /\r\n/
|
15
|
+
WSP = /[#{white_space}]/
|
16
|
+
FWS = /#{CRLF}#{WSP}*/
|
17
|
+
TEXT = /[#{text}]/ # + obs-text
|
18
|
+
FIELD_NAME = /[#{field_name}]+/
|
19
|
+
FIELD_BODY = /.+/
|
20
|
+
FIELD_LINE = /^[#{field_name}]+:\s*.+$/
|
21
|
+
HEADER_LINE = /^([#{field_name}]+:\s*.+)$/
|
22
|
+
|
23
|
+
QP_UNSAFE = /[^#{qp_safe}]/
|
24
|
+
QP_SAFE = /[#{qp_safe}]/
|
25
|
+
CONTROL_CHAR = /[#{control}]/n
|
26
|
+
ATOM_UNSAFE = /[#{Regexp.quote aspecial}#{control}#{lwsp}]/n
|
27
|
+
PHRASE_UNSAFE = /[#{Regexp.quote aspecial}#{control}]/n
|
28
|
+
TOKEN_UNSAFE = /[#{Regexp.quote tspecial}#{control}#{lwsp}]/n
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mail
|
3
|
+
module Utilities
|
4
|
+
include Patterns
|
5
|
+
|
6
|
+
# Returns true if the string supplied is free from characters not allowed as an ATOM
|
7
|
+
def atom_safe?( str )
|
8
|
+
not ATOM_UNSAFE === str
|
9
|
+
end
|
10
|
+
|
11
|
+
# If the string supplied has ATOM unsafe characters in it, will return the string quoted
|
12
|
+
# in double quotes, otherwise returns the string unmodified
|
13
|
+
def quote_atom( str )
|
14
|
+
atom_safe?( str ) ? str : dquote(str)
|
15
|
+
end
|
16
|
+
|
17
|
+
# If the string supplied has PHRASE unsafe characters in it, will return the string quoted
|
18
|
+
# in double quotes, otherwise returns the string unmodified
|
19
|
+
def quote_phrase( str )
|
20
|
+
if RUBY_VERSION >= '1.9'
|
21
|
+
original_encoding = str.encoding
|
22
|
+
str.force_encoding('ASCII-8BIT')
|
23
|
+
if (PHRASE_UNSAFE === str)
|
24
|
+
dquote(str).force_encoding(original_encoding)
|
25
|
+
else
|
26
|
+
str.force_encoding(original_encoding)
|
27
|
+
end
|
28
|
+
else
|
29
|
+
(PHRASE_UNSAFE === str) ? dquote(str) : str
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns true if the string supplied is free from characters not allowed as a TOKEN
|
34
|
+
def token_safe?( str )
|
35
|
+
not TOKEN_UNSAFE === str
|
36
|
+
end
|
37
|
+
|
38
|
+
# If the string supplied has TOKEN unsafe characters in it, will return the string quoted
|
39
|
+
# in double quotes, otherwise returns the string unmodified
|
40
|
+
def quote_token( str )
|
41
|
+
token_safe?( str ) ? str : dquote(str)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Wraps supplied string in double quotes unless it is already wrapped.
|
45
|
+
#
|
46
|
+
# Additionally will escape any double quotation marks in the string with a single
|
47
|
+
# backslash in front of the '"' character.
|
48
|
+
def dquote( str )
|
49
|
+
match = str.match(/^"(.*)?"$/)
|
50
|
+
str = match[1] if match
|
51
|
+
# First remove all escaped double quotes:
|
52
|
+
str = str.gsub(/\\"/, '"')
|
53
|
+
# Then wrap and re-escape all double quotes
|
54
|
+
'"' + str.gsub(/["]/n) {|s| '\\' + s } + '"'
|
55
|
+
end
|
56
|
+
|
57
|
+
# Unwraps supplied string from inside double quotes.
|
58
|
+
#
|
59
|
+
# Example:
|
60
|
+
#
|
61
|
+
# string = '"This is a string"'
|
62
|
+
# unquote(string) #=> 'This is a string'
|
63
|
+
def unquote( str )
|
64
|
+
match = str.match(/^"(.*?)"$/)
|
65
|
+
match ? match[1] : str
|
66
|
+
end
|
67
|
+
|
68
|
+
# Wraps a string in parenthesis and escapes any that are in the string itself.
|
69
|
+
#
|
70
|
+
# Example:
|
71
|
+
#
|
72
|
+
# paren( 'This is a string' ) #=> '(This is a string)'
|
73
|
+
def paren( str )
|
74
|
+
RubyVer.paren( str )
|
75
|
+
end
|
76
|
+
|
77
|
+
# Unwraps a string from being wrapped in parenthesis
|
78
|
+
#
|
79
|
+
# Example:
|
80
|
+
#
|
81
|
+
# str = '(This is a string)'
|
82
|
+
# unparen( str ) #=> 'This is a string'
|
83
|
+
def unparen( str )
|
84
|
+
match = str.match(/^\((.*?)\)$/)
|
85
|
+
match ? match[1] : str
|
86
|
+
end
|
87
|
+
|
88
|
+
# Wraps a string in angle brackets and escapes any that are in the string itself
|
89
|
+
#
|
90
|
+
# Example:
|
91
|
+
#
|
92
|
+
# bracket( 'This is a string' ) #=> '<This is a string>'
|
93
|
+
def bracket( str )
|
94
|
+
RubyVer.bracket( str )
|
95
|
+
end
|
96
|
+
|
97
|
+
# Unwraps a string from being wrapped in parenthesis
|
98
|
+
#
|
99
|
+
# Example:
|
100
|
+
#
|
101
|
+
# str = '<This is a string>'
|
102
|
+
# unbracket( str ) #=> 'This is a string'
|
103
|
+
def unbracket( str )
|
104
|
+
match = str.match(/^\<(.*?)\>$/)
|
105
|
+
match ? match[1] : str
|
106
|
+
end
|
107
|
+
|
108
|
+
# Escape parenthesies in a string
|
109
|
+
#
|
110
|
+
# Example:
|
111
|
+
#
|
112
|
+
# str = 'This is (a) string'
|
113
|
+
# escape_paren( str ) #=> 'This is \(a\) string'
|
114
|
+
def escape_paren( str )
|
115
|
+
RubyVer.escape_paren( str )
|
116
|
+
end
|
117
|
+
|
118
|
+
def uri_escape( str )
|
119
|
+
URI.escape(str)
|
120
|
+
end
|
121
|
+
|
122
|
+
def uri_unescape( str )
|
123
|
+
URI.unescape(str)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Matches two objects with their to_s values case insensitively
|
127
|
+
#
|
128
|
+
# Example:
|
129
|
+
#
|
130
|
+
# obj2 = "This_is_An_object"
|
131
|
+
# obj1 = :this_IS_an_object
|
132
|
+
# match_to_s( obj1, obj2 ) #=> true
|
133
|
+
def match_to_s( obj1, obj2 )
|
134
|
+
obj1.to_s.downcase == obj2.to_s.downcase
|
135
|
+
end
|
136
|
+
|
137
|
+
# Capitalizes a string that is joined by hyphens correctly.
|
138
|
+
#
|
139
|
+
# Example:
|
140
|
+
#
|
141
|
+
# string = 'resent-from-field'
|
142
|
+
# capitalize_field( string ) #=> 'Resent-From-Field'
|
143
|
+
def capitalize_field( str )
|
144
|
+
str.to_s.split("-").map { |v| v.capitalize }.join("-")
|
145
|
+
end
|
146
|
+
|
147
|
+
# Takes an underscored word and turns it into a class name
|
148
|
+
#
|
149
|
+
# Example:
|
150
|
+
#
|
151
|
+
# constantize("hello") #=> "Hello"
|
152
|
+
# constantize("hello-there") #=> "HelloThere"
|
153
|
+
# constantize("hello-there-mate") #=> "HelloThereMate"
|
154
|
+
def constantize( str )
|
155
|
+
str.to_s.split(/[-_]/).map { |v| v.capitalize }.to_s
|
156
|
+
end
|
157
|
+
|
158
|
+
# Swaps out all underscores (_) for hyphens (-) good for stringing from symbols
|
159
|
+
# a field name.
|
160
|
+
#
|
161
|
+
# Example:
|
162
|
+
#
|
163
|
+
# string = :resent_from_field
|
164
|
+
# dasherize ( string ) #=> 'resent_from_field'
|
165
|
+
def dasherize( str )
|
166
|
+
str.to_s.gsub('_', '-')
|
167
|
+
end
|
168
|
+
|
169
|
+
# Swaps out all hyphens (-) for underscores (_) good for stringing to symbols
|
170
|
+
# a field name.
|
171
|
+
#
|
172
|
+
# Example:
|
173
|
+
#
|
174
|
+
# string = :resent_from_field
|
175
|
+
# underscoreize ( string ) #=> 'resent_from_field'
|
176
|
+
def underscoreize( str )
|
177
|
+
str.to_s.downcase.gsub('-', '_')
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
end
|