Sha256: dc4c327e59618b561f2bf1eb8127d3d2dfc589e592aaf189078c68e3c612234f

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

module ResourceSet
  class Action
    attr_reader :name

    def initialize(name, verb = nil, path = nil)
      @name = name
      @verb = (verb && verb.downcase.to_sym) || :get
      @path = path
      @query_keys = []
    end

    def verb(v = nil)
      @verb = v if v
      @verb
    end

    def path(path = nil, &block)
      raise "You must pass either a block or a string for paths" if path and block_given?
      @path = path if path
      @path = block if block_given?
      @path
    end

    def query_keys(*keys)
      return @query_keys if keys.empty?
      @query_keys += keys
    end

    def handlers
      @handlers ||= {}
    end

    def handler(*response_codes, &block)
      if response_codes.empty?
        handlers[:any] = block
      else
        response_codes.each do |code|
          code = StatusCodeMapper.code_for(code) unless code.is_a?(Integer)
          handlers[code] = block
        end
      end
    end

    def body(&block)
      @body_handler = block if block_given?
      @body_handler
    end

    def hooks
      @hooks ||= {}
    end

    def before_request(method_name = nil, &block)
      hooks[:before] ||= []

      if block_given?
        hooks[:before] << block
      else
        raise "Must include a method name" unless method_name
        hooks[:before] << method_name
      end

      nil
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
resource_set-1.0.0 lib/resource_set/action.rb