diff --git a/lib/volumen/post.rb b/lib/volumen/post.rb
index 5d84c18..1ee21cf 100644
--- a/lib/volumen/post.rb
+++ b/lib/volumen/post.rb
@@ -56,6 +56,24 @@ module Volumen
metadata["cover"]
end
+ def publish_at
+ metadata["publish_at"]
+ end
+
+ def scheduled?
+ value = publish_at
+ return false if value.nil?
+
+ date = case value
+ when Date then value
+ when Time then value.to_date
+ else Date.iso8601(value.to_s)
+ end
+ date > Date.today
+ rescue ArgumentError
+ false
+ end
+
def reading_time
words = body.split(/\s+/).count { |word| !word.empty? }
[(words / 200.0).ceil, 1].max
diff --git a/lib/volumen/server.rb b/lib/volumen/server.rb
index 89bde0e..47f5487 100644
--- a/lib/volumen/server.rb
+++ b/lib/volumen/server.rb
@@ -79,7 +79,8 @@ module Volumen
end
def published_posts
- store.all.reject(&:draft?).sort_by { |post| post.date_string || "" }.reverse
+ store.all.reject { |post| post.draft? || post.scheduled? }
+ .sort_by { |post| post.date_string || "" }.reverse
end
def site_payload
@@ -369,6 +370,7 @@ module Volumen
"lang" => presence(http_params["lang"]),
"author" => presence(http_params["author"]),
"date" => parse_date(http_params["date"]),
+ "publish_at" => parse_date(http_params["publish_at"]),
"tags" => parse_tags(http_params["tags"]),
"excerpt" => presence(http_params["excerpt"]),
"cover" => presence(http_params["cover"]),
diff --git a/lib/volumen/web/views/form.erb b/lib/volumen/web/views/form.erb
index 2788bdf..b5d5e2f 100644
--- a/lib/volumen/web/views/form.erb
+++ b/lib/volumen/web/views/form.erb
@@ -17,6 +17,11 @@
+