jekyll-remote-theme 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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