class Rooftop::ResourceLinks::Link

Attributes

Public Class Methods

new(link_type,args, klass=nil) click to toggle source
Calls superclass method
# File lib/rooftop/resource_links/link.rb, line 6
def initialize(link_type,args, klass=nil)
  @link_type = link_type
  @mapped_class = klass.try(:resource_link_mapping).try(:[],@link_type)
  @klass = klass

  super(args)
end

Public Instance Methods

marshal_dump() click to toggle source
# File lib/rooftop/resource_links/link.rb, line 14
def marshal_dump
  [@link_type, @table, @klass]
end
marshal_load(array) click to toggle source
# File lib/rooftop/resource_links/link.rb, line 18
def marshal_load(array)
  @link_type = array[0]
  @table = array[1]
  @klass = array[2]
end
resolve(klass=nil) click to toggle source
# File lib/rooftop/resource_links/link.rb, line 24
def resolve(klass=nil)
  # We need to figure out what we're going to instantiate. If it's in the resource link mapping, use that. If not, try the klass passed into the resolve() method. Failing that, make an attempt to constantize something; otherwise we're going to have to raise
  @mapped_class ||= klass || @link_type.camelize.classify.constantize
  if @mapped_class
    # If this link has an ID, we can call find() on the class
    if respond_to?(:id)
      return @mapped_class.send(:find, id)
    else
      # TODO this is a fudge to get around some hrefs which don't have /wp/v2 in them
      unless href =~ /wp\/v2/
        href.gsub!('wp-json','wp-json/wp/v2')
      end
      # otherwise we're going to have make a call to the link's href.
      result = @mapped_class.get(href)
      result.run_callbacks(:find)
      return result
    end
  else
    raise Rooftop::ResourceLinks::UnresolvableLinkError, "Couldn't resolve a link of type #{@link_type}. Try passing the class you want to resolve to."
  end

end