Sha256: 9238682c373e7fdd6c41a02be376e65b31eb4d6c1156c810dc5edd0317fff056

Contents?: true

Size: 1.3 KB

Versions: 10

Compression:

Stored size: 1.3 KB

Contents

module GovDelivery::TMS::Util
  module HalLinkParser
    def parse_links(links)
      @resources = {}
      return if links.nil?
      parse_link(links) && return if links.is_a?(Hash)
      links.each { |link| parse_link(link) }
    end

    def subresources
      @resources
    end

    protected

    def metaclass
      @metaclass ||= class << self
        self
      end
    end

    def parse_link(link)
      link.each do |rel, href|
        if rel == 'self'
          self.href = href
        else
          klass = relation_class(rel)
          klass = self.class if %w(first prev next last).include?(rel)
          if klass
            subresources[rel] = klass.new(client, href)
            setup_subresource(link)
          else
            logger.info("Don't know what to do with link rel '#{rel}' for class #{self.class}!") if self.respond_to?(:logger) && logger
          end

        end
      end
    end

    def relation_class(rel)
      ::GovDelivery::TMS.const_get(classify(rel)).tap do |klass|
        return nil unless klass.name =~ /GovDelivery::TMS/
      end
    rescue NameError
      nil
    end

    def setup_subresource(link)
      return unless link
      link.each { |rel, _href| metaclass.send(:define_method, rel.to_sym, &lambda { subresources[rel] }) unless rel == 'self' }
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
govdelivery-tms-0.10.0 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.9.4 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.9.3 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.9.2 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.9.0 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.8.14 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.8.13 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.8.12 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.8.11 lib/govdelivery/tms/util/hal_link_parser.rb
govdelivery-tms-0.8.10 lib/govdelivery/tms/util/hal_link_parser.rb