91 lines
2.7 KiB
Ruby
91 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Jekyll
|
|
module GitHubMetadata
|
|
class Owner
|
|
extend Forwardable
|
|
|
|
# Defines an instance method that delegates to a hash's key
|
|
#
|
|
# hash - a symbol representing the instance method to delegate to. The
|
|
# instance method should return a hash or respond to #[]
|
|
# key - the key to call within the hash
|
|
# method - (optional) the instance method the key should be aliased to.
|
|
# If not specified, defaults to the hash key
|
|
#
|
|
# Returns a symbol representing the instance method
|
|
def self.def_hash_delegators(hash, *methods)
|
|
content_methods.concat(methods)
|
|
methods.each do |method|
|
|
define_method(method) do
|
|
send(hash)[method.to_s]
|
|
end
|
|
end
|
|
end
|
|
|
|
def self.content_methods
|
|
@content_methods ||= []
|
|
end
|
|
|
|
# List of whitelisted keys.
|
|
def_hash_delegators :owner_info,
|
|
:avatar_url,
|
|
:bio,
|
|
:blog,
|
|
:collaborators,
|
|
:company,
|
|
:created_at,
|
|
:description,
|
|
:email,
|
|
:followers,
|
|
:following,
|
|
:has_organization_projects,
|
|
:has_repository_projects,
|
|
:hireable,
|
|
:html_url,
|
|
:id,
|
|
:is_verified,
|
|
:location,
|
|
:login,
|
|
:name,
|
|
:node_id,
|
|
:public_gists,
|
|
:public_gists,
|
|
:public_repos,
|
|
:public_repos,
|
|
:type,
|
|
:updated_at
|
|
|
|
attr_reader :owner_login
|
|
|
|
def initialize(owner_login)
|
|
@owner_login = owner_login
|
|
end
|
|
|
|
def to_h
|
|
@to_h ||= self.class.content_methods
|
|
.each_with_object({}) { |method, hash| hash[method.to_s] = public_send(method) }
|
|
end
|
|
alias_method :to_hash, :to_h
|
|
def_delegator :to_h, :to_json, :to_json
|
|
def_delegator :to_h, :to_liquid, :to_liquid
|
|
|
|
def_delegator :to_h, :to_s, :to_s
|
|
alias_method :to_str, :to_s
|
|
|
|
private
|
|
|
|
def owner_info
|
|
@owner_info ||= begin
|
|
Value.new(
|
|
"owner",
|
|
proc do |c|
|
|
(c.organization(owner_login) || c.user(owner_login) || {}).to_h
|
|
end
|
|
).render || {}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|