jekyll-github-metadata 1.11.1 → 2.0.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 +4 -4
- data/lib/jekyll-github-metadata.rb +30 -81
- data/lib/jekyll-github-metadata/client.rb +2 -2
- data/lib/jekyll-github-metadata/ghp_metadata_generator.rb +7 -58
- data/lib/jekyll-github-metadata/metadata_drop.rb +124 -0
- data/lib/jekyll-github-metadata/pages.rb +12 -7
- data/lib/jekyll-github-metadata/repository.rb +34 -57
- data/lib/jekyll-github-metadata/repository_compat.rb +64 -0
- data/lib/jekyll-github-metadata/value.rb +1 -1
- data/lib/jekyll-github-metadata/version.rb +1 -1
- metadata +18 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36d8bc2d3f2c09462d4b9f58e2b2b0b20b832a6f
|
4
|
+
data.tar.gz: 8944c7a5339f8995dc0fc08a1f5c888dbda019de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b08ec39f71edc7f798d33ba35a3695b2361092c0b55719e13e3f2bb05656d5a402a6c2e8cbde4187ba54d30b960aea39617153f546262575393bf08f3296af8
|
7
|
+
data.tar.gz: cbf03c38175bd52c30104b763e34955295fe5c2f589b2b1fd1d4b89308e6601c880b192dd6805427247e98f7a682b23ff8be1636873456ea8be341e9e7316667
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'octokit'
|
2
|
+
require 'logger'
|
3
|
+
|
2
4
|
if defined?(Jekyll) && Jekyll.respond_to?(:env) && Jekyll.env == 'development'
|
3
5
|
begin
|
4
6
|
require 'dotenv'
|
@@ -17,104 +19,51 @@ module Jekyll
|
|
17
19
|
module GitHubMetadata
|
18
20
|
NoRepositoryError = Class.new(Jekyll::Errors::FatalException)
|
19
21
|
|
20
|
-
autoload :Client,
|
21
|
-
autoload :
|
22
|
-
autoload :
|
23
|
-
autoload :
|
24
|
-
autoload :
|
25
|
-
autoload :
|
22
|
+
autoload :Client, 'jekyll-github-metadata/client'
|
23
|
+
autoload :MetadataDrop, 'jekyll-github-metadata/metadata_drop'
|
24
|
+
autoload :Pages, 'jekyll-github-metadata/pages'
|
25
|
+
autoload :Repository, 'jekyll-github-metadata/repository'
|
26
|
+
autoload :RepositoryCompat, 'jekyll-github-metadata/repository_compat'
|
27
|
+
autoload :Sanitizer, 'jekyll-github-metadata/sanitizer'
|
28
|
+
autoload :Value, 'jekyll-github-metadata/value'
|
29
|
+
autoload :VERSION, 'jekyll-github-metadata/version'
|
30
|
+
|
31
|
+
if Jekyll.const_defined? :Site
|
32
|
+
require_relative 'jekyll-github-metadata/ghp_metadata_generator'
|
33
|
+
end
|
26
34
|
|
27
35
|
class << self
|
28
36
|
attr_accessor :repository
|
29
|
-
attr_writer :client
|
37
|
+
attr_writer :client, :logger
|
30
38
|
|
31
39
|
def environment
|
32
40
|
Jekyll.respond_to?(:env) ? Jekyll.env : (Pages.env || 'development')
|
33
41
|
end
|
34
42
|
|
35
|
-
def
|
36
|
-
@
|
43
|
+
def logger
|
44
|
+
@logger ||= if Jekyll.respond_to?(:logger)
|
45
|
+
Jekyll.logger
|
46
|
+
else
|
47
|
+
Logger.new($stdout)
|
48
|
+
end
|
37
49
|
end
|
38
50
|
|
39
|
-
def
|
40
|
-
|
51
|
+
def log(severity, message)
|
52
|
+
if logger.method(severity).arity.abs >= 2
|
53
|
+
logger.public_send(severity, "GitHub Metadata:", message.to_s)
|
54
|
+
else
|
55
|
+
logger.public_send(severity, "GitHub Metadata: #{message}")
|
56
|
+
end
|
41
57
|
end
|
42
|
-
alias_method :to_h, :values
|
43
|
-
alias_method :to_liquid, :to_h
|
44
58
|
|
45
|
-
def
|
46
|
-
@
|
59
|
+
def client
|
60
|
+
@client ||= Client.new
|
47
61
|
end
|
48
62
|
|
49
63
|
def reset!
|
50
|
-
|
64
|
+
@logger = nil
|
51
65
|
@client = nil
|
52
|
-
@repository = nil
|
53
|
-
end
|
54
|
-
|
55
|
-
def [](key)
|
56
|
-
values[key.to_s]
|
57
|
-
end
|
58
|
-
|
59
|
-
def register_value(key, value)
|
60
|
-
values[key.to_s] = Value.new(key.to_s, value)
|
61
|
-
end
|
62
|
-
|
63
|
-
# Reset our values hash.
|
64
|
-
def init!
|
65
|
-
clear_values!
|
66
|
-
|
67
|
-
# Environment-Specific
|
68
|
-
register_value('environment', proc { Pages.env })
|
69
|
-
register_value('hostname', proc { Pages.github_hostname })
|
70
|
-
register_value('pages_env', proc { Pages.env })
|
71
|
-
register_value('pages_hostname', proc { Pages.pages_hostname })
|
72
|
-
register_value('api_url', proc { Pages.api_url })
|
73
|
-
register_value('help_url', proc { Pages.help_url })
|
74
|
-
|
75
|
-
register_value('versions', proc {
|
76
|
-
begin
|
77
|
-
require 'github-pages'
|
78
|
-
GitHubPages.versions
|
79
|
-
rescue LoadError; Hash.new end
|
80
|
-
})
|
81
|
-
|
82
|
-
# The Juicy Stuff
|
83
|
-
register_value('public_repositories', proc { |_,r| r.owner_public_repositories })
|
84
|
-
register_value('organization_members', proc { |_,r| r.organization_public_members })
|
85
|
-
register_value('build_revision', proc {
|
86
|
-
ENV['JEKYLL_BUILD_REVISION'] || `git rev-parse HEAD`.strip
|
87
|
-
})
|
88
|
-
register_value('project_title', proc { |_,r| r.name })
|
89
|
-
register_value('project_tagline', proc { |_,r| r.tagline })
|
90
|
-
register_value('owner_name', proc { |_,r| r.owner })
|
91
|
-
register_value('owner_url', proc { |_,r| r.owner_url })
|
92
|
-
register_value('owner_gravatar_url', proc { |_,r| r.owner_gravatar_url })
|
93
|
-
register_value('repository_url', proc { |_,r| r.repository_url })
|
94
|
-
register_value('repository_nwo', proc { |_,r| r.nwo })
|
95
|
-
register_value('repository_name', proc { |_,r| r.name})
|
96
|
-
register_value('zip_url', proc { |_,r| r.zip_url })
|
97
|
-
register_value('tar_url', proc { |_,r| r.tar_url })
|
98
|
-
register_value('clone_url', proc { |_,r| r.repo_clone_url })
|
99
|
-
register_value('releases_url', proc { |_,r| r.releases_url })
|
100
|
-
register_value('issues_url', proc { |_,r| r.issues_url })
|
101
|
-
register_value('wiki_url', proc { |_,r| r.wiki_url })
|
102
|
-
register_value('language', proc { |_,r| r.language })
|
103
|
-
register_value('is_user_page', proc { |_,r| r.user_page? })
|
104
|
-
register_value('is_project_page', proc { |_,r| r.project_page? })
|
105
|
-
register_value('show_downloads', proc { |_,r| r.show_downloads? })
|
106
|
-
register_value('url', proc { |_,r| r.pages_url })
|
107
|
-
register_value('contributors', proc { |_,r| r.contributors })
|
108
|
-
register_value('releases', proc { |_,r| r.releases })
|
109
|
-
|
110
|
-
values
|
111
|
-
end
|
112
|
-
|
113
|
-
if Jekyll.const_defined? :Site
|
114
|
-
require_relative 'jekyll-github-metadata/ghp_metadata_generator'
|
115
66
|
end
|
116
67
|
end
|
117
|
-
|
118
|
-
init!
|
119
68
|
end
|
120
69
|
end
|
@@ -48,7 +48,7 @@ module Jekyll
|
|
48
48
|
method = method_name.to_s
|
49
49
|
if accepts_client_method?(method_name)
|
50
50
|
key = cache_key(method_name, args)
|
51
|
-
Jekyll.
|
51
|
+
Jekyll::GitHubMetadata.log :debug, "Calling @client.#{method}(#{args.map(&:inspect).join(", ")})"
|
52
52
|
cache[key] ||= save_from_errors { @client.public_send(method_name, *args, &block) }
|
53
53
|
elsif @client.respond_to?(method_name)
|
54
54
|
raise InvalidMethodError, "#{method_name} is not whitelisted on #{inspect}"
|
@@ -90,7 +90,7 @@ module Jekyll
|
|
90
90
|
elsif !ENV['NO_NETRC'] && File.exist?(File.join(ENV['HOME'], '.netrc')) && safe_require('netrc')
|
91
91
|
{ :netrc => true }
|
92
92
|
else
|
93
|
-
Jekyll.
|
93
|
+
Jekyll::GitHubMetadata.log :warn, "No GitHub API authentication could be found." \
|
94
94
|
" Some fields may be missing or have incorrect data."
|
95
95
|
{}.freeze
|
96
96
|
end
|
@@ -1,75 +1,24 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module GitHubMetadata
|
3
5
|
class GHPMetadataGenerator < Jekyll::Generator
|
4
6
|
safe true
|
5
7
|
|
6
8
|
def generate(site)
|
7
|
-
Jekyll.
|
8
|
-
initialize_repo! nwo(site)
|
9
|
-
Jekyll.logger.debug "GitHub Metadata:", "Generating for #{GitHubMetadata.repository.nwo}"
|
9
|
+
Jekyll::GitHubMetadata.log :debug, "Initializing..."
|
10
10
|
|
11
|
+
drop = MetadataDrop.new(site)
|
11
12
|
site.config['github'] =
|
12
13
|
case site.config['github']
|
13
14
|
when nil
|
14
|
-
|
15
|
-
when Hash
|
16
|
-
Jekyll::Utils.deep_merge_hashes(
|
15
|
+
MetadataDrop.new(site)
|
16
|
+
when Hash, Liquid::Drop
|
17
|
+
Jekyll::Utils.deep_merge_hashes(MetadataDrop.new(site), site.config['github'])
|
17
18
|
else
|
18
19
|
site.config['github']
|
19
20
|
end
|
20
21
|
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def initialize_repo!(repo_nwo)
|
25
|
-
if GitHubMetadata.repository.nil? || GitHubMetadata.repository.nwo != repo_nwo
|
26
|
-
GitHubMetadata.init!
|
27
|
-
GitHubMetadata.repository = GitHubMetadata::Repository.new(repo_nwo)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def git_remote_url
|
32
|
-
`git remote --verbose`.split("\n").grep(%r{\Aorigin\t}).map do |remote|
|
33
|
-
remote.sub(/\Aorigin\t(.*) \([a-z]+\)/, "\\1")
|
34
|
-
end.uniq.first || ""
|
35
|
-
end
|
36
|
-
|
37
|
-
def nwo_from_git_origin_remote
|
38
|
-
return unless Jekyll.env == "development"
|
39
|
-
matches = git_remote_url.match %r{github.com(:|/)([\w-]+)/([\w-]+)}
|
40
|
-
matches[2..3].join("/") if matches
|
41
|
-
end
|
42
|
-
|
43
|
-
def nwo_from_env
|
44
|
-
ENV['PAGES_REPO_NWO']
|
45
|
-
end
|
46
|
-
|
47
|
-
def nwo_from_config(site)
|
48
|
-
repo = site.config['repository']
|
49
|
-
repo if repo && repo.is_a?(String) && repo.include?('/')
|
50
|
-
end
|
51
|
-
|
52
|
-
# Public: fetches the repository name with owner to fetch metadata for.
|
53
|
-
# In order of precedence, this method uses:
|
54
|
-
# 1. the environment variable $PAGES_REPO_NWO
|
55
|
-
# 2. 'repository' variable in the site config
|
56
|
-
# 3. the 'origin' git remote's URL
|
57
|
-
#
|
58
|
-
# site - the Jekyll::Site being processed
|
59
|
-
#
|
60
|
-
# Return the name with owner (e.g. 'parkr/my-repo') or raises an
|
61
|
-
# error if one cannot be found.
|
62
|
-
def nwo(site)
|
63
|
-
nwo_from_env || \
|
64
|
-
nwo_from_config(site) || \
|
65
|
-
nwo_from_git_origin_remote || \
|
66
|
-
proc {
|
67
|
-
raise GitHubMetadata::NoRepositoryError, "No repo name found. " \
|
68
|
-
"Specify using PAGES_REPO_NWO environment variables, " \
|
69
|
-
"'repository' in your configuration, or set up an 'origin' " \
|
70
|
-
"git remote pointing to your github.com repository."
|
71
|
-
}.call
|
72
|
-
end
|
73
22
|
end
|
74
23
|
end
|
75
24
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
require 'forwardable'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module GitHubMetadata
|
6
|
+
class MetadataDrop < Jekyll::Drops::Drop
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
mutable true
|
10
|
+
|
11
|
+
def initialize(site)
|
12
|
+
@site = site
|
13
|
+
super(nil)
|
14
|
+
end
|
15
|
+
|
16
|
+
def keys
|
17
|
+
super.sort
|
18
|
+
end
|
19
|
+
|
20
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :env, :environment
|
21
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :env, :pages_env
|
22
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :github_hostname, :hostname
|
23
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :pages_hostname, :pages_hostname
|
24
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :api_url, :api_url
|
25
|
+
def_delegator :"Jekyll::GitHubMetadata::Pages", :help_url, :help_url
|
26
|
+
|
27
|
+
def versions
|
28
|
+
@versions ||= begin
|
29
|
+
require 'github-pages'
|
30
|
+
GitHubPages.versions
|
31
|
+
rescue LoadError
|
32
|
+
{}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_revision
|
37
|
+
@build_revision ||= (
|
38
|
+
ENV['JEKYLL_BUILD_REVISION'] || `git rev-parse HEAD`.strip
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def_delegator :repository, :owner_public_repositories, :public_repositories
|
43
|
+
def_delegator :repository, :organization_public_members, :organization_members
|
44
|
+
def_delegator :repository, :name, :project_title
|
45
|
+
def_delegator :repository, :tagline, :project_tagline
|
46
|
+
def_delegator :repository, :owner, :owner_name
|
47
|
+
def_delegator :repository, :owner_url, :owner_url
|
48
|
+
def_delegator :repository, :owner_gravatar_url, :owner_gravatar_url
|
49
|
+
def_delegator :repository, :repository_url, :repository_url
|
50
|
+
def_delegator :repository, :nwo, :repository_nwo
|
51
|
+
def_delegator :repository, :name, :repository_name
|
52
|
+
def_delegator :repository, :zip_url, :zip_url
|
53
|
+
def_delegator :repository, :tar_url, :tar_url
|
54
|
+
def_delegator :repository, :repo_clone_url, :clone_url
|
55
|
+
def_delegator :repository, :releases_url, :releases_url
|
56
|
+
def_delegator :repository, :issues_url, :issues_url
|
57
|
+
def_delegator :repository, :wiki_url, :wiki_url
|
58
|
+
def_delegator :repository, :language, :language
|
59
|
+
def_delegator :repository, :user_page?, :is_user_page
|
60
|
+
def_delegator :repository, :project_page?, :is_project_page
|
61
|
+
def_delegator :repository, :show_downloads?, :show_downloads
|
62
|
+
def_delegator :repository, :html_url, :url
|
63
|
+
def_delegator :repository, :contributors, :contributors
|
64
|
+
def_delegator :repository, :releases, :releases
|
65
|
+
|
66
|
+
private
|
67
|
+
attr_reader :site
|
68
|
+
|
69
|
+
def repository
|
70
|
+
@repository ||= GitHubMetadata::Repository.new(nwo(site)).tap do |repo|
|
71
|
+
Jekyll::GitHubMetadata.log :debug, "Generating for #{repo.nwo}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def git_remote_url
|
76
|
+
`git remote --verbose`.split("\n").grep(%r{\Aorigin\t}).map do |remote|
|
77
|
+
remote.sub(/\Aorigin\t(.*) \([a-z]+\)/, "\\1")
|
78
|
+
end.uniq.first || ""
|
79
|
+
end
|
80
|
+
|
81
|
+
def nwo_from_git_origin_remote
|
82
|
+
return unless Jekyll.env == "development"
|
83
|
+
matches = git_remote_url.match %r{github.com(:|/)([\w-]+)/([\w-]+)}
|
84
|
+
matches[2..3].join("/") if matches
|
85
|
+
end
|
86
|
+
|
87
|
+
def nwo_from_env
|
88
|
+
ENV['PAGES_REPO_NWO']
|
89
|
+
end
|
90
|
+
|
91
|
+
def nwo_from_config(site)
|
92
|
+
repo = site.config['repository']
|
93
|
+
repo if repo && repo.is_a?(String) && repo.include?('/')
|
94
|
+
end
|
95
|
+
|
96
|
+
# Public: fetches the repository name with owner to fetch metadata for.
|
97
|
+
# In order of precedence, this method uses:
|
98
|
+
# 1. the environment variable $PAGES_REPO_NWO
|
99
|
+
# 2. 'repository' variable in the site config
|
100
|
+
# 3. the 'origin' git remote's URL
|
101
|
+
#
|
102
|
+
# site - the Jekyll::Site being processed
|
103
|
+
#
|
104
|
+
# Return the name with owner (e.g. 'parkr/my-repo') or raises an
|
105
|
+
# error if one cannot be found.
|
106
|
+
def nwo(site)
|
107
|
+
nwo_from_env || \
|
108
|
+
nwo_from_config(site) || \
|
109
|
+
nwo_from_git_origin_remote || \
|
110
|
+
proc {
|
111
|
+
raise GitHubMetadata::NoRepositoryError, "No repo name found. " \
|
112
|
+
"Specify using PAGES_REPO_NWO environment variables, " \
|
113
|
+
"'repository' in your configuration, or set up an 'origin' " \
|
114
|
+
"git remote pointing to your github.com repository."
|
115
|
+
}.call
|
116
|
+
end
|
117
|
+
|
118
|
+
# Nothing to see here.
|
119
|
+
def fallback_data
|
120
|
+
@fallback_data ||= {}
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -3,13 +3,14 @@ module Jekyll
|
|
3
3
|
class Pages
|
4
4
|
class << self
|
5
5
|
DEFAULTS = {
|
6
|
-
'PAGES_ENV'
|
7
|
-
'PAGES_API_URL'
|
8
|
-
'PAGES_HELP_URL'
|
9
|
-
'PAGES_GITHUB_HOSTNAME'
|
10
|
-
'PAGES_PAGES_HOSTNAME'
|
11
|
-
'SSL'
|
12
|
-
'SUBDOMAIN_ISOLATION'
|
6
|
+
'PAGES_ENV' => 'dotcom'.freeze,
|
7
|
+
'PAGES_API_URL' => 'https://api.github.com'.freeze,
|
8
|
+
'PAGES_HELP_URL' => 'https://help.github.com'.freeze,
|
9
|
+
'PAGES_GITHUB_HOSTNAME' => 'github.com'.freeze,
|
10
|
+
'PAGES_PAGES_HOSTNAME' => 'github.io'.freeze,
|
11
|
+
'SSL' => 'false'.freeze,
|
12
|
+
'SUBDOMAIN_ISOLATION' => 'false'.freeze,
|
13
|
+
'PAGES_PREVIEW_HTML_URL' => nil
|
13
14
|
}.freeze
|
14
15
|
|
15
16
|
# Whether the GitHub instance supports HTTPS
|
@@ -40,6 +41,10 @@ module Jekyll
|
|
40
41
|
env_var 'PAGES_ENV'
|
41
42
|
end
|
42
43
|
|
44
|
+
def repo_pages_html_url_preview?
|
45
|
+
env_var "PAGES_PREVIEW_HTML_URL"
|
46
|
+
end
|
47
|
+
|
43
48
|
def github_url
|
44
49
|
if dotcom?
|
45
50
|
"https://github.com".freeze
|
@@ -8,14 +8,26 @@ module Jekyll
|
|
8
8
|
@name = nwo.split("/").last
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def repo_compat
|
12
|
+
@repo_compat ||= Jekyll::GitHubMetadata::RepositoryCompat.new(self)
|
13
13
|
end
|
14
14
|
|
15
15
|
def repo_info
|
16
16
|
@repo_info ||= (Value.new(proc { |c| c.repository(nwo) }).render || Hash.new)
|
17
17
|
end
|
18
18
|
|
19
|
+
def repo_pages_info
|
20
|
+
@repo_pages_info ||= (Value.new(proc { |c| c.pages(nwo, repo_pages_info_opts) }).render || Hash.new)
|
21
|
+
end
|
22
|
+
|
23
|
+
def repo_pages_info_opts
|
24
|
+
if Pages.repo_pages_html_url_preview?
|
25
|
+
{ :accept => "application/vnd.github.mister-fantastic-preview+json" }
|
26
|
+
else
|
27
|
+
{}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
19
31
|
def language
|
20
32
|
repo_info["language"]
|
21
33
|
end
|
@@ -86,6 +98,10 @@ module Jekyll
|
|
86
98
|
memoize_value :@releases, Value.new(proc { |c| c.releases(nwo) })
|
87
99
|
end
|
88
100
|
|
101
|
+
def git_ref
|
102
|
+
user_page? ? 'master' : 'gh-pages'
|
103
|
+
end
|
104
|
+
|
89
105
|
def user_page?
|
90
106
|
primary?
|
91
107
|
end
|
@@ -106,18 +122,10 @@ module Jekyll
|
|
106
122
|
end
|
107
123
|
end
|
108
124
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
def url_scheme
|
114
|
-
if Pages.enterprise?
|
115
|
-
Pages.scheme
|
116
|
-
elsif owner == 'github' && domain.end_with?('.github.com')
|
117
|
-
'https'
|
118
|
-
else
|
119
|
-
'http'
|
120
|
-
end
|
125
|
+
def user_page_domains
|
126
|
+
domains = [default_user_domain]
|
127
|
+
domains.push "#{owner}.github.com".downcase unless Pages.enterprise?
|
128
|
+
domains
|
121
129
|
end
|
122
130
|
|
123
131
|
def default_user_domain
|
@@ -130,56 +138,25 @@ module Jekyll
|
|
130
138
|
end
|
131
139
|
end
|
132
140
|
|
133
|
-
def
|
134
|
-
|
135
|
-
|
136
|
-
domains
|
141
|
+
def cname
|
142
|
+
return nil unless Pages.custom_domains_enabled?
|
143
|
+
repo_pages_info["cname"]
|
137
144
|
end
|
138
145
|
|
139
|
-
def
|
140
|
-
|
141
|
-
user_page_domains.each do |user_repo|
|
142
|
-
candidate_nwo = "#{owner}/#{user_repo}"
|
143
|
-
next unless Value.new(proc { |client| client.repository? candidate_nwo }).render
|
144
|
-
domain = self.class.new(candidate_nwo).domain
|
145
|
-
end
|
146
|
-
domain
|
147
|
-
end
|
148
|
-
|
149
|
-
def pages_url
|
150
|
-
if !Pages.custom_domains_enabled?
|
151
|
-
path = user_page? ? owner : nwo
|
152
|
-
if Pages.subdomain_isolation?
|
153
|
-
URI.join("#{Pages.scheme}://#{Pages.pages_hostname}/", path).to_s
|
154
|
-
else
|
155
|
-
URI.join("#{Pages.github_url}/pages/", path).to_s
|
156
|
-
end
|
157
|
-
elsif cname || primary?
|
158
|
-
"#{url_scheme}://#{domain}"
|
159
|
-
else
|
160
|
-
URI.join("#{url_scheme}://#{domain}", name).to_s
|
161
|
-
end
|
146
|
+
def html_url
|
147
|
+
@html_url ||= (repo_pages_info["html_url"] || repo_compat.pages_url)
|
162
148
|
end
|
163
149
|
|
164
|
-
def
|
165
|
-
|
166
|
-
if Pages.custom_domains_enabled?
|
167
|
-
(c.pages(nwo) || {'cname' => nil})['cname']
|
168
|
-
end
|
169
|
-
})
|
150
|
+
def uri
|
151
|
+
@uri ||= URI(html_url)
|
170
152
|
end
|
171
153
|
|
172
154
|
def domain
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
elsif primary? # user/org repo
|
179
|
-
default_user_domain
|
180
|
-
else # project repo
|
181
|
-
user_domain
|
182
|
-
end
|
155
|
+
uri.host
|
156
|
+
end
|
157
|
+
|
158
|
+
def url_scheme
|
159
|
+
uri.scheme
|
183
160
|
end
|
184
161
|
|
185
162
|
private
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GitHubMetadata
|
3
|
+
class RepositoryCompat
|
4
|
+
attr_reader :repo
|
5
|
+
|
6
|
+
def initialize(repo)
|
7
|
+
@repo = repo
|
8
|
+
end
|
9
|
+
|
10
|
+
# In enterprise, the site's scheme will be the same as the instance's
|
11
|
+
# In dotcom, this will be `https` for GitHub-owned sites that end with
|
12
|
+
# `.github.com` and will be `http` for all other sites.
|
13
|
+
# Note: This is not the same as *instance*'s scheme, which may differ
|
14
|
+
def url_scheme
|
15
|
+
if Pages.enterprise?
|
16
|
+
Pages.scheme
|
17
|
+
elsif repo.owner == 'github' && domain.end_with?('.github.com')
|
18
|
+
'https'
|
19
|
+
else
|
20
|
+
'http'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def user_domain
|
25
|
+
domain = repo.default_user_domain
|
26
|
+
repo.user_page_domains.each do |user_repo|
|
27
|
+
candidate_nwo = "#{repo.owner}/#{user_repo}"
|
28
|
+
next unless Jekyll::GitHubMetadata.client.repository?(candidate_nwo)
|
29
|
+
domain = Jekyll::GitHubMetadata::Repository.new(candidate_nwo).repo_compat.domain
|
30
|
+
end
|
31
|
+
domain
|
32
|
+
end
|
33
|
+
|
34
|
+
def pages_url
|
35
|
+
if !Pages.custom_domains_enabled?
|
36
|
+
path = repo.user_page? ? repo.owner : repo.nwo
|
37
|
+
if Pages.subdomain_isolation?
|
38
|
+
URI.join("#{Pages.scheme}://#{Pages.pages_hostname}/", path).to_s
|
39
|
+
else
|
40
|
+
URI.join("#{Pages.github_url}/pages/", path).to_s
|
41
|
+
end
|
42
|
+
elsif repo.cname || repo.primary?
|
43
|
+
"#{url_scheme}://#{domain}"
|
44
|
+
else
|
45
|
+
URI.join("#{url_scheme}://#{domain}", repo.name).to_s
|
46
|
+
end
|
47
|
+
end
|
48
|
+
alias_method :html_url, :pages_url
|
49
|
+
|
50
|
+
def domain
|
51
|
+
@domain ||=
|
52
|
+
if !Pages.custom_domains_enabled?
|
53
|
+
Pages.github_hostname
|
54
|
+
elsif repo.cname # explicit CNAME
|
55
|
+
repo.cname
|
56
|
+
elsif repo.primary? # user/org repo
|
57
|
+
repo.default_user_domain
|
58
|
+
else # project repo
|
59
|
+
user_domain
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -35,7 +35,7 @@ module Jekyll
|
|
35
35
|
end
|
36
36
|
@value = Sanitizer.sanitize(@value)
|
37
37
|
rescue RuntimeError, NameError => e
|
38
|
-
Jekyll.
|
38
|
+
Jekyll::GitHubMetadata.log :error, "Error processing value '#{key}':"
|
39
39
|
raise e
|
40
40
|
end
|
41
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-github-metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Parker Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -25,35 +25,35 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: jekyll
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
34
|
-
type: :
|
33
|
+
version: '3.1'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: netrc
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,19 +81,19 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
description:
|
98
98
|
email:
|
99
99
|
- parkrmoore@gmail.com
|
@@ -104,8 +104,10 @@ files:
|
|
104
104
|
- lib/jekyll-github-metadata.rb
|
105
105
|
- lib/jekyll-github-metadata/client.rb
|
106
106
|
- lib/jekyll-github-metadata/ghp_metadata_generator.rb
|
107
|
+
- lib/jekyll-github-metadata/metadata_drop.rb
|
107
108
|
- lib/jekyll-github-metadata/pages.rb
|
108
109
|
- lib/jekyll-github-metadata/repository.rb
|
110
|
+
- lib/jekyll-github-metadata/repository_compat.rb
|
109
111
|
- lib/jekyll-github-metadata/sanitizer.rb
|
110
112
|
- lib/jekyll-github-metadata/value.rb
|
111
113
|
- lib/jekyll-github-metadata/version.rb
|