Sha256: 55fd0542f84286b6c5dd210b47ac1f368f58b20492cf376e84241ecd26159520

Contents?: true

Size: 1.29 KB

Versions: 7

Compression:

Stored size: 1.29 KB

Contents

module JsonApiClient
  class ErrorCollector < Array
    class Error
      delegate :[], to: :attrs

      def initialize(attrs = {})
        @attrs = (attrs || {}).with_indifferent_access
      end

      def id
        attrs[:id]
      end

      def about
        attrs.fetch(:links, {})[:about]
      end

      def status
        attrs[:status]
      end

      def code
        attrs[:code]
      end

      def title
        attrs[:title]
      end

      def detail
        attrs[:detail]
      end

      def source_parameter
        source.fetch(:parameter) do
          source[:pointer] ?
            source[:pointer].split("/").last :
            nil
        end
      end

      def source_pointer
        source.fetch(:pointer) do
          source[:parameter] ?
            "/data/attributes/#{source[:parameter]}" :
            nil
        end
      end

      def source
        attrs.fetch(:source, {})
      end

      def meta
        MetaData.new(attrs.fetch(:meta, {}))
      end

      protected

      attr_reader :attrs
    end

    def initialize(error_data)
      super(error_data.map do |data|
        Error.new(data)
      end)
    end

    def full_messages
      map(&:title)
    end

    def [](source)
      map do |error|
        error.source_parameter == source
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
json_api_client-1.0.0 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta7 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta6 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta5 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta4 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta3 lib/json_api_client/error_collector.rb
json_api_client-1.0.0.beta2 lib/json_api_client/error_collector.rb