jpmobile 0.1.6 → 1.0.0.pre

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.
Files changed (73) hide show
  1. data/README +0 -0
  2. data/README.rdoc +58 -29
  3. data/Rakefile +1 -1
  4. data/VERSION.yml +4 -4
  5. data/lib/jpmobile.rb +3 -0
  6. data/lib/jpmobile/email.rb +17 -2
  7. data/lib/jpmobile/emoticon.rb +87 -23
  8. data/lib/jpmobile/emoticon/au.rb +644 -0
  9. data/lib/jpmobile/emoticon/softbank.rb +488 -0
  10. data/lib/jpmobile/emoticon/z_combine.rb +16 -13
  11. data/lib/jpmobile/hook_action_controller.rb +1 -13
  12. data/lib/jpmobile/hook_action_view.rb +3 -62
  13. data/lib/jpmobile/mail.rb +316 -0
  14. data/lib/jpmobile/mailer.rb +31 -0
  15. data/lib/jpmobile/mobile/abstract_mobile.rb +66 -0
  16. data/lib/jpmobile/mobile/au.rb +25 -2
  17. data/lib/jpmobile/mobile/docomo.rb +23 -1
  18. data/lib/jpmobile/mobile/emobile.rb +1 -1
  19. data/lib/jpmobile/mobile/softbank.rb +33 -1
  20. data/lib/jpmobile/mobile/vodafone.rb +1 -1
  21. data/lib/jpmobile/mobile/willcom.rb +1 -1
  22. data/lib/jpmobile/path_set.rb +40 -0
  23. data/lib/jpmobile/rails.rb +24 -0
  24. data/lib/jpmobile/resolver.rb +38 -0
  25. data/lib/jpmobile/util.rb +223 -14
  26. data/lib/tasks/jpmobile_tasks.rake +41 -48
  27. data/spec/rack/jpmobile/emoticon_spec.rb +3 -8
  28. data/spec/rack/jpmobile/filter_spec.rb +1 -1
  29. data/spec/rack/jpmobile/params_filter_spec.rb +4 -4
  30. data/spec/rack_helper.rb +5 -9
  31. data/spec/unit/detect_by_email_spec.rb +29 -0
  32. data/spec/unit/emoticon_spec.rb +90 -0
  33. data/spec/unit/encoding_spec.rb +102 -0
  34. data/spec/unit/mail_spec.rb +117 -0
  35. data/spec/unit/receive_mail_spec.rb +289 -0
  36. data/spec/unit/spec_helper.rb +8 -0
  37. data/spec/unit/util_spec.rb +5 -0
  38. data/test/rails/overrides/app/controllers/application_controller.rb +3 -2
  39. data/test/rails/overrides/app/controllers/template_path_controller.rb +8 -0
  40. data/test/rails/overrides/app/models/mobile_mailer.rb +19 -0
  41. data/test/rails/overrides/app/models/normal_mailer.rb +9 -0
  42. data/test/rails/overrides/spec/models/mobile_mailer_spec.rb +737 -0
  43. data/test/rails/overrides/spec/models/normal_mailer_spec.rb +34 -0
  44. data/test/rails/overrides/spec/requests/template_path_spec.rb +13 -7
  45. data/test/rails/overrides/spec/spec_helper.rb +6 -0
  46. data/test/rails/rails_root/app/controllers/application_controller.rb +3 -2
  47. data/test/rails/rails_root/app/controllers/template_path_controller.rb +8 -0
  48. data/test/rails/rails_root/app/models/mobile_mailer.rb +2 -1
  49. data/test/rails/rails_root/app/models/normal_mailer.rb +9 -0
  50. data/test/rails/rails_root/config/initializers/secret_token.rb +1 -1
  51. data/test/rails/rails_root/spec/models/mobile_mailer_spec.rb +73 -80
  52. data/test/rails/rails_root/spec/models/normal_mailer_spec.rb +34 -0
  53. data/test/rails/rails_root/spec/requests/template_path_spec.rb +13 -7
  54. data/test/rails/rails_root/spec/spec_helper.rb +1 -1
  55. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile.rb +2 -1
  56. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/emoticon.rb +7 -5
  57. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_controller.rb +1 -13
  58. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_view.rb +3 -62
  59. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mail.rb +162 -111
  60. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mailer.rb +31 -0
  61. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/abstract_mobile.rb +34 -3
  62. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/au.rb +2 -5
  63. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/docomo.rb +4 -5
  64. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/mobile/softbank.rb +7 -8
  65. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/path_set.rb +40 -0
  66. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rack/params_filter.rb +1 -1
  67. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/rails.rb +24 -0
  68. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/resolver.rb +38 -0
  69. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/util.rb +33 -23
  70. metadata +43 -14
  71. data/test/legacy/emoticon_test.rb +0 -63
  72. data/test/legacy/helper.rb +0 -8
  73. data/test/rails/rails_root/vendor/plugins/jpmobile/lib/jpmobile/hook_action_mailer.rb +0 -22
@@ -4,30 +4,33 @@ end
4
4
 
5
5
  module Jpmobile
6
6
  module Emoticon
7
+ GETA = 0x3013
8
+
7
9
  SJIS_TO_UNICODE = {}
8
10
  SJIS_TO_UNICODE.update(DOCOMO_SJIS_TO_UNICODE)
9
11
  SJIS_TO_UNICODE.update(AU_SJIS_TO_UNICODE)
10
12
  SJIS_TO_UNICODE.freeze
11
13
  UNICODE_TO_SJIS = SJIS_TO_UNICODE.invert.freeze
12
14
 
13
- if Object.const_defined?(:Encoding)
14
- sjis_regexp = Proc.new do |sjis|
15
- Regexp.compile(Regexp.escape([sjis].pack('n').force_encoding("Shift_JIS")))
16
- end
17
- else
18
- sjis_regexp = Proc.new do |sjis|
19
- Regexp.compile(Regexp.escape([sjis].pack('n'),"s"),nil,'s')
20
- end
21
- end
22
-
23
- SJIS_REGEXP = Regexp.union(*SJIS_TO_UNICODE.keys.map{|s| sjis_regexp[s]})
15
+ # for au email
16
+ SJIS_TO_EMAIL_JIS = {0x81ac => 0x222E}
17
+ SJIS_TO_EMAIL_JIS.update(AU_SJIS_TO_EMAIL_JIS)
18
+ SJIS_TO_EMAIL_JIS.freeze
19
+
20
+ SJIS_REGEXP = Regexp.union(*SJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.sjis_regexp(s)})
24
21
  SOFTBANK_WEBCODE_REGEXP = Regexp.union(*([/(?!)/n]+SOFTBANK_WEBCODE_TO_UNICODE.keys.map{|x| "\x1b\x24#{x}\x0f"}))
25
22
 
26
- DOCOMO_SJIS_REGEXP = Regexp.union(*DOCOMO_SJIS_TO_UNICODE.keys.map{|s| sjis_regexp[s]})
27
- AU_SJIS_REGEXP = Regexp.union(*AU_SJIS_TO_UNICODE.keys.map{|s| sjis_regexp[s]})
23
+ DOCOMO_SJIS_REGEXP = Regexp.union(*DOCOMO_SJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.sjis_regexp(s)})
24
+ AU_SJIS_REGEXP = Regexp.union(*AU_SJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.sjis_regexp(s)})
28
25
  SOFTBANK_UNICODE_REGEXP = Regexp.union(*SOFTBANK_UNICODE_TO_WEBCODE.keys.map{|x| [x].pack('U')}).freeze
29
26
 
30
27
  EMOTICON_UNICODES = UNICODE_TO_SJIS.keys|SOFTBANK_UNICODE_TO_WEBCODE.keys.map{|k|k+0x1000}
31
28
  UTF8_REGEXP = Regexp.union(*EMOTICON_UNICODES.map{|x| [x].pack('U')}).freeze
29
+
30
+ # for PC conversion "GETA"
31
+ CONVERSION_TABLE_TO_PC_EMAIL = Hash[*(CONVERSION_TABLE_TO_SOFTBANK.keys|CONVERSION_TABLE_TO_DOCOMO.keys|CONVERSION_TABLE_TO_AU.keys).map{|k| [k, GETA]}.flatten]
32
+
33
+ SOFTBANK_SJIS_REGEXP = Regexp.union(*SOFTBANK_SJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.sjis_regexp(s)}).freeze
34
+ AU_EMAILJIS_REGEXP = Regexp.union(*AU_EMAILJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.jis_regexp(s)})
32
35
  end
33
36
  end
@@ -1,17 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
- module AbstractController
3
- module ViewPaths
4
- def lookup_context_with_jpmobile
5
- jpmobile_context = lookup_context_without_jpmobile
6
- jpmobile_context.view_paths.controller = self
7
-
8
- jpmobile_context
9
- end
10
-
11
- alias_method_chain :lookup_context, :jpmobile
12
- end
13
- end
14
-
15
2
  module ActionController
16
3
  class Base
17
4
  include Jpmobile::Helpers
@@ -29,3 +16,4 @@ module ActionController
29
16
  end
30
17
 
31
18
  ActionController::Request.send :include, Jpmobile::Encoding
19
+ ActionView::LookupContext.register_detail(:mobile) {nil}
@@ -1,72 +1,12 @@
1
1
  # -*- coding: utf-8 -*-
2
- # = viewの自動切り替え
3
- #
4
2
  #:stopdoc:
5
3
  # helperを追加
6
4
  ActionView::Base.class_eval { include Jpmobile::Helpers }
7
5
  #:startdoc:
8
6
 
9
- # ActionView を拡張して携帯からのアクセスの場合に携帯向けビューを優先表示する。
10
- # Vodafone携帯(request.mobile == Jpmobile::Mobile::Vodafone)の場合、
11
- # index_mobile_vodafone.html.erb
12
- # index_mobile_softbank.html.erb
13
- # index_mobile.html.erb
14
- # index.html.erb
15
- # の順にテンプレートが検索される。
16
- # BUG: 現状、上記の例では index.html.erb が存在しない場合に振り分けが行われない
17
- # (ダミーファイルを置くことで回避可能)。
7
+ # :stopdoc:
8
+ # accept-charset charset を変更できるようにする
18
9
  module ActionView
19
- class PathSet
20
- attr_accessor :controller
21
-
22
- def find_with_jpmobile(path, prefix = nil, partial = false, details = {}, key = nil) #:nodoc:
23
- if controller and controller.kind_of?(ActionController::Base) and
24
- (controller.request.mobile? or controller.request.smart_phone?)
25
- return path if path.respond_to?(:render)
26
- template_candidates = mobile_template_candidates
27
-
28
- each do |load_path|
29
- template_candidates.each do |template_postfix|
30
- templates = load_path.find_all("#{path}_#{template_postfix}", prefix, partial, details, key)
31
- return templates.first unless templates.empty?
32
- end
33
- end
34
- end
35
-
36
- find_without_jpmobile(path, prefix, partial, details, key)
37
- end
38
-
39
- alias_method_chain :find, :jpmobile #:nodoc:
40
-
41
- def mobile_template_candidates #:nodoc:
42
- candidates = []
43
-
44
- view_class, parent_class, template_prefix = case controller.request.mobile
45
- when ::Jpmobile::Mobile::SmartPhone
46
- [controller.request.mobile.class, ::Jpmobile::Mobile::SmartPhone, "smart_phone"]
47
- when ::Jpmobile::Mobile::AbstractMobile
48
- [controller.request.mobile.class, ::Jpmobile::Mobile::AbstractMobile, "mobile"]
49
- else
50
- [nil, nil, nil]
51
- end
52
-
53
- if view_class and parent_class
54
- find_mobile_template(view_class, parent_class, template_prefix).push(template_prefix)
55
- else
56
- []
57
- end
58
- end
59
-
60
- private
61
- def find_mobile_template(klass, parent, prefix)
62
- if klass == parent
63
- []
64
- else
65
- find_mobile_template(klass.superclass, parent, prefix).unshift("#{prefix}_#{klass.to_s.split(/::/).last.underscore}")
66
- end
67
- end
68
- end
69
-
70
10
  module Helpers
71
11
  module FormTagHelper
72
12
  private
@@ -85,3 +25,4 @@ module ActionView
85
25
  end
86
26
  end
87
27
  end
28
+ #:startdoc:
@@ -0,0 +1,316 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'mail'
3
+
4
+ module Jpmobile
5
+ module Mail
6
+ module_function
7
+ end
8
+ end
9
+
10
+ module Mail
11
+ # encoding patch
12
+ if self.const_defined?(:Ruby19)
13
+ Ruby19.class_eval do
14
+ def self.b_value_decode(str)
15
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
16
+ if match
17
+ encoding = match[1]
18
+ str = self.decode_base64(match[2])
19
+ str.force_encoding(fix_encoding(encoding))
20
+ end
21
+ # if str contains some emoticon, the following line raises Encoding error
22
+ str.encode("utf-8", :invalid => :replace, :replace => "") rescue Jpmobile::Util.ascii_8bit(str)
23
+ end
24
+ end
25
+ elsif self.const_defined?(:Ruby18)
26
+ Ruby18.class_eval do
27
+ def self.b_value_decode(str)
28
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
29
+ if match
30
+ encoding = match[1]
31
+ str = Ruby18.decode_base64(match[2])
32
+ end
33
+ str
34
+ end
35
+ end
36
+ end
37
+
38
+ class Message
39
+ attr_accessor :mobile
40
+
41
+ def mobile=(m)
42
+ @mobile = m
43
+ @charset = m.mail_charset(@charset)
44
+
45
+ if @body
46
+ @body.charset = @charset
47
+ @body.mobile = m
48
+ end
49
+ end
50
+
51
+ def encoded_with_jpmobile
52
+ if @mobile
53
+ header['subject'].mobile = @mobile if header['subject']
54
+ self.charset = @mobile.mail_charset(@charset)
55
+
56
+ ready_to_send!
57
+
58
+ self.body.charset = @charset
59
+ self.body.mobile = @mobile
60
+ self.header['Content-Transfer-Encoding'] = '8bit'
61
+
62
+ buffer = header.encoded
63
+ buffer << "\r\n"
64
+ buffer = @mobile.utf8_to_mail_encode(buffer)
65
+ buffer << body.encoded(content_transfer_encoding)
66
+ buffer
67
+ else
68
+ encoded_without_jpmobile
69
+ end
70
+ end
71
+
72
+ def parse_message_with_jpmobile
73
+ header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}/m, 2)
74
+
75
+ self.header = header_part
76
+
77
+ @body_part_jpmobile = body_part
78
+ convert_encoding_jpmobile
79
+ body_part = @body_part_jpmobile
80
+
81
+ self.body = body_part
82
+ end
83
+
84
+ def init_with_string(string)
85
+ # convert to ASCII-8BIT for ascii incompatible encodings
86
+ s = Jpmobile::Util.ascii_8bit(string)
87
+ self.raw_source = s
88
+ set_envelope_header
89
+ parse_message
90
+ @separate_parts = multipart?
91
+ end
92
+
93
+ def process_body_raw_with_jpmobile
94
+ process_body_raw_without_jpmobile
95
+
96
+ @body.charset = @charset
97
+ @body.mobile = @mobile
98
+
99
+ if has_content_transfer_encoding? and
100
+ ["base64", "quoted-printable"].include?(content_transfer_encoding) and
101
+ ["text", nil].include?(@mobile_main_type)
102
+ @body.decode_transfer_encoding
103
+ end
104
+
105
+ if @body.multipart?
106
+ @body.parts.each do |p|
107
+ p.charset = @charset
108
+ p.mobile = @mobile
109
+ end
110
+ end
111
+ end
112
+
113
+ def body_lazy_with_jpmobile(value, index)
114
+ body_lazy_without_jpmobile(value, index)
115
+ end
116
+
117
+ alias_method :encoded_without_jpmobile, :encoded
118
+ alias_method :encoded, :encoded_with_jpmobile
119
+
120
+ alias_method :parse_message_without_jpmobile, :parse_message
121
+ alias_method :parse_message, :parse_message_with_jpmobile
122
+
123
+ alias_method :process_body_raw_without_jpmobile, :process_body_raw
124
+ alias_method :process_body_raw, :process_body_raw_with_jpmobile
125
+
126
+ alias_method :body_lazy_without_jpmobile, :body_lazy
127
+ alias_method :body_lazy, :body_lazy_with_jpmobile
128
+
129
+ private
130
+ def convert_encoding_jpmobile
131
+ # decide mobile carrier
132
+ if self.header['From']
133
+ mobile_class = Jpmobile::Email.detect_from_mail_header(self.header['From'].value)
134
+ @mobile ||= (mobile_class || Jpmobile::Mobile::AbstractMobile ).new(nil, nil)
135
+ end
136
+
137
+ # override charset
138
+ if self.header['Content-Type']
139
+ @charset = Jpmobile::Util.extract_charset(self.header['Content-Type'].value)
140
+ self.header['Content-Type'].parameters[:charset] = @charset
141
+ @mobile_main_type = self.header['Content-Type'].main_type
142
+ end
143
+
144
+ # convert header(s)
145
+ if self.header['Subject']
146
+ subject_charset = Jpmobile::Util.extract_charset(self.header['Subject'].value)
147
+
148
+ # override subject encoding if @charset is blank
149
+ @charset = subject_charset if !subject_charset.blank? and @charset.blank?
150
+
151
+ self.header['Subject'].charset = subject_charset
152
+
153
+ if @mobile
154
+ v = @mobile.to_mail_internal(
155
+ Encodings.value_decode(self.header['Subject'].value), subject_charset)
156
+ self.header['Subject'].value = Jpmobile::Util.force_encode(v, @mobile.mail_charset(@charset), Jpmobile::Util::UTF8)
157
+ end
158
+ end
159
+
160
+ if @body_part_jpmobile and @mobile
161
+ @body_part_jpmobile = @mobile.decode_transfer_encoding(@body_part_jpmobile, @charset)
162
+ end
163
+ end
164
+ end
165
+
166
+ class Part
167
+ def init_with_string(string)
168
+ self.raw_source = string
169
+ set_envelope_header
170
+ parse_message
171
+ @separate_parts = multipart?
172
+ end
173
+
174
+ def parse_message_with_jpmobile
175
+ header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}/m, 2)
176
+
177
+ if header_part =~ HEADER_LINE
178
+ self.header = header_part
179
+ else
180
+ self.header = "Content-Type: text/plain\r\n"
181
+ end
182
+
183
+ @body_part_jpmobile = body_part
184
+ convert_encoding_jpmobile
185
+ body_part = @body_part_jpmobile
186
+
187
+ self.body = body_part
188
+ end
189
+
190
+ alias_method :parse_message_without_jpmobile, :parse_message
191
+ alias_method :parse_message, :parse_message_with_jpmobile
192
+ end
193
+
194
+ class Body
195
+ attr_accessor :mobile
196
+
197
+ # convert encoding
198
+ def encoded_with_jpmobile(transfer_encoding = '8bit')
199
+ if @mobile and !multipart?
200
+ if @mobile.to_mail_body_encoded?(@raw_source)
201
+ @raw_source
202
+ else
203
+ @mobile.to_mail_body(Jpmobile::Util.force_encode(@raw_source, @charset, Jpmobile::Util::UTF8))
204
+ end
205
+ else
206
+ encoded_without_jpmobile(transfer_encoding)
207
+ end
208
+ end
209
+
210
+ def decoded_with_jpmobile
211
+ decoded_without_jpmobile
212
+ end
213
+
214
+ # fix charset
215
+ def set_charset_with_jpmobile
216
+ @charset ||= only_us_ascii? ? 'US-ASCII' : nil
217
+ end
218
+
219
+ def mobile=(m)
220
+ @mobile = m
221
+
222
+ if self.multipart?
223
+ self.parts.each do |part|
224
+ part.charset = @charset
225
+ part.mobile = @mobile
226
+ part.body.charset = @charset
227
+ part.body.mobile = @mobile
228
+ end
229
+ end
230
+ end
231
+
232
+ def decode_transfer_encoding
233
+ _raw_source = Encodings.get_encoding(encoding).decode(@raw_source)
234
+ _raw_source = Jpmobile::Util.set_encoding(_raw_source, @charset)
235
+
236
+ @raw_source = @mobile.decode_transfer_encoding(_raw_source, @charset)
237
+ end
238
+
239
+ def preamble_with_jpmobile
240
+ if @mobile
241
+ Jpmobile::Util.encode(@preamble, @charset)
242
+ else
243
+ preamble_without_jpmobile
244
+ end
245
+ end
246
+
247
+ def epilogue_with_jpmobile
248
+ if @mobile
249
+ Jpmobile::Util.encode(@epilogue, @charset)
250
+ else
251
+ epilogue_without_jpmobile
252
+ end
253
+ end
254
+
255
+ def crlf_boundary_with_jpmobile
256
+ if @mobile
257
+ Jpmobile::Util.encode(crlf_boundary_without_jpmobile, @charset)
258
+ else
259
+ epilogue_without_jpmobile
260
+ end
261
+ end
262
+
263
+ def end_boundary_with_jpmobile
264
+ if @mobile
265
+ Jpmobile::Util.encode(end_boundary_without_jpmobile, @charset)
266
+ else
267
+ epilogue_without_jpmobile
268
+ end
269
+ end
270
+
271
+ alias_method :encoded_without_jpmobile, :encoded
272
+ alias_method :encoded, :encoded_with_jpmobile
273
+
274
+ alias_method :decoded_without_jpmobile, :decoded
275
+ alias_method :decoded, :decoded_with_jpmobile
276
+
277
+ alias_method :set_charset_without_jpmobile, :set_charset
278
+ alias_method :set_charset, :set_charset_with_jpmobile
279
+
280
+ alias_method :preamble_without_jpmobile, :preamble
281
+ alias_method :preamble, :preamble_with_jpmobile
282
+
283
+ alias_method :crlf_boundary_without_jpmobile, :crlf_boundary
284
+ alias_method :crlf_boundary, :crlf_boundary_with_jpmobile
285
+
286
+ alias_method :end_boundary_without_jpmobile, :end_boundary
287
+ alias_method :end_boundary, :end_boundary_with_jpmobile
288
+
289
+ alias_method :epilogue_without_jpmobile, :epilogue
290
+ alias_method :epilogue, :epilogue_with_jpmobile
291
+ end
292
+
293
+ class UnstructuredField
294
+ attr_accessor :mobile
295
+ end
296
+
297
+ # for subject
298
+ class SubjectField < UnstructuredField
299
+ # FIXME: not folding subject -> folding
300
+ def encoded_with_jpmobile
301
+ if @mobile
302
+ if @mobile.to_mail_subject_encoded?(value)
303
+ "#{name}: #{value}\r\n"
304
+ else
305
+ # convert encoding
306
+ "#{name}: " + @mobile.to_mail_subject(value) + "\r\n"
307
+ end
308
+ else
309
+ encoded_without_jpmobile
310
+ end
311
+ end
312
+
313
+ alias_method :encoded_without_jpmobile, :encoded
314
+ alias_method :encoded, :encoded_with_jpmobile
315
+ end
316
+ end