jekyll-remote-theme 0.3.1 → 0.4.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-remote-theme.rb +3 -3
- data/lib/jekyll-remote-theme/downloader.rb +11 -8
- data/lib/jekyll-remote-theme/mock_gemspec.rb +2 -2
- data/lib/jekyll-remote-theme/munger.rb +3 -1
- data/lib/jekyll-remote-theme/theme.rb +45 -7
- data/lib/jekyll-remote-theme/version.rb +1 -1
- metadata +33 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db842baa8db191bebfceb51b6c6ccc6893872d14cdeafe70b7979907df93d49f
|
4
|
+
data.tar.gz: 822dd49434a52f18f326f9a39930dc0b09ea7ad1e23c7f99dd8c07a4d4c21eeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f411c8649bef2a2bd4d7d1382f8fdaeb55f258f68ea1a0751a3ed66d8f5da67aab708cee6cb2bbf5a046a09080719c11c77c6df230b2510789d6cf378a7ffcd
|
7
|
+
data.tar.gz: 61392d3287b1c86089b583a0f12ba8bd60da7dbe03c224d3a7294b35f6781b6908ebb77f9cd2bf7e4867eac45a4c923d8a5627924274a897bec1861e77e174b9
|
data/lib/jekyll-remote-theme.rb
CHANGED
@@ -19,9 +19,9 @@ module Jekyll
|
|
19
19
|
autoload :Theme, "jekyll-remote-theme/theme"
|
20
20
|
autoload :VERSION, "jekyll-remote-theme/version"
|
21
21
|
|
22
|
-
CONFIG_KEY = "remote_theme"
|
23
|
-
LOG_KEY = "Remote Theme:"
|
24
|
-
TEMP_PREFIX = "jekyll-remote-theme-"
|
22
|
+
CONFIG_KEY = "remote_theme"
|
23
|
+
LOG_KEY = "Remote Theme:"
|
24
|
+
TEMP_PREFIX = "jekyll-remote-theme-"
|
25
25
|
|
26
26
|
def self.init(site)
|
27
27
|
Munger.new(site).munge!
|
@@ -3,18 +3,14 @@
|
|
3
3
|
module Jekyll
|
4
4
|
module RemoteTheme
|
5
5
|
class Downloader
|
6
|
-
|
7
|
-
|
8
|
-
USER_AGENT = "Jekyll Remote Theme/#{VERSION} (+#{PROJECT_URL})".freeze
|
6
|
+
PROJECT_URL = "https://github.com/benbalter/jekyll-remote-theme"
|
7
|
+
USER_AGENT = "Jekyll Remote Theme/#{VERSION} (+#{PROJECT_URL})"
|
9
8
|
MAX_FILE_SIZE = 1 * (1024 * 1024 * 1024) # Size in bytes (1 GB)
|
10
9
|
NET_HTTP_ERRORS = [
|
11
10
|
Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::OpenTimeout,
|
12
11
|
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
|
13
12
|
].freeze
|
14
13
|
|
15
|
-
attr_reader :theme
|
16
|
-
private :theme
|
17
|
-
|
18
14
|
def initialize(theme)
|
19
15
|
@theme = theme
|
20
16
|
end
|
@@ -35,6 +31,8 @@ module Jekyll
|
|
35
31
|
|
36
32
|
private
|
37
33
|
|
34
|
+
attr_reader :theme
|
35
|
+
|
38
36
|
def zip_file
|
39
37
|
@zip_file ||= Tempfile.new([TEMP_PREFIX, ".zip"], :binmode => true)
|
40
38
|
end
|
@@ -57,6 +55,7 @@ module Jekyll
|
|
57
55
|
|
58
56
|
def request
|
59
57
|
return @request if defined? @request
|
58
|
+
|
60
59
|
@request = Net::HTTP::Get.new zip_url.request_uri
|
61
60
|
@request["User-Agent"] = USER_AGENT
|
62
61
|
@request
|
@@ -64,11 +63,13 @@ module Jekyll
|
|
64
63
|
|
65
64
|
def raise_unless_sucess(response)
|
66
65
|
return if response.is_a?(Net::HTTPSuccess)
|
66
|
+
|
67
67
|
raise DownloadError, "#{response.code} - #{response.message}"
|
68
68
|
end
|
69
69
|
|
70
70
|
def enforce_max_file_size(size)
|
71
71
|
return unless size && size > MAX_FILE_SIZE
|
72
|
+
|
72
73
|
raise DownloadError, "Maximum file size of #{MAX_FILE_SIZE} bytes exceeded"
|
73
74
|
end
|
74
75
|
|
@@ -88,8 +89,10 @@ module Jekyll
|
|
88
89
|
|
89
90
|
# Full URL to codeload zip download endpoint for the given theme
|
90
91
|
def zip_url
|
91
|
-
@zip_url ||= Addressable::URI.
|
92
|
-
|
92
|
+
@zip_url ||= Addressable::URI.new(
|
93
|
+
:scheme => theme.scheme,
|
94
|
+
:host => "codeload.#{theme.host}",
|
95
|
+
:path => [theme.owner, theme.name, "zip", theme.git_ref].join("/")
|
93
96
|
).normalize
|
94
97
|
end
|
95
98
|
|
@@ -9,8 +9,8 @@ module Jekyll
|
|
9
9
|
extend Forwardable
|
10
10
|
def_delegator :theme, :root, :full_gem_path
|
11
11
|
|
12
|
-
DEPENDENCY_PREFIX = %r!^\s*[a-z]+\.add_(?:runtime_)?dependency
|
13
|
-
DEPENDENCY_REGEX = %r!#{DEPENDENCY_PREFIX}\(?\s*["']([a-z_-]+)["']
|
12
|
+
DEPENDENCY_PREFIX = %r!^\s*[a-z]+\.add_(?:runtime_)?dependency!.freeze
|
13
|
+
DEPENDENCY_REGEX = %r!#{DEPENDENCY_PREFIX}\(?\s*["']([a-z_-]+)["']!.freeze
|
14
14
|
|
15
15
|
def initialize(theme)
|
16
16
|
@theme = theme
|
@@ -32,7 +32,7 @@ module Jekyll
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def munged?
|
35
|
-
site.theme
|
35
|
+
site.theme&.is_a?(Jekyll::RemoteTheme::Theme)
|
36
36
|
end
|
37
37
|
|
38
38
|
def theme
|
@@ -49,6 +49,7 @@ module Jekyll
|
|
49
49
|
|
50
50
|
def configure_theme
|
51
51
|
return unless theme
|
52
|
+
|
52
53
|
site.config["theme"] = theme.name
|
53
54
|
site.theme = theme
|
54
55
|
site.theme.configure_sass
|
@@ -59,6 +60,7 @@ module Jekyll
|
|
59
60
|
def enqueue_theme_cleanup
|
60
61
|
at_exit do
|
61
62
|
return unless munged? && downloader.downloaded?
|
63
|
+
|
62
64
|
Jekyll.logger.debug LOG_KEY, "Cleaning up #{theme.root}"
|
63
65
|
FileUtils.rm_rf theme.root
|
64
66
|
end
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module Jekyll
|
4
4
|
module RemoteTheme
|
5
5
|
class Theme < Jekyll::Theme
|
6
|
-
OWNER_REGEX = %r!(?<owner>[a-z0-9\-]+)!i
|
7
|
-
NAME_REGEX = %r!(?<name>[a-z0-9\._\-]+)!i
|
8
|
-
REF_REGEX = %r!@(?<ref>[a-z0-9\._\-]+)!i # May be a branch, tag, or commit
|
9
|
-
THEME_REGEX = %r!\A#{OWNER_REGEX}/#{NAME_REGEX}(?:#{REF_REGEX})?\z!i
|
6
|
+
OWNER_REGEX = %r!(?<owner>[a-z0-9\-]+)!i.freeze
|
7
|
+
NAME_REGEX = %r!(?<name>[a-z0-9\._\-]+)!i.freeze
|
8
|
+
REF_REGEX = %r!@(?<ref>[a-z0-9\._\-]+)!i.freeze # May be a branch, tag, or commit
|
9
|
+
THEME_REGEX = %r!\A#{OWNER_REGEX}/#{NAME_REGEX}(?:#{REF_REGEX})?\z!i.freeze
|
10
10
|
|
11
11
|
# Initializes a new Jekyll::RemoteTheme::Theme
|
12
12
|
#
|
@@ -14,6 +14,10 @@ module Jekyll
|
|
14
14
|
#
|
15
15
|
# 1. owner/theme-name - a GitHub owner + theme-name string
|
16
16
|
# 2. owner/theme-name@git_ref - a GitHub owner + theme-name + Git ref string
|
17
|
+
# 3. http[s]://github.<yourEnterprise>.com/owner/theme-name
|
18
|
+
# - An enterprise GitHub instance + a GitHub owner + a theme-name string
|
19
|
+
# 4. http[s]://github.<yourEnterprise>.com/owner/theme-name@git_ref
|
20
|
+
# - An enterprise GitHub instance + a GitHub owner + a theme-name + Git ref string
|
17
21
|
def initialize(raw_theme)
|
18
22
|
@raw_theme = raw_theme.to_s.downcase.strip
|
19
23
|
super(@raw_theme)
|
@@ -27,13 +31,23 @@ module Jekyll
|
|
27
31
|
theme_parts[:owner]
|
28
32
|
end
|
29
33
|
|
34
|
+
def host
|
35
|
+
uri&.host
|
36
|
+
end
|
37
|
+
|
38
|
+
def scheme
|
39
|
+
uri&.scheme
|
40
|
+
end
|
41
|
+
|
30
42
|
def name_with_owner
|
31
43
|
[owner, name].join("/")
|
32
44
|
end
|
33
45
|
alias_method :nwo, :name_with_owner
|
34
46
|
|
35
47
|
def valid?
|
36
|
-
theme_parts && name && owner
|
48
|
+
return false unless uri && theme_parts && name && owner
|
49
|
+
|
50
|
+
host && valid_hosts.include?(host)
|
37
51
|
end
|
38
52
|
|
39
53
|
def git_ref
|
@@ -45,19 +59,43 @@ module Jekyll
|
|
45
59
|
end
|
46
60
|
|
47
61
|
def inspect
|
48
|
-
"#<Jekyll::RemoteTheme::Theme owner=\"#{owner}\" name=\"#{name}\"" \
|
62
|
+
"#<Jekyll::RemoteTheme::Theme host=\"#{host}\" owner=\"#{owner}\" name=\"#{name}\"" \
|
49
63
|
" ref=\"#{git_ref}\" root=\"#{root}\">"
|
50
64
|
end
|
51
65
|
|
52
66
|
private
|
53
67
|
|
68
|
+
def uri
|
69
|
+
return @uri if defined? @uri
|
70
|
+
|
71
|
+
@uri = if @raw_theme =~ THEME_REGEX
|
72
|
+
Addressable::URI.new(
|
73
|
+
:scheme => "https",
|
74
|
+
:host => "github.com",
|
75
|
+
:path => @raw_theme
|
76
|
+
)
|
77
|
+
else
|
78
|
+
Addressable::URI.parse @raw_theme
|
79
|
+
end
|
80
|
+
rescue Addressable::URI::InvalidURIError
|
81
|
+
@uri = nil
|
82
|
+
end
|
83
|
+
|
54
84
|
def theme_parts
|
55
|
-
@theme_parts ||=
|
85
|
+
@theme_parts ||= uri.path[1..-1].match(THEME_REGEX) if uri
|
56
86
|
end
|
57
87
|
|
58
88
|
def gemspec
|
59
89
|
@gemspec ||= MockGemspec.new(self)
|
60
90
|
end
|
91
|
+
|
92
|
+
def valid_hosts
|
93
|
+
@valid_hosts ||= [
|
94
|
+
"github.com",
|
95
|
+
ENV["PAGES_GITHUB_HOSTNAME"],
|
96
|
+
ENV["GITHUB_HOSTNAME"],
|
97
|
+
].compact.to_set
|
98
|
+
end
|
61
99
|
end
|
62
100
|
end
|
63
101
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-remote-theme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Balter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: jekyll
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,20 +120,28 @@ dependencies:
|
|
106
120
|
requirements:
|
107
121
|
- - "~>"
|
108
122
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0.
|
110
|
-
- - ">="
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: 0.49.0
|
123
|
+
version: '0.59'
|
113
124
|
type: :development
|
114
125
|
prerelease: false
|
115
126
|
version_requirements: !ruby/object:Gem::Requirement
|
116
127
|
requirements:
|
117
128
|
- - "~>"
|
118
129
|
- !ruby/object:Gem::Version
|
119
|
-
version: '0.
|
120
|
-
|
130
|
+
version: '0.59'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: rubocop-jekyll
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0.3'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
121
143
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.
|
144
|
+
version: '0.3'
|
123
145
|
- !ruby/object:Gem::Dependency
|
124
146
|
name: webmock
|
125
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,15 +181,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
159
181
|
requirements:
|
160
182
|
- - ">="
|
161
183
|
- !ruby/object:Gem::Version
|
162
|
-
version:
|
184
|
+
version: 2.3.0
|
163
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
186
|
requirements:
|
165
187
|
- - ">="
|
166
188
|
- !ruby/object:Gem::Version
|
167
189
|
version: '0'
|
168
190
|
requirements: []
|
169
|
-
|
170
|
-
rubygems_version: 2.7.6
|
191
|
+
rubygems_version: 3.0.3
|
171
192
|
signing_key:
|
172
193
|
specification_version: 4
|
173
194
|
summary: Jekyll plugin for building Jekyll sites with any GitHub-hosted theme
|