nogates/vigia

View on GitHub
lib/vigia/url.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'uri'
require 'addressable/template'
require 'addressable/uri'


module Vigia
  class Url
    class << self
      def template_defines_url?(template, url)
        url_object      = Addressable::URI.parse(url)
        template_object = Addressable::Template.new(template)
        url_parameters  = template_object.extract(url_object) || {}
        # recreate url and see if matches
        template_object.expand(url_parameters) == url_object
      end
    end

    attr_reader :uri_template

    def initialize(template)
      @uri_template = Addressable::Template.new(template)
    end

    def expand(parameters)
      absolute_url uri_template.expand(valid_parameters(parameters).to_hash)
    end

    def absolute_url path
      URI.join(host, path).to_s
    end

    def host
      Vigia.config.host
    end

    private

    def valid_parameters(parameters)
      Vigia::Parameters.new(parameters)
    end
  end
end