bridgetown-core 0.8.1 → 0.9.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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bridgetown-core/collection.rb +12 -6
  3. data/lib/bridgetown-core/command.rb +1 -1
  4. data/lib/bridgetown-core/commands/build.rb +28 -15
  5. data/lib/bridgetown-core/commands/clean.rb +3 -3
  6. data/lib/bridgetown-core/commands/serve.rb +16 -23
  7. data/lib/bridgetown-core/configuration.rb +2 -2
  8. data/lib/bridgetown-core/convertible.rb +1 -1
  9. data/lib/bridgetown-core/document.rb +7 -7
  10. data/lib/bridgetown-core/drops/collection_drop.rb +2 -2
  11. data/lib/bridgetown-core/drops/document_drop.rb +6 -3
  12. data/lib/bridgetown-core/drops/url_drop.rb +2 -2
  13. data/lib/bridgetown-core/filters.rb +2 -2
  14. data/lib/bridgetown-core/hooks.rb +31 -31
  15. data/lib/bridgetown-core/liquid_renderer/file.rb +1 -1
  16. data/lib/bridgetown-core/liquid_renderer/table.rb +1 -1
  17. data/lib/bridgetown-core/log_adapter.rb +4 -4
  18. data/lib/bridgetown-core/page.rb +6 -6
  19. data/lib/bridgetown-core/plugin.rb +5 -5
  20. data/lib/bridgetown-core/reader.rb +4 -1
  21. data/lib/bridgetown-core/readers/data_reader.rb +5 -5
  22. data/lib/bridgetown-core/readers/post_reader.rb +27 -7
  23. data/lib/bridgetown-core/related_posts.rb +1 -1
  24. data/lib/bridgetown-core/renderer.rb +3 -3
  25. data/lib/bridgetown-core/static_file.rb +10 -15
  26. data/lib/bridgetown-core/tags/highlight.rb +5 -5
  27. data/lib/bridgetown-core/utils.rb +1 -1
  28. data/lib/bridgetown-core/utils/ansi.rb +8 -8
  29. data/lib/bridgetown-core/utils/platforms.rb +2 -2
  30. data/lib/bridgetown-core/utils/win_tz.rb +1 -1
  31. data/lib/bridgetown-core/version.rb +1 -1
  32. data/lib/bridgetown-core/watcher.rb +5 -11
  33. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c1084717b64c2b8052f5e87763a1382c3f83fa49e842da56f37757a783cf547
4
- data.tar.gz: 9d421e1223a7e47ae0822e28788af30542af943efd360c17f2f57bfdf32360ee
3
+ metadata.gz: d54c0a2a041830e819a8f60b45164f00fa833bc5d795941599969bb967e550ae
4
+ data.tar.gz: 81bf01e9efec7ea134d9c76de18a0b19bdd4d9addc7d0011a03fc038d18890f3
5
5
  SHA512:
6
- metadata.gz: eb167ebdaaece121612d9ebe513889577f9345989418bb16a026f784ff3522066649a89974d1e197ae13604bfd520f907d5e1c1f954dbb85a82d0b26f30d0c86
7
- data.tar.gz: c7b8c58235995de4084b595077ecc5947e9489c508407a715870801494fb4a6075ed9d7f85f00eecfaf6f685534f954a2dd3195a0be0dd888fae6c8c8a2f9fcd
6
+ metadata.gz: 8746742cc41353b34c8f91549b1981034014fb35cb23ea4b3077b96c9c41ca10470e688c78b106b1d7b1655ca0503e01e9095bcc0f17ac3afdc8aadd891f49f9
7
+ data.tar.gz: 50c6e804f3712ab3a30fafddbde9c5a0c9c04487b8a3f671fb9bc8cdd1d5fb14b64913b0f048672592ef15fad8d2c5aad1e0f3c348c6fce5479fdfa13f718aa2
@@ -109,14 +109,20 @@ module Bridgetown
109
109
  @relative_directory ||= "_#{label}"
110
110
  end
111
111
 
112
+ # The relative path to the directory containing the collection.
113
+ #
114
+ # Returns a String containing the directory name where the collection
115
+ # is stored relative to the source directory
116
+ def relative_path
117
+ Pathname.new(container).join(relative_directory).to_s
118
+ end
119
+
112
120
  # The full path to the directory containing the collection.
113
121
  #
114
- # Returns a String containing th directory name where the collection
122
+ # Returns a String containing the directory name where the collection
115
123
  # is stored on the filesystem.
116
124
  def directory
117
- @directory ||= site.in_source_dir(
118
- File.join(container, relative_directory)
119
- )
125
+ @directory ||= site.in_source_dir(relative_path)
120
126
  end
121
127
 
122
128
  # The full path to the directory containing the collection, with
@@ -209,7 +215,7 @@ module Bridgetown
209
215
  end
210
216
 
211
217
  def read_document(full_path)
212
- doc = Document.new(full_path, :site => site, :collection => self)
218
+ doc = Document.new(full_path, site: site, collection: self)
213
219
  doc.read
214
220
  docs << doc if site.unpublished || doc.published?
215
221
  end
@@ -263,7 +269,7 @@ module Bridgetown
263
269
 
264
270
  def read_static_file(file_path, full_path)
265
271
  relative_dir = Bridgetown.sanitized_path(
266
- relative_directory,
272
+ relative_path,
267
273
  File.dirname(file_path)
268
274
  ).chomp("/.")
269
275
 
@@ -66,7 +66,7 @@ module Bridgetown
66
66
  "Serve the website from the given base URL"
67
67
  cmd.option "force_polling", "--force_polling", "Force watch to use polling"
68
68
  cmd.option "lsi", "--lsi", "Use LSI for improved related posts"
69
- cmd.option "unpublished", "--unpublished",
69
+ cmd.option "unpublished", "-U", "--unpublished",
70
70
  "Render posts that were marked as unpublished"
71
71
  cmd.option "disable_disk_cache", "--disable-disk-cache",
72
72
  "Disable caching to disk"
@@ -30,20 +30,20 @@ module Bridgetown
30
30
  " build is about to begin…"
31
31
 
32
32
  options = configuration_from_options(options)
33
- site = Bridgetown::Site.new(options)
33
+ @site = Bridgetown::Site.new(options)
34
34
 
35
35
  if options.fetch("skip_initial_build", false)
36
36
  Bridgetown.logger.warn "Build Warning:", "Skipping the initial build." \
37
37
  " This may result in an out-of-date site."
38
38
  else
39
- build(site, options)
39
+ build(options)
40
40
  end
41
41
 
42
42
  if options.fetch("detach", false)
43
43
  Bridgetown.logger.info "Auto-regeneration:",
44
44
  "disabled when running server detached."
45
45
  elsif options.fetch("watch", false)
46
- watch(site, options)
46
+ watch(options)
47
47
  else
48
48
  Bridgetown.logger.info "Auto-regeneration:", "disabled. Use --watch to enable."
49
49
  end
@@ -51,31 +51,30 @@ module Bridgetown
51
51
 
52
52
  # Build your Bridgetown site.
53
53
  #
54
- # site - the Bridgetown::Site instance to build
55
- # options - A Hash of options passed to the command
54
+ # options - A Hash of options passed to the command or loaded from config
56
55
  #
57
56
  # Returns nothing.
58
- def build(site, options)
57
+ def build(options)
59
58
  t = Time.now
60
- source = File.expand_path(options["source"])
61
- destination = File.expand_path(options["destination"])
59
+ display_folder_paths(options)
60
+ if options["unpublished"]
61
+ Bridgetown.logger.info "Unpublished mode:",
62
+ "enabled. Processing documents marked unpublished"
63
+ end
62
64
  incremental = options["incremental"]
63
- Bridgetown.logger.info "Source:", source
64
- Bridgetown.logger.info "Destination:", destination
65
65
  Bridgetown.logger.info "Incremental build:",
66
66
  (incremental ? "enabled" : "disabled. Enable with --incremental")
67
67
  Bridgetown.logger.info "Generating…"
68
- process_site(site)
68
+ process_site(@site)
69
69
  Bridgetown.logger.info "Done! 🎉", "Completed in #{(Time.now - t).round(3)} seconds."
70
70
  end
71
71
 
72
72
  # Private: Watch for file changes and rebuild the site.
73
73
  #
74
- # site - A Bridgetown::Site instance
75
- # options - A Hash of options passed to the command
74
+ # options - A Hash of options passed to the command or loaded from config
76
75
  #
77
76
  # Returns nothing.
78
- def watch(site, options)
77
+ def watch(options)
79
78
  # Warn Windows users that they might need to upgrade.
80
79
  if Utils::Platforms.bash_on_windows?
81
80
  Bridgetown.logger.warn "",
@@ -88,7 +87,21 @@ module Bridgetown
88
87
  end
89
88
 
90
89
  # External.require_with_graceful_fail "bridgetown-watch"
91
- Bridgetown::Watcher.watch(options, site)
90
+ Bridgetown::Watcher.watch(@site, options)
91
+ end
92
+
93
+ # Private: display the source and destination folder paths
94
+ #
95
+ # options - A Hash of options passed to the command
96
+ #
97
+ # Returns nothing.
98
+ def display_folder_paths(options)
99
+ source = File.expand_path(options["source"])
100
+ destination = File.expand_path(options["destination"])
101
+ plugins_dir = File.expand_path(options["plugins_dir"])
102
+ Bridgetown.logger.info "Source:", source
103
+ Bridgetown.logger.info "Destination:", destination
104
+ Bridgetown.logger.info "Custom Plugins:", plugins_dir if Dir.exist?(plugins_dir)
92
105
  end
93
106
  end
94
107
  end
@@ -24,9 +24,9 @@ module Bridgetown
24
24
  metadata_file = File.join(options["source"], ".bridgetown-metadata")
25
25
  cache_dir = File.join(options["source"], options["cache_dir"])
26
26
 
27
- remove(destination, :checker_func => :directory?)
28
- remove(metadata_file, :checker_func => :file?)
29
- remove(cache_dir, :checker_func => :directory?)
27
+ remove(destination, checker_func: :directory?)
28
+ remove(metadata_file, checker_func: :file?)
29
+ remove(cache_dir, checker_func: :directory?)
30
30
  end
31
31
 
32
32
  def remove(filename, checker_func: :file?)
@@ -58,6 +58,7 @@ module Bridgetown
58
58
  opts["serving"] = true
59
59
  opts["watch"] = true unless opts.key?("watch")
60
60
 
61
+ # TODO: this prints the configuration file log message out-of-order
61
62
  config = configuration_from_options(opts)
62
63
  config["url"] = default_url(config) if Bridgetown.env == "development"
63
64
 
@@ -102,15 +103,15 @@ module Bridgetown
102
103
 
103
104
  def webrick_opts(opts)
104
105
  opts = {
105
- :BridgetownOptions => opts,
106
- :DoNotReverseLookup => true,
107
- :MimeTypes => mime_types,
108
- :DocumentRoot => opts["destination"],
109
- :StartCallback => start_callback(opts["detach"]),
110
- :StopCallback => stop_callback(opts["detach"]),
111
- :BindAddress => opts["host"],
112
- :Port => opts["port"],
113
- :DirectoryIndex => DIRECTORY_INDEX,
106
+ BridgetownOptions: opts,
107
+ DoNotReverseLookup: true,
108
+ MimeTypes: mime_types,
109
+ DocumentRoot: opts["destination"],
110
+ StartCallback: start_callback(opts["detach"]),
111
+ StopCallback: stop_callback(opts["detach"]),
112
+ BindAddress: opts["host"],
113
+ Port: opts["port"],
114
+ DirectoryIndex: DIRECTORY_INDEX,
114
115
  }
115
116
 
116
117
  opts[:DirectoryIndex] = [] if opts[:BridgetownOptions]["show_dir_listing"]
@@ -121,8 +122,6 @@ module Bridgetown
121
122
  end
122
123
 
123
124
  def start_up_webrick(opts, destination)
124
- @reload_reactor.start(opts) if opts["livereload"]
125
-
126
125
  @server = WEBrick::HTTPServer.new(webrick_opts(opts)).tap { |o| o.unmount("") }
127
126
  @server.mount(opts["baseurl"].to_s, Servlet, destination, file_handler_opts)
128
127
 
@@ -134,8 +133,8 @@ module Bridgetown
134
133
  # Recreate NondisclosureName under utf-8 circumstance
135
134
  def file_handler_opts
136
135
  WEBrick::Config::FileHandler.merge(
137
- :FancyIndexing => true,
138
- :NondisclosureName => [
136
+ FancyIndexing: true,
137
+ NondisclosureName: [
139
138
  ".ht*", "~*",
140
139
  ]
141
140
  )
@@ -152,10 +151,10 @@ module Bridgetown
152
151
 
153
152
  def format_url(ssl_enabled, address, port, baseurl = nil)
154
153
  format("%<prefix>s://%<address>s:%<port>i%<baseurl>s",
155
- :prefix => ssl_enabled ? "https" : "http",
156
- :address => address,
157
- :port => port,
158
- :baseurl => baseurl ? "#{baseurl}/" : "")
154
+ prefix: ssl_enabled ? "https" : "http",
155
+ address: address,
156
+ port: port,
157
+ baseurl: baseurl ? "#{baseurl}/" : "")
159
158
  end
160
159
 
161
160
  def default_url(opts)
@@ -234,8 +233,6 @@ module Bridgetown
234
233
  unless detached
235
234
  proc do
236
235
  mutex.synchronize do
237
- # Block until EventMachine reactor starts
238
- @reload_reactor&.started_event&.wait
239
236
  @running = true
240
237
  Bridgetown.logger.info("Server running…", "press ctrl-c to stop.")
241
238
  @run_cond.broadcast
@@ -248,10 +245,6 @@ module Bridgetown
248
245
  unless detached
249
246
  proc do
250
247
  mutex.synchronize do
251
- unless @reload_reactor.nil?
252
- @reload_reactor.stop
253
- @reload_reactor.stopped_event.wait
254
- end
255
248
  @running = false
256
249
  @run_cond.broadcast
257
250
  end
@@ -150,8 +150,8 @@ module Bridgetown
150
150
  def config_files(override)
151
151
  # Adjust verbosity quickly
152
152
  Bridgetown.logger.adjust_verbosity(
153
- :quiet => quiet?(override),
154
- :verbose => verbose?(override)
153
+ quiet: quiet?(override),
154
+ verbose: verbose?(override)
155
155
  )
156
156
 
157
157
  # Get configuration from <root_dir>/<matching_default_config>
@@ -208,7 +208,7 @@ module Bridgetown
208
208
  path = destination(dest)
209
209
  FileUtils.mkdir_p(File.dirname(path))
210
210
  Bridgetown.logger.debug "Writing:", path
211
- File.write(path, output, :mode => "wb")
211
+ File.write(path, output, mode: "wb")
212
212
  Bridgetown::Hooks.trigger hook_owner, :post_write, self
213
213
  end
214
214
 
@@ -203,9 +203,9 @@ module Bridgetown
203
203
  # Returns the computed URL for the document.
204
204
  def url
205
205
  @url ||= URL.new(
206
- :template => url_template,
207
- :placeholders => url_placeholders,
208
- :permalink => permalink
206
+ template: url_template,
207
+ placeholders: url_placeholders,
208
+ permalink: permalink
209
209
  ).to_s
210
210
  end
211
211
 
@@ -238,7 +238,7 @@ module Bridgetown
238
238
  path = destination(dest)
239
239
  FileUtils.mkdir_p(File.dirname(path))
240
240
  Bridgetown.logger.debug "Writing:", path
241
- File.write(path, output, :mode => "wb")
241
+ File.write(path, output, mode: "wb")
242
242
 
243
243
  trigger_hooks(:post_write)
244
244
  end
@@ -412,7 +412,7 @@ module Bridgetown
412
412
 
413
413
  def merge_defaults
414
414
  defaults = @site.frontmatter_defaults.all(relative_path, type)
415
- merge_data!(defaults, :source => "front matter defaults") unless defaults.empty?
415
+ merge_data!(defaults, source: "front matter defaults") unless defaults.empty?
416
416
  end
417
417
 
418
418
  def read_content(**opts)
@@ -420,7 +420,7 @@ module Bridgetown
420
420
  if content =~ YAML_FRONT_MATTER_REGEXP
421
421
  self.content = $POSTMATCH
422
422
  data_file = SafeYAML.load(Regexp.last_match(1))
423
- merge_data!(data_file, :source => "YAML front matter") if data_file
423
+ merge_data!(data_file, source: "YAML front matter") if data_file
424
424
  end
425
425
  end
426
426
 
@@ -464,7 +464,7 @@ module Bridgetown
464
464
 
465
465
  def modify_date(date)
466
466
  if !data["date"] || data["date"].to_i == site.time.to_i
467
- merge_data!({ "date" => date }, :source => "filename")
467
+ merge_data!({ "date" => date }, source: "filename")
468
468
  end
469
469
  end
470
470
 
@@ -8,12 +8,12 @@ module Bridgetown
8
8
  mutable false
9
9
 
10
10
  def_delegator :@obj, :write?, :output
11
- def_delegators :@obj, :label, :docs, :files, :directory, :relative_directory
11
+ def_delegators :@obj, :label, :docs, :files, :relative_path
12
12
 
13
13
  private def_delegator :@obj, :metadata, :fallback_data
14
14
 
15
15
  def to_s
16
- docs.to_s
16
+ label
17
17
  end
18
18
  end
19
19
  end
@@ -17,7 +17,7 @@ module Bridgetown
17
17
  private def_delegator :@obj, :data, :fallback_data
18
18
 
19
19
  def collection
20
- @obj.collection.label
20
+ @collection ||= @obj.collection.to_liquid
21
21
  end
22
22
 
23
23
  def excerpt
@@ -33,11 +33,11 @@ module Bridgetown
33
33
  end
34
34
 
35
35
  def previous
36
- @obj.previous_doc.to_liquid
36
+ @previous ||= @obj.previous_doc.to_liquid
37
37
  end
38
38
 
39
39
  def next
40
- @obj.next_doc.to_liquid
40
+ @next ||= @obj.next_doc.to_liquid
41
41
  end
42
42
 
43
43
  # Generate a Hash for use in generating JSON.
@@ -48,6 +48,9 @@ module Bridgetown
48
48
  # Returns a Hash ready for JSON generation.
49
49
  def hash_for_json(state = nil)
50
50
  to_h.tap do |hash|
51
+ # use collection label in the hash
52
+ hash["collection"] = hash["collection"]["label"] if hash["collection"]
53
+
51
54
  if state && state.depth >= 2
52
55
  hash["previous"] = collapse_document(hash["previous"]) if hash["previous"]
53
56
  hash["next"] = collapse_document(hash["next"]) if hash["next"]
@@ -19,8 +19,8 @@ module Bridgetown
19
19
  end
20
20
 
21
21
  def title
22
- Utils.slugify(@obj.data["slug"], :mode => "pretty", :cased => true) ||
23
- Utils.slugify(@obj.basename_without_ext, :mode => "pretty", :cased => true)
22
+ Utils.slugify(@obj.data["slug"], mode: "pretty", cased: true) ||
23
+ Utils.slugify(@obj.basename_without_ext, mode: "pretty", cased: true)
24
24
  end
25
25
 
26
26
  def slug
@@ -60,7 +60,7 @@ module Bridgetown
60
60
  # Returns the given filename or title as a lowercase URL String.
61
61
  # See Utils.slugify for more detail.
62
62
  def slugify(input, mode = nil)
63
- Utils.slugify(input, :mode => mode)
63
+ Utils.slugify(input, mode: mode)
64
64
  end
65
65
 
66
66
  # XML escape a string for use. Replaces any special characters with
@@ -75,7 +75,7 @@ module Bridgetown
75
75
  #
76
76
  # Returns the escaped String.
77
77
  def xml_escape(input)
78
- input.to_s.encode(:xml => :attr).gsub(%r!\A"|"\Z!, "")
78
+ input.to_s.encode(xml: :attr).gsub(%r!\A"|"\Z!, "")
79
79
  end
80
80
 
81
81
  # CGI escape a string for use in a URL. Replaces any special characters
@@ -6,41 +6,41 @@ module Bridgetown
6
6
 
7
7
  # compatibility layer for octopress-hooks users
8
8
  PRIORITY_MAP = {
9
- :low => 10,
10
- :normal => 20,
11
- :high => 30,
9
+ low: 10,
10
+ normal: 20,
11
+ high: 30,
12
12
  }.freeze
13
13
 
14
14
  # initial empty hooks
15
15
  @registry = {
16
- :site => {
17
- :after_init => [],
18
- :after_reset => [],
19
- :post_read => [],
20
- :pre_render => [],
21
- :post_render => [],
22
- :post_write => [],
16
+ site: {
17
+ after_init: [],
18
+ after_reset: [],
19
+ post_read: [],
20
+ pre_render: [],
21
+ post_render: [],
22
+ post_write: [],
23
23
  },
24
- :pages => {
25
- :post_init => [],
26
- :pre_render => [],
27
- :post_render => [],
28
- :post_write => [],
24
+ pages: {
25
+ post_init: [],
26
+ pre_render: [],
27
+ post_render: [],
28
+ post_write: [],
29
29
  },
30
- :posts => {
31
- :post_init => [],
32
- :pre_render => [],
33
- :post_render => [],
34
- :post_write => [],
30
+ posts: {
31
+ post_init: [],
32
+ pre_render: [],
33
+ post_render: [],
34
+ post_write: [],
35
35
  },
36
- :documents => {
37
- :post_init => [],
38
- :pre_render => [],
39
- :post_render => [],
40
- :post_write => [],
36
+ documents: {
37
+ post_init: [],
38
+ pre_render: [],
39
+ post_render: [],
40
+ post_write: [],
41
41
  },
42
- :clean => {
43
- :on_obsolete => [],
42
+ clean: {
43
+ on_obsolete: [],
44
44
  },
45
45
  }
46
46
 
@@ -67,10 +67,10 @@ module Bridgetown
67
67
  # register a single hook to be called later, internal API
68
68
  def self.register_one(owner, event, priority, &block)
69
69
  @registry[owner] ||= {
70
- :post_init => [],
71
- :pre_render => [],
72
- :post_render => [],
73
- :post_write => [],
70
+ post_init: [],
71
+ pre_render: [],
72
+ post_render: [],
73
+ post_write: [],
74
74
  }
75
75
 
76
76
  unless @registry[owner][event]
@@ -10,7 +10,7 @@ module Bridgetown
10
10
 
11
11
  def parse(content)
12
12
  measure_time do
13
- @renderer.cache[@filename] ||= Liquid::Template.parse(content, :line_numbers => true)
13
+ @renderer.cache[@filename] ||= Liquid::Template.parse(content, line_numbers: true)
14
14
  end
15
15
  @template = @renderer.cache[@filename]
16
16
 
@@ -28,7 +28,7 @@ module Bridgetown
28
28
  data.each { |row| t << row }
29
29
  t << :separator
30
30
  t << footer
31
- t.style = { :alignment => :right, :border_top => false, :border_bottom => false }
31
+ t.style = { alignment: :right, border_top: false, border_bottom: false }
32
32
  t.align_column(0, :left)
33
33
  end
34
34
 
@@ -5,10 +5,10 @@ module Bridgetown
5
5
  attr_reader :writer, :messages, :level
6
6
 
7
7
  LOG_LEVELS = {
8
- :debug => ::Logger::DEBUG,
9
- :info => ::Logger::INFO,
10
- :warn => ::Logger::WARN,
11
- :error => ::Logger::ERROR,
8
+ debug: ::Logger::DEBUG,
9
+ info: ::Logger::INFO,
10
+ warn: ::Logger::WARN,
11
+ error: ::Logger::ERROR,
12
12
  }.freeze
13
13
 
14
14
  # Public: Create a new instance of a log writer
@@ -124,9 +124,9 @@ module Bridgetown
124
124
  # Returns the String url.
125
125
  def url
126
126
  @url ||= URL.new(
127
- :template => template,
128
- :placeholders => url_placeholders,
129
- :permalink => permalink
127
+ template: template,
128
+ placeholders: url_placeholders,
129
+ permalink: permalink
130
130
  ).to_s
131
131
  end
132
132
 
@@ -134,9 +134,9 @@ module Bridgetown
134
134
  # desired placeholder replacements. For details see "url.rb"
135
135
  def url_placeholders
136
136
  {
137
- :path => @dir,
138
- :basename => basename,
139
- :output_ext => output_ext,
137
+ path: @dir,
138
+ basename: basename,
139
+ output_ext: output_ext,
140
140
  }
141
141
  end
142
142
 
@@ -3,11 +3,11 @@
3
3
  module Bridgetown
4
4
  class Plugin
5
5
  PRIORITIES = {
6
- :low => -10,
7
- :highest => 100,
8
- :lowest => -100,
9
- :normal => 0,
10
- :high => 10,
6
+ low: -10,
7
+ highest: 100,
8
+ lowest: -100,
9
+ normal: 0,
10
+ high: 10,
11
11
  }.freeze
12
12
 
13
13
  #
@@ -70,7 +70,10 @@ module Bridgetown
70
70
  def retrieve_posts(dir)
71
71
  return if outside_configured_directory?(dir)
72
72
 
73
- site.posts.docs.concat(post_reader.read_posts(dir))
73
+ post_reader.read_posts(dir).tap do |entries|
74
+ site.posts.docs.concat(entries.select { |entry| entry.is_a?(Document) })
75
+ site.posts.files.concat(entries.select { |entry| entry.is_a?(StaticFile) })
76
+ end
74
77
  end
75
78
 
76
79
  # Recursively traverse directories with the read_directories function.
@@ -55,13 +55,13 @@ module Bridgetown
55
55
  case File.extname(path).downcase
56
56
  when ".csv"
57
57
  CSV.read(path,
58
- :headers => true,
59
- :encoding => site.config["encoding"]).map(&:to_hash)
58
+ headers: true,
59
+ encoding: site.config["encoding"]).map(&:to_hash)
60
60
  when ".tsv"
61
61
  CSV.read(path,
62
- :col_sep => "\t",
63
- :headers => true,
64
- :encoding => site.config["encoding"]).map(&:to_hash)
62
+ col_sep: "\t",
63
+ headers: true,
64
+ encoding: site.config["encoding"]).map(&:to_hash)
65
65
  else
66
66
  SafeYAML.load_file(path)
67
67
  end
@@ -25,8 +25,8 @@ module Bridgetown
25
25
  # Returns nothing.
26
26
  def read_publishable(dir, magic_dir, matcher)
27
27
  read_content(dir, magic_dir, matcher)
28
- .tap { |docs| docs.each(&:read) }
29
- .select { |doc| processable?(doc) }
28
+ .tap { |entries| entries.select { |entry| entry.respond_to?(:read) }.each(&:read) }
29
+ .select { |entry| processable?(entry) }
30
30
  end
31
31
 
32
32
  # Read all the content files from <source>/<dir>/magic_dir
@@ -40,18 +40,38 @@ module Bridgetown
40
40
  # Returns klass type of content files
41
41
  def read_content(dir, magic_dir, matcher)
42
42
  @site.reader.get_entries(dir, magic_dir).map do |entry|
43
- next unless matcher.match?(entry)
44
-
45
43
  path = @site.in_source_dir(File.join(dir, magic_dir, entry))
46
- Document.new(path,
47
- :site => @site,
48
- :collection => @site.posts)
44
+
45
+ if matcher.match?(entry) || Utils.has_yaml_header?(path)
46
+ # Process as Document
47
+ Document.new(path,
48
+ site: @site,
49
+ collection: @site.posts)
50
+ else
51
+ # Process as Static File
52
+ read_static_file(
53
+ path,
54
+ File.join(dir, magic_dir, File.dirname(entry).sub(".", ""))
55
+ )
56
+ end
49
57
  end.reject(&:nil?)
50
58
  end
51
59
 
52
60
  private
53
61
 
62
+ def read_static_file(full_path, relative_dir)
63
+ StaticFile.new(
64
+ site,
65
+ site.source,
66
+ relative_dir,
67
+ File.basename(full_path),
68
+ @site.posts
69
+ )
70
+ end
71
+
54
72
  def processable?(doc)
73
+ return true if doc.is_a?(StaticFile)
74
+
55
75
  if doc.content.nil?
56
76
  Bridgetown.logger.debug "Skipping:", "Content in #{doc.relative_path} is nil"
57
77
  false
@@ -27,7 +27,7 @@ module Bridgetown
27
27
 
28
28
  def build_index
29
29
  self.class.lsi ||= begin
30
- lsi = ClassifierReborn::LSI.new(:auto_rebuild => false)
30
+ lsi = ClassifierReborn::LSI.new(auto_rebuild: false)
31
31
  Bridgetown.logger.info("Populating LSI...")
32
32
 
33
33
  site.posts.docs.each do |x|
@@ -69,9 +69,9 @@ module Bridgetown
69
69
  # rubocop: disable Metrics/AbcSize
70
70
  def render_document
71
71
  info = {
72
- :registers => { :site => site, :page => payload["page"] },
73
- :strict_filters => liquid_options["strict_filters"],
74
- :strict_variables => liquid_options["strict_variables"],
72
+ registers: { site: site, page: payload["page"] },
73
+ strict_filters: liquid_options["strict_filters"],
74
+ strict_variables: liquid_options["strict_variables"],
75
75
  }
76
76
 
77
77
  output = document.content
@@ -41,12 +41,7 @@ module Bridgetown
41
41
  # Returns source file path.
42
42
  def path
43
43
  @path ||= begin
44
- # Static file is from a collection inside custom collections directory
45
- if !@collection.nil? && !@site.config["collections_dir"].empty?
46
- File.join(*[@base, @site.config["collections_dir"], @dir, @name].compact)
47
- else
48
- File.join(*[@base, @dir, @name].compact)
49
- end
44
+ File.join(*[@base, @dir, @name].compact)
50
45
  end
51
46
  end
52
47
 
@@ -125,11 +120,11 @@ module Bridgetown
125
120
 
126
121
  def placeholders
127
122
  {
128
- :collection => @collection.label,
129
- :path => cleaned_relative_path,
130
- :output_ext => "",
131
- :name => "",
132
- :title => "",
123
+ collection: @collection.label,
124
+ path: cleaned_relative_path,
125
+ output_ext: "",
126
+ name: "",
127
+ title: "",
133
128
  }
134
129
  end
135
130
 
@@ -149,7 +144,7 @@ module Bridgetown
149
144
  @cleaned_relative_path ||= begin
150
145
  cleaned = relative_path[0..-extname.length - 1]
151
146
  cleaned.gsub!(%r!\.*\z!, "")
152
- cleaned.sub!(@collection.relative_directory, "") if @collection
147
+ cleaned.sub!(@collection.relative_path, "") if @collection
153
148
  cleaned
154
149
  end
155
150
  end
@@ -159,12 +154,12 @@ module Bridgetown
159
154
  # be overriden in the collection's configuration in bridgetown.config.yml.
160
155
  def url
161
156
  @url ||= begin
162
- base = if @collection.nil?
157
+ base = if @collection.nil? || @collection.label == "posts"
163
158
  cleaned_relative_path
164
159
  else
165
160
  Bridgetown::URL.new(
166
- :template => @collection.url_template,
167
- :placeholders => placeholders
161
+ template: @collection.url_template,
162
+ placeholders: placeholders
168
163
  )
169
164
  end.to_s.chomp("/")
170
165
  base << extname
@@ -82,11 +82,11 @@ module Bridgetown
82
82
  def render_rouge(code)
83
83
  require "rouge"
84
84
  formatter = ::Rouge::Formatters::HTMLLegacy.new(
85
- :line_numbers => @highlight_options[:linenos],
86
- :wrap => false,
87
- :css_class => "highlight",
88
- :gutter_class => "gutter",
89
- :code_class => "code"
85
+ line_numbers: @highlight_options[:linenos],
86
+ wrap: false,
87
+ css_class: "highlight",
88
+ gutter_class: "gutter",
89
+ code_class: "code"
90
90
  )
91
91
  lexer = ::Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
92
92
  formatter.format(lexer.lex(code))
@@ -212,7 +212,7 @@ module Bridgetown
212
212
  string = I18n.transliterate(string)
213
213
  end
214
214
 
215
- slug = replace_character_sequence_with_hyphen(string, :mode => mode)
215
+ slug = replace_character_sequence_with_hyphen(string, mode: mode)
216
216
 
217
217
  # Remove leading/trailing hyphen
218
218
  slug.gsub!(%r!^\-|\-$!i, "")
@@ -8,14 +8,14 @@ module Bridgetown
8
8
  ESCAPE = format("%c", 27)
9
9
  MATCH = %r!#{ESCAPE}\[(?:\d+)(?:;\d+)*(j|k|m|s|u|A|B|G)|\e\(B\e\[m!ix.freeze
10
10
  COLORS = {
11
- :red => 31,
12
- :green => 32,
13
- :black => 30,
14
- :magenta => 35,
15
- :yellow => 33,
16
- :white => 37,
17
- :blue => 34,
18
- :cyan => 36,
11
+ red: 31,
12
+ green: 32,
13
+ black: 30,
14
+ magenta: 35,
15
+ yellow: 33,
16
+ white: 37,
17
+ blue: 34,
18
+ cyan: 36,
19
19
  }.freeze
20
20
 
21
21
  # Strip ANSI from the current string. It also strips cursor stuff,
@@ -7,7 +7,7 @@ module Bridgetown
7
7
 
8
8
  # TODO: jruby is NOT supported by Bridgetown. This should probably
9
9
  # get removed.
10
- { :jruby? => "jruby", :mri? => "ruby" }.each do |k, v|
10
+ { jruby?: "jruby", mri?: "ruby" }.each do |k, v|
11
11
  define_method k do
12
12
  ::RUBY_ENGINE == v
13
13
  end
@@ -55,7 +55,7 @@ module Bridgetown
55
55
  # platforms. This is mostly useful for `bridgetown doctor` and for testing
56
56
  # where we kick off certain tests based on the platform.
57
57
 
58
- { :osx? => %r!darwin|mac os!, :unix? => %r!solaris|bsd! }.each do |k, v|
58
+ { osx?: %r!darwin|mac os!, unix?: %r!solaris|bsd! }.each do |k, v|
59
59
  define_method k do
60
60
  !!(
61
61
  RbConfig::CONFIG["host_os"] =~ v
@@ -30,7 +30,7 @@ module Bridgetown
30
30
  #
31
31
  # Format the hour as a two-digit number.
32
32
  # Establish the minutes based on modulo expression.
33
- hh = format("%<hour>02d", :hour => absolute_hour(difference).ceil)
33
+ hh = format("%<hour>02d", hour: absolute_hour(difference).ceil)
34
34
  mm = modulo.zero? ? "00" : "30"
35
35
 
36
36
  Bridgetown.logger.debug "Timezone:", "#{timezone} #{offset}#{hh}:#{mm}"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.8.1"
4
+ VERSION = "0.9.0"
5
5
  end
@@ -9,23 +9,17 @@ module Bridgetown
9
9
  # Public: Continuously watch for file changes and rebuild the site
10
10
  # whenever a change is detected.
11
11
  #
12
- # If the optional site argument is populated, that site instance will be
13
- # reused and the options Hash ignored. Otherwise, a new site instance will
14
- # be instantiated from the options Hash and used.
15
- #
12
+ # site - The current site instance
16
13
  # options - A Hash containing the site configuration
17
- # site - The current site instance (populated starting with Bridgetown 3.2)
18
- # (optional, default: nil)
19
14
  #
20
15
  # Returns nothing.
21
- def watch(options, site = nil)
16
+ def watch(site, options)
22
17
  ENV["LISTEN_GEM_DEBUGGING"] ||= "1" if options["verbose"]
23
18
 
24
- site ||= Bridgetown::Site.new(options)
25
19
  listener = build_listener(site, options)
26
20
  listener.start
27
21
 
28
- Bridgetown.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'"
22
+ Bridgetown.logger.info "Auto-regeneration:", "enabled."
29
23
 
30
24
  unless options["serving"]
31
25
  trap("INT") do
@@ -45,8 +39,8 @@ module Bridgetown
45
39
  def build_listener(site, options)
46
40
  Listen.to(
47
41
  options["source"],
48
- :ignore => listen_ignore_paths(options),
49
- :force_polling => options["force_polling"],
42
+ ignore: listen_ignore_paths(options),
43
+ force_polling: options["force_polling"],
50
44
  &listen_handler(site)
51
45
  )
52
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-15 00:00:00.000000000 Z
11
+ date: 2020-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable