Sha256: f324e0bfa632ae353d0eb0198b383e4aa79dd535778244c16801713f8d52f176

Contents?: true

Size: 966 Bytes

Versions: 4

Compression:

Stored size: 966 Bytes

Contents

module Screenbeacon
  class APIResource < ScreenbeaconObject
    include Screenbeacon::APIOperations::Request

    def self.class_name
      self.name.split('::')[-1]
    end

    def self.url
      if self == APIResource
        raise NotImplementedError.new('APIResource is an abstract class.  You should perform actions on its subclasses (Project, Test, etc.)')
      end
      "/#{CGI.escape(class_name.downcase)}s"
    end

    def url
      unless id = self['id']
        raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", 'id')
      end
      "#{self.class.url}/#{CGI.escape(id.to_s)}"
    end

    def refresh
      response, opts = request(:get, url, @retrieve_params)
      refresh_from(response, opts)
    end

    def self.retrieve(id, opts={})
      opts = Util.normalize_opts(opts)
      instance = self.new(id, opts)
      instance.refresh
      instance
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
screenbeacon-1.0.2 lib/screenbeacon/api_resource.rb
screenbeacon-1.0.1 lib/screenbeacon/api_resource.rb
screenbeacon-1.0.0 lib/screenbeacon/api_resource.rb
screenbeacon-0.1.0 lib/screenbeacon/api_resource.rb