viewpoint 0.1.26 → 0.1.27

Sign up to get free protection for your applications and to get access to all the features.
@@ -93,7 +93,7 @@ module Viewpoint
93
93
  # @return [Array<String>] Return an Array of folder names.
94
94
  # @raise [EwsError] raised when the backend SOAP method returns an error.
95
95
  def self.folder_names(root = :msgfolderroot)
96
- resp = (Viewpoint::EWS::EWS.instance).ews.find_folder([:msgfolderroot], 'Shallow')
96
+ resp = (Viewpoint::EWS::EWS.instance).ews.find_folder([root], 'Shallow')
97
97
  if(resp.status == 'Success')
98
98
  flds = []
99
99
  resp.items.each do |f|
@@ -249,6 +249,7 @@ module Viewpoint
249
249
  def find_items(opts = {})
250
250
  opts = opts.clone # clone the passed in object so we don't modify it in case it's being used in a loop
251
251
  item_shape = opts.has_key?(:item_shape) ? opts.delete(:item_shape) : {:base_shape => 'Default'}
252
+ shallow = item_shape[:base_shape] != 'AllProperties'
252
253
  unless item_shape.has_key?(:additional_properties) # Don't overwrite if specified by caller
253
254
  item_shape[:additional_properties] = {:field_uRI => ['item:ParentFolderId']}
254
255
  end
@@ -258,7 +259,7 @@ module Viewpoint
258
259
  items = []
259
260
  resp.items.each do |i|
260
261
  i_type = i.keys.first
261
- items << (eval "#{i_type.to_s.camel_case}.new(i[i_type])")
262
+ items << (eval "#{i_type.to_s.camel_case}.new(i[i_type], :shallow => #{shallow})")
262
263
  end
263
264
  return items
264
265
  else
@@ -383,6 +384,7 @@ module Viewpoint
383
384
  # See: http://msdn.microsoft.com/en-us/library/aa565609.aspx
384
385
  def sync_items!(sync_amount = 256, sync_all = false, opts = {})
385
386
  item_shape = opts.has_key?(:item_shape) ? opts.delete(:item_shape) : {:base_shape => 'Default'}
387
+ shallow = item_shape[:base_shape] != 'AllProperties'
386
388
  resp = (Viewpoint::EWS::EWS.instance).ews.sync_folder_items(@folder_id, @sync_state, sync_amount, item_shape)
387
389
  parms = resp.items.shift
388
390
  @sync_state = parms[:sync_state]
@@ -395,12 +397,20 @@ module Viewpoint
395
397
  items[key] << i[key][:item_id]
396
398
  else
397
399
  i_type = i[key].keys.first
398
- items[key] << (eval "#{i_type.to_s.camel_case}.new(i[key][i_type])")
400
+ next if !i_type
401
+ items[key] << (eval "#{i_type.to_s.camel_case}.new(i[key][i_type], :shallow => #{shallow})")
399
402
  end
400
403
  end
401
404
  items
402
405
  end
403
406
 
407
+ # Fetch current synced state (comes from synchronizing elements).
408
+ # @return [Boolean] Current synchronization state, i.e. whether sync_items! needs to be called
409
+ # again to finish the pending rounds of synchronization requests.
410
+ def synced
411
+ @synced
412
+ end
413
+
404
414
  # This is basically a work-around for Microsoft's BPOS hosted Exchange, which does not support
405
415
  # subscriptions at the time of this writing. This is the best way I could think of to get
406
416
  # items from a specific period of time and track changes.
@@ -32,12 +32,13 @@ module Viewpoint
32
32
  # @return [Item] Returns an Item or subclass of Item
33
33
  # @todo Add support to fetch an item with a ChangeKey
34
34
  def self.get_item(item_id, shape = :default)
35
- item_shape = {:base_shape => shape.to_s.camelcase}
35
+ item_shape = {:base_shape => shape.to_s.camel_case}
36
+ shallow = item_shape[:base_shape] != 'AllProperties'
36
37
  resp = (Viewpoint::EWS::EWS.instance).ews.get_item([item_id], item_shape)
37
38
  if(resp.status == 'Success')
38
39
  item = resp.items.shift
39
40
  type = item.keys.first
40
- eval "#{type.to_s.camel_case}.new(item[type])"
41
+ eval "#{type.to_s.camel_case}.new(item[type], :shallow => #{shallow})"
41
42
  else
42
43
  raise EwsError, "Could not retrieve item. #{resp.code}: #{resp.message}"
43
44
  end
@@ -187,7 +187,7 @@ module Viewpoint
187
187
  self.instance_eval <<-EOF
188
188
  def #{var}
189
189
  return @#{var} if defined?(@#{var})
190
- deepen!
190
+ deepen! if !@ews_item[:#{var}]
191
191
  if( (@ews_item[:#{var}][:mailbox]).is_a?(Hash) )
192
192
  @#{var} = [MailboxUser.new(@ews_item[:#{var}][:mailbox])]
193
193
  elsif( (@ews_item[:#{var}][:mailbox]).is_a?(Array) )
@@ -214,7 +214,7 @@ module Viewpoint
214
214
  @ews_methods << var
215
215
  self.instance_eval <<-EOF
216
216
  def #{var}
217
- deepen!
217
+ deepen! if !@ews_item[:#{var}]
218
218
  @#{var} ||= MailboxUser.new(@ews_item[:#{var}][:mailbox])
219
219
  end
220
220
  EOF
@@ -90,7 +90,14 @@ module Viewpoint
90
90
  end
91
91
 
92
92
  def on_http_error(response)
93
- raise EwsLoginError, "Failed to login to EWS at #{uri}. Please check your credentials." if(response.status == 401)
93
+ case response.status
94
+ when 401
95
+ raise EwsLoginError, "Failed to login to EWS at #{uri}. Please check your credentials."
96
+ when 404
97
+ raise EwsError, "File not found (404): #{uri} Please check the endpoint URL. Body: #{response.body}"
98
+ else
99
+ raise EwsError, "Unknown error (#{response.status}): #{uri} : Body: #{response.body}"
100
+ end
94
101
  end
95
102
 
96
103
  # ********** End Hooks **********
@@ -227,12 +234,28 @@ module Viewpoint
227
234
  parse!(resp)
228
235
  end
229
236
 
230
- def convert_id
237
+ # Converts item and folder identifiers between formats that are accepted by Microsoft Exchange
238
+ # @see http://msdn.microsoft.com/en-us/library/bb799665.aspx
239
+ #
240
+ # @param [String] id identifier to convert
241
+ # @param [String] mailbox mailbox where is located the item
242
+ # @param [String] alternate_id_format Format of the identifier to be converted, by default Exchange Web Services identifier
243
+ # @param [String] destination_format Destination format, by default Outlook identifier
244
+ def convert_id(id, mailbox, alternate_id_format = 'EwsId', destination_format = 'HexEntryId')
231
245
  action = "#{SOAP_ACTION_PREFIX}/ConvertId"
232
- resp = invoke("#{NS_EWS_MESSAGES}:ConvertId", action) do |convert_id|
233
- build_convert_id!(convert_id)
246
+ resp = invoke("#{NS_EWS_MESSAGES}:ConvertId", action) do |root|
247
+ build!(root) do
248
+ root.set_attr('DestinationFormat', destination_format)
249
+ root.add("#{NS_EWS_MESSAGES}:SourceIds") do |source_ids|
250
+ source_ids.add("#{NS_EWS_TYPES}:AlternateId") do |alternate_id|
251
+ alternate_id.set_attr('Format', alternate_id_format)
252
+ alternate_id.set_attr('Id', id)
253
+ alternate_id.set_attr('Mailbox', mailbox)
254
+ end
255
+ end
256
+ end
234
257
  end
235
- parse_convert_id(resp)
258
+ parse!(resp)
236
259
  end
237
260
 
238
261
  # Creates folders, calendar folders, contacts folders, tasks folders, and search folders.
@@ -225,8 +225,9 @@ module Viewpoint
225
225
  resolution_set = []
226
226
  (@response/"//#{NS_EWS_MESSAGES}:ResolutionSet/*").each do |r|
227
227
  mbox_hash = mailbox((r/"#{NS_EWS_TYPES}:Mailbox").first)
228
- contact_hash = contact((r/"#{NS_EWS_TYPES}:Contact").first)
229
- resolution_set << mbox_hash.merge(contact_hash)
228
+ contact_xml = (r/"#{NS_EWS_TYPES}:Contact").first
229
+ next if !contact_xml
230
+ resolution_set << mbox_hash.merge(contact(contact_xml))
230
231
  end
231
232
  resolution_set
232
233
  end
metadata CHANGED
@@ -1,92 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: viewpoint
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.27
4
5
  prerelease:
5
- version: 0.1.26
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Dan Wanek
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-11-21 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: handsoap
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &7373740 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: nokogiri
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *7373740
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ requirement: &7373180 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
35
33
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: httpclient
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *7373180
36
+ - !ruby/object:Gem::Dependency
37
+ name: httpclient
38
+ requirement: &7372740 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
46
44
  type: :runtime
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: rubyntlm
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *7372740
47
+ - !ruby/object:Gem::Dependency
48
+ name: rubyntlm
49
+ requirement: &7372240 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
57
55
  type: :runtime
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: icalendar
61
56
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *7372240
58
+ - !ruby/object:Gem::Dependency
59
+ name: icalendar
60
+ requirement: &7371700 !ruby/object:Gem::Requirement
63
61
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
67
65
  version: 1.1.5
68
66
  type: :runtime
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
71
- name: mail
72
67
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *7371700
69
+ - !ruby/object:Gem::Dependency
70
+ name: mail
71
+ requirement: &7371180 !ruby/object:Gem::Requirement
74
72
  none: false
75
- requirements:
76
- - - ">="
77
- - !ruby/object:Gem::Version
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
78
76
  version: 2.2.5
79
77
  type: :runtime
80
- version_requirements: *id006
81
- description: "A Ruby client access library for Microsoft Exchange Web Services (EWS). Examples can be found here: http://distributed-frostbite.blogspot.com"
78
+ prerelease: false
79
+ version_requirements: *7371180
80
+ description: ! 'A Ruby client access library for Microsoft Exchange Web Services (EWS). Examples
81
+ can be found here: http://distributed-frostbite.blogspot.com'
82
82
  email: dan.wanek@gmail.com
83
83
  executables: []
84
-
85
84
  extensions: []
86
-
87
- extra_rdoc_files:
85
+ extra_rdoc_files:
88
86
  - README
89
- files:
87
+ files:
90
88
  - Changelog.txt
91
89
  - README
92
90
  - TODO
@@ -126,34 +124,30 @@ files:
126
124
  - lib/extensions/string.rb
127
125
  homepage: http://github.com/zenchild/Viewpoint
128
126
  licenses: []
129
-
130
127
  post_install_message:
131
- rdoc_options:
128
+ rdoc_options:
132
129
  - -x
133
130
  - test/
134
131
  - -x
135
132
  - examples/
136
- require_paths:
133
+ require_paths:
137
134
  - lib
138
- required_ruby_version: !ruby/object:Gem::Requirement
135
+ required_ruby_version: !ruby/object:Gem::Requirement
139
136
  none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
143
140
  version: 1.8.7
144
- required_rubygems_version: !ruby/object:Gem::Requirement
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
142
  none: false
146
- requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- version: "0"
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
150
147
  requirements: []
151
-
152
148
  rubyforge_project:
153
- rubygems_version: 1.8.11
149
+ rubygems_version: 1.8.17
154
150
  signing_key:
155
151
  specification_version: 3
156
152
  summary: A Ruby client access library for Microsoft Exchange Web Services (EWS)
157
153
  test_files: []
158
-
159
- has_rdoc: