1
+ require "rubygems"
2
+ require 'rake'
3
+
4
+ SOURCE = "."
5
+ CONFIG = {
6
+ 'themes' => File . join ( SOURCE , "_includes" , "themes" ) ,
7
+ 'layouts' => File . join ( SOURCE , "_layouts" ) ,
8
+ 'posts' => File . join ( SOURCE , "_posts" ) ,
9
+ 'post_ext' => "md"
10
+ }
11
+
12
+ # Usage: rake post title="A Title"
13
+ desc "Begin a new post in #{ CONFIG [ 'posts' ] } "
14
+ task :post do
15
+ abort ( "rake aborted: '#{ CONFIG [ 'posts' ] } ' directory not found." ) unless FileTest . directory? ( CONFIG [ 'posts' ] )
16
+ title = ENV [ "title" ] || "new-post"
17
+ slug = title . downcase . strip . gsub ( ' ' , '-' ) . gsub ( /[^\w -]/ , '' )
18
+ filename = File . join ( CONFIG [ 'posts' ] , "#{ Time . now . strftime ( '%Y-%m-%d' ) } -#{ slug } .#{ CONFIG [ 'post_ext' ] } " )
19
+ if File . exist? ( filename )
20
+ abort ( "rake aborted!" ) if ask ( "#{ filename } already exists. Do you want to overwrite?" , [ 'y' , 'n' ] ) == 'n'
21
+ end
22
+
23
+ puts "Creating new post: #{ filename } "
24
+ open ( filename , 'w' ) do |post |
25
+ post . puts "---"
26
+ post . puts "layout: post"
27
+ post . puts "title: \" #{ title . gsub ( /-/ , ' ' ) } \" "
28
+ post . puts "category: "
29
+ post . puts "tags: []"
30
+ post . puts "---"
31
+ post . puts "{% include JB/setup %}"
32
+ end
33
+ end # task :post
34
+
35
+ # Usage: rake page name="about.html"
36
+ # You can also specify a sub-directory path.
37
+ # If you don't specify a file extention we create an index.html at the path specified
38
+ desc "Create a new page."
39
+ task :page do
40
+ name = ENV [ "name" ] || "new-page.md"
41
+ filename = File . join ( SOURCE , "#{ name } " )
42
+ filename = File . join ( filename , "index.html" ) if File . extname ( filename ) == ""
43
+ title = File . basename ( filename , File . extname ( filename ) ) . gsub ( /[\W \_ ]/ , " " ) . gsub ( /\b \w / ) { $&. upcase }
44
+ if File . exist? ( filename )
45
+ abort ( "rake aborted!" ) if ask ( "#{ filename } already exists. Do you want to overwrite?" , [ 'y' , 'n' ] ) == 'n'
46
+ end
47
+
48
+ mkdir_p File . dirname ( filename )
49
+ puts "Creating new page: #{ filename } "
50
+ open ( filename , 'w' ) do |post |
51
+ post . puts "---"
52
+ post . puts "layout: page"
53
+ post . puts "title: \" #{ title } \" "
54
+ post . puts "---"
55
+ post . puts "{% include JB/setup %}"
56
+ end
57
+ end # task :page
58
+
59
+ desc "Switch between Jekyll-bootstrap themes."
60
+ task :switch_theme do
61
+ theme_name = ENV [ "name" ] . to_s
62
+ theme_path = File . join ( CONFIG [ 'themes' ] , theme_name )
63
+ settings_file = File . join ( theme_path , "settings.yml" )
64
+ non_layout_files = [ "settings.yml" ]
65
+
66
+ abort ( "rake aborted: name cannot be blank" ) if theme_name . empty?
67
+ abort ( "rake aborted: '#{ theme_path } ' directory not found." ) unless FileTest . directory? ( theme_path )
68
+ abort ( "rake aborted: '#{ CONFIG [ 'layouts' ] } ' directory not found." ) unless FileTest . directory? ( CONFIG [ 'layouts' ] )
69
+
70
+ Dir . glob ( "#{ theme_path } /*" ) do |filename |
71
+ next if non_layout_files . include? ( File . basename ( filename ) . downcase )
72
+ puts "Generating '#{ theme_name } ' layout: #{ File . basename ( filename ) } "
73
+
74
+ open ( File . join ( CONFIG [ 'layouts' ] , File . basename ( filename ) ) , 'w' ) do |page |
75
+ if File . basename ( filename , ".html" ) . downcase == "default"
76
+ page . puts "---"
77
+ page . puts File . read ( settings_file ) if File . exist? ( settings_file )
78
+ page . puts "---"
79
+ else
80
+ page . puts "---"
81
+ page . puts "layout: default"
82
+ page . puts "---"
83
+ end
84
+ page . puts "{% include JB/setup %}"
85
+ page . puts "{% include themes/#{ theme_name } /#{ File . basename ( filename ) } %}"
86
+ end
87
+ end
88
+ end # task :switch_theme
89
+
90
+ desc "Launch preview environment"
91
+ task :preview do
92
+ system "jekyll --auto --server"
93
+ end # task :preview
94
+
95
+ def ask ( message , valid_options )
96
+ if valid_options
97
+ answer = get_stdin ( "#{ message } #{ valid_options . to_s . gsub ( /"/ , '' ) . gsub ( /, / , '/' ) } " ) while !valid_options . include? ( answer )
98
+ else
99
+ answer = get_stdin ( message )
100
+ end
101
+ answer
102
+ end
103
+
104
+ def get_stdin ( message )
105
+ print message
106
+ STDIN . gets . chomp
107
+ end
0 commit comments