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.
- data/lib/model/generic_folder.rb +13 -3
- data/lib/model/item.rb +3 -2
- data/lib/model/model.rb +2 -2
- data/lib/soap/handsoap/ews_service.rb +28 -5
- data/lib/soap/handsoap/parsers/ews_parser.rb +3 -2
- metadata +68 -74
data/lib/model/generic_folder.rb
CHANGED
@@ -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([
|
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
|
-
|
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.
|
data/lib/model/item.rb
CHANGED
@@ -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.
|
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
|
data/lib/model/model.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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 |
|
233
|
-
|
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
|
-
|
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
|
-
|
229
|
-
|
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
|
-
|
14
|
-
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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
|
-
|
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
|
-
|
81
|
-
|
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:
|
143
|
+
requirements:
|
144
|
+
- - ! '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
150
147
|
requirements: []
|
151
|
-
|
152
148
|
rubyforge_project:
|
153
|
-
rubygems_version: 1.8.
|
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:
|