class Freshmail::Client

Constants

URL

Attributes

api_key[RW]
api_secret[RW]

Public Class Methods

new(api_key, api_secret) click to toggle source
# File lib/freshmail/client.rb, line 7
def initialize(api_key, api_secret)
  @api_key = api_key || self.class.api_key || ENV['FRESHMAIL_API_KEY']
  @api_key = @api_key.strip if @api_key
  @api_secret = api_secret || self.class.api_secret || ENV['FRESHMAIL_API_secret']
  @api_secret = @api_secret.strip if @api_secret

  raise Freshmail::CredentialsMissingError, 'api_key or api_secret are missing' unless @api_secret or @api_key
  raise Freshmail::CredentialsInvalidError, 'api_key or api_secret are invalid' unless self.ping['data'] == 'pong'
end

Public Instance Methods

add_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 36
def add_subscriber(sub_info = {})
  call_freshmail(:post, 'subscriber/add', sub_info)
end
batch_add_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 44
def batch_add_subscriber(sub_info = {})
  call_freshmail(:post, 'subscriber/addMultiple', sub_info)
end
batch_delete_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 56
def batch_delete_subscriber(sub_info = {})
  call_freshmail(:post, 'subscriber/deleteMultiple', sub_info)
end
batch_edit_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 48
def batch_edit_subscriber(sub_info = {})
   call_freshmail(:post, 'subscriber/editMultiple', sub_info)
end
create_list(list_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 64
def create_list(list_info = {})
  call_freshmail(:post, 'subscribers_list/create', list_info)
end
delete_list(list_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 72
def delete_list(list_info = {})
  call_freshmail(:post, 'subscribers_list/delete', list_info)
end
delete_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 52
def delete_subscriber(sub_info = {})
  call_freshmail(:post, 'subscriber/delete', sub_info)
end
edit_subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 40
def edit_subscriber(sub_info = {})
  call_freshmail(:post, 'subscriber/edit', sub_info)
end
lists() click to toggle source
# File lib/freshmail/client.rb, line 60
def lists
  call_freshmail(:get, 'subscribers_list/lists')
end
mail(mail_data = {}) click to toggle source
# File lib/freshmail/client.rb, line 21
def mail(mail_data = {})
  call_freshmail(:post, 'mail', mail_data)
end
ping() click to toggle source
# File lib/freshmail/client.rb, line 17
def ping
  call_freshmail(:get, 'ping')
end
subscriber(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 25
def subscriber(sub_info = {})
  list = sub_info[:list]
  email = sub_info[:email]

  call_freshmail(:get, "subscriber/get/#{list}/#{email}")
end
subscribers(sub_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 32
def subscribers(sub_info = {})
  call_freshmail(:post, 'subscriber/getMultiple', sub_info)
end
update_list(list_info = {}) click to toggle source
# File lib/freshmail/client.rb, line 68
def update_list(list_info = {})
  call_freshmail(:post, 'subscribers_list/update', list_info)
end

Protected Instance Methods

api_sign(get_data, json_data) click to toggle source
# File lib/freshmail/client.rb, line 98
def api_sign(get_data, json_data)
  Digest::SHA1.hexdigest [
    self.api_key,
    get_data,
    json_data,
    self.api_secret
  ].join
end
call_freshmail(call_type, get_data, json_data = nil) click to toggle source
# File lib/freshmail/client.rb, line 77
def call_freshmail(call_type, get_data, json_data = nil)
  json_data_converted = json_data ? json_data.to_json : ''
  endpoint = "/rest/#{get_data}"

  conn = Faraday.new(:url => URL) do |faraday|
    faraday.request  :url_encoded
    # faraday.response :logger
    faraday.adapter  Faraday.default_adapter
  end

  response = conn.send(call_type) do |req|
    req.url endpoint
    req.headers['Content-Type'] = 'application/json'
    req.headers['X-Rest-ApiKey'] = self.api_key
    req.headers['X-Rest-ApiSign'] = api_sign(endpoint, json_data_converted)
    req.body = json_data_converted if req.method == :post
  end

  JSON.parse(response.body)
end