mail 2.4.4 → 2.5.5
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.
- checksums.yaml +7 -0
- data/CHANGELOG.rdoc +140 -1
- data/CONTRIBUTING.md +4 -4
- data/Gemfile +14 -8
- data/MIT-LICENSE +20 -0
- data/README.md +24 -23
- data/Rakefile +3 -22
- data/lib/VERSION +2 -2
- data/lib/load_parsers.rb +35 -0
- data/lib/mail/attachments_list.rb +2 -2
- data/lib/mail/body.rb +5 -5
- data/lib/mail/check_delivery_params.rb +57 -0
- data/lib/mail/configuration.rb +1 -1
- data/lib/mail/core_extensions/nil.rb +4 -2
- data/lib/mail/core_extensions/object.rb +8 -8
- data/lib/mail/core_extensions/smtp.rb +12 -13
- data/lib/mail/core_extensions/string.rb +4 -4
- data/lib/mail/elements/address.rb +13 -5
- data/lib/mail/elements/envelope_from_element.rb +15 -2
- data/lib/mail/elements.rb +12 -12
- data/lib/mail/encodings/quoted_printable.rb +4 -3
- data/lib/mail/encodings.rb +66 -35
- data/lib/mail/field.rb +76 -99
- data/lib/mail/fields/bcc_field.rb +2 -2
- data/lib/mail/fields/cc_field.rb +2 -2
- data/lib/mail/fields/comments_field.rb +1 -1
- data/lib/mail/fields/common/common_address.rb +19 -4
- data/lib/mail/fields/common/common_field.rb +8 -2
- data/lib/mail/fields/common/common_message_id.rb +9 -5
- data/lib/mail/fields/content_disposition_field.rb +1 -0
- data/lib/mail/fields/content_id_field.rb +1 -2
- data/lib/mail/fields/content_transfer_encoding_field.rb +2 -2
- data/lib/mail/fields/content_type_field.rb +5 -2
- data/lib/mail/fields/date_field.rb +14 -14
- data/lib/mail/fields/from_field.rb +2 -2
- data/lib/mail/fields/in_reply_to_field.rb +2 -1
- data/lib/mail/fields/keywords_field.rb +1 -1
- data/lib/mail/fields/message_id_field.rb +2 -3
- data/lib/mail/fields/references_field.rb +2 -1
- data/lib/mail/fields/reply_to_field.rb +2 -2
- data/lib/mail/fields/resent_bcc_field.rb +2 -2
- data/lib/mail/fields/resent_cc_field.rb +2 -2
- data/lib/mail/fields/resent_from_field.rb +2 -2
- data/lib/mail/fields/resent_sender_field.rb +2 -2
- data/lib/mail/fields/resent_to_field.rb +2 -2
- data/lib/mail/fields/sender_field.rb +7 -7
- data/lib/mail/fields/to_field.rb +2 -2
- data/lib/mail/fields/unstructured_field.rb +34 -27
- data/lib/mail/fields.rb +32 -32
- data/lib/mail/header.rb +37 -14
- data/lib/mail/message.rb +140 -45
- data/lib/mail/multibyte/chars.rb +4 -4
- data/lib/mail/multibyte/unicode.rb +8 -0
- data/lib/mail/network/delivery_methods/exim.rb +6 -11
- data/lib/mail/network/delivery_methods/file_delivery.rb +7 -6
- data/lib/mail/network/delivery_methods/sendmail.rb +40 -11
- data/lib/mail/network/delivery_methods/smtp.rb +33 -47
- data/lib/mail/network/delivery_methods/smtp_connection.rb +7 -24
- data/lib/mail/network/delivery_methods/test_mailer.rb +9 -8
- data/lib/mail/network/retriever_methods/imap.rb +14 -6
- data/lib/mail/network/retriever_methods/pop3.rb +2 -2
- data/lib/mail/network/retriever_methods/test_retriever.rb +11 -15
- data/lib/mail/network.rb +9 -9
- data/lib/mail/parsers/content_transfer_encoding.rb +81 -42
- data/lib/mail/parsers/content_transfer_encoding.treetop +4 -6
- data/lib/mail/parsers/content_type.rb +16 -12
- data/lib/mail/parsers/content_type.treetop +2 -2
- data/lib/mail/parsers/rfc2045.rb +12 -55
- data/lib/mail/parsers/rfc2045.treetop +1 -2
- data/lib/mail/parsers/rfc2822.rb +127 -71
- data/lib/mail/parsers/rfc2822.treetop +22 -24
- data/lib/mail/part.rb +6 -2
- data/lib/mail/parts_list.rb +1 -1
- data/lib/mail/patterns.rb +1 -1
- data/lib/mail/utilities.rb +25 -17
- data/lib/mail/values/unicode_tables.dat +0 -0
- data/lib/mail/version_specific/ruby_1_8.rb +23 -2
- data/lib/mail/version_specific/ruby_1_9.rb +55 -21
- data/lib/mail.rb +18 -18
- metadata +89 -37
- data/Gemfile.lock +0 -36
- data/lib/mail/core_extensions/shell_escape.rb +0 -56
@@ -51,9 +51,9 @@ module Mail
|
|
51
51
|
def Ruby19.b_value_decode(str)
|
52
52
|
match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
|
53
53
|
if match
|
54
|
-
|
54
|
+
charset = match[1]
|
55
55
|
str = Ruby19.decode_base64(match[2])
|
56
|
-
str.force_encoding(
|
56
|
+
str.force_encoding(pick_encoding(charset))
|
57
57
|
end
|
58
58
|
decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
|
59
59
|
decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
|
@@ -67,12 +67,20 @@ module Mail
|
|
67
67
|
def Ruby19.q_value_decode(str)
|
68
68
|
match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
|
69
69
|
if match
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
charset = match[1]
|
71
|
+
string = match[2].gsub(/_/, '=20')
|
72
|
+
# Remove trailing = if it exists in a Q encoding
|
73
|
+
string = string.sub(/\=$/, '')
|
74
|
+
str = Encodings::QuotedPrintable.decode(string)
|
75
|
+
str.force_encoding(pick_encoding(charset))
|
76
|
+
# We assume that binary strings hold utf-8 directly to work around
|
77
|
+
# jruby/jruby#829 which subtly changes String#encode semantics.
|
78
|
+
str.force_encoding('utf-8') if str.encoding == Encoding::ASCII_8BIT
|
73
79
|
end
|
74
80
|
decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
|
75
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")
|
76
84
|
end
|
77
85
|
|
78
86
|
def Ruby19.param_decode(str, encoding)
|
@@ -91,22 +99,48 @@ module Mail
|
|
91
99
|
@uri_parser ||= URI::Parser.new
|
92
100
|
end
|
93
101
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
102
|
+
# Pick a Ruby encoding corresponding to the message charset. Most
|
103
|
+
# charsets have a Ruby encoding, but some need manual aliasing here.
|
104
|
+
#
|
105
|
+
# TODO: add this as a test somewhere:
|
106
|
+
# Encoding.list.map { |e| [e.to_s.upcase == pick_encoding(e.to_s.downcase.gsub("-", "")), e.to_s] }.select {|a,b| !b}
|
107
|
+
# Encoding.list.map { |e| [e.to_s == pick_encoding(e.to_s), e.to_s] }.select {|a,b| !b}
|
108
|
+
def Ruby19.pick_encoding(charset)
|
109
|
+
case charset
|
110
|
+
|
111
|
+
# ISO-8859-15, ISO-2022-JP and alike
|
112
|
+
when /iso-?(\d{4})-?(\w{1,2})/i
|
113
|
+
"ISO-#{$1}-#{$2}"
|
114
|
+
|
115
|
+
# "ISO-2022-JP-KDDI" and alike
|
116
|
+
when /iso-?(\d{4})-?(\w{1,2})-?(\w*)/i
|
117
|
+
"ISO-#{$1}-#{$2}-#{$3}"
|
118
|
+
|
119
|
+
# UTF-8, UTF-32BE and alike
|
120
|
+
when /utf-?(\d{1,2})?(\w{1,2})/i
|
121
|
+
"UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
|
122
|
+
|
123
|
+
# Windows-1252 and alike
|
124
|
+
when /Windows-?(.*)/i
|
125
|
+
"Windows-#{$1}"
|
126
|
+
|
127
|
+
when /^8bit$/
|
128
|
+
Encoding::ASCII_8BIT
|
129
|
+
|
130
|
+
# Microsoft-specific alias for CP949 (Korean)
|
131
|
+
when 'ks_c_5601-1987'
|
132
|
+
Encoding::CP949
|
133
|
+
|
134
|
+
# Wrongly written Shift_JIS (Japanese)
|
135
|
+
when 'shift-jis'
|
136
|
+
Encoding::Shift_JIS
|
137
|
+
|
138
|
+
# GB2312 (Chinese charset) is a subset of GB18030 (its replacement)
|
139
|
+
when /gb2312/i
|
140
|
+
Encoding::GB18030
|
141
|
+
|
142
|
+
else
|
143
|
+
charset
|
110
144
|
end
|
111
145
|
end
|
112
146
|
end
|
data/lib/mail.rb
CHANGED
@@ -29,7 +29,6 @@ module Mail # :doc:
|
|
29
29
|
require 'mail/core_extensions/nil'
|
30
30
|
require 'mail/core_extensions/object'
|
31
31
|
require 'mail/core_extensions/string'
|
32
|
-
require 'mail/core_extensions/shell_escape'
|
33
32
|
require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3'
|
34
33
|
require 'mail/indifferent_hash'
|
35
34
|
|
@@ -46,6 +45,23 @@ module Mail # :doc:
|
|
46
45
|
require 'mail/utilities'
|
47
46
|
require 'mail/configuration'
|
48
47
|
|
48
|
+
@@autoloads = {}
|
49
|
+
def self.register_autoload(name, path)
|
50
|
+
@@autoloads[name] = path
|
51
|
+
autoload(name, path)
|
52
|
+
end
|
53
|
+
|
54
|
+
# This runs through the autoload list and explictly requires them for you.
|
55
|
+
# Useful when running mail in a threaded process.
|
56
|
+
#
|
57
|
+
# Usage:
|
58
|
+
#
|
59
|
+
# require 'mail'
|
60
|
+
# Mail.eager_autoload!
|
61
|
+
def self.eager_autoload!
|
62
|
+
@@autoloads.each { |_,path| require(path) }
|
63
|
+
end
|
64
|
+
|
49
65
|
# Autoload mail send and receive classes.
|
50
66
|
require 'mail/network'
|
51
67
|
|
@@ -60,23 +76,7 @@ module Mail # :doc:
|
|
60
76
|
|
61
77
|
require 'mail/envelope'
|
62
78
|
|
63
|
-
|
64
|
-
date_time received message_ids envelope_from rfc2045
|
65
|
-
mime_version content_type content_disposition
|
66
|
-
content_transfer_encoding content_location ]
|
67
|
-
|
68
|
-
parsers.each do |parser|
|
69
|
-
begin
|
70
|
-
# Try requiring the pre-compiled ruby version first
|
71
|
-
require 'treetop/runtime'
|
72
|
-
require "mail/parsers/#{parser}"
|
73
|
-
rescue LoadError
|
74
|
-
# Otherwise, get treetop to compile and load it
|
75
|
-
require 'treetop/runtime'
|
76
|
-
require 'treetop/compiler'
|
77
|
-
Treetop.load(File.join(File.dirname(__FILE__)) + "/mail/parsers/#{parser}")
|
78
|
-
end
|
79
|
-
end
|
79
|
+
require 'load_parsers'
|
80
80
|
|
81
81
|
# Autoload header field elements and transfer encodings.
|
82
82
|
require 'mail/elements'
|
metadata
CHANGED
@@ -1,49 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.5.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mikel Lindsaar
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-06-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: mime-types
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.16'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: treetop
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - ~>
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 1.4.8
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.8
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
39
|
-
none: false
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - ">="
|
42
46
|
- !ruby/object:Gem::Version
|
43
|
-
version: 0.
|
44
|
-
type: :
|
47
|
+
version: 1.0.3
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.7
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.7
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.12.0
|
76
|
+
type: :development
|
45
77
|
prerelease: false
|
46
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.12.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rdoc
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
47
97
|
description: A really Ruby Mail handler.
|
48
98
|
email: raasdnil@gmail.com
|
49
99
|
executables: []
|
@@ -54,24 +104,28 @@ extra_rdoc_files:
|
|
54
104
|
- CHANGELOG.rdoc
|
55
105
|
- TODO.rdoc
|
56
106
|
files:
|
57
|
-
- README.md
|
58
|
-
- CONTRIBUTING.md
|
59
107
|
- CHANGELOG.rdoc
|
108
|
+
- CONTRIBUTING.md
|
60
109
|
- Dependencies.txt
|
61
110
|
- Gemfile
|
62
|
-
-
|
111
|
+
- MIT-LICENSE
|
112
|
+
- README.md
|
63
113
|
- Rakefile
|
64
114
|
- TODO.rdoc
|
115
|
+
- lib/VERSION
|
116
|
+
- lib/load_parsers.rb
|
117
|
+
- lib/mail.rb
|
65
118
|
- lib/mail/attachments_list.rb
|
66
119
|
- lib/mail/body.rb
|
120
|
+
- lib/mail/check_delivery_params.rb
|
67
121
|
- lib/mail/configuration.rb
|
68
122
|
- lib/mail/core_extensions/nil.rb
|
69
123
|
- lib/mail/core_extensions/object.rb
|
70
|
-
- lib/mail/core_extensions/shell_escape.rb
|
71
124
|
- lib/mail/core_extensions/smtp.rb
|
125
|
+
- lib/mail/core_extensions/string.rb
|
72
126
|
- lib/mail/core_extensions/string/access.rb
|
73
127
|
- lib/mail/core_extensions/string/multibyte.rb
|
74
|
-
- lib/mail/
|
128
|
+
- lib/mail/elements.rb
|
75
129
|
- lib/mail/elements/address.rb
|
76
130
|
- lib/mail/elements/address_list.rb
|
77
131
|
- lib/mail/elements/content_disposition_element.rb
|
@@ -84,17 +138,17 @@ files:
|
|
84
138
|
- lib/mail/elements/mime_version_element.rb
|
85
139
|
- lib/mail/elements/phrase_list.rb
|
86
140
|
- lib/mail/elements/received_element.rb
|
87
|
-
- lib/mail/
|
141
|
+
- lib/mail/encodings.rb
|
88
142
|
- lib/mail/encodings/7bit.rb
|
89
143
|
- lib/mail/encodings/8bit.rb
|
90
144
|
- lib/mail/encodings/base64.rb
|
91
145
|
- lib/mail/encodings/binary.rb
|
92
146
|
- lib/mail/encodings/quoted_printable.rb
|
93
147
|
- lib/mail/encodings/transfer_encoding.rb
|
94
|
-
- lib/mail/encodings.rb
|
95
148
|
- lib/mail/envelope.rb
|
96
149
|
- lib/mail/field.rb
|
97
150
|
- lib/mail/field_list.rb
|
151
|
+
- lib/mail/fields.rb
|
98
152
|
- lib/mail/fields/bcc_field.rb
|
99
153
|
- lib/mail/fields/cc_field.rb
|
100
154
|
- lib/mail/fields/comments_field.rb
|
@@ -133,17 +187,17 @@ files:
|
|
133
187
|
- lib/mail/fields/subject_field.rb
|
134
188
|
- lib/mail/fields/to_field.rb
|
135
189
|
- lib/mail/fields/unstructured_field.rb
|
136
|
-
- lib/mail/fields.rb
|
137
190
|
- lib/mail/header.rb
|
138
191
|
- lib/mail/indifferent_hash.rb
|
139
192
|
- lib/mail/mail.rb
|
140
193
|
- lib/mail/matchers/has_sent_mail.rb
|
141
194
|
- lib/mail/message.rb
|
195
|
+
- lib/mail/multibyte.rb
|
142
196
|
- lib/mail/multibyte/chars.rb
|
143
197
|
- lib/mail/multibyte/exceptions.rb
|
144
198
|
- lib/mail/multibyte/unicode.rb
|
145
199
|
- lib/mail/multibyte/utils.rb
|
146
|
-
- lib/mail/
|
200
|
+
- lib/mail/network.rb
|
147
201
|
- lib/mail/network/delivery_methods/exim.rb
|
148
202
|
- lib/mail/network/delivery_methods/file_delivery.rb
|
149
203
|
- lib/mail/network/delivery_methods/sendmail.rb
|
@@ -154,7 +208,6 @@ files:
|
|
154
208
|
- lib/mail/network/retriever_methods/imap.rb
|
155
209
|
- lib/mail/network/retriever_methods/pop3.rb
|
156
210
|
- lib/mail/network/retriever_methods/test_retriever.rb
|
157
|
-
- lib/mail/network.rb
|
158
211
|
- lib/mail/parsers/address_lists.rb
|
159
212
|
- lib/mail/parsers/address_lists.treetop
|
160
213
|
- lib/mail/parsers/content_disposition.rb
|
@@ -187,35 +240,34 @@ files:
|
|
187
240
|
- lib/mail/parts_list.rb
|
188
241
|
- lib/mail/patterns.rb
|
189
242
|
- lib/mail/utilities.rb
|
243
|
+
- lib/mail/values/unicode_tables.dat
|
190
244
|
- lib/mail/version.rb
|
191
245
|
- lib/mail/version_specific/ruby_1_8.rb
|
192
246
|
- lib/mail/version_specific/ruby_1_9.rb
|
193
|
-
- lib/mail.rb
|
194
247
|
- lib/tasks/corpus.rake
|
195
248
|
- lib/tasks/treetop.rake
|
196
|
-
- lib/VERSION
|
197
249
|
homepage: http://github.com/mikel/mail
|
198
|
-
licenses:
|
250
|
+
licenses:
|
251
|
+
- MIT
|
252
|
+
metadata: {}
|
199
253
|
post_install_message:
|
200
254
|
rdoc_options: []
|
201
255
|
require_paths:
|
202
256
|
- lib
|
203
257
|
required_ruby_version: !ruby/object:Gem::Requirement
|
204
|
-
none: false
|
205
258
|
requirements:
|
206
|
-
- -
|
259
|
+
- - ">="
|
207
260
|
- !ruby/object:Gem::Version
|
208
261
|
version: '0'
|
209
262
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
-
none: false
|
211
263
|
requirements:
|
212
|
-
- -
|
264
|
+
- - ">="
|
213
265
|
- !ruby/object:Gem::Version
|
214
266
|
version: '0'
|
215
267
|
requirements: []
|
216
268
|
rubyforge_project:
|
217
|
-
rubygems_version:
|
269
|
+
rubygems_version: 2.6.11
|
218
270
|
signing_key:
|
219
|
-
specification_version:
|
271
|
+
specification_version: 4
|
220
272
|
summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
|
221
273
|
test_files: []
|
data/Gemfile.lock
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
activesupport (3.0.6)
|
5
|
-
bouncy-castle-java (1.5.0146.1)
|
6
|
-
diff-lcs (1.1.3)
|
7
|
-
i18n (0.5.0)
|
8
|
-
jruby-openssl (0.7.4)
|
9
|
-
bouncy-castle-java
|
10
|
-
mime-types (1.16)
|
11
|
-
polyglot (0.3.3)
|
12
|
-
rake (0.9.2.2)
|
13
|
-
rspec (2.8.0)
|
14
|
-
rspec-core (~> 2.8.0)
|
15
|
-
rspec-expectations (~> 2.8.0)
|
16
|
-
rspec-mocks (~> 2.8.0)
|
17
|
-
rspec-core (2.8.0)
|
18
|
-
rspec-expectations (2.8.0)
|
19
|
-
diff-lcs (~> 1.1.2)
|
20
|
-
rspec-mocks (2.8.0)
|
21
|
-
treetop (1.4.10)
|
22
|
-
polyglot
|
23
|
-
polyglot (>= 0.3.1)
|
24
|
-
|
25
|
-
PLATFORMS
|
26
|
-
java
|
27
|
-
ruby
|
28
|
-
|
29
|
-
DEPENDENCIES
|
30
|
-
activesupport (>= 2.3.6)
|
31
|
-
i18n (>= 0.4.0)
|
32
|
-
jruby-openssl
|
33
|
-
mime-types (~> 1.16)
|
34
|
-
rake (> 0.8.7)
|
35
|
-
rspec (~> 2.8.0)
|
36
|
-
treetop (~> 1.4.10)
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
# The following is an adaptation of ruby 1.9.2's shellwords.rb file,
|
4
|
-
# it is modified to include '+' in the allowed list to allow for
|
5
|
-
# sendmail to accept email addresses as the sender with a + in them
|
6
|
-
#
|
7
|
-
module Mail
|
8
|
-
module ShellEscape
|
9
|
-
# Escapes a string so that it can be safely used in a Bourne shell
|
10
|
-
# command line.
|
11
|
-
#
|
12
|
-
# Note that a resulted string should be used unquoted and is not
|
13
|
-
# intended for use in double quotes nor in single quotes.
|
14
|
-
#
|
15
|
-
# open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
|
16
|
-
# # ...
|
17
|
-
# }
|
18
|
-
#
|
19
|
-
# +String#shellescape+ is a shorthand for this function.
|
20
|
-
#
|
21
|
-
# open("| grep #{pattern.shellescape} file") { |pipe|
|
22
|
-
# # ...
|
23
|
-
# }
|
24
|
-
#
|
25
|
-
def escape_for_shell(str)
|
26
|
-
# An empty argument will be skipped, so return empty quotes.
|
27
|
-
return "''" if str.empty?
|
28
|
-
|
29
|
-
str = str.dup
|
30
|
-
|
31
|
-
# Process as a single byte sequence because not all shell
|
32
|
-
# implementations are multibyte aware.
|
33
|
-
str.gsub!(/([^A-Za-z0-9_\s\+\-.,:\/@\n])/n, "\\\\\\1")
|
34
|
-
|
35
|
-
# A LF cannot be escaped with a backslash because a backslash + LF
|
36
|
-
# combo is regarded as line continuation and simply ignored.
|
37
|
-
str.gsub!(/\n/, "'\n'")
|
38
|
-
|
39
|
-
return str
|
40
|
-
end
|
41
|
-
|
42
|
-
module_function :escape_for_shell
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class String
|
47
|
-
# call-seq:
|
48
|
-
# str.shellescape => string
|
49
|
-
#
|
50
|
-
# Escapes +str+ so that it can be safely used in a Bourne shell
|
51
|
-
# command line. See +Shellwords::shellescape+ for details.
|
52
|
-
#
|
53
|
-
def escape_for_shell
|
54
|
-
Mail::ShellEscape.escape_for_shell(self)
|
55
|
-
end
|
56
|
-
end
|