mail 2.6.1 → 2.6.3

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.
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mail
3
3
  module Utilities
4
- include Patterns
4
+ include Constants
5
5
 
6
6
  # Returns true if the string supplied is free from characters not allowed as an ATOM
7
7
  def atom_safe?( str )
@@ -177,7 +177,7 @@ module Mail
177
177
  # string = :resent_from_field
178
178
  # dasherize ( string ) #=> 'resent_from_field'
179
179
  def dasherize( str )
180
- str.to_s.gsub('_', '-')
180
+ str.to_s.tr(UNDERSCORE, HYPHEN)
181
181
  end
182
182
 
183
183
  # Swaps out all hyphens (-) for underscores (_) good for stringing to symbols
@@ -188,7 +188,7 @@ module Mail
188
188
  # string = :resent_from_field
189
189
  # underscoreize ( string ) #=> 'resent_from_field'
190
190
  def underscoreize( str )
191
- str.to_s.downcase.gsub('-', '_')
191
+ str.to_s.downcase.tr(HYPHEN, UNDERSCORE)
192
192
  end
193
193
 
194
194
  if RUBY_VERSION <= '1.8.6'
@@ -1,24 +1,16 @@
1
- # encoding: utf-8
2
1
  module Mail
3
2
  module VERSION
4
-
5
- version = {}
6
- File.read(File.join(File.dirname(__FILE__), '../', '../', 'VERSION')).each_line do |line|
7
- type, value = line.chomp.split(":")
8
- next if type =~ /^\s+$/ || value =~ /^\s+$/
9
- version[type] = value
10
- end
11
-
12
- MAJOR = version['major']
13
- MINOR = version['minor']
14
- PATCH = version['patch']
15
- BUILD = version['build']
3
+
4
+ MAJOR = 2
5
+ MINOR = 6
6
+ PATCH = 3
7
+ BUILD = nil
16
8
 
17
9
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
18
-
10
+
19
11
  def self.version
20
12
  STRING
21
13
  end
22
-
14
+
23
15
  end
24
16
  end
@@ -62,7 +62,7 @@ module Mail
62
62
  end
63
63
 
64
64
  def Ruby18.b_value_decode(str)
65
- match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
65
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m)
66
66
  if match
67
67
  encoding = match[1]
68
68
  str = Ruby18.decode_base64(match[2])
@@ -79,7 +79,7 @@ module Mail
79
79
  end
80
80
 
81
81
  def Ruby18.q_value_decode(str)
82
- match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
82
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
83
83
  if match
84
84
  encoding = match[1]
85
85
  string = match[2].gsub(/_/, '=20')
@@ -2,6 +2,36 @@
2
2
 
3
3
  module Mail
4
4
  class Ruby19
5
+ class StrictCharsetEncoder
6
+ def encode(string, charset)
7
+ string.force_encoding(Mail::Ruby19.pick_encoding(charset))
8
+ end
9
+ end
10
+
11
+ class BestEffortCharsetEncoder
12
+ def encode(string, charset)
13
+ string.force_encoding(pick_encoding(charset))
14
+ end
15
+
16
+ private
17
+
18
+ def pick_encoding(charset)
19
+ charset = case charset
20
+ when /ansi_x3.110-1983/
21
+ 'ISO-8859-1'
22
+ when /Windows-?1258/i # Windows-1258 is similar to 1252
23
+ "Windows-1252"
24
+ else
25
+ charset
26
+ end
27
+ Mail::Ruby19.pick_encoding(charset)
28
+ end
29
+ end
30
+
31
+ class << self
32
+ attr_accessor :charset_encoder
33
+ end
34
+ self.charset_encoder = StrictCharsetEncoder.new
5
35
 
6
36
  # Escapes any parenthesis in a string that are unescaped this uses
7
37
  # a Ruby 1.9.1 regexp feature of negative look behind
@@ -49,14 +79,17 @@ module Mail
49
79
  end
50
80
 
51
81
  def Ruby19.b_value_decode(str)
52
- match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
82
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m)
53
83
  if match
54
84
  charset = match[1]
55
85
  str = Ruby19.decode_base64(match[2])
56
- str.force_encoding(pick_encoding(charset))
86
+ str = charset_encoder.encode(str, charset)
57
87
  end
58
- decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
59
- decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
88
+ decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "")
89
+ decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8)
90
+ rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
91
+ warn "Encoding conversion failed #{$!}"
92
+ str.dup.force_encoding(Encoding::UTF_8)
60
93
  end
61
94
 
62
95
  def Ruby19.q_value_encode(str, encoding = nil)
@@ -65,28 +98,29 @@ module Mail
65
98
  end
66
99
 
67
100
  def Ruby19.q_value_decode(str)
68
- match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
101
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
69
102
  if match
70
103
  charset = match[1]
71
104
  string = match[2].gsub(/_/, '=20')
72
105
  # Remove trailing = if it exists in a Q encoding
73
106
  string = string.sub(/\=$/, '')
74
107
  str = Encodings::QuotedPrintable.decode(string)
75
- str.force_encoding(pick_encoding(charset))
108
+ str = charset_encoder.encode(str, charset)
76
109
  # We assume that binary strings hold utf-8 directly to work around
77
110
  # jruby/jruby#829 which subtly changes String#encode semantics.
78
- str.force_encoding('utf-8') if str.encoding == Encoding::ASCII_8BIT
111
+ str.force_encoding(Encoding::UTF_8) if str.encoding == Encoding::ASCII_8BIT
79
112
  end
80
- decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
81
- decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
82
- rescue Encoding::UndefinedConversionError
83
- str.dup.force_encoding("utf-8")
113
+ decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "")
114
+ decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8)
115
+ rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
116
+ warn "Encoding conversion failed #{$!}"
117
+ str.dup.force_encoding(Encoding::UTF_8)
84
118
  end
85
119
 
86
120
  def Ruby19.param_decode(str, encoding)
87
- string = uri_parser.unescape(str)
88
- string.force_encoding(encoding) if encoding
89
- string
121
+ str = uri_parser.unescape(str)
122
+ str = charset_encoder.encode(str, encoding) if encoding
123
+ str
90
124
  end
91
125
 
92
126
  def Ruby19.param_encode(str)
metadata CHANGED
@@ -1,89 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikel Lindsaar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-08 00:00:00.000000000 Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mime-types
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.16'
20
- - - <
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.16'
30
- - - <
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: 1.0.3
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 1.0.3
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - '>'
51
+ - - ">"
52
52
  - !ruby/object:Gem::Version
53
53
  version: 0.8.7
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>'
58
+ - - ">"
59
59
  - !ruby/object:Gem::Version
60
60
  version: 0.8.7
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 2.12.0
67
+ version: 3.0.0
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 2.12.0
74
+ version: 3.0.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rdoc
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - '>='
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - '>='
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  description: A really Ruby Mail handler.
@@ -96,25 +96,27 @@ extra_rdoc_files:
96
96
  - CHANGELOG.rdoc
97
97
  - TODO.rdoc
98
98
  files:
99
- - README.md
100
- - VERSION
101
- - MIT-LICENSE
102
- - CONTRIBUTING.md
103
99
  - CHANGELOG.rdoc
100
+ - CONTRIBUTING.md
104
101
  - Dependencies.txt
105
102
  - Gemfile
103
+ - MIT-LICENSE
104
+ - README.md
106
105
  - Rakefile
107
106
  - TODO.rdoc
107
+ - lib/mail.rb
108
108
  - lib/mail/attachments_list.rb
109
109
  - lib/mail/body.rb
110
110
  - lib/mail/check_delivery_params.rb
111
111
  - lib/mail/configuration.rb
112
+ - lib/mail/constants.rb
112
113
  - lib/mail/core_extensions/nil.rb
113
114
  - lib/mail/core_extensions/object.rb
114
115
  - lib/mail/core_extensions/smtp.rb
116
+ - lib/mail/core_extensions/string.rb
115
117
  - lib/mail/core_extensions/string/access.rb
116
118
  - lib/mail/core_extensions/string/multibyte.rb
117
- - lib/mail/core_extensions/string.rb
119
+ - lib/mail/elements.rb
118
120
  - lib/mail/elements/address.rb
119
121
  - lib/mail/elements/address_list.rb
120
122
  - lib/mail/elements/content_disposition_element.rb
@@ -127,17 +129,18 @@ files:
127
129
  - lib/mail/elements/mime_version_element.rb
128
130
  - lib/mail/elements/phrase_list.rb
129
131
  - lib/mail/elements/received_element.rb
130
- - lib/mail/elements.rb
132
+ - lib/mail/encodings.rb
131
133
  - lib/mail/encodings/7bit.rb
132
134
  - lib/mail/encodings/8bit.rb
133
135
  - lib/mail/encodings/base64.rb
134
136
  - lib/mail/encodings/binary.rb
135
137
  - lib/mail/encodings/quoted_printable.rb
136
138
  - lib/mail/encodings/transfer_encoding.rb
137
- - lib/mail/encodings.rb
139
+ - lib/mail/encodings/unix_to_unix.rb
138
140
  - lib/mail/envelope.rb
139
141
  - lib/mail/field.rb
140
142
  - lib/mail/field_list.rb
143
+ - lib/mail/fields.rb
141
144
  - lib/mail/fields/bcc_field.rb
142
145
  - lib/mail/fields/cc_field.rb
143
146
  - lib/mail/fields/comments_field.rb
@@ -176,17 +179,17 @@ files:
176
179
  - lib/mail/fields/subject_field.rb
177
180
  - lib/mail/fields/to_field.rb
178
181
  - lib/mail/fields/unstructured_field.rb
179
- - lib/mail/fields.rb
180
182
  - lib/mail/header.rb
181
183
  - lib/mail/indifferent_hash.rb
182
184
  - lib/mail/mail.rb
183
185
  - lib/mail/matchers/has_sent_mail.rb
184
186
  - lib/mail/message.rb
187
+ - lib/mail/multibyte.rb
185
188
  - lib/mail/multibyte/chars.rb
186
189
  - lib/mail/multibyte/exceptions.rb
187
190
  - lib/mail/multibyte/unicode.rb
188
191
  - lib/mail/multibyte/utils.rb
189
- - lib/mail/multibyte.rb
192
+ - lib/mail/network.rb
190
193
  - lib/mail/network/delivery_methods/exim.rb
191
194
  - lib/mail/network/delivery_methods/file_delivery.rb
192
195
  - lib/mail/network/delivery_methods/sendmail.rb
@@ -197,7 +200,7 @@ files:
197
200
  - lib/mail/network/retriever_methods/imap.rb
198
201
  - lib/mail/network/retriever_methods/pop3.rb
199
202
  - lib/mail/network/retriever_methods/test_retriever.rb
200
- - lib/mail/network.rb
203
+ - lib/mail/parsers.rb
201
204
  - lib/mail/parsers/address_lists_parser.rb
202
205
  - lib/mail/parsers/content_disposition_parser.rb
203
206
  - lib/mail/parsers/content_location_parser.rb
@@ -208,9 +211,11 @@ files:
208
211
  - lib/mail/parsers/message_ids_parser.rb
209
212
  - lib/mail/parsers/mime_version_parser.rb
210
213
  - lib/mail/parsers/phrase_lists_parser.rb
214
+ - lib/mail/parsers/ragel.rb
211
215
  - lib/mail/parsers/ragel/common.rl
212
216
  - lib/mail/parsers/ragel/date_time.rl
213
217
  - lib/mail/parsers/ragel/parser_info.rb
218
+ - lib/mail/parsers/ragel/ruby.rb
214
219
  - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb
215
220
  - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl
216
221
  - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb
@@ -235,42 +240,37 @@ files:
235
240
  - lib/mail/parsers/ragel/ruby/machines/received_machine.rb
236
241
  - lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl
237
242
  - lib/mail/parsers/ragel/ruby/parser.rb.rl.erb
238
- - lib/mail/parsers/ragel/ruby.rb
239
- - lib/mail/parsers/ragel.rb
240
243
  - lib/mail/parsers/received_parser.rb
241
- - lib/mail/parsers.rb
242
244
  - lib/mail/part.rb
243
245
  - lib/mail/parts_list.rb
244
- - lib/mail/patterns.rb
245
246
  - lib/mail/utilities.rb
246
247
  - lib/mail/values/unicode_tables.dat
247
248
  - lib/mail/version.rb
248
249
  - lib/mail/version_specific/ruby_1_8.rb
249
250
  - lib/mail/version_specific/ruby_1_9.rb
250
- - lib/mail.rb
251
- homepage: http://github.com/mikel/mail
251
+ homepage: https://github.com/mikel/mail
252
252
  licenses:
253
253
  - MIT
254
254
  metadata: {}
255
255
  post_install_message:
256
256
  rdoc_options:
257
- - --exclude
257
+ - "--exclude"
258
258
  - lib/mail/values/unicode_tables.dat
259
259
  require_paths:
260
260
  - lib
261
261
  required_ruby_version: !ruby/object:Gem::Requirement
262
262
  requirements:
263
- - - '>='
263
+ - - ">="
264
264
  - !ruby/object:Gem::Version
265
265
  version: '0'
266
266
  required_rubygems_version: !ruby/object:Gem::Requirement
267
267
  requirements:
268
- - - '>='
268
+ - - ">="
269
269
  - !ruby/object:Gem::Version
270
270
  version: '0'
271
271
  requirements: []
272
272
  rubyforge_project:
273
- rubygems_version: 2.1.11
273
+ rubygems_version: 2.4.2
274
274
  signing_key:
275
275
  specification_version: 4
276
276
  summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
data/VERSION DELETED
@@ -1,4 +0,0 @@
1
- major:2
2
- minor:6
3
- patch:1
4
- build: