Class: Cupid::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/cupid/session.rb,
lib/cupid/methods/list.rb,
lib/cupid/methods/email.rb,
lib/cupid/methods/subscriber.rb

Constant Summary collapse

DEFAULTS =
{
  :soap_s4_url          => "https://webservice.s4.exacttarget.com/etframework.wsdl",
  :wsa_soap_s4_to       => "https://webservice.s4.exacttarget.com/Service.asmx",
  :use_ssl              => true
}

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Session

Returns a new instance of Session.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cupid/session.rb', line 11

def initialize(*args)
  options     = args.extract_options!
  @username   = options[:username]    ||= Cupid.username
  @password   = options[:password]    ||= Cupid.password
  @account    = options[:account]     ||= Cupid.
  @headers    = {"Content-Type" => "application/x-www-form-urlencoded", "Connection" => "close"}

  @api_uri = @api_wsdl = DEFAULTS[:soap_s4_url]
  @api_uri = URI.parse(@api_uri)
  @api_url = Net::HTTP.new(@api_uri.host, @api_uri.port)

  @api_url.use_ssl = DEFAULTS[:use_ssl]
  @wsa_soap_s4_to = DEFAULTS[:wsa_soap_s4_to]
end

Instance Method Details

#create_email(subject, body, *args) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/cupid/methods/email.rb', line 18

def create_email(subject, body, *args)
  options = args.extract_options!
  options[:subject] = CGI.escapeHTML subject.to_s
  options[:body] = CGI.escapeHTML body.to_s
  options[:client_id] ||= @account

  options[:email_type] ||= 'HTML'
  options[:is_html_paste] ||= 'true' # ??
  options[:character_set] ||= 'utf-8'

  soap_body = '<Objects xsi:type="Email">' +
                create_email_object(options) +
              '</Objects>'

  response = build_request('Create', 'CreateRequest', soap_body)
  response = Nokogiri::XML(response.http.body).remove_namespaces!
  created_email_id = response.css('NewID').text
end

#create_emails(*args) ⇒ Object



72
73
74
# File 'lib/cupid/methods/email.rb', line 72

def create_emails(*args)
  raise NoMethodError.new "I will implement this method soon"
end

#create_folder(title, *args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/cupid/methods/email.rb', line 37

def create_folder(title, *args)
  options = args.extract_options!
  options[:title] = CGI.escapeHTML title.to_s
  options[:description] ||= 'description'
  options[:client_id] ||= @account

  options[:content_type] ||= 'email'
  options[:is_active] ||= 'true'
  options[:is_editable] ||= 'true'
  options[:allow_children] ||= 'true'

  soap_body = '<Objects xsi:type="DataFolder">' +
                create_folder_object(options) +
              '</Objects>'

  response = build_request('Create', 'CreateRequest', soap_body)
  response = Nokogiri::XML(response.http.body).remove_namespaces!
  created_folder_id = response.css('NewID').text
end

#create_subscriber(email, *args) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
# File 'lib/cupid/methods/subscriber.rb', line 3

def create_subscriber(email, *args)
  options = args.extract_options!
  options[:email] = email.to_s
  options[:client_id] ||= @account

  soap_body = '<Objects xsi:type="Subscriber">' +
                create_subscriber_object(options) +
              '</Objects>'

  build_request('Create', 'CreateRequest', soap_body)
end

#create_subscribers(*args) ⇒ Object



15
16
17
# File 'lib/cupid/methods/subscriber.rb', line 15

def create_subscribers(*args)
  raise NoMethodError.new "I will implement this method soon"
end


68
69
70
# File 'lib/cupid/methods/email.rb', line 68

def email_link(email_id)
  "https://members.s4.exacttarget.com/Content/Email/EmailEdit.aspx?eid=" + email_id.to_s
end

#retrieve_email_folders(account = nil, properties = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/cupid/methods/email.rb', line 3

def retrieve_email_folders(=nil, properties=nil)
   ||= @account
  properties ||= ['ID', 'Name', 'ParentFolder.ID', 'ParentFolder.Name']
  filters = '<Filter xsi:type="SimpleFilterPart">' +
              '<Property>ContentType</Property>' +
              '<SimpleOperator>like</SimpleOperator>' +
              '<Value>email</Value>' +
            '</Filter>'

  soap_body = build_retrieve(.to_s, 'DataFolder', properties, filters)
  response = build_request('Retrieve', 'RetrieveRequestMsg', soap_body)
  response = Nokogiri::XML(response.http.body).remove_namespaces!
  all_folders = response.css('Results').map{|f| {f.css('Name').to_a.map(&:text).join('/') => f.css('ID')[0].text}}
end

#retrieve_lists(account = nil, properties = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/cupid/methods/list.rb', line 3

def retrieve_lists(=nil, properties=nil)
   ||= @account
  properties ||= ['ID', 'CustomerKey']
  
  soap_body = build_retrieve(.to_s, 'List', properties)
  response = build_request('Retrieve', 'RetrieveRequestMsg', soap_body)
  response = Nokogiri::XML(response.http.body).remove_namespaces!
  all_lists = response.css('Results').map{|f| {f.css('CustomerKey').to_a.map(&:text).join('/') => f.css('ID')[0].text}}
end

#send_email_to_list(email_id, list_id, account = nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/cupid/methods/email.rb', line 57

def send_email_to_list(email_id, list_id, =nil)
   ||= @account
  soap_body = '<Objects xsi:type="Send">' +
                create_send_object(email_id, list_id, ) +
              '</Objects>'

  response = build_request('Create', 'CreateRequest', soap_body)
  response = Nokogiri::XML(response.http.body).remove_namespaces!
  created_send_id = response.css('NewID').text
end