Sha256: a78a85068ebe76cf9ae334f02196870d509ca31b85057155b3052eaac0d4f649

Contents?: true

Size: 918 Bytes

Versions: 4

Compression:

Stored size: 918 Bytes

Contents

require 'delegate'
require 'active_support/core_ext/object/blank'

require 'frenetic/hypermedia_link'

class Frenetic
  class HypermediaLinkSet < Delegator
    def initialize(link_set = [])
      link_set = [link_set] unless link_set.is_a? Array

      @link_set = link_set.map do |link|
        if link.is_a? HypermediaLink
          link
        else
          HypermediaLink.new link
        end
      end
    end

    def href(tmpl_vars = {})
      return @link_set.first.href if tmpl_vars.blank?
      link = find_relevant_link(tmpl_vars)
      link && link.href(tmpl_vars)
    end

    def [](relation)
      @link_set.find { |link| link.rel == relation.to_s }
    end

    def find_relevant_link(tmpl_vars)
      @link_set.find do |link|
        link.expandable?(tmpl_vars)
      end || fail(Frenetic::MissingRelevantLink.new(tmpl_vars, @link_set))
    end

    def __getobj__
      @link_set
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
frenetic-3.0.1 lib/frenetic/hypermedia_link_set.rb
frenetic-3.0.0 lib/frenetic/hypermedia_link_set.rb
frenetic-2.0.0 lib/frenetic/hypermedia_link_set.rb
frenetic-1.0.0 lib/frenetic/hypermedia_link_set.rb