viewpoint 0.1.26 → 0.1.27

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.
@@ -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: