Sha256: d66de7b5b38f01f716d6bb3d1fa3a82c47b1a1a35140a4626801bbf9b309ce7f

Contents?: true

Size: 1.26 KB

Versions: 14

Compression:

Stored size: 1.26 KB

Contents

module Schemacop
  class Result
    attr_reader :current_path
    attr_reader :errors

    def initialize(root = nil, original_data = nil)
      @current_path = []
      @errors = {}
      @root = root
      @original_data = original_data
    end

    def valid?
      errors.empty?
    end

    def data
      if errors.any?
        return nil
      else
        return @data ||= @root.cast(@original_data)
      end
    end

    def error(message)
      @errors[current_path] ||= []
      @errors[current_path] << message
    end

    def messages_by_path
      @errors.transform_keys { |k| "/#{k.join('/')}" }
    end

    def exception_message
      messages.join("\n")
    end

    def messages(pad: 0, itemize: false)
      messages = []

      item_str = itemize ? '- ' : nil

      @errors.each do |path, path_messages|
        messages += path_messages.map do |path_message|
          pad_lines("#{item_str}/#{path.join('/')}: #{path_message}", pad)
        end
      end

      return messages
    end

    def pad_lines(string, pad = 2)
      string.split("\n").map { |line| "#{' ' * pad}#{line}" }.join("\n")
    end

    def in_path(segment)
      prev_path = @current_path
      @current_path += [segment]
      yield
    ensure
      @current_path = prev_path
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
schemacop-3.0.33 lib/schemacop/v3/result.rb
schemacop-3.0.32 lib/schemacop/v3/result.rb
schemacop-3.0.31 lib/schemacop/v3/result.rb
schemacop-3.0.30 lib/schemacop/v3/result.rb
schemacop-3.0.29 lib/schemacop/v3/result.rb
schemacop-3.0.28 lib/schemacop/v3/result.rb
schemacop-3.0.27 lib/schemacop/v3/result.rb
schemacop-3.0.26 lib/schemacop/v3/result.rb
schemacop-3.0.25 lib/schemacop/v3/result.rb
schemacop-3.0.24 lib/schemacop/v3/result.rb
schemacop-3.0.23 lib/schemacop/v3/result.rb
schemacop-3.0.22 lib/schemacop/v3/result.rb
schemacop-3.0.21 lib/schemacop/v3/result.rb
schemacop-3.0.20 lib/schemacop/v3/result.rb