rexchange 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ -- 0.3.4:
2
+ * Updated the README so it jives with the current version
3
+ * Removed Folder::join since it's only used by Folder#to_s, and just used a simpler
4
+ solution in Folder#to_s instead
5
+
1
6
  -- 0.3.3:
2
7
  * Folder objects now default to using the Message class for enumeration
3
8
  if no class is associated with the content_type of the Folder.
data/RAKEFILE CHANGED
@@ -8,7 +8,7 @@ require 'rake/gempackagetask'
8
8
  require 'rake/contrib/rubyforgepublisher'
9
9
  require 'pscp'
10
10
 
11
- PACKAGE_VERSION = '0.3.3'
11
+ PACKAGE_VERSION = '0.3.4'
12
12
 
13
13
  PACKAGE_FILES = FileList[
14
14
  'README',
data/README CHANGED
@@ -15,53 +15,61 @@ RExchange is a pure ruby wrapper for the Microsoft Exchange Server WebDAV API
15
15
 
16
16
  == Example
17
17
 
18
- uri = 'https://example.com/exchange/admin/'
19
- options = { :user => 'mydomain\admin', :password => 'random' }
20
-
21
- # We pass our uri (pointing directly to a mailbox), and options hash to RExchange::open
22
- # to create a RExchange::Session.
23
- RExchange::open(uri, options) do |mailbox|
24
-
18
+ # We pass our uri (pointing directly to a mailbox), a username, and a password to RExchange::open
19
+ # to create a RExchange::Session. Notice that we escape the "\" in our username.
20
+ RExchange::open('https://example.com/exchange/admin/', 'mydomain\\admin', 'secret') do |mailbox|
21
+
25
22
  # The block parameter ("mailbox" in this case) is actually the Session itself.
26
23
  # You can refer to folders by chaining them as method calls. "inbox" in this case
27
24
  # isn't a defined method for Session, but part of the DSL to refer to folder names.
28
25
  # Each folder name returns a RExchange::Folder. The folder is Enumerable, allowing
29
- # iteration over the messages in the folder.
30
- mailbox.inbox.each do |message|
31
-
26
+ # iteration over the items in the folder, depending on the DAV:content-class of
27
+ # the folder.
28
+ mailbox.inbox.each do |message|
29
+
32
30
  # The "message" block parameter is a RExchange::Message object. You have access to
33
- # several attributes of the message, including: href, from, to, message-id, date,
34
- # importance, hasattachment and body.
35
- p message.subject
36
-
31
+ # several attributes of the message, including: href, from, to, message_id, date,
32
+ # importance, has_attachment? and body.
33
+ p message.subject
34
+
37
35
  # The RExchange::Message#move_to method moves the message to another folder, in this
38
36
  # case, an "archive" folder off of the inbox.
39
- message.move_to mailbox.inbox.archive # or you could pass the string: '/inbox/archive'
37
+ message.move_to mailbox.inbox.archive
40
38
  end
41
-
42
- # You can also call the RExchange::Folder#messages method if you find calling "each"
43
- # on a folder directly a little obscure.
44
- mailbox.inbox.archive.messages.each do |m|
45
-
46
- # Our previous message should show up in here now.
47
- p m.subject
48
- end
49
-
50
- # The RExchange::Folder#message_in method is less expensive than the DSL folder-chaining
51
- # methods. Since the folder-chaining is cached in the Session it's a small hit, and some
52
- # may prefer the readability of them, but if you're looking for absolute performance
53
- # or have really deep folder structures then this may be the method for you.
54
- mailbox.messages_in '/inbox/' do |m|
55
-
56
- # Since we moved all our messages to the archive earlier, this shouldn't display
57
- # anything.
58
- p m.from
59
- end
60
-
39
+
61
40
  # Folder names are "normalized", replacing dashes and spaces with underscores,
62
41
  # squeezing out multiple underscores in a row, and downcasing the whole thing.
63
42
  # So a folder name such as "My Very-long Folder Name" would look like:
64
43
  mailbox.my_very_long_folder_name
44
+
45
+ # The Enumerable mixin gives us an Folder#entries method in case we just want to
46
+ # return an array.
47
+ messages = mailbox.inbox.entries
48
+
49
+ # Other methods, like Enumerable#map and Enumerable#sort_by let us manipulate
50
+ # the Folder in fun ways:
51
+ puts mailbox.contacts.sort_by { |contact| contact.first_name }.map do |contact|
52
+ <<-CONTACT
53
+ Name: #{contact.first_name} #{contact.last_name}
54
+ Email: #{contact.email}
55
+ Phone: #{contact.phone}
56
+ CONTACT
57
+ end
58
+
59
+ end
60
+
61
+ # We can access the Global Address Book by accessing the "/public" folder:
62
+ RExchange::open('https://example.com/public', 'mydomain\\somebody', 'secret') do |mailbox|
63
+
64
+ puts mailbox.company_contacts.each do |contact|
65
+ <<-CONTACT
66
+ Company: #{contact.company}
67
+ Name: #{contact.first_name} #{contact.last_name}
68
+ Email: #{contact.email}
69
+ Phone: #{contact.phone}
70
+ CONTACT
71
+ end
72
+
65
73
  end
66
74
 
67
75
  == Caveats
@@ -18,7 +18,7 @@ module RExchange
18
18
  # Use STDOUT or another stream if you'd like to capture the HTTP debug output
19
19
  DEBUG_STREAM = $log
20
20
 
21
- # A shortcut to RExchange::Session#new's block syntax
21
+ # A shortcut to RExchange::Session#new
22
22
  def self.open(uri, username = nil, password = nil)
23
23
  session = RExchange::Session.new(uri, username, password)
24
24
 
@@ -7,7 +7,7 @@ module RExchange
7
7
  class Credentials
8
8
  attr_reader :user, :password, :uri
9
9
 
10
- # You must pass a uri, and an options hash containing :user and :password
10
+ # You must pass a uri, a username and a password
11
11
  def initialize(uri, username = nil, password = nil)
12
12
  @uri = URI.parse(uri)
13
13
  @use_ssl = (@uri.scheme.downcase == 'https')
@@ -40,15 +40,12 @@ module RExchange
40
40
  end
41
41
  end
42
42
 
43
+ # Not Implemented!
43
44
  def search(conditions = {})
45
+ raise NotImplementedError.new('Bad Touch!')
44
46
  @content_type::find(@credentials, to_s, conditions)
45
47
  end
46
48
 
47
- # Join the strings passed in with '/'s between them
48
- def self.join(*args)
49
- args.collect { |f| f.to_s.ensure_ends_with('/') }.to_s.squeeze('/')
50
- end
51
-
52
49
  # Return an Array of subfolders for this folder
53
50
  def folders
54
51
  @folders ||= begin
@@ -83,7 +80,7 @@ module RExchange
83
80
 
84
81
  # Return the absolute path to this folder (but not the full URI)
85
82
  def to_s
86
- Folder.join(@parent, @name)
83
+ "#@parent/#@name/".squeeze('/')
87
84
  end
88
85
  end
89
86
  end
@@ -77,7 +77,7 @@ module RExchange
77
77
 
78
78
  # Defines what attributes are used in queries, and
79
79
  # what methods they map to in instances. You should
80
- # pass a Hash of method_name and namespaced-attribute-name pairs.
80
+ # pass a Hash of method_name symbols and namespaced-attribute-name pairs.
81
81
  def self.attribute_mappings(mappings)
82
82
 
83
83
  mappings.merge! :uid => 'DAV:uid',
@@ -8,10 +8,7 @@ module RExchange
8
8
 
9
9
  # Creates a Credentials instance to pass to subfolders
10
10
  # === Example
11
- # uri = 'https://mydomain.com/exchange/demo'
12
- # options = { :user => 'test', :password => 'random' }
13
- #
14
- # RExchange::Session.new(uri, 'bob', 'secret') do |mailbox|
11
+ # RExchange::Session.new('https://mydomain.com/exchange/demo', 'mydomain\\bob', 'secret') do |mailbox|
15
12
  # mailbox.test.each do |message|
16
13
  # puts message.subject
17
14
  # end
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rexchange
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.3
6
+ version: 0.3.4
7
7
  date: 2007-01-10 00:00:00 -06:00
8
8
  summary: A simple wrapper around Microsoft Exchange Server's WebDAV API
9
9
  require_paths:
@@ -34,8 +34,8 @@ files:
34
34
  - CHANGELOG
35
35
  - RAKEFILE
36
36
  - MIT-LICENSE
37
- - lib/rexchange.rb
38
37
  - lib/r_exchange.rb
38
+ - lib/rexchange.rb
39
39
  - lib/rexchange/appointment.rb
40
40
  - lib/rexchange/contact.rb
41
41
  - lib/rexchange/credentials.rb