jekyll-github-metadata 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/jekyll-github-metadata.rb +86 -0
- data/lib/jekyll-github-metadata/client.rb +52 -0
- data/lib/jekyll-github-metadata/ghp_metadata_generator.rb +12 -0
- data/lib/jekyll-github-metadata/pages.rb +23 -0
- data/lib/jekyll-github-metadata/repository.rb +119 -0
- data/lib/jekyll-github-metadata/sanitizer.rb +53 -0
- data/lib/jekyll-github-metadata/value.rb +48 -0
- data/lib/jekyll-github-metadata/version.rb +5 -0
- metadata +122 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7118e76a45b88b13ed74056081b4f8c770afe7eb
|
4
|
+
data.tar.gz: 4c68fc503a1c8d070ec518af2c3cece4d21bd642
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f392cde09024155ffd90de399a77ff4a58b9ce9d631b25c07c42c0dad43efa649b620a2285eadc92f956a49a35a4d0efbaf34317568d321000e50e26d85a71d
|
7
|
+
data.tar.gz: 3347b15c29ebea89267d5388ae89b4b1be87a87b7f61e7686b69841a384389dea2df1818daaebc404508c5ca2696b49b7a9d091bb0bcf024401c03f43260ef4f
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
autoload :Client, 'jekyll-github-metadata/client'
|
4
|
+
autoload :Pages, 'jekyll-github-metadata/pages'
|
5
|
+
autoload :Repository, 'jekyll-github-metadata/repository'
|
6
|
+
autoload :Sanitizer, 'jekyll-github-metadata/sanitizer'
|
7
|
+
autoload :Value, 'jekyll-github-metadata/value'
|
8
|
+
autoload :VERSION, 'jekyll-github-metadata/version'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :repository
|
12
|
+
|
13
|
+
def environment
|
14
|
+
Jekyll.env || Pages.env || 'development'
|
15
|
+
end
|
16
|
+
|
17
|
+
def client
|
18
|
+
@client ||= Client.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def values
|
22
|
+
@values ||= Hash.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def clear_values!
|
26
|
+
@values = Hash.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def [](key)
|
30
|
+
values[key.to_s]
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_h
|
34
|
+
values
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_liquid
|
38
|
+
to_h
|
39
|
+
end
|
40
|
+
|
41
|
+
def register_value(key, value)
|
42
|
+
values[key.to_s] = Value.new(value)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Environment-Specific
|
47
|
+
register_value('environment', proc { environment })
|
48
|
+
register_value('hostname', proc { Pages.github_url })
|
49
|
+
register_value('pages_hostname', proc { Pages.pages_hostname })
|
50
|
+
register_value('api_url', proc { Pages.api_url })
|
51
|
+
|
52
|
+
register_value('versions', proc {
|
53
|
+
begin
|
54
|
+
require 'github-pages'
|
55
|
+
GitHubPages.versions
|
56
|
+
rescue LoadError; Hash.new end
|
57
|
+
})
|
58
|
+
|
59
|
+
# The Juicy Stuff
|
60
|
+
register_value('public_repositories', proc { |c,r| c.list_repos(r.owner, "type" => "public") })
|
61
|
+
register_value('organization_members', proc { |c,r| c.organization_public_members(owner) if r.organization_repository? })
|
62
|
+
register_value('build_revision', proc { `git rev-parse HEAD`.strip })
|
63
|
+
register_value('project_title', proc { |_,r| r.name })
|
64
|
+
register_value('project_tagline', proc { |_,r| r.tagline })
|
65
|
+
register_value('owner_name', proc { |_,r| r.owner })
|
66
|
+
register_value('owner_url', proc { |_,r| r.owner_url })
|
67
|
+
register_value('owner_gravatar_url', proc { |_,r| r.owner_gravatar_url })
|
68
|
+
register_value('repository_url', proc { |_,r| r.repository_url })
|
69
|
+
register_value('repository_nwo', proc { |_,r| r.nwo })
|
70
|
+
register_value('repository_name', proc { |_,r| r.name})
|
71
|
+
register_value('zip_url', proc { |_,r| r.zip_url })
|
72
|
+
register_value('tar_url', proc { |_,r| r.tar_url })
|
73
|
+
register_value('clone_url', proc { |_,r| r.repo_clone_url })
|
74
|
+
register_value('releases_url', proc { |_,r| r.releases_url })
|
75
|
+
register_value('issues_url', proc { |_,r| r.issues_url })
|
76
|
+
register_value('wiki_url', proc { |_,r| r.wiki_url })
|
77
|
+
register_value('language', proc { |_,r| r.language })
|
78
|
+
register_value('is_user_page', proc { |_,r| r.user_page? })
|
79
|
+
register_value('is_project_page', proc { |_,r| r.project_page? })
|
80
|
+
register_value('show_downloads', proc { |_,r| r.show_downloads? })
|
81
|
+
register_value('url', proc { |_,r| r.pages_url })
|
82
|
+
register_value('contributors', proc { |c,r| c.contributors(r.nwo) })
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
require_relative 'jekyll-github-metadata/ghp_metadata_generator'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
class Client
|
4
|
+
def initialize(options = nil)
|
5
|
+
require 'octokit'
|
6
|
+
@client = build_octokit_client(options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def safe_require(gem_name)
|
10
|
+
require gem_name
|
11
|
+
true
|
12
|
+
rescue LoadError
|
13
|
+
false
|
14
|
+
end
|
15
|
+
|
16
|
+
def build_octokit_client(options = nil)
|
17
|
+
options = options || Hash.new
|
18
|
+
if ENV['JEKYLL_GITHUB_TOKEN']
|
19
|
+
options.merge!(:access_token => ENV['JEKYLL_GITHUB_TOKEN'])
|
20
|
+
elsif File.exist?(File.join(ENV['HOME'], '.netrc')) && safe_require('netrc')
|
21
|
+
options.merge!(:netrc => true)
|
22
|
+
else
|
23
|
+
Jekyll.logger.warn "GitHubMetadata:", "No GitHub API authentication could be found." +
|
24
|
+
" Some fields may be missing or have incorrect data."
|
25
|
+
end
|
26
|
+
Octokit::Client.new(options)
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(meth, *args, &block)
|
30
|
+
if @client.respond_to?(meth)
|
31
|
+
instance_variable_get(:"@#{meth}") ||
|
32
|
+
instance_variable_set(:"@#{meth}", save_from_errors { @client.send(meth, *args, &block) })
|
33
|
+
else
|
34
|
+
super(meth, *args, &block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def save_from_errors(default = false, &block)
|
39
|
+
if block.arity == 1
|
40
|
+
block.call(@client)
|
41
|
+
else
|
42
|
+
block.call
|
43
|
+
end
|
44
|
+
rescue Faraday::Error::ConnectionFailed,
|
45
|
+
Octokit::NotFound,
|
46
|
+
Octokit::Unauthorized,
|
47
|
+
Octokit::TooManyRequests
|
48
|
+
default
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module GitHubMetadata
|
5
|
+
class GHPMetadataGenerator < Jekyll::Generator
|
6
|
+
def generate(site)
|
7
|
+
GitHubMetadata.repository = GitHubMetadata::Repository.new(site.config.fetch('repository'))
|
8
|
+
site.config['github'] = GitHubMetadata.to_liquid
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
class Pages
|
4
|
+
class << self
|
5
|
+
def env
|
6
|
+
ENV.fetch('PAGES_ENV', 'dotcom')
|
7
|
+
end
|
8
|
+
|
9
|
+
def api_url
|
10
|
+
'https://api.github.com'
|
11
|
+
end
|
12
|
+
|
13
|
+
def github_url
|
14
|
+
'github.com'
|
15
|
+
end
|
16
|
+
|
17
|
+
def pages_hostname
|
18
|
+
'github.io'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
class Repository
|
4
|
+
attr_reader :nwo, :owner, :name
|
5
|
+
def initialize(name_with_owner)
|
6
|
+
@nwo = name_with_owner
|
7
|
+
@owner = nwo.split("/").first
|
8
|
+
@name = nwo.split("/").last
|
9
|
+
end
|
10
|
+
|
11
|
+
def organization_repository?
|
12
|
+
!!GitHubMetadata.client.organization(owner)
|
13
|
+
end
|
14
|
+
|
15
|
+
def git_ref
|
16
|
+
user_page? ? 'master' : 'gh-pages'
|
17
|
+
end
|
18
|
+
|
19
|
+
def repo_info
|
20
|
+
@repo_into ||= (Value.new(proc { |c| c.repository(nwo) }).render || Hash.new)
|
21
|
+
end
|
22
|
+
|
23
|
+
def language
|
24
|
+
repo_info["language"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def tagline
|
28
|
+
repo_info["description"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def owner_url
|
32
|
+
"#{Pages.github_url}/#{owner}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def owner_gravatar_url
|
36
|
+
"#{owner_url}.png"
|
37
|
+
end
|
38
|
+
|
39
|
+
def repo_clone_url
|
40
|
+
"#{repository_url}.git"
|
41
|
+
end
|
42
|
+
|
43
|
+
def repository_url
|
44
|
+
"#{Pages.github_url}/#{nwo}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def zip_url
|
48
|
+
"#{repository_url}/zipball/#{git_ref}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def tar_url
|
52
|
+
"#{repository_url}/tarball/#{git_ref}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def releases_url
|
56
|
+
"#{repository_url}/releases"
|
57
|
+
end
|
58
|
+
|
59
|
+
def issues_url
|
60
|
+
"#{repository_url}/issues" if repo_info["has_issues"]
|
61
|
+
end
|
62
|
+
|
63
|
+
def wiki_url
|
64
|
+
"#{repository_url}/wiki" if repo_info["has_wiki"]
|
65
|
+
end
|
66
|
+
|
67
|
+
def show_downloads?
|
68
|
+
!!repo_info["has_downloads"]
|
69
|
+
end
|
70
|
+
|
71
|
+
def user_page?
|
72
|
+
primary?
|
73
|
+
end
|
74
|
+
|
75
|
+
def project_page?
|
76
|
+
!primary?
|
77
|
+
end
|
78
|
+
|
79
|
+
def primary?
|
80
|
+
user_page_domains.include? name.downcase
|
81
|
+
end
|
82
|
+
|
83
|
+
def github_repo?
|
84
|
+
owner.eql?('github')
|
85
|
+
end
|
86
|
+
|
87
|
+
def default_user_domain
|
88
|
+
if github_repo?
|
89
|
+
"#{owner}.#{Pages.github_hostname}".downcase
|
90
|
+
else
|
91
|
+
"#{owner}.#{Pages.pages_hostname}".downcase
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def user_page_domains
|
96
|
+
[
|
97
|
+
default_user_domain,
|
98
|
+
"#{owner}.github.com".downcase # legacy
|
99
|
+
]
|
100
|
+
end
|
101
|
+
|
102
|
+
def pages_url
|
103
|
+
if cname || primary?
|
104
|
+
"http://#{domain}"
|
105
|
+
else
|
106
|
+
File.join("http://#{domain}", name)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def cname
|
111
|
+
@cname ||= (Value.new(proc { |c| c.pages(nwo) }).render || {'cname' => nil})['cname']
|
112
|
+
end
|
113
|
+
|
114
|
+
def domain
|
115
|
+
cname || default_user_domain
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
module Sanitizer
|
4
|
+
extend self
|
5
|
+
# Sanitize an object.
|
6
|
+
# When the resource is either `false`, `true`, `nil` or a number,
|
7
|
+
# it returns the resource as-is. When the resource is an array,
|
8
|
+
# it maps over the entire array, sanitizing each of its values.
|
9
|
+
# When the resource responds to the #to_hash method, it returns
|
10
|
+
# the value of #sanitize_resource (see below). If none of the
|
11
|
+
# aforementioned conditions are met, the return value of #to_s
|
12
|
+
# is used.
|
13
|
+
#
|
14
|
+
# resource - an Object
|
15
|
+
#
|
16
|
+
# Returns the sanitized resource.
|
17
|
+
def sanitize(resource)
|
18
|
+
case resource
|
19
|
+
when Array
|
20
|
+
resource.map { |item| sanitize(item) }
|
21
|
+
when Numeric
|
22
|
+
resource
|
23
|
+
when FalseClass
|
24
|
+
false
|
25
|
+
when TrueClass
|
26
|
+
true
|
27
|
+
when NilClass
|
28
|
+
nil
|
29
|
+
else
|
30
|
+
if resource.respond_to?(:to_hash)
|
31
|
+
sanitize_resource(resource)
|
32
|
+
else
|
33
|
+
resource.to_s
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Sanitize the Sawyer Resource or Hash
|
39
|
+
# Note: the object must respond to :to_hash for this to work.
|
40
|
+
# Consider using #sanitize instead of this method directly.
|
41
|
+
#
|
42
|
+
# resource - an Object which responds to :to_hash
|
43
|
+
#
|
44
|
+
# Returns the sanitized sawyer resource or hash as a hash.
|
45
|
+
def sanitize_resource(resource)
|
46
|
+
resource.to_hash.inject({}) do |result, (k, v)|
|
47
|
+
result[k.to_s] = sanitize(v)
|
48
|
+
result
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module GitHubMetadata
|
5
|
+
class Value
|
6
|
+
attr_reader :value
|
7
|
+
|
8
|
+
def initialize(value)
|
9
|
+
@value = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def render
|
13
|
+
@value = if @value.respond_to?(:call)
|
14
|
+
case @value.arity
|
15
|
+
when 0
|
16
|
+
@value.call
|
17
|
+
when 1
|
18
|
+
@value.call(GitHubMetadata.client)
|
19
|
+
when 2
|
20
|
+
@value.call(GitHubMetadata.client, GitHubMetadata.repository)
|
21
|
+
else
|
22
|
+
raise ArgumentError.new("Whoa, arity of 0, 1, or 2 please in your procs.")
|
23
|
+
end
|
24
|
+
else
|
25
|
+
@value
|
26
|
+
end
|
27
|
+
@value = Sanitizer.sanitize(@value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_s
|
31
|
+
render.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_json(*)
|
35
|
+
render.to_json
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_liquid
|
39
|
+
case render
|
40
|
+
when String, Numeric, Array
|
41
|
+
render
|
42
|
+
else
|
43
|
+
to_json
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-github-metadata
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Parker Moore
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: octokit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jekyll
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.0'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- parkrmoore@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- lib/jekyll-github-metadata.rb
|
91
|
+
- lib/jekyll-github-metadata/client.rb
|
92
|
+
- lib/jekyll-github-metadata/ghp_metadata_generator.rb
|
93
|
+
- lib/jekyll-github-metadata/pages.rb
|
94
|
+
- lib/jekyll-github-metadata/repository.rb
|
95
|
+
- lib/jekyll-github-metadata/sanitizer.rb
|
96
|
+
- lib/jekyll-github-metadata/value.rb
|
97
|
+
- lib/jekyll-github-metadata/version.rb
|
98
|
+
homepage: https://github.com/parkr/github-metadata
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.2.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: The site.github namespace
|
122
|
+
test_files: []
|