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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 246733cb4cbde4092301d6629e1e8d9fbb35b7c53f90be780167f8afcda9c337
4
- data.tar.gz: f36b9531b746707298468a67b02b225c7d32059f03884878e3dbc3df8d6b6c47
3
+ metadata.gz: db842baa8db191bebfceb51b6c6ccc6893872d14cdeafe70b7979907df93d49f
4
+ data.tar.gz: 822dd49434a52f18f326f9a39930dc0b09ea7ad1e23c7f99dd8c07a4d4c21eeb
5
5
  SHA512:
6
- metadata.gz: fca934add7f3719eda06c8520e4344fc39e22b5bd9b798b5e35fec56f607a5f559a4749ff0b9401eba67b127fe06b79fb139ef15cb47409150294017b53e009b
7
- data.tar.gz: f136e8fed5e3fefe87c19de32c62b80be4b699d0931f59d7c8dfd8d4390b3e60110e112325a704c5e5af20805d26b5dae45ac2d7da4993d59803a9988414c1df
6
+ metadata.gz: 8f411c8649bef2a2bd4d7d1382f8fdaeb55f258f68ea1a0751a3ed66d8f5da67aab708cee6cb2bbf5a046a09080719c11c77c6df230b2510789d6cf378a7ffcd
7
+ data.tar.gz: 61392d3287b1c86089b583a0f12ba8bd60da7dbe03c224d3a7294b35f6781b6908ebb77f9cd2bf7e4867eac45a4c923d8a5627924274a897bec1861e77e174b9
@@ -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".freeze
23
- LOG_KEY = "Remote Theme:".freeze
24
- TEMP_PREFIX = "jekyll-remote-theme-".freeze
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
- HOST = "https://codeload.github.com".freeze
7
- PROJECT_URL = "https://github.com/benbalter/jekyll-remote-theme".freeze
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.join(
92
- HOST, "#{theme.owner}/", "#{theme.name}/", "zip/", theme.git_ref
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 && site.theme.is_a?(Jekyll::RemoteTheme::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 ||= @raw_theme.match(THEME_REGEX)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module RemoteTheme
5
- VERSION = "0.3.1".freeze
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  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.3.1
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: 2018-05-14 00:00:00.000000000 Z
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.4'
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.4'
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.49.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: '0'
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
- rubyforge_project:
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