class Maileon::API

Attributes

apikey[RW]
debug[RW]
host[RW]
path[RW]
session[RW]

Public Class Methods

new(apikey=nil, debug=false) click to toggle source
# File lib/maileon/api.rb, line 6
def initialize(apikey=nil, debug=false)
  @host = 'https://api.maileon.com'
  @path = '/1.0/'

  unless apikey
    apikey = ENV['MAILEON_APIKEY']
  end

  raise 'You must provide Maileon API key' unless apikey

  @apikey = Base64.encode64(apikey).strip
  @debug = debug
  @session = Excon.new @host, :debug => debug
end

Public Instance Methods

create_contact(params, body={}) click to toggle source
# File lib/maileon/api.rb, line 25
def create_contact(params, body={})
  raise ArgumentError.new("No parameters.") if params.empty?
  raise ArgumentError.new("Email is mandatory.") if params[:email].nil?
  raise Maileon::Errors::ValidationError.new("Invalid email format.") unless is_valid_email(params[:email])
  email = URI::escape(params[:email])
  permission = params[:permission] ||= 1
  sync_mode = params[:sync_mode] ||= 2
  src = params[:src]
  subscription_page = params[:subscription_page]
  doi = params[:doi] ||= true
  doiplus = params[:doiplus] ||= true
  doimailing = params[:doimailing]
  url = "contacts/#{email}?permission=#{permission}&sync_mode=#{sync_mode}&doi=#{doi}&doiplus=#{doiplus}"
  url << "&doimailing=#{doimailing}" unless doimailing.nil?
  url << "&src=#{src}" unless src.nil?
  url << "&subscription_page=#{subscription_page}" unless subscription_page.nil?
  @session.post(:path => "#{@path}#{url}", :headers => get_headers, :body => body.to_json)
end
delete_contact(params) click to toggle source
# File lib/maileon/api.rb, line 44
def delete_contact(params)
  raise ArgumentError.new("No parameters.") if params.empty?
  raise ArgumentError.new("Email is mandatory.") if params[:email].nil?
  raise Maileon::Errors::ValidationError.new("Invalid email format.") unless is_valid_email(params[:email])
  email = URI::escape(params[:email])
  url = "contacts/#{email}"
  @session.delete(:path => "#{@path}#{url}", :headers => get_headers('xml'))
end
ping() click to toggle source
# File lib/maileon/api.rb, line 21
def ping
  @session.get(:path => "#{@path}/ping", :headers => get_headers)
end

Private Instance Methods

get_headers(type='json') click to toggle source
# File lib/maileon/api.rb, line 55
def get_headers(type='json')
  {
    "Content-Type" => "application/vnd.maileon.api+#{type}; charset=utf-8",
    "Authorization" => "Basic #{@apikey}"
  }
end
is_valid_email(email) click to toggle source
# File lib/maileon/api.rb, line 62
def is_valid_email(email)
  !/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/.match(email).nil?
end