lib/cupid/methods/subscriber.rb in cupid-0.1.2 vs lib/cupid/methods/subscriber.rb in cupid-0.2.0

- old
+ new

@@ -1,38 +1,57 @@ module Cupid class Session - def create_subscriber(email, *args) - options = args.extract_options! - options[:email] = email.to_s - options[:client_id] ||= @account + # User object: + # { + # :email => 'email@email.com', + # :lists => [list_id1, list_id2...], + # :first_name => 'Name', + # :last_name => 'Lastname' + # } + def create_subscriber(user, account=nil) + soap_body = prepare_subscriber(user, account) - soap_body = '<Objects xsi:type="Subscriber">' + - create_subscriber_object(options) + - '</Objects>' - - build_request('Create', 'CreateRequest', soap_body) + response = build_request('Create', 'CreateRequest', soap_body) + response = Nokogiri::XML(response.http.body).remove_namespaces! + created_user_id = response.css('NewID').text end - def create_subscribers(*args) - raise NoMethodError.new "I will implement this method soon" + def create_subscribers(users, account=nil) + soap_body = users.map{ |user| prepare_subscriber(user, account) } + + response = build_request('Create', 'CreateRequest', soap_body) + response = Nokogiri::XML(response.http.body).remove_namespaces! + created_user_id = response.css('NewID').text end private - def create_subscriber_object(options) - subscriber_object = '<ObjectID xsi:nil="true"/>' - subscriber_object += '<PartnerKey xsi:nil="true" />' - subscriber_object += '<Client><ID>' + options[:client_id].to_s + '</ID></Client>' if options[:client_id] - subscriber_object += '<Lists>' + options[:lists].map(&:list_object).join('') + '</Lists>' if options[:lists] - subscriber_object += '<FirstName>' + options[:first_name].to_s + '</FirstName>' if options[:first_name] - subscriber_object += '<LastName>' + options[:last_name].to_s + '</LastName>' if options[:last_name] - subscriber_object += '<EmailAddress>' + options[:email] + '</EmailAddress>' - end - - def list_object(list_id) - '<PartnerKey xsi:nil="true"> + + def prepare_subscriber(user, account=nil) + user[:lists].map!{ |list| list_object(list) } + account ||= @account + + create_subscriber_object(user, account) + end + + def create_subscriber_object(user, account) + subscriber_object = '<Objects xsi:type="Subscriber"><ObjectID xsi:nil="true"/>' + subscriber_object += '<PartnerKey xsi:nil="true" />' + subscriber_object += '<Client><ID>' + account.to_s + '</ID></Client>' if account + subscriber_object += user[:lists].join('') if user[:lists] + subscriber_object += '<FirstName>' + user[:first_name].to_s + '</FirstName>' if user[:first_name] + subscriber_object += '<LastName>' + user[:last_name].to_s + '</LastName>' if user[:last_name] + subscriber_object += '<EmailAddress>' + user[:email] + '</EmailAddress>' + end + + def list_object(list_id) + '<Lists> + <PartnerKey xsi:nil="true"> </PartnerKey> <ID>' + list_id.to_s + '</ID> <ObjectID xsi:nil="true"> - </ObjectID>' - end + </ObjectID> + </Lists>' + end + + subscriber_object += '</Objects>' end end \ No newline at end of file