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 @@ +