Sha256: 9f9bbf434cb10328a4315932f160cf488a56ec25e465a43112b807b8fdd9d379

Contents?: true

Size: 1.3 KB

Versions: 10

Compression:

Stored size: 1.3 KB

Contents

module RestPack
  class Response
    attr_accessor :result, :errors, :status

    def initialize
      @result = {}
      @errors = {}
    end

    def success?
      @errors.empty? and @status == :ok
    end

    def code
      Status.from_status(status)
    end

    def add_error(field, message)
      @errors[field] ||= []
      @errors[field] << message
    end

    def self.from_rest(rest_response)
      response = new
      response.status = Status.from_code(rest_response.code)
      response.result = Yajl::Parser.parse(rest_response.body, :symbolize_keys => true)

      if response.result[:errors]
        response.result[:errors].each do |field, errors|
          response.errors[field.to_sym] = errors
        end

        response.result.delete :errors
      end

      response
    end

    class Status
      @@map = {
        200 => :ok,
        404 => :not_found,
        422 => :unprocessable_entity,
        500 => :internal_service_error
      }

      def self.from_code(code)
        if @@map.has_key?(code)
          @@map[code]
        else
          raise "Invalid Status Code: #{code}"
        end
      end

      def self.from_status(status)
        if @@map.has_value?(status)
          @@map.key(status)
        else
          raise "Invalid Status: #{status}"
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
restpack_service-0.0.24 lib/restpack_service/response.rb
restpack_service-0.0.21 lib/restpack_service/response.rb
restpack_service-0.0.20 lib/restpack_service/response.rb
restpack_service-0.0.19 lib/restpack_service/response.rb
restpack_service-0.0.18 lib/restpack_service/response.rb
restpack_service-0.0.17 lib/restpack_service/response.rb
restpack_service-0.0.16 lib/restpack_service/response.rb
restpack_service-0.0.8 lib/restpack_service/response.rb
restpack_service-0.0.7 lib/restpack_service/response.rb
restpack_service-0.0.5 lib/restpack_service/response.rb