Sha256: d052e8c6b18c3a84e509c905928e0f59e1a88c86b2b0900354d22dda50f58dc4

Contents?: true

Size: 1.81 KB

Versions: 1

Compression:

Stored size: 1.81 KB

Contents

require 'multi_json'
require 'fitting/documentation/request/route'

module Fitting
  module Documentation
    module Response
      class Route
        def initialize(coverage_responses, responses_routes)
          @coverage_responses = coverage_responses
          @responses_routes = responses_routes
        end

        def coverage
          @coverage ||= @responses_routes - (@responses_routes - full_coverage)
        end

        def not_coverage
          @not_coverage ||= @responses_routes - coverage
        end

        def cover_ratio
          @cover_ratio ||= (coverage.size.to_f / @responses_routes.size.to_f * 100.0).round(2)
        end

        def to_hash
          {
            'coverage' => coverage,
            'not coverage' => not_coverage
          }
        end

        def statistics_with_conformity_lists
          @request_routes ||= Fitting::Documentation::Request::Route.new(self)
          @request_routes.conformity_lists
          statistics
        end

        def statistics
          @request_routes ||= Fitting::Documentation::Request::Route.new(self)
          @request_routes.statistics

          valid_count = coverage.size
          valid_percentage = cover_ratio
          total_count = @responses_routes.size
          invalid_count = not_coverage.size
          invalid_percentage = 100.0 - cover_ratio
          puts "API responses conforming to the blueprint: #{valid_count} (#{valid_percentage}% of #{total_count})."
          puts "API responses with validation errors or untested: #{invalid_count} (#{invalid_percentage}% of #{total_count})."
          puts
        end

        private

        def full_coverage
          @coverage_responses.map do |response|
            response.route if response.documented? && response.valid?
          end.compact.uniq
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fitting-1.4.0 lib/fitting/documentation/response/route.rb