Sha256: 82b7691a79a5805b08bbae3cc8be9de75115ce1470ca1ae3791d770033ac3b2a

Contents?: true

Size: 1013 Bytes

Versions: 2

Compression:

Stored size: 1013 Bytes

Contents

require 'active_support/concern'

require 'frenetic/hypermedia_link_set'

class Frenetic
  module HalLinked
    extend ActiveSupport::Concern

    def links
      @raw_attributes.fetch('_links', {})
    end

    def member_url(params = {})
      resource = @resource_type || self.class.to_s.demodulize.underscore
      return self.class.member_url(params) if links.empty?
      link = links[resource] || links['self']
      fail MissingResourceUrl.new(resource) if !link
      HypermediaLinkSet.new(link).href params
    end

    module ClassMethods
      def links
        api.description['_links']
      end

      def member_url(params = {})
        link = links[namespace]
        fail MissingResourceUrl.new(namespace) if !link
        HypermediaLinkSet.new(link).href(params)
      end

      def collection_url(*params)
        link = links[namespace.pluralize]
        fail MissingResourceUrl.new(namespace.pluralize) if !link
        HypermediaLinkSet.new(link).href(*params)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
frenetic-3.0.1 lib/frenetic/concerns/hal_linked.rb
frenetic-3.0.0 lib/frenetic/concerns/hal_linked.rb