foresite 1.1.3 → 1.3.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: 495db3b9b94366d4ec2ee21650912ce9f545ccab88a5206aebf49e6cb08cfee8
4
- data.tar.gz: 1712e43ee2800c9158fb54879423693b5f764e0f7ad53565ebff9151c76e322d
3
+ metadata.gz: 31f026a8d80bce2b57fbe4b909cb3c6490ca50debf834de0636c7b713749fe83
4
+ data.tar.gz: 0b450e5e2639cb57ece5ae26810c8b467a6d91bc269ffcb1f96bb4e2f18fd716
5
5
  SHA512:
6
- metadata.gz: 3079e9d70d3d1020d209251caeb1bc85b6a286d9db03bb9a29a8abfaecdbb0522f815b8680ceab129a4247388dfe2d5d8326c275f975c3b1608b83fea18b1f6d
7
- data.tar.gz: e5263d34aea71db355288285d168e607fbfe30415bbc19b5eb2679bddbf48ebc255118e58b8c7bfa13ea2f1fbf24bca4e3c5136a4c62e4bbdd7d9e8e71c085fa
6
+ metadata.gz: 5ab2348a5bb8eb90c0707a4ace0921e586a15d7d2838d72f4841fe39165a3912c129593ca4b5075dde9b62ad94a114cf4170865fb89781d2c3ec8f40d24b4c16
7
+ data.tar.gz: 543c72aad677e681b17b12eae7c43a927fbe1417b98c1cf0838fc9f9b343e55ae3730308ce679cf522cf698bedc8c3cddbb56a67f713355af1768b55d54566f0
data/README.md CHANGED
@@ -77,7 +77,7 @@ Some facts:
77
77
 
78
78
  `post.md.erb` is used to when running `foresite touch` for the default markdown content. It has two variables, `@title` for the post title and `@date_ymd` for the created date in ISO 8601 `YYYY-MM-DD` format. Modify to have different defaults when running `foresite touch`.
79
79
 
80
- `wrapper.html.erb` wraps all of your markdown. Its sole variable `@content` will be a given post's HTML (converted from markdown). For the `index.html` file, `@content` will be an list of links to all posts in reverse-chronological order. Modify to have different overall page structure, or to add `<style>` etc.
80
+ `wrapper.html.erb` wraps all of your markdown. It has two variables, `@title` for the post title that will populate the `<title>` tag, and `@content` for a given post's HTML (converted from markdown). For the `index.html` file, `@title` will be `nil`, and `@content` will be an list of links to all posts in reverse-chronological order. Modify to have different overall page structure, or to add `<style>` etc.
81
81
 
82
82
  `_list.html.erb` is used to generate the `<ul>` list of posts on the `index.html` file. Modify to show posts in a different way.
83
83
 
@@ -103,10 +103,14 @@ In this example, the `index.html` will contain:
103
103
 
104
104
  ```html
105
105
  <ul>
106
- <li>2023-01-15 <a href="2023-01-15-welcome-to-my-site.html">Welcome to my site</a></li>
106
+ <li>2023-01-15 <a href="post/2023-01-15-welcome-to-my-site.html">Welcome to my site</a></li>
107
107
  </ul>
108
108
  ```
109
109
 
110
+ ### 5. Watch files and build automatically
111
+
112
+ Run `foresite watch` to detect changes to markdown or ERB files, build will run automatically. Useful for previewing content locally.
113
+
110
114
  ## Development
111
115
 
112
116
  1. Clone
@@ -123,6 +127,8 @@ Bug reports and pull requests are welcome. The goals of Foresite are:
123
127
  * Simple to use & understand
124
128
  * Minimal features
125
129
 
130
+ Read more in the [blog post introducing Foresite](https://carlwiedemann.github.io/post/2023-01-17-introducing-foresite.html)
131
+
126
132
  ## License
127
133
 
128
134
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/lib/foresite/cli.rb CHANGED
@@ -12,6 +12,11 @@ module Foresite
12
12
  true
13
13
  end
14
14
 
15
+ desc "version", "Displays version"
16
+ def version
17
+ $stdout.puts(Foresite::VERSION)
18
+ end
19
+
15
20
  desc "init", "Initializes foresite in current directory"
16
21
  long_desc <<-LONGDESC
17
22
  Initializes foresite in the current directory.
@@ -93,11 +98,12 @@ module Foresite
93
98
 
94
99
  links = markdown_paths.map do |markdown_path|
95
100
  markdown_content = File.read(markdown_path)
101
+ title = markdown_content.split("\n").first { |line| /^# [a-z]/i =~ line }.gsub(/^#/, "").strip
96
102
 
97
103
  filename_markdown = File.basename(markdown_path)
98
104
  html_path = Foresite.get_path_to_out_file(filename_markdown.gsub(/\.md$/, ".html"))
99
105
 
100
- File.write(html_path, Foresite.render_wrapped(markdown_content))
106
+ File.write(html_path, Foresite.render_wrapped(title, markdown_content))
101
107
  $stdout.puts("Created #{Foresite.relative_path(html_path)}")
102
108
 
103
109
  # Extract date if it exists.
@@ -106,7 +112,7 @@ module Foresite
106
112
  {
107
113
  date_ymd: match_data.nil? ? "" : match_data[0],
108
114
  href: Foresite.relative_path(html_path),
109
- title: markdown_content.split("\n").first { |line| /^# [a-z]/i =~ line }.gsub(/^#/, "").strip
115
+ title: title
110
116
  }
111
117
  end
112
118
 
@@ -116,5 +122,28 @@ module Foresite
116
122
 
117
123
  $stdout.puts("Created #{Foresite.relative_path(index_html_path)}")
118
124
  end
125
+
126
+ desc "watch", "Watches markdown and templates files and runs `build` when they change"
127
+ long_desc <<-LONGDESC
128
+ See `build` help for more information
129
+ LONGDESC
130
+
131
+ # @todo How might we test this?
132
+ def watch
133
+ dirs_to_watch = [
134
+ Foresite::DIRNAME_MARKDOWN,
135
+ Foresite::DIRNAME_ERB
136
+ ]
137
+
138
+ $stdout.puts("Watching #{dirs_to_watch.map { "./#{_1}" }.join(", ")} for changes... (Ctrl+C to exit)")
139
+
140
+ Filewatcher.new(dirs_to_watch).watch do |changes|
141
+ changes.each do |filename, event|
142
+ $stdout.puts("#{File.basename(filename)} #{event}")
143
+ end
144
+
145
+ build
146
+ end
147
+ end
119
148
  end
120
149
  end
@@ -14,7 +14,7 @@ module Foresite
14
14
  @path = path
15
15
  vars.each do |k, v|
16
16
  if k.is_a?(Symbol)
17
- instance_variable_set("@#{k}".to_sym, v)
17
+ instance_variable_set(:"@#{k}", v)
18
18
  end
19
19
  end
20
20
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Foresite
4
- VERSION = "1.1.3"
4
+ VERSION = "1.3.0"
5
5
  end
data/lib/foresite.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "erb"
4
- require "thor"
4
+ require "filewatcher"
5
5
  require "kramdown"
6
+ require "thor"
6
7
  require "zeitwerk"
7
8
 
8
9
  loader = Zeitwerk::Loader.for_gem
@@ -82,8 +83,9 @@ module Foresite
82
83
  })
83
84
  end
84
85
 
85
- def self.render_wrapped(markdown_content)
86
+ def self.render_wrapped(title, markdown_content)
86
87
  render_erb_file(FILENAME_WRAPPER_HTML, {
88
+ title: title,
87
89
  content: ::Kramdown::Document.new(markdown_content).to_html
88
90
  })
89
91
  end
@@ -1,8 +1,11 @@
1
+ <%
2
+ index_title = 'Another Foresite Blog'
3
+ -%>
1
4
  <!DOCTYPE html>
2
5
  <html lang="en">
3
6
  <head>
4
7
  <meta charset="utf-8">
5
- <title>Another Foresite Blog</title>
8
+ <title><%= @title ? "#{@title} - #{index_title}" : index_title %></title>
6
9
  <style></style>
7
10
  </head>
8
11
  <body>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foresite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Wiedemann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-17 00:00:00.000000000 Z
11
+ date: 2024-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: filewatcher
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.1'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement