class PuppetForge::V3::Base

Acts as the base class for all PuppetForge::V3::* models.

@api private

Constants

API_VERSION

Public Class Methods

all(params = {}) click to toggle source

Return a paginated collection of all modules

# File lib/puppet_forge/v3/base.rb, line 105
def all(params = {})
  where(params)
end
all_stateless(params = {}, conn_opts = {}) click to toggle source

Return a paginated collection of all modules

# File lib/puppet_forge/v3/base.rb, line 110
def all_stateless(params = {}, conn_opts = {})
  where_stateless(params, conn_opts)
end
api_version() click to toggle source
# File lib/puppet_forge/v3/base.rb, line 52
def api_version
  API_VERSION
end
convert_plus_to_space(str) click to toggle source

Faraday's Util#escape method will replace a '+' with '%2B' to prevent it being interpreted as a space. For compatibility with the Forge API, we would like a '+' to be interpreted as a space so they are changed to spaces here.

# File lib/puppet_forge/v3/base.rb, line 133
def convert_plus_to_space(str)
  str.gsub(/[+]/, ' ')
end
find(slug) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 81
def find(slug)
  find_request(slug)
end
find_request(slug, reset_connection = false, conn_opts = {}) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 73
def find_request(slug, reset_connection = false, conn_opts = {})
  return nil if slug.nil?

  resp = request("#{self.name.split("::").last.downcase}s", slug, {}, reset_connection, conn_opts)

  self.new(resp.body)
end
find_stateless(slug, conn_opts = {}) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 85
def find_stateless(slug, conn_opts = {})
  find_request(slug, true, conn_opts)
end
get_collection(uri_path) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 122
def get_collection(uri_path)
  get_collection_request(uri_path)
end
get_collection_request(uri_path, reset_connection = false, conn_opts = {}) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 115
def get_collection_request(uri_path, reset_connection = false, conn_opts = {})
  resource, params = split_uri_path uri_path
  resp = request(resource, nil, params, reset_connection, conn_opts)

  new_collection(resp)
end
get_collection_stateless(uri_path, conn_opts) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 126
def get_collection_stateless(uri_path, conn_opts)
  get_collection_request(uri_path, true, conn_opts)
end
new(json_response) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 18
def initialize(json_response)
  @attributes = json_response
  orm_resp_item json_response
end
new_collection(faraday_resp) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 153
def new_collection(faraday_resp)
  if faraday_resp[:errors].nil?
    PaginatedCollection.new(self, faraday_resp.body[:results], faraday_resp.body[:pagination], nil)
  else
    PaginatedCollection.new(self)
  end
end
request(resource, item = nil, params = {}, reset_connection = false, conn_opts = {}) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 57
def request(resource, item = nil, params = {}, reset_connection = false, conn_opts = {})
  conn(reset_connection, conn_opts) if reset_connection
  unless conn.url_prefix =~ /^#{PuppetForge.host}/
    conn.url_prefix = "#{PuppetForge.host}"
  end

  if item.nil?
    uri_path = "v3/#{resource}"
  else
    uri_path = "v3/#{resource}/#{item}"
  end

  PuppetForge::V3::Base.conn.get uri_path, params
end
split_uri_path(uri_path) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 138
def split_uri_path(uri_path)
  all, resource, params = /(?:\/v3\/)([^\/]+)(?:\?)(.*)/.match(uri_path).to_a

  params = convert_plus_to_space(params).split('&')

  param_hash = Hash.new
  params.each do |param|
    key, val = param.split('=')
    param_hash[key] = val
  end

  [resource, param_hash]
end
where(params) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 96
def where(params)
  where_request(params)
end
where_request(params, reset_connection = false, conn_opts = {}) click to toggle source

@private

# File lib/puppet_forge/v3/base.rb, line 90
def where_request(params, reset_connection = false, conn_opts = {})
  resp = request("#{self.name.split("::").last.downcase}s", nil, params, reset_connection, conn_opts)

  new_collection(resp)
end
where_stateless(params, conn_opts = {}) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 100
def where_stateless(params, conn_opts = {})
  where_request(params, true, conn_opts)
end

Public Instance Methods

attribute(name) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 38
def attribute(name)
  @attributes[:"#{name}"]
end
attributes() click to toggle source
# File lib/puppet_forge/v3/base.rb, line 42
def attributes
  @attributes
end
has_attribute?(attr) click to toggle source

@return true if attribute exists, false otherwise

# File lib/puppet_forge/v3/base.rb, line 34
def has_attribute?(attr)
  @attributes.has_key?(:"#{attr}")
end
orm_resp_item(json_response) click to toggle source
# File lib/puppet_forge/v3/base.rb, line 23
def orm_resp_item(json_response)
  json_response.each do |key, value|
    unless respond_to? key
      define_singleton_method("#{key}") { @attributes[key] }
      define_singleton_method("#{key}=") { |val| @attributes[key] = val }
    end
  end
end