Sha256: 6468061d6d0236bb2f66bda2a26e7a27cb0cf27713ce30a48b3a93e6a45f30f9

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

module ZendeskAPI
  # Creates put, post, delete class methods for custom resource methods.
  module Verbs
    include Rescue

    class << self
      private

      # @macro [attach] container.create_verb 
      #   @method $1(method)
      #   Executes a $1 using the passed in method as a path.
      #   Reloads the resource's attributes if any are in the response body.
      #
      #   Created method takes an optional options hash. Valid options to be passed in to the created method: reload (for caching, default: false)
      def create_verb(verb)
        define_method verb do |method|
          define_method method do |*method_args|
            opts = method_args.last.is_a?(Hash) ? method_args.pop : {}
            return instance_variable_get("@#{method}") if instance_variable_defined?("@#{verb}") && !opts[:reload]

            response = @client.connection.send(verb, "#{path}/#{method}") do |req|
              req.body = opts
            end

            if (resources = response.body[self.class.resource_name]) &&
              (res = resources.find {|res| res["id"] == id})
              @attributes = ZendeskAPI::Trackie.new(res)
              @attributes.clear_changes
            end

            true
          end

          rescue_client_error method, :with => false
        end
      end
    end

    create_verb :put
    create_verb :post
    create_verb :delete
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
zendesk_api-0.1.2 lib/zendesk_api/verbs.rb
zendesk_api-0.1.1 lib/zendesk_api/verbs.rb
zendesk_api-0.0.9 lib/zendesk_api/verbs.rb