Sha256: 6bd3c18197938238e8a0525d481c2a601e68d50881e1b61fe47a906a0bafbb96

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

require 'pact/consumer_contract'
require 'pact/reification'
require 'redcarpet'
require 'pact/doc/markdown/consumer_contract_renderer'
require 'pact_broker/api/pact_broker_urls'

module PactBroker
  module Api
    module Renderers
      class HtmlPactRenderer

        def self.call pact
          new(pact).call
        end

        def initialize pact
          @json_content = pact.json_content
          @pact = pact
        end

        def call
          "<html><head>#{head}</head><body>#{pact_metadata}#{html}</body></html>"
        end

        private

        def head
          '<link rel="stylesheet" type="text/css" href="/stylesheets/github.css">' + "\n" +
          '<link rel="stylesheet" type="text/css" href="/stylesheets/pact.css">'
        end

        def pact_metadata
          "<div class='pact-metadata'>
            <ul>
              <li>
                <span class='name'>#{@pact.consumer.name} version:</span>
                <span class='value'>#{@pact.consumer_version_number}</span>
              </li>
              <li>
                <span class='name'>Date published:</span>
                <span class='value'>#{@pact.updated_at.to_time.localtime.to_datetime.strftime("%d/%m/%Y %l:%M%p %:z")}</span>
              </li>
              <li>
                <a href=\"#{json_url}\">View in HAL Browser</a>
              </li>
            </ul>
          </div>"
        end

        def json_url
          PactBroker::Api::PactBrokerUrls.hal_browser_url pact_url
        end

        def pact_url
          PactBroker::Api::PactBrokerUrls.pact_url '', @pact
        end

        def markdown
          Pact::Doc::Markdown::ConsumerContractRenderer.call consumer_contract
        end

        def html
          Redcarpet::Markdown.new(Redcarpet::Render::HTML, :fenced_code_blocks => true, :lax_spacing => true).render(markdown)
        end

        def consumer_contract
          Pact::ConsumerContract.from_json(@json_content)
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pact_broker-1.2.0 lib/pact_broker/api/renderers/html_pact_renderer.rb