viewpoint 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/README +84 -45
  2. data/Rakefile +7 -5
  3. data/TODO +6 -0
  4. data/VERSION +1 -1
  5. data/lib/exceptions/exceptions.rb +34 -0
  6. data/lib/extensions/string.rb +37 -0
  7. data/lib/model/calendar_folder.rb +45 -0
  8. data/lib/model/calendar_item.rb +145 -0
  9. data/lib/model/contact.rb +58 -0
  10. data/lib/model/contacts_folder.rb +35 -0
  11. data/lib/model/distribution_list.rb +26 -0
  12. data/lib/model/event.rb +118 -0
  13. data/lib/model/folder.rb +36 -0
  14. data/lib/model/generic_folder.rb +302 -0
  15. data/lib/model/item.rb +126 -0
  16. data/lib/model/mailbox_user.rb +107 -0
  17. data/lib/model/meeting_cancellation.rb +28 -0
  18. data/lib/{viewpoint/errors.rb → model/meeting_message.rb} +10 -14
  19. data/lib/model/meeting_request.rb +26 -0
  20. data/lib/model/meeting_response.rb +26 -0
  21. data/lib/model/message.rb +73 -0
  22. data/lib/model/model.rb +161 -0
  23. data/lib/model/search_folder.rb +36 -0
  24. data/lib/model/task.rb +62 -0
  25. data/lib/model/task_list.rb +19 -0
  26. data/lib/model/tasks_folder.rb +33 -0
  27. data/lib/soap/handsoap/builder.rb +22 -0
  28. data/lib/soap/handsoap/builders/ews_build_helpers.rb +317 -0
  29. data/lib/soap/handsoap/builders/ews_builder.rb +86 -0
  30. data/lib/soap/handsoap/ews_service.rb +646 -0
  31. data/lib/soap/handsoap/parser.rb +106 -0
  32. data/lib/soap/handsoap/parsers/ews_parser.rb +165 -0
  33. data/lib/soap/soap_provider.rb +75 -0
  34. data/lib/viewpoint.rb +98 -3
  35. data/preamble +1 -1
  36. data/test/spec/basic_functions.spec +51 -0
  37. data/test/spec/folder_subscriptions.spec +35 -0
  38. data/test/spec/folder_synchronization.spec +28 -0
  39. data/utils/ewsWSDL2rb.rb +29 -0
  40. metadata +101 -43
  41. data/lib/exchwebserv.rb +0 -6
  42. data/lib/soap/viewpoint.conf +0 -3
  43. data/lib/viewpoint/calendar.rb +0 -128
  44. data/lib/viewpoint/calendar_item.rb +0 -118
  45. data/lib/viewpoint/event.rb +0 -0
  46. data/lib/viewpoint/exchange_headers.rb +0 -49
  47. data/lib/viewpoint/exchwebserv.rb +0 -236
  48. data/lib/viewpoint/folder.rb +0 -358
  49. data/lib/viewpoint/item.rb +0 -101
  50. data/lib/viewpoint/mail.rb +0 -117
  51. data/lib/viewpoint/message.rb +0 -132
  52. data/lib/viewpoint/task.rb +0 -0
  53. data/lib/viewpoint/tasks.rb +0 -0
  54. data/lib/wsdl/defaultMappingRegistry.rb +0 -10680
  55. data/lib/wsdl/exchangeServiceBinding.rb +0 -349
  56. data/lib/wsdl/exchangeServiceTypes.rb +0 -11013
  57. data/test/spec/basic_features_spec.rb +0 -37
  58. data/test/test_client.rb +0 -13
  59. data/test/testrestrict.rb +0 -75
data/preamble CHANGED
@@ -1,5 +1,5 @@
1
1
  #############################################################################
2
- # Copyright © 2009 Dan Wanek <dan.wanek@gmail.com>
2
+ # Copyright © 2010 Dan Wanek <dan.wanek@gmail.com>
3
3
  #
4
4
  #
5
5
  # This file is part of Viewpoint.
@@ -0,0 +1,51 @@
1
+ $: << File.dirname(__FILE__) + '/../../lib/'
2
+ require 'kconv'
3
+ require 'viewpoint'
4
+ require 'json'
5
+
6
+ # To run this test put a file called 'creds.json' in this directory with the following format:
7
+ # {"user":"myuser","pass":"mypass","endpoint":"https://mydomain.com/ews/exchange.asmx"}
8
+
9
+
10
+ describe "Test the basic features of Viewpoint" do
11
+ before(:all) do
12
+ creds = JSON.load(File.open('spec/creds.json','r'))
13
+ Viewpoint::EWS::EWS.endpoint = creds['endpoint']
14
+ Viewpoint::EWS::EWS.set_auth(creds['user'],creds['pass'])
15
+ @ews = Viewpoint::EWS::EWS.instance
16
+ end
17
+
18
+ it 'should retrieve the various Folder Types' do
19
+ (Viewpoint::EWS::GenericFolder.get_folder :inbox).should be_instance_of(Viewpoint::EWS::Folder)
20
+ (Viewpoint::EWS::GenericFolder.get_folder :calendar).should be_instance_of(Viewpoint::EWS::CalendarFolder)
21
+ (Viewpoint::EWS::GenericFolder.get_folder :contacts).should be_instance_of(Viewpoint::EWS::ContactsFolder)
22
+ (Viewpoint::EWS::GenericFolder.get_folder :tasks).should be_instance_of(Viewpoint::EWS::TasksFolder)
23
+ end
24
+
25
+ it 'should retrieve an Array of Folder Types' do
26
+ flds = Viewpoint::EWS::GenericFolder.find_folders
27
+ flds.should be_instance_of(Array)
28
+ flds.first.should be_kind_of(Viewpoint::EWS::GenericFolder)
29
+ end
30
+
31
+ it 'should retrieve messages from a mail folder' do
32
+ inbox = Viewpoint::EWS::GenericFolder.get_folder :inbox
33
+ msgs = inbox.find_items
34
+ msgs.should be_instance_of(Array)
35
+ if(msgs.length > 0)
36
+ msgs.first.should be_kind_of(Viewpoint::EWS::Item)
37
+ end
38
+ end
39
+
40
+ it 'should retrieve an item by id if one exists' do
41
+ inbox = Viewpoint::EWS::GenericFolder.get_folder :inbox
42
+ msgs = inbox.find_items
43
+ if(msgs.length > 0)
44
+ item = inbox.get_item(msgs.first.id)
45
+ item.should be_kind_of(Viewpoint::EWS::Item)
46
+ else
47
+ msgs.should be_empty
48
+ end
49
+ end
50
+
51
+ end
@@ -0,0 +1,35 @@
1
+ $: << File.dirname(__FILE__) + '/../../lib/'
2
+ require 'kconv'
3
+ require 'viewpoint'
4
+ require 'json'
5
+
6
+ # To run this test put a file called 'creds.json' in this directory with the following format:
7
+ # {"user":"myuser","pass":"mypass","endpoint":"https://mydomain.com/ews/exchange.asmx"}
8
+
9
+
10
+ describe "Folder Subscriptions" do
11
+ before(:all) do
12
+ creds = JSON.load(File.open('spec/creds.json','r'))
13
+ Viewpoint::EWS::EWS.endpoint = creds['endpoint']
14
+ Viewpoint::EWS::EWS.set_auth(creds['user'],creds['pass'])
15
+ @ews = Viewpoint::EWS::EWS.instance
16
+ @inbox = Viewpoint::EWS::GenericFolder.get_folder :inbox
17
+ end
18
+
19
+ describe "Example Folder Subscription for the Inbox" do
20
+
21
+ it 'should subscribe to the Inbox Folder' do
22
+ @inbox.subscribe.should be_true
23
+ end
24
+
25
+ it 'should retrieve new subscription events' do
26
+ @inbox.get_events.should_not be_empty
27
+ end
28
+
29
+ it 'should unsubscribe to the Inbox Folder' do
30
+ @inbox.unsubscribe.should be_true
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,28 @@
1
+ $: << File.dirname(__FILE__) + '/../../lib/'
2
+ require 'kconv'
3
+ require 'viewpoint'
4
+ require 'json'
5
+
6
+ # To run this test put a file called 'creds.json' in this directory with the following format:
7
+ # {"user":"myuser","pass":"mypass","endpoint":"https://mydomain.com/ews/exchange.asmx"}
8
+
9
+
10
+ describe "Folder Synchronization" do
11
+ before(:all) do
12
+ creds = JSON.load(File.open('spec/creds.json','r'))
13
+ Viewpoint::EWS::EWS.endpoint = creds['endpoint']
14
+ Viewpoint::EWS::EWS.set_auth(creds['user'],creds['pass'])
15
+ @ews = Viewpoint::EWS::EWS.instance
16
+ @inbox = Viewpoint::EWS::GenericFolder.get_folder :inbox
17
+ end
18
+
19
+ describe "Example Folder Synchronization for the Inbox" do
20
+
21
+ it 'should start synchronization of the Inbox Folder' do
22
+ @inbox.sync_items!(2)
23
+ @inbox.sync_state.should_not be_nil
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+
4
+ wsdl = Nokogiri::XML(File.read('Services.wsdl'))
5
+
6
+ methods = []
7
+
8
+ wsdl.xpath('//wsdl:binding/wsdl:operation').each do |op|
9
+ meth_name = op[:name].gsub(/([a-z])([A-Z])/, '\1_\2').downcase
10
+ methods << meth_name
11
+ str = " def #{meth_name}\n"
12
+ str << " action = '#{op.xpath('soap:operation').first[:soapAction]}'\n"
13
+ str << " resp = invoke('tns:#{op[:name]}', :soap_action => action) do |#{meth_name}|\n"
14
+ str << " build_#{meth_name}!(#{meth_name})\n"
15
+ str << " end\n"
16
+ str << " parse_#{meth_name}(resp)\n"
17
+ str << " end\n\n"
18
+ puts str
19
+ end
20
+
21
+ puts "\n\n ## Helper methods (builders and parsers)\n"
22
+ puts " private\n\n"
23
+ methods.each do |meth|
24
+ str = " def build_#{meth}!(#{meth})\n"
25
+ str << " end\n\n"
26
+ str << " def parse_#{meth}()\n"
27
+ str << " end\n\n"
28
+ puts str
29
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viewpoint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Dan Wanek
@@ -9,40 +14,75 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-07 00:00:00 -06:00
17
+ date: 2010-08-02 00:00:00 -05:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: soap4r
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ name: handsoap
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
20
25
  requirements:
21
26
  - - ">="
22
27
  - !ruby/object:Gem::Version
23
- version: 1.5.8
24
- version:
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
25
33
  - !ruby/object:Gem::Dependency
26
- name: icalendar
34
+ name: nokogiri
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
27
44
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: httpclient
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
30
51
  requirements:
31
52
  - - ">="
32
53
  - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
33
56
  version: "0"
34
- version:
57
+ type: :runtime
58
+ version_requirements: *id003
35
59
  - !ruby/object:Gem::Dependency
36
60
  name: rubyntlm
61
+ prerelease: false
62
+ requirement: &id004 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
37
70
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: icalendar
74
+ prerelease: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ none: false
40
77
  requirements:
41
78
  - - ">="
42
79
  - !ruby/object:Gem::Version
43
- version: 0.1.1
44
- version:
45
- description: " \tA Ruby client access library for Microsoft Exchange Web Services (EWS). It is a work in progress. Methods are still being added from the EWS API docs. Please see them for further information: http://msdn.microsoft.com/en-us/library/bb204119.aspx\n"
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ type: :runtime
84
+ version_requirements: *id005
85
+ description: " \tA Ruby client access library for Microsoft Exchange Web Services (EWS). Examples can be found here: http://distributed-frostbite.blogspot.com\n"
46
86
  email: dan.wanek@gmail.com
47
87
  executables: []
48
88
 
@@ -55,6 +95,7 @@ files:
55
95
  - COPYING.txt
56
96
  - README
57
97
  - Rakefile
98
+ - TODO
58
99
  - VERSION
59
100
  - examples/cal2ical.rb
60
101
  - examples/ews_fusefs.rb
@@ -102,58 +143,75 @@ files:
102
143
  - examples/webclient/views/layout.haml
103
144
  - examples/webclient/views/mail.haml
104
145
  - examples/webclient/views/welcome.haml
105
- - lib/exchwebserv.rb
106
- - lib/soap/viewpoint.conf
146
+ - lib/exceptions/exceptions.rb
147
+ - lib/extensions/string.rb
148
+ - lib/model/calendar_folder.rb
149
+ - lib/model/calendar_item.rb
150
+ - lib/model/contact.rb
151
+ - lib/model/contacts_folder.rb
152
+ - lib/model/distribution_list.rb
153
+ - lib/model/event.rb
154
+ - lib/model/folder.rb
155
+ - lib/model/generic_folder.rb
156
+ - lib/model/item.rb
157
+ - lib/model/mailbox_user.rb
158
+ - lib/model/meeting_cancellation.rb
159
+ - lib/model/meeting_message.rb
160
+ - lib/model/meeting_request.rb
161
+ - lib/model/meeting_response.rb
162
+ - lib/model/message.rb
163
+ - lib/model/model.rb
164
+ - lib/model/search_folder.rb
165
+ - lib/model/task.rb
166
+ - lib/model/task_list.rb
167
+ - lib/model/tasks_folder.rb
168
+ - lib/soap/handsoap/builder.rb
169
+ - lib/soap/handsoap/builders/ews_build_helpers.rb
170
+ - lib/soap/handsoap/builders/ews_builder.rb
171
+ - lib/soap/handsoap/ews_service.rb
172
+ - lib/soap/handsoap/parser.rb
173
+ - lib/soap/handsoap/parsers/ews_parser.rb
174
+ - lib/soap/soap_provider.rb
107
175
  - lib/viewpoint.rb
108
- - lib/viewpoint/calendar.rb
109
- - lib/viewpoint/calendar_item.rb
110
- - lib/viewpoint/errors.rb
111
- - lib/viewpoint/event.rb
112
- - lib/viewpoint/exchange_headers.rb
113
- - lib/viewpoint/exchwebserv.rb
114
- - lib/viewpoint/folder.rb
115
- - lib/viewpoint/item.rb
116
- - lib/viewpoint/mail.rb
117
- - lib/viewpoint/message.rb
118
- - lib/viewpoint/task.rb
119
- - lib/viewpoint/tasks.rb
120
- - lib/wsdl/defaultMappingRegistry.rb
121
- - lib/wsdl/exchangeServiceBinding.rb
122
- - lib/wsdl/exchangeServiceTypes.rb
123
176
  - preamble
124
- - test/spec/basic_features_spec.rb
125
- - test/test_client.rb
126
- - test/testrestrict.rb
177
+ - test/spec/basic_functions.spec
178
+ - test/spec/folder_subscriptions.spec
179
+ - test/spec/folder_synchronization.spec
180
+ - utils/ewsWSDL2rb.rb
127
181
  has_rdoc: true
128
182
  homepage: http://github.com/zenchild/Viewpoint
129
183
  licenses: []
130
184
 
131
- post_install_message: Don't forget to create .viewpointrc. See README
185
+ post_install_message:
132
186
  rdoc_options:
133
187
  - -x
134
- - wsdl/
135
- - -x
136
188
  - test/
137
189
  - -x
138
190
  - examples/
139
191
  require_paths:
140
192
  - lib
141
193
  required_ruby_version: !ruby/object:Gem::Requirement
194
+ none: false
142
195
  requirements:
143
196
  - - ">="
144
197
  - !ruby/object:Gem::Version
198
+ segments:
199
+ - 1
200
+ - 8
201
+ - 7
145
202
  version: 1.8.7
146
- version:
147
203
  required_rubygems_version: !ruby/object:Gem::Requirement
204
+ none: false
148
205
  requirements:
149
206
  - - ">="
150
207
  - !ruby/object:Gem::Version
208
+ segments:
209
+ - 0
151
210
  version: "0"
152
- version:
153
211
  requirements: []
154
212
 
155
213
  rubyforge_project:
156
- rubygems_version: 1.3.5
214
+ rubygems_version: 1.3.7
157
215
  signing_key:
158
216
  specification_version: 3
159
217
  summary: A Ruby client access library for Microsoft Exchange Web Services (EWS)
@@ -1,6 +0,0 @@
1
- # This exists for legacy reasons and will be depreciated soon
2
- warn "*******************************************"
3
- warn "Requiring exchwebserv is depreciated and will be removed soon.\nPlease require 'viewpoint'"
4
- warn "*******************************************"
5
-
6
- require 'viewpoint'
@@ -1,3 +0,0 @@
1
- exchange.ews.user=user
2
- exchange.ews.pass=pass
3
- exchange.ews.endpoint=https://hostname/ews/exchange.asmx
@@ -1,128 +0,0 @@
1
- #############################################################################
2
- # Copyright © 2009 Dan Wanek <dan.wanek@gmail.com>
3
- #
4
- #
5
- # This file is part of Viewpoint.
6
- #
7
- # Viewpoint is free software: you can redistribute it and/or
8
- # modify it under the terms of the GNU General Public License as published
9
- # by the Free Software Foundation, either version 3 of the License, or (at
10
- # your option) any later version.
11
- #
12
- # Viewpoint is distributed in the hope that it will be useful,
13
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15
- # Public License for more details.
16
- #
17
- # You should have received a copy of the GNU General Public License along
18
- # with Viewpoint. If not, see <http://www.gnu.org/licenses/>.
19
- #############################################################################
20
- $:.unshift(File.dirname(__FILE__))
21
- require 'rubygems'
22
- require 'icalendar'
23
- require 'wsdl/exchangeServiceBinding'
24
- # --- Folder Types ---
25
- require 'folder'
26
- # --- Item Types ---
27
- require 'calendar_item'
28
- #require 'meeting_request'
29
-
30
-
31
-
32
- class Viewpoint::CalendarFolder < Viewpoint::Folder
33
- include Viewpoint
34
-
35
- # initialize with an item of CalendarFolderType
36
- def initialize(folder)
37
- # Call initialize in the
38
- super(folder)
39
- end
40
-
41
- def get_todays_events
42
- get_events(DateTime.parse(Date.today.to_s), DateTime.parse(Date.today.next.to_s))
43
- end
44
-
45
- def get_weeks_events
46
- start_date = Date.today
47
- end_date = (start_date + ( 6 - start_date.wday))
48
-
49
- get_events(DateTime.parse(start_date.to_s), DateTime.parse(end_date.to_s))
50
- end
51
-
52
- # Get events between a certain time period. Defaults to "today"
53
- # Input: DateTime of start, DateTime of end
54
- # You can get a year of events by passing 'nil, nil', but you should really consider using synchronization then.
55
- # This method will return an Array of CalendarItem
56
- def get_events(start_time = (DateTime.parse(Date.today.to_s)), end_time = (DateTime.parse(Date.today.next.to_s)))
57
- find_item_t = FindItemType.new
58
- find_item_t.xmlattr_Traversal = ItemQueryTraversalType::Shallow
59
- item_shape = ItemResponseShapeType.new(DefaultShapeNamesType::Default, false)
60
-
61
- find_item_t.itemShape = item_shape
62
-
63
- folder_ids = NonEmptyArrayOfBaseFolderIdsType.new()
64
- dist_folder = DistinguishedFolderIdType.new
65
- dist_folder.xmlattr_Id = DistinguishedFolderIdNameType.new(@display_name.downcase)
66
- folder_ids.distinguishedFolderId = dist_folder
67
- find_item_t.parentFolderIds = folder_ids
68
-
69
- # If we pass nil, force times to be:
70
- # start: 1 years ago
71
- # end: 1 years from now
72
- cal_span = CalendarViewType.new
73
- if ( start_time == nil or end_time == nil)
74
- cal_span.xmlattr_StartDate = DateTime.parse((Date.today - 365).to_s).to_s
75
- cal_span.xmlattr_EndDate = DateTime.parse((Date.today + 365).to_s).to_s
76
- find_item_t.calendarView = cal_span
77
- else
78
- cal_span.xmlattr_StartDate = start_time.to_s
79
- cal_span.xmlattr_EndDate = end_time.to_s
80
- find_item_t.calendarView = cal_span
81
- end
82
-
83
- resp = find_items(find_item_t)
84
- if resp != nil
85
- cal_items = []
86
-
87
- resp.rootFolder.items.calendarItem.each do |cali|
88
- cal_items << CalendarItem.new(cali, self)
89
- end
90
- # TODO: Handle the following types of Calendar data
91
- # meetingMessage
92
- # meetingRequest
93
- # meetingResponse
94
- # meetingCancellation
95
-
96
- return cal_items
97
- else
98
- return resp # return nil
99
- end
100
- end
101
-
102
-
103
- # Returns an Icalendar::Calendar object
104
- # Input: DateTime of start, DateTime of end
105
- def to_ical(dtstart = nil, dtend = nil)
106
- ical = Icalendar::Calendar.new
107
- events = get_events(dtstart, dtend)
108
- events.each do |ev|
109
- ical.add_event(ev.to_ical_event)
110
- end
111
- return ical
112
- end
113
-
114
-
115
- # See docs for Folder::get_item
116
- def get_item(item_id)
117
- cali = super(item_id, "calendarItem", true)
118
- end
119
-
120
- def get_event(item_id)
121
- begin
122
- return CalendarItem.new(get_item(item_id), self)
123
- rescue InvalidEWSItemError => e
124
- return nil
125
- end
126
- end
127
- end
128
-