diff --git a/lib/exchanger.rb b/lib/exchanger.rb index 3c0ccc0..4833b93 100644 --- a/lib/exchanger.rb +++ b/lib/exchanger.rb @@ -25,6 +25,8 @@ require "exchanger/elements/single_recipient" require "exchanger/elements/attendee" require "exchanger/elements/complete_name" +require "exchanger/elements/address" +require "exchanger/elements/room" # Entry elements require "exchanger/elements/entry" require "exchanger/elements/email_address" @@ -64,6 +66,7 @@ require "exchanger/operations/resolve_names" require "exchanger/operations/expand_dl" require "exchanger/operations/get_user_availability" +require "exchanger/operations/get_room_lists" module Exchanger NS = { diff --git a/lib/exchanger/elements/address.rb b/lib/exchanger/elements/address.rb new file mode 100644 index 0000000..e7775f1 --- /dev/null +++ b/lib/exchanger/elements/address.rb @@ -0,0 +1,12 @@ +module Exchanger + # The Address element represents a fully resolved e-mail address + # + # http://msdn.microsoft.com/en-us/library/dd899404(v=exchg.150).aspx + class Address < Element + element :name, :type => String + element :email_address, :type => String + element :routing_type, :type => String + element :mailbox_type, :type => String + end + +end diff --git a/lib/exchanger/elements/room.rb b/lib/exchanger/elements/room.rb new file mode 100644 index 0000000..e4af456 --- /dev/null +++ b/lib/exchanger/elements/room.rb @@ -0,0 +1,9 @@ +module Exchanger + # The Room element represents a meeting room + # + # http://msdn.microsoft.com/en-us/library/dd899479(v=exchg.150).aspx + class Room < Element + element :id, :type => Address + end + +end diff --git a/lib/exchanger/operations/get_room_lists.rb b/lib/exchanger/operations/get_room_lists.rb new file mode 100644 index 0000000..488ff51 --- /dev/null +++ b/lib/exchanger/operations/get_room_lists.rb @@ -0,0 +1,35 @@ +module Exchanger + # GetRoomLists operation + # + # http://msdn.microsoft.com/en-us/library/dd899416(v=exchg.150).aspx + + class GetRoomLists < Operation + class Request < Operation::Request + def to_xml + Nokogiri::XML::Builder.new do |xml| + xml.send("soap:Envelope", "xmlns:xsi" => NS["xsi"], + "xmlns:xsd" => NS["xsd"], "xmlns:soap" => NS["soap"], + "xmlns:t" => NS["t"], "xmlns:m" => NS["m"]) do + xml.send("soap:Header") do + xml.send("t:RequestServerVersion", "Version" => 'Exchange2010_SP1') + end + xml.send("soap:Body") do + xml.send("m:GetRoomLists") + end + end + end + end + end + + class Response < Operation::Response + def items + to_xml.xpath(".//m:RoomLists", NS).children.map do |node| + item_klass = Exchanger.const_get(node.name) + item_klass.new_from_xml(node) + end + end + end + + end + +end diff --git a/spec/exchanger/get_room_lists_spec.rb b/spec/exchanger/get_room_lists_spec.rb new file mode 100644 index 0000000..797fcbb --- /dev/null +++ b/spec/exchanger/get_room_lists_spec.rb @@ -0,0 +1,26 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe Exchanger::GetRoomLists do + + before do + @response = VCR.use_cassette('get_room_lists') do + Exchanger::GetRoomLists.run(@valid_attributes) + end + @items = @response.items + end + + it "should be sucessfull with default values" do + VCR.use_cassette('get_room_lists_default') do + Exchanger::GetRoomLists.run().status.should == 200 + end + end + + it "should be sucessfull with valid data" do + @response.status.should == 200 + end + + it "should response have Room items" do + @items.all?{ |i| i.class.name == "Exchanger::Room" }.should be_true + end + +end