foresite 1.1.3 → 1.3.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: 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