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 125 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 130 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 53 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 153 def convert_plus_to_space(str) str.gsub(/[+]/, ' ') end
find(slug)
click to toggle source
# File lib/puppet_forge/v3/base.rb, line 101 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 93 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 105 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 142 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 135 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 146 def get_collection_stateless(uri_path, conn_opts) get_collection_request(uri_path, true, conn_opts) end
lru_cache()
click to toggle source
@private
# File lib/puppet_forge/v3/base.rb, line 58 def lru_cache @lru_cache ||= PuppetForge::LruCache.new end
lru_cache_key(*args)
click to toggle source
@private
# File lib/puppet_forge/v3/base.rb, line 63 def lru_cache_key(*args) PuppetForge::LruCache.new_key(*args) end
new(json_response)
click to toggle source
# File lib/puppet_forge/v3/base.rb, line 19 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 173 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 68 def request(resource, item = nil, params = {}, reset_connection = false, conn_opts = {}) cache_key = lru_cache_key(resource, item, params) cached = lru_cache.get(cache_key) return cached unless cached.nil? conn(reset_connection, conn_opts) if reset_connection unless conn.url_prefix.to_s =~ /^#{PuppetForge.host}/ conn.url_prefix = "#{PuppetForge.host}" end if item.nil? uri_path = "v3/#{resource}" else uri_path = "v3/#{resource}/#{item}" end # The API expects a space separated string. This allows the user to invoke it with a more natural feeling array. params['endorsements'] = params['endorsements'].join(' ') if params['endorsements'].is_a? Array result = PuppetForge::V3::Base.conn.get uri_path, params lru_cache.put(cache_key, result) result end
split_uri_path(uri_path)
click to toggle source
@private
# File lib/puppet_forge/v3/base.rb, line 158 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 116 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 110 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 120 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 39 def attribute(name) @attributes[:"#{name}"] end
attributes()
click to toggle source
# File lib/puppet_forge/v3/base.rb, line 43 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 35 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 24 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