class RubySwift
Public Class Methods
new(password, namespace="ns1", http_adapter=:net_http)
click to toggle source
# File lib/ruby-swift.rb, line 5 def initialize(password, namespace="ns1", http_adapter=:net_http) HTTPI.adapter = http_adapter @password = password @client = Savon.client(endpoint: "http://suite.peoplelogic.com.au/server/includes/apis/soap.php", namespace: namespace, convert_request_keys_to: :none) end
Public Instance Methods
add_group_member(email, group_name)
click to toggle source
# File lib/ruby-swift.rb, line 44 def add_group_member(email, group_name) return_response(soap_request("add_group_member", {email: email, group_name: group_name})) end
person_exists?(email)
click to toggle source
# File lib/ruby-swift.rb, line 14 def person_exists?(email) read_person(email)[:status] == 0 end
read_groups()
click to toggle source
# File lib/ruby-swift.rb, line 36 def read_groups return_response(soap_request("read_groups")) do |sr| sr[:item].map do |group| group[:item][:value] end end end
read_person(email)
click to toggle source
# File lib/ruby-swift.rb, line 26 def read_person(email) return_response(soap_request("read_person", {email: email})) do |sr| convert_to_person(sr) end end
read_persons(group_name)
click to toggle source
# File lib/ruby-swift.rb, line 52 def read_persons(group_name) return_response(soap_request("read_persons", {group_name: group_name})) do |sr| sr[:item].map do |person| convert_to_person(person) end end end
remove_group(group_name)
click to toggle source
# File lib/ruby-swift.rb, line 60 def remove_group(group_name) return_response(soap_request("remove_group", {group_name: group_name})) end
remove_group_member(email, group_name)
click to toggle source
# File lib/ruby-swift.rb, line 48 def remove_group_member(email, group_name) return_response(soap_request("remove_group_member", {email: email, group_name: group_name})) end
remove_person(email)
click to toggle source
# File lib/ruby-swift.rb, line 64 def remove_person(email) return_response(soap_request("remove_person", {email: email})) end
update_person(old_email, fields)
click to toggle source
# File lib/ruby-swift.rb, line 68 def update_person(old_email, fields) return_response(soap_request("update_person", {email_old: old_email}.merge(fields))) end
write_group(group_name)
click to toggle source
# File lib/ruby-swift.rb, line 72 def write_group(group_name) return_response(soap_request("write_group", {group_name: group_name})) end
write_or_update_person(fields)
click to toggle source
# File lib/ruby-swift.rb, line 18 def write_or_update_person(fields) if person_exists?(fields[:email]) update_person(fields[:email], fields.reject { |k,v| k == :email}) else write_person(fields) end end
write_person(fields)
click to toggle source
# File lib/ruby-swift.rb, line 32 def write_person(fields) return_response(soap_request("write_person", fields)) end
Private Instance Methods
convert_to_person(soap_response)
click to toggle source
# File lib/ruby-swift.rb, line 105 def convert_to_person(soap_response) Hash[*soap_response[:item].map { |line| [line[:key].to_sym, (line[:value].is_a? Hash) ? nil : line[:value]] }.flatten] end
hash_to_soap(data)
click to toggle source
# File lib/ruby-swift.rb, line 92 def hash_to_soap(data) if data data.map do |k, v| "<item><key xsi:type=\"xsd:string\">#{k}</key><value xsi:type=\"xsd:string\">#{v}</value></item>" end.join end end
request_body(operation, data)
click to toggle source
Generates a raw XML SOAP request document. I need to do it this way because the Swift SOAP server expects a particularly weird XML format that Savon does not naturally produce.
# File lib/ruby-swift.rb, line 88 def request_body(operation, data) "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"urn:pl\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ns2=\"http://xml.apache.org/xml-soap\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><SOAP-ENV:Body><ns1:#{operation}><param0 xsi:type=\"xsd:string\">#{@password}</param0><param1 xsi:type=\"ns2:Map\">#{hash_to_soap(data)}</param1></ns1:#{operation}></SOAP-ENV:Body></SOAP-ENV:Envelope>" end
return_response(soap_response) { |soap_response| ... }
click to toggle source
# File lib/ruby-swift.rb, line 111 def return_response(soap_response, &block) status = soap_response.to_s.to_i resp = if status == 0 if block_given? yield soap_response else true end end return {:status => status, :response => resp} end
soap_request(operation, data=nil)
click to toggle source
Performs a SOAP request.
# File lib/ruby-swift.rb, line 79 def soap_request(operation, data=nil) response = @client.call(operation, xml: request_body(operation, data)) tidy_response(response.body) end
tidy_response(response)
click to toggle source
Tidies up the response that Swift gives us.
# File lib/ruby-swift.rb, line 101 def tidy_response(response) response.to_a[0][1][:return] end