summaryrefslogtreecommitdiff
path: root/Rakefile
diff options
context:
space:
mode:
Diffstat (limited to 'Rakefile')
-rw-r--r--Rakefile157
1 files changed, 0 insertions, 157 deletions
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 8c7c7c6..0000000
--- a/Rakefile
+++ /dev/null
@@ -1,157 +0,0 @@
-$:.unshift(File.dirname(__FILE__))
-require 'yaml'
-require 'lib/random'
-
-task :default => [:'site:deploy:development']
-
-namespace :site do
- namespace :deploy do
- desc 'Builds the site and deploys it locally using the built in server.'
- task :development => [:'env:development', :'build:development']
-
- desc 'Builds the site and deploys it to a remote server using rsync over ssh.'
- task :production => [:'env:production', :'build:production'] do
- config = @config['deployment'] || {}
- config.merge! YAML::load_file('_deploy.yml')['deployment']if File.exists?('_deploy.yml')
-
- host = config['host'] || ask('Host?', nil, lambda { |answer| !answer.empty? }, 'You must enter a host')
- user = config['user'] || ask('User?', nil, lambda { |answer| !answer.empty? }, 'You must enter a user')
- port = config['port'] || ask('Port?', '22', lambda { |answer| !answer.empty? }, 'You must enter a port number')
- dir = config['directory'] || ask('Directory?', nil, lambda { |answer| !answer.empty? }, 'You must enter a directory')
-
- system("rsync -avz --delete --rsh='ssh -p#{port}' #{@config['destination']}/ #{user}@#{host}:#{dir}")
- end
- end
-
- namespace :build do
- desc 'Builds the site and runs the local built in server.'
- task :development => [:clean] do
- system 'bundle exec jekyll --server --auto'
- end
-
- desc 'Builds the site so that it can be deployed.'
- task :production => [:'test_posts:clean', :clean] do
- system 'bundle exec jekyll'
- end
- end
-
- namespace :env do
- desc 'Sets the configuration for development mode.'
- task :development do
- edit_config 'production', 'false'
- end
-
- desc 'Sets the configuration for production mode.'
- task :production do
- edit_config 'production', 'true'
- end
- end
-
- desc 'Deletes any generated files.'
- task :clean => [:load_config] do
- FileUtils.rm_rf(@config['destination'])
- end
-end
-
-namespace :test_posts do
- desc 'Creates several test posts.'
- task :create => [:load_config, :clean, :create_directory] do
- (1..@config['num_test_posts']).each do |day|
- date, title, categories = TestPosts::Random.generate
- save_post(date, title, @config['author'], title, categories, @config['test_posts'])
- end
- end
-
- desc 'Deletes any test posts.'
- task :clean => [:load_config] do
- FileUtils.rm_rf(@config['test_posts'])
- end
-
- desc 'Creates the required test posts directory if one does not exist.'
- task :create_directory => [:load_config] do
- create_directory(@config['test_posts'])
- end
-end
-
-namespace :post do
- desc 'Creates a new post based on user input'
- task :create => [:load_config, :create_directory] do
- date = Date.today.to_s
- title = nil
- author = @config['author']
- description = nil
- categories = nil
-
- loop do
- date = ask('Date?', date, lambda { |answer| !answer.empty? && answer =~ /^\d{4}-\d{2}-\d{2}$/ }, 'Date must be entered as YYYY-MM-DD')
- title = ask('Title?', title, lambda { |answer| !answer.empty? }, 'You must enter a title')
- author = ask('Author?', author)
- description = ask('Description?', description)
- categories = ask('Categories?', categories)
- break if agree('Ok to create this post?')
- end
-
- save_post(date, title, author, description, categories, @config['posts'])
- end
-
- desc 'Creates the required posts directory if one does not exist.'
- task :create_directory => [:load_config] do
- create_directory(@config['posts'])
- end
-end
-
-desc 'Loads the configuration file into an instance variable to be used by other tasks.'
-task :load_config do
- @config = YAML::load_file('_config.yml')
- @config['posts'] = "#{@config['source']}/_posts"
- @config['test_posts'] = @config['posts'] + '/test'
-end
-
-def edit_config(name, value)
- config = File.read('_config.yml')
- regexp = Regexp.new('(^\s*' + name + '\s*:\s*)(\S+)(\s*)$')
- config.sub!(regexp,'\1'+value+'\3')
- File.open('_config.yml', 'w') {|f| f.write(config)}
-end
-
-def create_directory(dir)
- FileUtils.mkdir_p(dir) unless File.directory?(dir)
-end
-
-def save_post(date, title, author, description, categories, directory)
- # Ensure string is in the form of ["category one", "category two"]
- categories = "[#{categories.split(',').map { |c| '"' + c.strip + '"' }.join(',')}]"
-
- template = File.read("lib/templates/post.markdown")
- template.gsub!(/:title/, title)
- template.gsub!(/:author/, author)
- template.gsub!(/:description/, description)
- template.gsub!(/:categories/, categories)
-
- filename = "#{directory}/#{date}-#{parameterize(title)}.markdown"
- File.open(filename, 'w') { |f| f.write(template) }
-end
-
-def parameterize(string, sep = '-')
- string.downcase.gsub(/[^a-z0-9\-_]+/, sep)
-end
-
-def ask(prompt, default, validator = nil, message = nil)
- prompt << " |#{default}|" if default
- prompt << ' '
- answer = ''
- loop do
- print prompt
- answer = $stdin.gets.chomp
- answer = default if answer.empty? && default
- valid = validator ? validator.call(answer) : true
- puts(message) if message && !valid
- break if valid
- end
- answer
-end
-
-def agree(prompt)
- yn = ask(prompt, 'y', lambda { |yn| yn.downcase[0] == 'y' || yn.downcase[0] == 'n' }, "Enter y, n or yes, no")
- yn.downcase[0] == 'y'
-end