jekyll-manager 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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +63 -0
  4. data/lib/jekyll-admin.rb +47 -0
  5. data/lib/jekyll-admin/apiable.rb +167 -0
  6. data/lib/jekyll-admin/data_file.rb +103 -0
  7. data/lib/jekyll-admin/directory.rb +73 -0
  8. data/lib/jekyll-admin/file_helper.rb +68 -0
  9. data/lib/jekyll-admin/page_without_a_file.rb +7 -0
  10. data/lib/jekyll-admin/path_helper.rb +78 -0
  11. data/lib/jekyll-admin/public/bundle.js +58 -0
  12. data/lib/jekyll-admin/public/bundle.js.map +1 -0
  13. data/lib/jekyll-admin/public/favicon.ico +0 -0
  14. data/lib/jekyll-admin/public/fonts/fontawesome-webfont.eot +0 -0
  15. data/lib/jekyll-admin/public/fonts/fontawesome-webfont.ttf +0 -0
  16. data/lib/jekyll-admin/public/fonts/fontawesome-webfont.woff +0 -0
  17. data/lib/jekyll-admin/public/fonts/fontawesome-webfont.woff2 +0 -0
  18. data/lib/jekyll-admin/public/fonts/lato-bold.ttf +0 -0
  19. data/lib/jekyll-admin/public/fonts/lato-regular.ttf +0 -0
  20. data/lib/jekyll-admin/public/fonts/rw-widgets.eot +0 -0
  21. data/lib/jekyll-admin/public/fonts/rw-widgets.ttf +0 -0
  22. data/lib/jekyll-admin/public/fonts/rw-widgets.woff +0 -0
  23. data/lib/jekyll-admin/public/images/fontawesome-webfont.svg +685 -0
  24. data/lib/jekyll-admin/public/images/loader-big.gif +0 -0
  25. data/lib/jekyll-admin/public/images/loading.gif +0 -0
  26. data/lib/jekyll-admin/public/images/logo-black-red.png +0 -0
  27. data/lib/jekyll-admin/public/images/logo.png +0 -0
  28. data/lib/jekyll-admin/public/images/no-image.svg +1 -0
  29. data/lib/jekyll-admin/public/images/rw-widgets.svg +18 -0
  30. data/lib/jekyll-admin/public/index.html +13 -0
  31. data/lib/jekyll-admin/public/styles.css +5 -0
  32. data/lib/jekyll-admin/public/styles.css.map +1 -0
  33. data/lib/jekyll-admin/server.rb +119 -0
  34. data/lib/jekyll-admin/server/collection.rb +88 -0
  35. data/lib/jekyll-admin/server/configuration.rb +57 -0
  36. data/lib/jekyll-admin/server/dashboard.rb +113 -0
  37. data/lib/jekyll-admin/server/data.rb +82 -0
  38. data/lib/jekyll-admin/server/draft.rb +110 -0
  39. data/lib/jekyll-admin/server/page.rb +90 -0
  40. data/lib/jekyll-admin/server/static_file.rb +82 -0
  41. data/lib/jekyll-admin/server/template.rb +196 -0
  42. data/lib/jekyll-admin/server/theme.rb +135 -0
  43. data/lib/jekyll-admin/static_server.rb +24 -0
  44. data/lib/jekyll-admin/urlable.rb +67 -0
  45. data/lib/jekyll-admin/version.rb +3 -0
  46. data/lib/jekyll-manager.rb +5 -0
  47. data/lib/jekyll/commands/build.rb +14 -0
  48. data/lib/jekyll/commands/serve.rb +26 -0
  49. metadata +253 -0
@@ -0,0 +1,135 @@
1
+ module JekyllAdmin
2
+ class Server < Sinatra::Base
3
+ namespace "/theme" do
4
+ get do
5
+ ensure_theme
6
+ json({
7
+ :name => theme.name,
8
+ :version => theme.version,
9
+ :authors => theme.authors.join(", "),
10
+ :license => theme.license,
11
+ :summary => theme.summary,
12
+ :description => theme.description,
13
+ :path => at_root,
14
+ :directories => entries.map(&:to_api),
15
+ })
16
+ end
17
+
18
+ get "/*?/?:path.:ext" do
19
+ ensure_requested_file
20
+ json({
21
+ :name => filename,
22
+ :path => file_path,
23
+ :relative_path => relative_path_of(file_path),
24
+ :raw_content => raw_content,
25
+ :exist_at_source => exist_at_source?,
26
+ :http_url => http_url(file_path),
27
+ :api_url => url,
28
+ })
29
+ end
30
+
31
+ get "/?*" do
32
+ ensure_directory_in_theme
33
+ json({
34
+ :name => splats.first.split("/").last || theme.name,
35
+ :path => at_root(splats.first),
36
+ :entries => entries.map(&:to_api).concat(subdir_entries),
37
+ })
38
+ end
39
+
40
+ put "/*?/?:path.:ext" do
41
+ write_file write_path, raw_content
42
+ json({
43
+ :name => filename,
44
+ :path => write_path,
45
+ :relative_path => relative_path_of(file_path),
46
+ :raw_content => raw_content,
47
+ :exist_at_source => true,
48
+ :http_url => http_url(file_path),
49
+ :api_url => url,
50
+ })
51
+ end
52
+
53
+ private
54
+
55
+ def ensure_theme
56
+ render_404 unless site.theme
57
+ end
58
+
59
+ def ensure_directory_in_theme
60
+ ensure_theme
61
+ ensure_directory
62
+ end
63
+
64
+ def ensure_requested_file
65
+ render_404 unless File.exist?(file_path)
66
+ end
67
+
68
+ def at_root(dir = "")
69
+ site.in_theme_dir(dir)
70
+ end
71
+
72
+ def theme
73
+ site.theme.send(:gemspec)
74
+ end
75
+
76
+ def directory_path
77
+ site.in_theme_dir(splats.first)
78
+ end
79
+
80
+ def entries
81
+ args = {
82
+ :base => site.theme.root,
83
+ :content_type => "theme",
84
+ :splat => splats.first,
85
+ }
86
+ Directory.new(directory_path, args).directories
87
+ end
88
+
89
+ def subdir_entries
90
+ Dir["#{directory_path}/*"].reject { |e| File.directory?(e) }.map! do |e|
91
+ {
92
+ :name => relative_path_of(e).sub("#{splats.first}/", ""),
93
+ :extname => File.extname(e),
94
+ :http_url => http_url(e),
95
+ :api_url => api_url(e),
96
+ }
97
+ end
98
+ end
99
+
100
+ def splats
101
+ params["splat"] || ["/"]
102
+ end
103
+
104
+ def file_path
105
+ File.join(directory_path, filename)
106
+ end
107
+
108
+ def relative_path_of(entry)
109
+ entry.sub(at_root, "")
110
+ end
111
+
112
+ def api_url(entry)
113
+ File.join(base_url, "_api", "theme", relative_path_of(entry))
114
+ end
115
+
116
+ def http_url(entry)
117
+ if splats.first.include?("assets") && !Jekyll::Utils.has_yaml_header?(entry)
118
+ File.join(base_url, relative_path_of(entry))
119
+ end
120
+ end
121
+
122
+ def write_path
123
+ File.join(site.source, relative_path_of(file_path))
124
+ end
125
+
126
+ def exist_at_source?
127
+ File.exist? write_path
128
+ end
129
+
130
+ def raw_content
131
+ File.read(file_path, Jekyll::Utils.merged_file_read_opts(site, {}))
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,24 @@
1
+ module JekyllAdmin
2
+ class StaticServer < Sinatra::Base
3
+ set :public_dir, File.expand_path("./public", File.dirname(__FILE__))
4
+
5
+ MUST_BUILD_MESSAGE = "Front end not yet built. Run `script/build` to build.".freeze
6
+
7
+ # Allow `/admin` and `/admin/`, and `/admin/*` to serve `/public/dist/index.html`
8
+ get "/*" do
9
+ send_file index_path
10
+ end
11
+
12
+ # Provide a descriptive error message in dev. if frontend is not build
13
+ not_found do
14
+ status 404
15
+ MUST_BUILD_MESSAGE if settings.development? || settings.test?
16
+ end
17
+
18
+ private
19
+
20
+ def index_path
21
+ @index_path ||= File.join(settings.public_folder, "index.html")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,67 @@
1
+ module JekyllAdmin
2
+ # Abstract module to be included in Convertible and Document to provide
3
+ # additional, URL-specific functionality without duplicating logic
4
+ module URLable
5
+
6
+ # Absolute URL to the HTTP(S) rendered/served representation of this resource
7
+ def http_url
8
+ return if is_a?(Jekyll::Collection) || is_a?(JekyllAdmin::DataFile)
9
+ return if is_a?(Jekyll::Document) && !collection.write?
10
+ @http_url ||= Addressable::URI.new(
11
+ :scheme => scheme, :host => host, :port => port,
12
+ :path => path_with_base(JekyllAdmin.site.config["baseurl"], url)
13
+ ).normalize.to_s
14
+ end
15
+
16
+ # Absolute URL to the API representation of this resource
17
+ def api_url
18
+ @api_url ||= Addressable::URI.new(
19
+ :scheme => scheme, :host => host, :port => port,
20
+ :path => path_with_base("/_api", resource_path)
21
+ ).normalize.to_s
22
+ end
23
+
24
+ def entries_url
25
+ return unless is_a?(Jekyll::Collection)
26
+ "#{api_url}/entries"
27
+ end
28
+
29
+ private
30
+
31
+ # URL path relative to `_api/` to retreive the given resource via the API
32
+ # Note: we can't use a case statement here, because === doesn't like includes
33
+ def resource_path
34
+ if is_a?(Jekyll::Document) && draft?
35
+ "/#{relative_path.sub(%r!\A_!, "")}"
36
+ elsif is_a?(Jekyll::Document)
37
+ "/collections/#{relative_path.sub(%r!\A_!, "")}"
38
+ elsif is_a?(Jekyll::Collection)
39
+ "/collections/#{label}"
40
+ elsif is_a?(JekyllAdmin::DataFile)
41
+ "/data/#{relative_path}"
42
+ elsif is_a?(Jekyll::StaticFile)
43
+ "/static_files/#{relative_path}"
44
+ elsif is_a?(Jekyll::Page)
45
+ "/pages/#{relative_path}"
46
+ end
47
+ end
48
+
49
+ # URI.join doesn't like joining two relative paths, and File.join may join
50
+ # with `\` rather than with `/` on windows
51
+ def path_with_base(base, path)
52
+ [base, path].join("/").squeeze("/")
53
+ end
54
+
55
+ def scheme
56
+ JekyllAdmin.site.config["scheme"] || "http"
57
+ end
58
+
59
+ def host
60
+ JekyllAdmin.site.config["host"].sub("127.0.0.1", "localhost")
61
+ end
62
+
63
+ def port
64
+ JekyllAdmin.site.config["port"]
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,3 @@
1
+ module JekyllAdmin
2
+ VERSION = "0.6.0".freeze
3
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "jekyll-admin"
2
+
3
+ module JekyllManager
4
+ VERSION = "0.1.0".freeze
5
+ end
@@ -0,0 +1,14 @@
1
+ module Jekyll
2
+ module Commands
3
+ class Build < Command
4
+ class << self
5
+ alias_method :original_build, :build
6
+
7
+ def build(site, options)
8
+ options["watch"] = false
9
+ original_build(site, options)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ module Jekyll
2
+ module Commands
3
+ class Serve < Command
4
+ class << self
5
+ def start_up_webrick(opts, destination)
6
+ server = WEBrick::HTTPServer.new(webrick_opts(opts)).tap { |o| o.unmount("") }
7
+ server.mount(opts["baseurl"], Servlet, destination, file_handler_opts)
8
+
9
+ jekyll_admin_monkey_patch(server)
10
+
11
+ Jekyll.logger.info "Server address:", server_address(server, opts)
12
+ launch_browser server, opts if opts["open_url"]
13
+ boot_or_detach server, opts
14
+ end
15
+
16
+ def jekyll_admin_monkey_patch(server)
17
+ server.mount "/admin", Rack::Handler::WEBrick, JekyllAdmin::StaticServer
18
+ server.mount "/_api", Rack::Handler::WEBrick, JekyllAdmin::Server
19
+ Jekyll.logger.warn "Auto-regeneration:", "disabled by Jekyll Manager."
20
+ Jekyll.logger.warn "", "The site will regenerate only via the Admin interface."
21
+ Jekyll.logger.info "Jekyll Manager mode:", ENV["RACK_ENV"] || "production"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,253 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ashwin Maroli
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-07-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sinatra-contrib
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: addressable
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: oj
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.3'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 3.3.2
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '3.3'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.3.2
89
+ - !ruby/object:Gem::Dependency
90
+ name: bundler
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.7'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.7'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '10.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '10.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.4'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.4'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.48.1
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 0.48.1
145
+ - !ruby/object:Gem::Dependency
146
+ name: sinatra-cross_origin
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.3'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.3'
159
+ - !ruby/object:Gem::Dependency
160
+ name: gem-release
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.7'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.7'
173
+ description: An administrative framework for Jekyll sites, Jekyll Manager is essentially
174
+ Jekyll Admin repackaged with some alterations.
175
+ email:
176
+ - ashmaroli@gmail.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - LICENSE
182
+ - README.md
183
+ - lib/jekyll-admin.rb
184
+ - lib/jekyll-admin/apiable.rb
185
+ - lib/jekyll-admin/data_file.rb
186
+ - lib/jekyll-admin/directory.rb
187
+ - lib/jekyll-admin/file_helper.rb
188
+ - lib/jekyll-admin/page_without_a_file.rb
189
+ - lib/jekyll-admin/path_helper.rb
190
+ - lib/jekyll-admin/public/bundle.js
191
+ - lib/jekyll-admin/public/bundle.js.map
192
+ - lib/jekyll-admin/public/favicon.ico
193
+ - lib/jekyll-admin/public/fonts/fontawesome-webfont.eot
194
+ - lib/jekyll-admin/public/fonts/fontawesome-webfont.ttf
195
+ - lib/jekyll-admin/public/fonts/fontawesome-webfont.woff
196
+ - lib/jekyll-admin/public/fonts/fontawesome-webfont.woff2
197
+ - lib/jekyll-admin/public/fonts/lato-bold.ttf
198
+ - lib/jekyll-admin/public/fonts/lato-regular.ttf
199
+ - lib/jekyll-admin/public/fonts/rw-widgets.eot
200
+ - lib/jekyll-admin/public/fonts/rw-widgets.ttf
201
+ - lib/jekyll-admin/public/fonts/rw-widgets.woff
202
+ - lib/jekyll-admin/public/images/fontawesome-webfont.svg
203
+ - lib/jekyll-admin/public/images/loader-big.gif
204
+ - lib/jekyll-admin/public/images/loading.gif
205
+ - lib/jekyll-admin/public/images/logo-black-red.png
206
+ - lib/jekyll-admin/public/images/logo.png
207
+ - lib/jekyll-admin/public/images/no-image.svg
208
+ - lib/jekyll-admin/public/images/rw-widgets.svg
209
+ - lib/jekyll-admin/public/index.html
210
+ - lib/jekyll-admin/public/styles.css
211
+ - lib/jekyll-admin/public/styles.css.map
212
+ - lib/jekyll-admin/server.rb
213
+ - lib/jekyll-admin/server/collection.rb
214
+ - lib/jekyll-admin/server/configuration.rb
215
+ - lib/jekyll-admin/server/dashboard.rb
216
+ - lib/jekyll-admin/server/data.rb
217
+ - lib/jekyll-admin/server/draft.rb
218
+ - lib/jekyll-admin/server/page.rb
219
+ - lib/jekyll-admin/server/static_file.rb
220
+ - lib/jekyll-admin/server/template.rb
221
+ - lib/jekyll-admin/server/theme.rb
222
+ - lib/jekyll-admin/static_server.rb
223
+ - lib/jekyll-admin/urlable.rb
224
+ - lib/jekyll-admin/version.rb
225
+ - lib/jekyll-manager.rb
226
+ - lib/jekyll/commands/build.rb
227
+ - lib/jekyll/commands/serve.rb
228
+ homepage: https://github.com/ashmaroli/jekyll-manager
229
+ licenses:
230
+ - MIT
231
+ metadata:
232
+ allowed_push_host: https://rubygems.org
233
+ post_install_message:
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ requirements: []
248
+ rubyforge_project:
249
+ rubygems_version: 2.6.10
250
+ signing_key:
251
+ specification_version: 4
252
+ summary: Jekyll Admin repackaged with some alterations
253
+ test_files: []