Sha256: 649c567001957063d7cb51da7b5bf37fc002582c5394ea88b01767538b901071

Contents?: true

Size: 1.94 KB

Versions: 4

Compression:

Stored size: 1.94 KB

Contents

module Gibbon
  class Export < APICategory
    
    def initialize(api_key = nil, default_params = {})
      @api_key = api_key
      @default_params = default_params

      set_instance_defaults
    end

    protected

    def export_api_url
      "http://#{get_data_center_from_api_key}api.mailchimp.com/export/1.0/"
    end

    def call(method, params = {})
      api_url = export_api_url + method + "/"
      params = @default_params.merge(params).merge({apikey: @api_key})
      response = self.class.post(api_url, body: MultiJson.dump(params), timeout: @timeout)

      lines = response.body.lines
      if @throws_exceptions
        first_line = MultiJson.load(lines.first) if lines.first
    
        if should_raise_for_response?(first_line)
          error = MailChimpError.new("MailChimp Export API Error: #{first_line["error"]} (code #{first_line["code"]})")
          error.code = first_line["code"]
          raise error
        end
      end

      lines
    end
        
    def set_instance_defaults
      super
      @api_key = self.class.api_key if @api_key.nil?
      @timeout = self.class.timeout if @timeout.nil?
    end

    def method_missing(method, *args)
      # To support underscores, we camelize the method name

      # Thanks for the camelize gsub, Rails
      method = method.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }

      # We need to downcase the first letter of every API method
      # and MailChimp has a few of API methods that end in "AIM," which
      # must be upcased (See "Campaign Report Data Methods" in their API docs).
      method = method[0].chr.downcase + method[1..-1].gsub(/aim$/i, 'AIM')

      call(method, *args)
    end

    class << self
      attr_accessor :api_key, :timeout, :throws_exceptions

      def method_missing(sym, *args, &block)
        new(self.api_key, {timeout: self.timeout, throws_exceptions: self.throws_exceptions}).send(sym, *args, &block)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gibbon-1.0.3 lib/gibbon/export.rb
gibbon-1.0.2 lib/gibbon/export.rb
gibbon-1.0.0 lib/gibbon/export.rb
gibbon-0.5.0 lib/gibbon/export.rb