lib/createsend.rb in createsend-2.5.1 vs lib/createsend.rb in createsend-3.0.0

- old
+ new

@@ -1,168 +1,13 @@ -require 'cgi' -require 'uri' -require 'httparty' -require 'hashie' - libdir = File.dirname(__FILE__) $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) require 'createsend/version' +require 'createsend/createsend' require 'createsend/client' require 'createsend/campaign' require 'createsend/list' require 'createsend/segment' require 'createsend/subscriber' require 'createsend/template' require 'createsend/person' require 'createsend/administrator' - -module CreateSend - - # Just allows callers to do CreateSend.api_key "..." rather than - # CreateSend::CreateSend.api_key "..." etc - class << self - def api_key(api_key=nil) - r = CreateSend.api_key api_key - end - - def base_uri(uri) - r = CreateSend.base_uri uri - end - end - - # Represents a CreateSend API error. Contains specific data about the error. - class CreateSendError < StandardError - attr_reader :data - def initialize(data) - @data = data - # @data should contain Code, Message and optionally ResultData - extra = @data.ResultData ? "\nExtra result data: #{@data.ResultData}" : "" - super "The CreateSend API responded with the following error"\ - " - #{@data.Code}: #{@data.Message}#{extra}" - end - end - - # Raised for HTTP response codes of 400...500 - class ClientError < StandardError; end - # Raised for HTTP response codes of 500...600 - class ServerError < StandardError; end - # Raised for HTTP response code of 400 - class BadRequest < CreateSendError; end - # Raised for HTTP response code of 401 - class Unauthorized < CreateSendError; end - # Raised for HTTP response code of 404 - class NotFound < ClientError; end - - # Provides high level CreateSend functionality/data you'll probably need. - class CreateSend - include HTTParty - - # Deals with an unfortunate situation where responses aren't valid json. - class Parser::DealWithCreateSendInvalidJson < HTTParty::Parser - # The createsend API returns an ID as a string when a 201 Created - # response is returned. Unfortunately this is invalid json. - def parse - begin - super - rescue MultiJson::DecodeError => e - body[1..-2] # Strip surrounding quotes and return as is. - end - end - end - parser Parser::DealWithCreateSendInvalidJson - @@base_uri = "https://api.createsend.com/api/v3" - @@api_key = "" - headers({ - 'User-Agent' => "createsend-ruby-#{VERSION}", - 'Content-Type' => 'application/json; charset=utf-8', - 'Accept-Encoding' => 'gzip, deflate' }) - base_uri @@base_uri - basic_auth @@api_key, 'x' - - # Sets the API key which will be used to make calls to the CreateSend API. - def self.api_key(api_key=nil) - return @@api_key unless api_key - @@api_key = api_key - basic_auth @@api_key, 'x' - end - - # Gets your CreateSend API key, given your site url, username and password. - def apikey(site_url, username, password) - site_url = CGI.escape(site_url) - self.class.basic_auth username, password - response = CreateSend.get("/apikey.json?SiteUrl=#{site_url}") - # Revert basic_auth to use @@api_key, 'x' - self.class.basic_auth @@api_key, 'x' - Hashie::Mash.new(response) - end - - # Gets your clients. - def clients - response = CreateSend.get('/clients.json') - response.map{|item| Hashie::Mash.new(item)} - end - - # Get your billing details. - def billing_details - response = CreateSend.get('/billingdetails.json') - Hashie::Mash.new(response) - end - - # Gets valid countries. - def countries - response = CreateSend.get('/countries.json') - response.parsed_response - end - - # Gets the current date in your account's timezone. - def systemdate - response = CreateSend.get('/systemdate.json') - Hashie::Mash.new(response) - end - - # Gets valid timezones. - def timezones - response = CreateSend.get('/timezones.json') - response.parsed_response - end - - # Gets the administrators - def administrators - response = CreateSend.get('/admins.json') - response.map{|item| Hashie::Mash.new(item)} - end - - def get_primary_contact - response = CreateSend.get('/primarycontact.json') - Hashie::Mash.new(response) - end - - def set_primary_contact(email) - options = { :query => { :email => email } } - response = CreateSend.put("/primarycontact.json", options) - Hashie::Mash.new(response) - end - - def self.get(*args); handle_response super end - def self.post(*args); handle_response super end - def self.put(*args); handle_response super end - def self.delete(*args); handle_response super end - - def self.handle_response(response) # :nodoc: - case response.code - when 400 - raise BadRequest.new(Hashie::Mash.new response) - when 401 - raise Unauthorized.new(Hashie::Mash.new response) - when 404 - raise NotFound.new - when 400...500 - raise ClientError.new - when 500...600 - raise ServerError.new - else - response - end - end - end -end \ No newline at end of file