withassociates/slices

View on GitHub
lib/tasks/validate.rake

Summary

Maintainability
Test Coverage
require 'open-uri'

module Slices
  module Tasks

    class PageHtml
      attr_accessor :body

      def initialize(host, path)
        document = open('http://' + host + path)
        self.body = document.present? ? document.read : nil
        self.body.gsub!(/\?[0-9]{10}/, '') # remove cache busting
      rescue OpenURI::HTTPError
      end

      def ==(other)
        body == other.body
      end

      def temp_path
        write_to_tempfile unless @tempfile
        @tempfile.path
      end

      private

      def write_to_tempfile
        @tempfile = Tempfile.new('html').tap do |file|
          file << body
          file.flush
        end
      end

    end

    def self.validate(local, remote)
      hosts = [local, remote]
      Page.all.each do |page|
        puts page.path
        a, b = hosts.map do |host|
          PageHtml.new(host, page.path)
        end
        if a != b
          puts `diff #{a.temp_path} #{b.temp_path}`
          puts ''
        end
      end

    end
  end
end

namespace :slices do

  desc "Validate localhost is the same is live"
  task valdiate: :environment do
    remote = ENV['HOST']
    local = ENV.include?('LOCAL') ? ENV['LOCAL'] : 'localhost:3000'
    Slices::Tasks.validate(remote, local)
  end
end