public
Description: Minimalist blogging engine without textareas based on Markdown, Ruby, Sinatra and Git push hooks
Homepage: http://www.restafari.org/introducing-marley.html
Clone URL: git://github.com/karmi/marley.git
joshnesbitt (author)
Mon Sep 07 03:02:59 -0700 2009
karmi (committer)
Sun Sep 13 07:58:00 -0700 2009
commit  602068a594e7911041b3ea3b5073878b390ff91c
tree    2da301241d62cf7673a8c766ddcfe7a4a639f788
parent  6e25204952a989722804ca928006bbd04209a920
marley / Rakefile
100644 120 lines (96 sloc) 3.704 kb
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
require 'rubygems'
require 'activerecord'
require 'rake'
require 'ftools'
 
MARLEY_ROOT = '.'
 
%w{configuration post comment}.each { |f| require File.join(MARLEY_ROOT, 'app', 'lib', f) }
 
desc "Start application in development"
task :default => 'app:start'
desc "Run tests"
task :test => 'app:test'
 
namespace :app do
 
  desc "Install the fresh application"
  task :install do
    Rake::Task['app:install:create_data_directory'].invoke
    Rake::Task['app:install:create_database_for_comments'].invoke
    Rake::Task['app:install:create_sample_article'].invoke
    Rake::Task['app:install:create_sample_comment'].invoke
    puts "* Starting application in development mode"
    Rake::Task['app:start'].invoke
  end
  namespace :install do
    task :create_data_directory do
      puts "* Creating data directory in " + Marley::Configuration.data_directory
      FileUtils.mkdir_p( Marley::Configuration.data_directory )
    end
    desc "Create database for comments"
    task :create_database_for_comments do
      puts "* Creating comments SQLite database in #{Marley::Configuration.data_directory}/comments.db"
      ActiveRecord::Base.establish_connection( :adapter => 'sqlite3',
                                               :database => File.join(Marley::Configuration.data_directory, 'comments.db')
                                             )
      load( File.join( MARLEY_ROOT, 'config', 'db_create_comments.rb' ) )
    end
    task :create_sample_article do
      puts "* Creating sample article"
      FileUtils.cp_r( File.join(MARLEY_ROOT, 'app', 'test', 'fixtures', '001-test-article-one'), Marley::Configuration.data_directory )
    end
    task :create_sample_comment do
      require 'vendor/akismetor'
      puts "* Creating sample comment"
      Marley::Comment.create( :author => 'John Doe',
                              :email => 'john@example.com',
                              :body => 'Lorem ipsum dolor sit amet',
                              :post_id => 'test-article' )
    end
  end
 
  desc 'Start application in development'
  task :start do
    exec "ruby app/marley.rb"
  end
 
  desc "Run tests for the application"
  task :test do
    exec "cd app/test; ruby marley_test.rb"
  end
  
end
 
namespace :data do
  
  desc "Shortcut to sync data with Capistrano `$ cap data:sync`"
  task :sync do
    exec "cap data:sync"
  end
    
end
 
namespace :server do
  
  desc "Start server in production on Thin, port 4500"
  task :start do
    exec "thin --rackup config/config.ru --daemonize --log log/thin.log --pid tmp/pids/thin.pid --environment production --port 4500 start && echo '> Marley started on http://localhost:4500'"
  end
  
  desc "Stop server in production"
  task :stop do
    exec "thin --pid tmp/pids/thin.pid stop"
  end
  
  desc "Restart server in production"
  task :restart do
    exec "thin --pid tmp/pids/thin.pid restart"
  end
  
end
 
namespace :manage do
 
  namespace :spam do
 
    desc "Display stats about spam comments in the DB"
    task :stats => :db_connect do
      spam_comments = Marley::Comment.spam
      puts "* There're #{spam_comments.size} pieces of spam in the DB -- authors: #{spam_comments.map(&:author).join(', ')}"
    end
 
    desc "Delete and report as spam all spam comments in the DB"
    task :prune => :db_connect do
      spam_comments = Marley::Comment.spam
      spam_comments.each do |comment|
        comment.destroy
        print "."
      end
      puts "* Deleted #{spam_comments.size} pieces of spam"
    end
 
    task :db_connect do
      ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => File.join(Marley::Configuration.data_directory, 'comments.db') )
    end
 
  end
 
end