em-imap 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of em-imap might be problematic. Click here for more details.

@@ -310,7 +310,7 @@ module EventMachine
310
310
  # The same as fetch, but keyed of UIDs instead of sequence numbers.
311
311
  #
312
312
  def uid_fetch(seq, attr="FULL")
313
- fetch_internal("UID", "FETCH", seq, attr)
313
+ fetch_internal("UID FETCH", seq, attr)
314
314
  end
315
315
 
316
316
  # Update the flags on a message.
@@ -371,20 +371,50 @@ module EventMachine
371
371
 
372
372
  private
373
373
 
374
- # Convert a string to the modified UTF-7 required by IMAP for mailbox naming.
375
- # See RFC 3501 Section 5.1.3 for more information.
374
+ # Decode a string from modified UTF-7 format to UTF-8.
376
375
  #
377
- def to_utf7(text)
378
- Net::IMAP.encode_utf7(text)
376
+ # UTF-7 is a 7-bit encoding of Unicode [UTF7]. IMAP uses a
377
+ # slightly modified version of this to encode mailbox names
378
+ # containing non-ASCII characters; see [IMAP] section 5.1.3.
379
+ #
380
+ # Net::IMAP does _not_ automatically encode and decode
381
+ # mailbox names to and from utf7.
382
+ def to_utf8(s)
383
+ return force_encoding(s.gsub(/&(.*?)-/n) {
384
+ if $1.empty?
385
+ "&"
386
+ else
387
+ base64 = $1.tr(",", "/")
388
+ x = base64.length % 4
389
+ if x > 0
390
+ base64.concat("=" * (4 - x))
391
+ end
392
+ base64.unpack("m")[0].unpack("n*").pack("U*")
393
+ end
394
+ }, "UTF-8")
379
395
  end
380
396
 
381
- # Convert a string from the modified UTF-7 required by IMAP for mailbox naming.
382
- # See RFC 3501 Section 5.1.3 for more information.
383
- #
384
- def to_utf8(text)
385
- Net::IMAP.decode_utf7(text)
397
+ # Encode a string from UTF-8 format to modified UTF-7.
398
+ def to_utf7(s)
399
+ return force_encoding(force_encoding(s, 'UTF-8').gsub(/(&)|([^\x20-\x7e]+)/u) {
400
+ if $1
401
+ "&-"
402
+ else
403
+ base64 = [$&.unpack("U*").pack("n*")].pack("m")
404
+ "&" + base64.delete("=\n").tr("/", ",") + "-"
405
+ end
406
+ }, "ASCII-8BIT")
386
407
  end
387
-
408
+
409
+ # FIXME: I haven't thought through the ramifications of this yet.
410
+ def force_encoding(s, encoding)
411
+ if s.respond_to?(:force_encoding)
412
+ s.force_encoding(encoding)
413
+ else
414
+ s
415
+ end
416
+ end
417
+
388
418
  # Send a command that should return a deferrable that succeeds with
389
419
  # a tagged_response.
390
420
  #
@@ -459,7 +489,7 @@ module EventMachine
459
489
 
460
490
  set = Net::IMAP::MessageSet.new(set)
461
491
 
462
- multi_data_response(cmd, set, attr).transform do |untagged_responses|
492
+ collect_untagged_responses('FETCH', cmd, set, attr).transform do |untagged_responses|
463
493
  untagged_responses.map(&:data)
464
494
  end
465
495
  end
@@ -486,7 +516,7 @@ module EventMachine
486
516
  when "*", -1, Range
487
517
  Net::IMAP::MessageSet.new(arg)
488
518
  when Array
489
- if Array.all?{ |item| item.is_a?(Number) || item.is_a?(Range) }
519
+ if arg.inject(true){|bool,item| bool and (item.is_a?(Integer) or item.is_a?(Range))}
490
520
  Net::IMAP::MessageSet.new(arg)
491
521
  else
492
522
  normalize_search_criteria(arg)
@@ -44,7 +44,7 @@ module EventMachine
44
44
  if response.is_a?(Net::IMAP::UntaggedResponse) && response.name != "BYE"
45
45
  hello_listener.succeed response
46
46
  else
47
- hello_listener.fail Net::IMAP::ResponseParseError.new(response.raw_data)
47
+ hello_listener.fail Net::IMAP::ResponseParseError.new((RUBY_VERSION[0,3] == "1.8" ? response.raw_data : response))
48
48
  end
49
49
  end.errback do |e|
50
50
  hello_listener.fail e
@@ -121,9 +121,9 @@ module EventMachine
121
121
  if response.is_a?(Net::IMAP::TaggedResponse) && response.tag == command.tag
122
122
  case response.name
123
123
  when "NO"
124
- command.fail Net::IMAP::NoResponseError.new(response.data.text)
124
+ command.fail Net::IMAP::NoResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.data.text : response))
125
125
  when "BAD"
126
- command.fail Net::IMAP::BadResponseError.new(response.data.text)
126
+ command.fail Net::IMAP::BadResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.data.text : response))
127
127
  else
128
128
  command.succeed response
129
129
  end
@@ -155,7 +155,7 @@ module EventMachine
155
155
  # to hear any more, so we fail all our listeners.
156
156
  add_response_handler do |response|
157
157
  if response.is_a?(Net::IMAP::UntaggedResponse) && response.name == "BYE"
158
- fail Net::IMAP::ByeResponseError.new(response.raw_data)
158
+ fail Net::IMAP::ByeResponseError.new((RUBY_VERSION[0,3] == "1.8" ? response.raw_data : response))
159
159
  end
160
160
  end
161
161
  end
data/lib/em-imap.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'net/imap'
2
1
  require 'set'
3
2
 
4
3
  require 'rubygems'
@@ -6,6 +5,7 @@ require 'eventmachine'
6
5
  require 'deferrable_gratification'
7
6
 
8
7
  $:.unshift File.dirname( __FILE__ )
8
+ require 'net/imap'
9
9
  require 'em-imap/listener'
10
10
  require 'em-imap/continuation_synchronisation'
11
11
  require 'em-imap/formatter'
metadata CHANGED
@@ -1,74 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: em-imap
3
- version: !ruby/object:Gem::Version
4
- hash: 15
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- version: "0.2"
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Conrad Irwin
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-07-02 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-04-03 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: eventmachine
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &15589320 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: deferrable_gratification
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *15589320
25
+ - !ruby/object:Gem::Dependency
26
+ name: deferrable_gratification
27
+ requirement: &15588820 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
46
33
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rspec
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *15588820
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &15588400 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
60
44
  type: :development
61
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *15588400
62
47
  description: Allows you to connect to an IMAP4rev1 server in a non-blocking fashion.
63
- email:
48
+ email:
64
49
  - conrad@rapportive.com
65
50
  executables: []
66
-
67
51
  extensions: []
68
-
69
52
  extra_rdoc_files: []
70
-
71
- files:
53
+ files:
72
54
  - lib/em-imap.rb
73
55
  - lib/em-imap/listener.rb
74
56
  - lib/em-imap/formatter.rb
@@ -80,41 +62,29 @@ files:
80
62
  - lib/em-imap/response_parser.rb
81
63
  - LICENSE.MIT
82
64
  - README.md
83
- has_rdoc: true
84
65
  homepage: http://github.com/rapportive-oss/em-imap
85
- licenses:
66
+ licenses:
86
67
  - MIT
87
68
  post_install_message:
88
69
  rdoc_options: []
89
-
90
- require_paths:
70
+ require_paths:
91
71
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
72
+ required_ruby_version: !ruby/object:Gem::Requirement
93
73
  none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: 57
98
- segments:
99
- - 1
100
- - 8
101
- - 7
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
102
77
  version: 1.8.7
103
- required_rubygems_version: !ruby/object:Gem::Requirement
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
79
  none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 3
109
- segments:
110
- - 0
111
- version: "0"
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
112
84
  requirements: []
113
-
114
85
  rubyforge_project:
115
- rubygems_version: 1.6.2
86
+ rubygems_version: 1.8.10
116
87
  signing_key:
117
88
  specification_version: 3
118
89
  summary: An EventMachine based IMAP client.
119
90
  test_files: []
120
-