-
Notifications
You must be signed in to change notification settings - Fork 1
/
Rakefile
132 lines (120 loc) · 4.14 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
require "rubygems"
require "bundler/setup"
require "stringex"
## -- Config -- ##
posts_dir = "_posts" # directory for blog files
drafts_dir = "_drafts" # directory for blog files
new_post_ext = "markdown" # default new post file extension when using the new_post task
new_page_ext = "markdown"
namespace :new do
#############################
# Create a new Post #
#############################
# usage rake new_post
desc "Create a new post in #{posts_dir}"
task :post, :title do |t, args|
title = get_stdin("Enter a title for your post: ")
filename = "#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
author = get_stdin("Enter author name: ")
tags = get_stdin("Enter tags to classify your page (space separated): ")
puts "Creating new post: #{filename}"
open(filename, 'w') do |post|
post.puts "---"
post.puts "layout: post"
post.puts "title: #{title.gsub(/&/,'&')}"
post.puts "author: #{author}"
post.puts "published: false"
post.puts "tags: #{tags}"
post.puts "---"
end
end
#############################
# Create a new Draft #
#############################
# usage rake new_draft
desc "Create a new draft in #{drafts_dir}"
task :draft, :title do |t, args|
title = get_stdin("Enter a title for your post: ")
filename = "#{drafts_dir}/#{title.to_url}.#{new_post_ext}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
author = get_stdin("Enter author name: ")
tags = get_stdin("Enter tags to classify your page (space separated): ")
puts "Creating new draft: #{filename}"
open(filename, 'w') do |post|
post.puts "---"
post.puts "layout: post"
post.puts "title: #{title.gsub(/&/,'&')}"
post.puts "author: #{author}"
post.puts "published: false"
post.puts "tags: #{tags}"
post.puts "---"
end
end
#############################
# Create a new Page #
#############################
# usage rake new_page
desc "Create a new page"
task :page, :title do |t, args|
title = get_stdin("Enter a title for your page: ")
filename = "#{title.to_url}.#{new_page_ext}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
tags = get_stdin("Enter tags to classify your page (space separated): ")
puts "Creating new page: #{filename}"
open(filename, 'w') do |page|
page.puts "---"
page.puts "layout: page"
page.puts "permalink: /#{title.to_url}"
page.puts "title: \"#{title}\""
page.puts "tags: #{tags}"
page.puts "---"
end
end
end
#############################
# Publish Draft #
#############################
# usage rake new_draft
desc "Publish draft in #{posts_dir}"
task :publish_draft do
ARGV.each { |a| task a.to_sym do ; end }
next if ARGV.size < 2
file = ARGV.last
filename = File.basename file
post_filename = "#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{filename}"
if File.exist?(post_filename)
abort("rake aborted!") if ask("#{post_filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
puts "Creating new post: #{post_filename}"
File.open(post_filename, 'w') do |post|
post.puts File.read(file)
end
puts "Deleting draft #{filename}"
File.delete(file)
end
#############################
# Start server #
#############################
desc "Serve blog in local machine"
task :serve do
system %{JEKYLL_ENV=development bundle exec jekyll serve --drafts --unpublished --config "_config.yml,_config.dev.yml"}
end
def get_stdin(message)
print message
STDIN.gets.chomp
end
def ask(message, valid_options)
if valid_options
answer = get_stdin("#{message} #{valid_options.to_s.gsub(/"/, '').gsub(/, /,'/')} ") while !valid_options.include?(answer)
else
answer = get_stdin(message)
end
answer
end