mikamai/akamai_api

View on GitHub
lib/akamai_api/eccu_request.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "savon"
require "active_support"
require "active_support/core_ext/array"
require "active_support/core_ext/object/blank"

require "akamai_api/eccu/soap_body"
require "akamai_api/eccu/update_attribute_request"
require "akamai_api/eccu/destroy_request"
require "akamai_api/eccu/find_request"
require "akamai_api/eccu/publish_request"
require "akamai_api/eccu/list_request"

module AkamaiApi
  class ECCURequest
    attr_accessor :file, :status, :code, :notes, :property, :email, :upload_date, :uploaded_by, :version

    def initialize attributes = {}
      attributes.each do |key, value|
        send "#{key}=", value
      end
    end

    {
      notes: :notes,
      email: :status_change_email
    }.each do |name, attribute|
      define_method "update_#{name}!" do |value|
        successful = AkamaiApi::ECCU::UpdateAttributeRequest.new(code, attribute).execute(value)
        send "#{name}=", value if successful
        successful
      end
    end

    def destroy
      AkamaiApi::ECCU::DestroyRequest.new(code).execute
    end

    class << self
      def all_ids
        AkamaiApi::ECCU::ListRequest.new.execute
      end

      def all args = {}
        all_ids.map { |v| ECCURequest.find v, args }
      end

      def last args = {}
        find all_ids.last, args
      end

      def first args = {}
        find all_ids.first, args
      end

      def find code, args = {}
        response = AkamaiApi::ECCU::FindRequest.new(code).execute args.fetch(:verbose, true)
        new :file        => response.file,
            :status      => response.status,
            :code        => response.code,
            :notes       => response.notes,
            :property    => response.property,
            :email       => response.email,
            :upload_date => response.uploaded_at,
            :uploaded_by => response.uploaded_by,
            :version     => response.version
      end

      def publish_file property, file_name, args = {}
        args[:file_name] = file_name
        publish property, File.read(file_name), args
      end

      def publish property, content, args = {}
        args = args.dup
        AkamaiApi::ECCU::PublishRequest.new(property, extract_property_arguments(args)).execute content, args
      end

      private

      def extract_property_arguments args
        { type: args.delete(:property_type), exact_match: args.delete(:property_exact_match) }.reject { |k, v| v.nil? }
      end
    end
  end
end