viewpoint 0.1.20 → 0.1.21

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.
@@ -95,6 +95,53 @@ module Viewpoint
95
95
  @updates.merge!({:preformatted => changes}) {|k,v1,v2| v1 + v2}
96
96
  end
97
97
 
98
+ # Set the phone number. You must give a type based on the available Exchange phone number types
99
+ # @param [Symbol] type the type of number to set. It must be one of these:
100
+ # :assistant_phone, :business_fax, :business_phone, :business_phone2, :callback, :car_phone, :company_main_phone,
101
+ # :home_fax, :home_phone, :home_phone2, :isdn, :mobile_phone, :other_fax, :other_telephone, :pager, :primary_phone,
102
+ # :radio_phone, :telex, :tty_tdd_phone
103
+ # @param [String] phone_number The phone number
104
+ # @TODO: Check to make sure the passed type is valid
105
+ def set_phone_number(phone_type, phone_number)
106
+ valid_types = [:assistant_phone, :business_fax, :business_phone, :business_phone2, :callback, :car_phone, :company_main_phone,
107
+ :home_fax, :home_phone, :home_phone2, :isdn, :mobile_phone, :other_fax, :other_telephone, :pager, :primary_phone,
108
+ :radio_phone, :telex, :tty_tdd_phone]
109
+ raise EwsError, "Invalid phone type (#{phone_type}) passed to Contact#set_phone_number." unless valid_types.index phone_type
110
+ type = self.class.name.split(/::/).last.ruby_case.to_sym
111
+
112
+ changes = []
113
+ k = :phone_numbers
114
+ v = phone_type.to_s.camel_case
115
+ changes << {:set_item_field =>
116
+ [{:indexed_field_uRI => {:field_uRI => FIELD_URIS[k][:text], :field_index => v}}, {type=>{k => {:entry => {:key => v, :text => phone_number}}}}]}
117
+ @updates.merge!({:preformatted => changes}) {|k,v1,v2| v1 + v2}
118
+ end
119
+
120
+ # Set an address for this contact
121
+ # @param [Symbol] address_type the type of Exchange address to set. It must be one of the following:
122
+ # :business, :home, :other
123
+ # @param [Hash] address the address elements to set. It may include the following keys
124
+ # :street, :city, :state, :country_or_region, :postal_code
125
+ def set_address(address_type, address)
126
+ valid_types = [:business, :home, :other]
127
+ raise EwsError, "Invalid address type (#{address_type}) passed to Contact#set_address." unless valid_types.index address_type
128
+ valid_field_types = [:street, :city, :state, :country_or_region, :postal_code]
129
+ type = self.class.name.split(/::/).last.ruby_case.to_sym
130
+ v = address_type.to_s.camel_case
131
+
132
+ changes = []
133
+ field = 'PhysicalAddresses'
134
+ address.keys.each do |addr_item|
135
+ raise EwsError, "Invalid address element (#{addr_item}) passed to Contact#set_address." unless valid_field_types.index addr_item
136
+ index_field = "contacts:PhysicalAddress:#{addr_item.to_s.camel_case}"
137
+ changes << {:set_item_field =>
138
+ [{:indexed_field_uRI => {
139
+ :field_uRI => index_field, :field_index => v}}, {type => {field => {:entry => {:key => v, addr_item =>{ :text => address[addr_item]}}}}}
140
+ ]}
141
+ end
142
+ @updates.merge!({:preformatted => changes}) {|k,v1,v2| v1 + v2}
143
+ end
144
+
98
145
 
99
146
  private
100
147
 
@@ -162,7 +162,7 @@ module Viewpoint
162
162
  :mileage => {:text => 'contacts:Mileage', :writable => true},
163
163
  :nickname => {:text => 'contacts:Nickname', :writable => true},
164
164
  :office_location => {:text => 'contacts:OfficeLocation', :writable => true},
165
- :phone_numbers => {:text => 'contacts:PhoneNumbers', :writable => true},
165
+ :phone_numbers => {:ftype => :indexed_field_uRI, :text => 'contacts:PhoneNumber', :writable => true},
166
166
  :physical_addresses => {:text => 'contacts:PhysicalAddresses', :writable => true},
167
167
  :postal_address_index => {:text => 'contacts:PostalAddressIndex', :writable => true},
168
168
  :profession => {:text => 'contacts:Profession', :writable => true},
@@ -79,12 +79,15 @@ module Viewpoint
79
79
  # @return [true] This method either returns true or raises an error with the message
80
80
  # as to why this operation did not succeed.
81
81
  def add_delegate!(delegate_email, permissions)
82
+ # Use a new hash so the passed hash is not modified in case we are in a loop.
83
+ # Thanks to Markus Roberts for pointing this out.
84
+ formatted_perms = {}
82
85
  # Modify permissions so we can pass it to the builders
83
86
  permissions.each_pair do |k,v|
84
- permissions[k] = {:text => v}
87
+ formatted_perms[k] = {:text => v}
85
88
  end
86
89
 
87
- resp = (Viewpoint::EWS::EWS.instance).ews.add_delegate(self.email_address, delegate_email, permissions)
90
+ resp = (Viewpoint::EWS::EWS.instance).ews.add_delegate(self.email_address, delegate_email, formatted_perms)
88
91
  if(resp.status == 'Success')
89
92
  return true
90
93
  else
@@ -94,11 +97,12 @@ module Viewpoint
94
97
 
95
98
  def update_delegate!(delegate_email, permissions)
96
99
  # Modify permissions so we can pass it to the builders
100
+ formatted_perms = {}
97
101
  permissions.each_pair do |k,v|
98
- permissions[k] = {:text => v}
102
+ formatted_perms[k] = {:text => v}
99
103
  end
100
104
 
101
- resp = (Viewpoint::EWS::EWS.instance).ews.update_delegate(self.email_address, delegate_email, permissions)
105
+ resp = (Viewpoint::EWS::EWS.instance).ews.update_delegate(self.email_address, delegate_email, formatted_perms)
102
106
  if(resp.status == 'Success')
103
107
  return true
104
108
  else
@@ -127,7 +127,7 @@ module Viewpoint
127
127
 
128
128
  # The MailboxUser object that represents the user connected to EWS.
129
129
  def me
130
- @me ||= MailboxUser.find_user((@@user.include?('@') ? @@user : "#{@@user}@"))
130
+ MailboxUser.find_user((@@user.include?('@') ? @@user : "#{@@user}@"))
131
131
  end
132
132
 
133
133
  end # class EWS
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: viewpoint
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.20
5
+ version: 0.1.21
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dan Wanek
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-08 00:00:00 -06:00
13
+ date: 2011-03-10 00:00:00 -06:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency