postview 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ABOUT +9 -0
- data/HISTORY +27 -1
- data/Rakefile +3 -1
- data/VERSION +4 -4
- data/bin/postview +2 -2
- data/lib/postview.rb +64 -13
- data/lib/postview/application.rb +34 -21
- data/lib/postview/authentication.rb +36 -0
- data/lib/postview/cli.rb +10 -0
- data/lib/postview/cli/create_command.rb +53 -37
- data/lib/postview/cli/server_command.rb +2 -2
- data/lib/postview/extensions.rb +10 -0
- data/lib/postview/helpers.rb +3 -0
- data/lib/postview/settings.rb +19 -17
- data/lib/postview/site.rb +13 -1
- data/lib/postview/version.rb +1 -1
- data/tasks/package.rake +80 -2
- data/test/application_test.rb +29 -14
- data/test/{extensions.rb → customizations.rb} +1 -0
- data/test/fixtures/application/config/settings.yml +4 -1
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/banners/banner.jpg +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/favicon.ico +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/logo.png +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/navigation-bar.gif +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/postview.png +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/rack.png +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/ruby.png +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/sinatra.png +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/images/trojan.com +0 -0
- data/test/fixtures/application/themes/{gemstone/javascripts/gemstone.js → mytheme/javascripts/postview.js} +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/stylesheets/gemstone.css +0 -0
- data/test/fixtures/application/themes/{gemstone → mytheme}/stylesheets/postview.css +0 -0
- data/test/fixtures/application/themes/mytheme/templates/about.erb +1 -0
- data/test/fixtures/application/themes/mytheme/templates/archive/index.erb +3 -0
- data/test/fixtures/application/themes/mytheme/templates/archive/show.erb +1 -0
- data/test/fixtures/application/themes/mytheme/templates/drafts/index.erb +3 -0
- data/test/fixtures/application/themes/mytheme/templates/drafts/show.erb +1 -0
- data/test/fixtures/application/themes/mytheme/templates/error.erb +1 -0
- data/test/fixtures/application/themes/mytheme/templates/index.erb +3 -0
- data/{themes/default → test/fixtures/application/themes/mytheme/templates}/layout.erb +2 -2
- data/test/fixtures/application/themes/mytheme/templates/posts/index.erb +3 -0
- data/test/fixtures/application/themes/mytheme/templates/posts/show.erb +1 -0
- data/test/fixtures/application/themes/mytheme/templates/search.erb +6 -0
- data/test/fixtures/application/themes/mytheme/templates/tags/index.erb +3 -0
- data/test/fixtures/application/themes/mytheme/templates/tags/show.erb +6 -0
- data/test/fixtures/site/blog/config.ru +6 -0
- data/test/fixtures/site/blog/config/settings.yml +25 -0
- data/test/fixtures/{application/themes/gemstone/error.erb → site/blog/empty.yml} +0 -0
- data/test/fixtures/site/blog/posts/20090529-third_article.t1.t2.t3.mkd +4 -0
- data/test/fixtures/site/blog/posts/20090602-fourth_article.t1.t2.t3.t4.mkd +4 -0
- data/test/fixtures/site/blog/posts/archive/20080529-first_article.t1.mkd +4 -0
- data/test/fixtures/site/blog/posts/archive/20080602-second_article.t1.t2.mkd +4 -0
- data/test/fixtures/site/blog/posts/drafts/20090730-fifth_article.t1.t2.t3.t4.t5.mkd +4 -0
- data/{themes/default/error.erb → test/fixtures/site/themes/mytheme/images/banners/banner.jpg} +0 -0
- data/test/fixtures/site/themes/mytheme/images/favicon.ico +0 -0
- data/test/fixtures/site/themes/mytheme/images/logo.png +0 -0
- data/test/fixtures/site/themes/mytheme/images/navigation-bar.gif +0 -0
- data/test/fixtures/site/themes/mytheme/images/postview.png +0 -0
- data/test/fixtures/site/themes/mytheme/images/rack.png +0 -0
- data/test/fixtures/site/themes/mytheme/images/ruby.png +0 -0
- data/test/fixtures/site/themes/mytheme/images/sinatra.png +0 -0
- data/test/fixtures/site/themes/mytheme/images/trojan.com +0 -0
- data/test/fixtures/site/themes/mytheme/javascripts/postview.js +1 -0
- data/test/fixtures/site/themes/mytheme/stylesheets/gemstone.css +1 -0
- data/test/fixtures/site/themes/mytheme/stylesheets/postview.css +238 -0
- data/test/fixtures/site/themes/mytheme/templates/about.erb +1 -0
- data/test/fixtures/site/themes/mytheme/templates/archive/index.erb +3 -0
- data/test/fixtures/site/themes/mytheme/templates/archive/show.erb +1 -0
- data/test/fixtures/site/themes/mytheme/templates/drafts/index.erb +3 -0
- data/test/fixtures/site/themes/mytheme/templates/drafts/show.erb +1 -0
- data/test/fixtures/site/themes/mytheme/templates/error.erb +1 -0
- data/test/fixtures/site/themes/mytheme/templates/index.erb +3 -0
- data/test/fixtures/{application/themes/gemstone → site/themes/mytheme/templates}/layout.erb +20 -14
- data/test/fixtures/site/themes/mytheme/templates/posts/index.erb +3 -0
- data/test/fixtures/site/themes/mytheme/templates/posts/show.erb +1 -0
- data/test/fixtures/site/themes/mytheme/templates/search.erb +6 -0
- data/test/fixtures/site/themes/mytheme/templates/tags/index.erb +3 -0
- data/test/fixtures/site/themes/mytheme/templates/tags/show.erb +6 -0
- data/test/helpers_test.rb +1 -2
- data/test/settings_test.rb +12 -3
- data/test/site_test.rb +3 -4
- data/themes/default/stylesheets/postview.css +1 -0
- data/themes/default/{about.erb → templates/about.erb} +1 -1
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/archive/index.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/archive/show.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/drafts/index.erb +1 -1
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/drafts/show.erb +0 -0
- data/themes/default/templates/error.erb +13 -0
- data/themes/default/{index.erb → templates/index.erb} +1 -1
- data/themes/default/templates/layout.erb +130 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/posts/index.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/posts/show.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/search.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/tags/index.erb +0 -0
- data/{test/fixtures/application/themes/gemstone → themes/default/templates}/tags/show.erb +0 -0
- metadata +164 -61
- data/INFO +0 -14
- data/lib/postview/about.rb +0 -34
- data/test/fixtures/application/themes/gemstone/about.erb +0 -22
- data/test/fixtures/application/themes/gemstone/index.erb +0 -38
- data/test/helper.rb +0 -9
- data/themes/default/archive/index.erb +0 -21
- data/themes/default/archive/show.erb +0 -17
- data/themes/default/drafts/index.erb +0 -21
- data/themes/default/drafts/show.erb +0 -17
- data/themes/default/posts/index.erb +0 -21
- data/themes/default/posts/show.erb +0 -17
- data/themes/default/search.erb +0 -40
- data/themes/default/tags/index.erb +0 -12
- data/themes/default/tags/show.erb +0 -40
data/ABOUT
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
:summary:
|
2
|
+
Simple blogware that render Markdown files.
|
3
|
+
:description:
|
4
|
+
Postview is a simple blogware written in Ruby using the Sinatra DSL for render files written in Markdown.
|
5
|
+
:authors:
|
6
|
+
- Hallison Batista
|
7
|
+
:email: email@hallisonbatista.com
|
8
|
+
:homepage: http://postview.rubyforge.org/
|
9
|
+
|
data/HISTORY
CHANGED
@@ -1,9 +1,35 @@
|
|
1
|
+
[0.9.0 - 2009-10-14 - Features, enhancements and improvements]
|
2
|
+
New features, enhancements and small improvements
|
3
|
+
|
4
|
+
* Features
|
5
|
+
* Support for authentication has been added.
|
6
|
+
|
7
|
+
* Enhancements
|
8
|
+
* Added instructions for use Rack::Static to serve static theme files.
|
9
|
+
* Added content in error theme template file.
|
10
|
+
* Added marshalling content in postview.gemspec file.
|
11
|
+
* Added tasks for build Gemspec file.
|
12
|
+
* Tests have been fixed for authorization feature.
|
13
|
+
|
14
|
+
* Fixes
|
15
|
+
* Fixes in default theme file for render list of drafts.
|
16
|
+
* The application path has been fixed.
|
17
|
+
|
18
|
+
* Improvements
|
19
|
+
* Small improvements in code.
|
20
|
+
|
21
|
+
[0.8.1 - 2009-09-17 - Updates]
|
22
|
+
* Added helper method for list all drafted posts.
|
23
|
+
* Added fixtures for tests in drafts path.
|
24
|
+
* Added new theme files for drafts.
|
25
|
+
* All unneeded path variables have been removed.
|
26
|
+
|
1
27
|
[0.8.0 - 2009-09-15 - Improvements]
|
2
28
|
* Added helper methods for improves all theme views source.
|
3
29
|
* Added core extensions.
|
4
30
|
|
5
31
|
[0.7.0 - 2009-09-10 - Features, enhancements and improvements]
|
6
|
-
New features
|
32
|
+
New features, enhancements and several improvements.
|
7
33
|
|
8
34
|
* Features
|
9
35
|
* Postview is a RubyGems project.
|
data/Rakefile
CHANGED
@@ -5,6 +5,7 @@ require 'net/ftp'
|
|
5
5
|
require 'rake/testtask'
|
6
6
|
require 'rake/packagetask'
|
7
7
|
|
8
|
+
Rake::application.options.trace = true
|
8
9
|
|
9
10
|
# Show text message in console.
|
10
11
|
def banner(message)
|
@@ -100,7 +101,7 @@ def rsync(directory, destination = nil)
|
|
100
101
|
end
|
101
102
|
|
102
103
|
desc <<-end_desc.gsub(/^[ ]{2}/,'')
|
103
|
-
Create new post in #{settings.
|
104
|
+
Create new post in #{settings.path_to(:posts)}.
|
104
105
|
For edit posts, set environment variable EDITOR or VISUAL. Otherwise,
|
105
106
|
pass editor="<your favorite editor command and arguments>".
|
106
107
|
|
@@ -176,3 +177,4 @@ Dir["tasks/**.rake"].each do |task_file|
|
|
176
177
|
load task_file
|
177
178
|
end
|
178
179
|
|
180
|
+
task :default => :test
|
data/VERSION
CHANGED
data/bin/postview
CHANGED
@@ -12,7 +12,7 @@ ARGV.options do |arguments|
|
|
12
12
|
arguments.summary_indent = " "
|
13
13
|
arguments.summary_width = 24
|
14
14
|
arguments.banner = <<-end_banner.gsub /^[ ]{4}/, ''
|
15
|
-
#{Postview::
|
15
|
+
#{Postview::version_summary}
|
16
16
|
|
17
17
|
Usage:
|
18
18
|
#{program} <command> [options]
|
@@ -28,7 +28,7 @@ ARGV.options do |arguments|
|
|
28
28
|
arguments.separator "Global options:"
|
29
29
|
|
30
30
|
arguments.on("-h", "--help", nil, "Show this message.") { puts arguments }
|
31
|
-
arguments.on(nil, "--version", nil, "Show version information.") { puts Postview::
|
31
|
+
arguments.on(nil, "--version", nil, "Show version information.") { puts Postview::about }
|
32
32
|
|
33
33
|
arguments.separator ""
|
34
34
|
|
data/lib/postview.rb
CHANGED
@@ -36,7 +36,7 @@ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
|
36
36
|
module Postview
|
37
37
|
|
38
38
|
# RubyGems.
|
39
|
-
require 'rubygems'
|
39
|
+
require 'rubygems' unless $LOADED_FEATURES.include? 'rubygems.rb'
|
40
40
|
|
41
41
|
# Core requires.
|
42
42
|
require 'optparse'
|
@@ -44,7 +44,6 @@ module Postview
|
|
44
44
|
require 'ostruct'
|
45
45
|
|
46
46
|
# 3rd part libraries/projects.
|
47
|
-
require 'rack'
|
48
47
|
require 'sinatra/base' unless defined? ::Sinatra::Base
|
49
48
|
require 'sinatra/mapping' unless defined? ::Sinatra::Mapping
|
50
49
|
require 'postage' unless defined? ::Postage
|
@@ -56,18 +55,70 @@ module Postview
|
|
56
55
|
# Root path for Postview source.
|
57
56
|
ROOT = Pathname.new("#{File.dirname(__FILE__)}/..").expand_path
|
58
57
|
|
59
|
-
# Current path.
|
60
|
-
PATH = Pathname.new(".").expand_path
|
61
|
-
|
62
58
|
# Auto-load all internal requires.
|
63
|
-
autoload :
|
64
|
-
autoload :
|
65
|
-
|
66
|
-
autoload :
|
67
|
-
autoload :
|
68
|
-
autoload :
|
69
|
-
|
70
|
-
|
59
|
+
autoload :Settings, 'postview/settings'
|
60
|
+
autoload :Site, 'postview/site'
|
61
|
+
autoload :Helpers, 'postview/helpers'
|
62
|
+
autoload :Authentication, 'postview/authentication'
|
63
|
+
autoload :Application, 'postview/application'
|
64
|
+
autoload :CLI, 'postview/cli'
|
65
|
+
|
66
|
+
class << self
|
67
|
+
|
68
|
+
# Current application path.
|
69
|
+
def path
|
70
|
+
@path ||= Pathname.new(Dir.pwd).expand_path
|
71
|
+
end
|
72
|
+
|
73
|
+
# Change current directory path for load all settings from other
|
74
|
+
# path.
|
75
|
+
def path=(pathname)
|
76
|
+
@path = Pathname.new(pathname).expand_path
|
77
|
+
end
|
78
|
+
|
79
|
+
# Version
|
80
|
+
def version_spec
|
81
|
+
@version_spec ||= OpenStruct.new(YAML.load_file(ROOT.join("VERSION")))
|
82
|
+
end
|
83
|
+
|
84
|
+
# Current version tag.
|
85
|
+
def version_tag
|
86
|
+
%w{major minor patch release}.map do |tag|
|
87
|
+
version_spec.send(tag)
|
88
|
+
end.compact.join(".")
|
89
|
+
end
|
90
|
+
|
91
|
+
# Version information.
|
92
|
+
def version_summary
|
93
|
+
"#{name.sub(/::.*/,'')} v#{version_tag} (#{version_spec.date.strftime('%B %d, %Y')}, #{version_spec.cycle})"
|
94
|
+
end
|
95
|
+
|
96
|
+
# About information loaded from +ABOUT+ file.
|
97
|
+
def about_info
|
98
|
+
@about_info ||= OpenStruct.new(YAML.load_file(File.join(ROOT, "ABOUT")))
|
99
|
+
end
|
100
|
+
|
101
|
+
# About
|
102
|
+
def about
|
103
|
+
<<-end_info.gsub(/^[ ]{6}/,'')
|
104
|
+
#{version_summary}
|
105
|
+
|
106
|
+
Copyright (C) #{version_spec.timestamp.year} #{about_info.authors.join(', ')}
|
107
|
+
|
108
|
+
#{about_info.description}
|
109
|
+
|
110
|
+
For more information, please see the project homepage
|
111
|
+
#{about_info.homepage}. Bugs, enhancements and improvements,
|
112
|
+
please send message to #{about_info.email}.
|
113
|
+
end_info
|
114
|
+
end
|
115
|
+
|
116
|
+
# Render about text to HTML.
|
117
|
+
def about_to_html
|
118
|
+
Maruku.new(about).to_html
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
71
122
|
|
72
123
|
end # module Postview
|
73
124
|
|
data/lib/postview/application.rb
CHANGED
@@ -7,16 +7,16 @@ class Application < Sinatra::Base #:nodoc: all
|
|
7
7
|
|
8
8
|
configure do
|
9
9
|
set :settings, Postview::Settings.load
|
10
|
-
set :site,
|
11
|
-
set :page,
|
10
|
+
set :site, settings.build_site
|
11
|
+
set :page, settings.build_page
|
12
|
+
set :theme, settings.path_to(:themes).join(site.theme)
|
12
13
|
|
13
|
-
|
14
|
+
enable :static
|
15
|
+
enable :session
|
14
16
|
|
15
|
-
set :root,
|
16
|
-
set :public,
|
17
|
-
set :views,
|
18
|
-
|
19
|
-
map :theme, "/"
|
17
|
+
set :root, Postview::path
|
18
|
+
set :public, root.join("public")
|
19
|
+
set :views, theme.join("templates")
|
20
20
|
|
21
21
|
mapping settings.sections
|
22
22
|
end
|
@@ -34,11 +34,7 @@ class Application < Sinatra::Base #:nodoc: all
|
|
34
34
|
|
35
35
|
helpers Postview::Helpers
|
36
36
|
|
37
|
-
|
38
|
-
# TOFIX: Check security and other problems
|
39
|
-
get theme_path "/:resource/*.*" do |resource, file, ext|
|
40
|
-
send_file options.views.join(resource, "#{file}.#{ext}")
|
41
|
-
end
|
37
|
+
use Rack::Static, :urls => ["/stylesheets", "/images", "/javascripts"], :root => theme
|
42
38
|
|
43
39
|
# Show all information for site.
|
44
40
|
get root_path do
|
@@ -88,17 +84,23 @@ class Application < Sinatra::Base #:nodoc: all
|
|
88
84
|
|
89
85
|
# Show all drafts.
|
90
86
|
get drafts_path do
|
91
|
-
|
92
|
-
|
93
|
-
|
87
|
+
authenticate!
|
88
|
+
if authenticated?
|
89
|
+
@all_tags = @site.find_in_drafts.all_tags.sort
|
90
|
+
@page.title, @page.keywords = title_path(:drafts), "drafts #{@all_tags.join(' ')}"
|
91
|
+
show :"drafts/index"
|
92
|
+
end
|
94
93
|
end
|
95
94
|
|
96
95
|
# Show selected drafted post.
|
97
96
|
get drafts_path "/:year/:month/:day/:name" do |year, month, day, name|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
97
|
+
authenticate!
|
98
|
+
if authenticated?
|
99
|
+
@current_post = @site.find_in_drafts.post(year, month, day, name)
|
100
|
+
@all_tags = @site.find_in_drafts.all_tags.sort
|
101
|
+
@page.title, @page.keywords = @current_post.title, @current_post.tags.join(' ')
|
102
|
+
show :"drafts/show"
|
103
|
+
end
|
102
104
|
end
|
103
105
|
|
104
106
|
# Show information site.
|
@@ -113,10 +115,21 @@ class Application < Sinatra::Base #:nodoc: all
|
|
113
115
|
show :search
|
114
116
|
end
|
115
117
|
|
118
|
+
get manager_path do
|
119
|
+
authenticate!
|
120
|
+
if authenticated?
|
121
|
+
@page.title, @page.keywords = title_path(:manager, :posts), @all_tags.join(' ')
|
122
|
+
show :"posts/index"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
include Postview::Authentication
|
129
|
+
|
116
130
|
def show(template, locals = {}, options = {})
|
117
131
|
erb template, options.update(:locals => locals)
|
118
132
|
end
|
119
|
-
private :show
|
120
133
|
|
121
134
|
end # class Application
|
122
135
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Postview
|
2
|
+
|
3
|
+
# Copyright (c) 2009 Hallison Batista
|
4
|
+
module Authentication
|
5
|
+
|
6
|
+
# ...
|
7
|
+
def authentication
|
8
|
+
@authentication ||= Rack::Auth::Basic::Request.new(request.env)
|
9
|
+
end
|
10
|
+
|
11
|
+
def username
|
12
|
+
env["REMOTE_USER"] || authentication.credentials.first
|
13
|
+
end
|
14
|
+
|
15
|
+
def password
|
16
|
+
authentication.credentials.last
|
17
|
+
end
|
18
|
+
|
19
|
+
# Run basic authentication.
|
20
|
+
def authenticate!
|
21
|
+
headers "WWW-Authenticate" => %(Basic realm="#{@site.title}") and
|
22
|
+
@error_message = "Not authorized\n" and throw(:halt, [401, erb(:error)]) and
|
23
|
+
return unless authenticated?
|
24
|
+
end
|
25
|
+
|
26
|
+
def authenticated?
|
27
|
+
authentication.provided? &&
|
28
|
+
authentication.basic? &&
|
29
|
+
authentication.credentials &&
|
30
|
+
@site.authenticate?(username, password)
|
31
|
+
end
|
32
|
+
|
33
|
+
end # module Authorization
|
34
|
+
|
35
|
+
end # module Postview
|
36
|
+
|
data/lib/postview/cli.rb
CHANGED
@@ -41,6 +41,16 @@ module CLI
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def hidden_prompt label
|
45
|
+
while true
|
46
|
+
system "stty -echo"
|
47
|
+
printf "%1$s %2$s: ", " "*2, "#{label}"
|
48
|
+
value = $stdin.readline.chomp.strip
|
49
|
+
system "stty echo"
|
50
|
+
return value unless value.nil? || value.to_s.empty?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
44
54
|
def start process, &block
|
45
55
|
printf "%1$s %2$s ", ">"*2, process
|
46
56
|
if block_given?
|
@@ -21,7 +21,7 @@ class CreateCommand #:nodoc: all
|
|
21
21
|
if args.first =~ /^\w.*|^\/\w.*/
|
22
22
|
new(args.shift, args.options).run
|
23
23
|
else
|
24
|
-
new(
|
24
|
+
new(nil, args.options).run
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -40,7 +40,7 @@ private
|
|
40
40
|
@arguments.summary_indent = " "
|
41
41
|
@arguments.summary_width = 24
|
42
42
|
@arguments.banner = <<-end_banner.gsub(/^[ ]{6}/, '')
|
43
|
-
#{Postview::
|
43
|
+
#{Postview::version_summary}
|
44
44
|
|
45
45
|
Usage:
|
46
46
|
#{Postview.name.downcase} create <path>
|
@@ -55,21 +55,27 @@ private
|
|
55
55
|
@arguments.separator ""
|
56
56
|
|
57
57
|
begin
|
58
|
-
@
|
58
|
+
unless @path
|
59
|
+
puts @arguments
|
60
|
+
exit 1
|
61
|
+
else
|
62
|
+
@arguments.parse!
|
63
|
+
end
|
59
64
|
rescue => error
|
60
65
|
puts error
|
61
66
|
puts @arguments
|
62
67
|
end
|
63
|
-
puts "#{Postview::
|
68
|
+
puts "#{Postview::version_summary}\n\n"
|
64
69
|
end
|
65
70
|
|
66
71
|
def build_settings
|
67
|
-
|
72
|
+
create_root_path
|
68
73
|
if @options[:prompt]
|
69
74
|
prompt_for_site_settings
|
70
75
|
prompt_for_directories_settings
|
71
76
|
prompt_for_sections_settings
|
72
77
|
end
|
78
|
+
prompt_for_site_password
|
73
79
|
create_settings
|
74
80
|
create_directories
|
75
81
|
create_default_theme
|
@@ -87,7 +93,7 @@ private
|
|
87
93
|
end
|
88
94
|
end
|
89
95
|
|
90
|
-
def
|
96
|
+
def create_root_path
|
91
97
|
start "Creating #{@path} path" do
|
92
98
|
step { @path = Pathname.new(@path) }
|
93
99
|
step { @path.exist? ? raise("Path #{@path} exist") : true }
|
@@ -131,37 +137,38 @@ private
|
|
131
137
|
end
|
132
138
|
|
133
139
|
def create_default_theme
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
step { path.mkpath; true }
|
138
|
-
step { path.exist? }
|
139
|
-
end
|
140
|
-
end
|
140
|
+
create_path @theme
|
141
|
+
copy_default_theme @theme_default, @theme
|
142
|
+
end
|
141
143
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
end
|
144
|
+
def create_path(path)
|
145
|
+
start "Creating #{path}" do
|
146
|
+
step { path.exist? ? raise("Path #{path} exist") : true }
|
147
|
+
step { path.mkpath; true }
|
148
|
+
step { path.exist? }
|
148
149
|
end
|
150
|
+
end
|
149
151
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
origin.children.map do |file|
|
157
|
-
copy.call file, path.join(file.basename)
|
158
|
-
end
|
152
|
+
def copy_default_theme(origin, destination)
|
153
|
+
origin.children.map do |origin_path|
|
154
|
+
if origin_path.directory?
|
155
|
+
destination_path = destination.join(origin_path.basename)
|
156
|
+
create_path destination_path
|
157
|
+
copy_default_theme origin_path, destination_path
|
159
158
|
else
|
160
|
-
|
159
|
+
copy_file origin_path, destination.join(origin_path.basename)
|
161
160
|
end
|
162
161
|
end
|
163
162
|
end
|
164
163
|
|
164
|
+
def copy_file(origin, destination)
|
165
|
+
start "Creating #{destination}" do
|
166
|
+
step { destination.exist? ? raise("Theme file #{destination} exist") : true }
|
167
|
+
step { FileUtils.copy(origin, destination); true }
|
168
|
+
step { destination.exist? }
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
165
172
|
def create_rackup
|
166
173
|
config = @path.join("config.ru")
|
167
174
|
start "Creating #{config} file" do
|
@@ -182,10 +189,10 @@ private
|
|
182
189
|
rakefile.open("w+") do |file|
|
183
190
|
content = []
|
184
191
|
content << "require 'postview'\n"
|
192
|
+
content << "include Postview::CLI::Command\n"
|
185
193
|
content << <<-'end_def'.gsub(/^[ ]{10}/, '')
|
186
194
|
# Build default settings file and load.
|
187
195
|
def settings
|
188
|
-
#Postview::Settings.build_default_file
|
189
196
|
Postview::Settings.load
|
190
197
|
end
|
191
198
|
end_def
|
@@ -242,7 +249,7 @@ private
|
|
242
249
|
|
243
250
|
content << <<-'end_task'.gsub(/^[ ]{10}/, '')
|
244
251
|
desc <<-end_desc.gsub(/^[ ]{2}/,'')
|
245
|
-
Create new post in #{settings.
|
252
|
+
Create new post in #{settings.path_to(:posts)}.
|
246
253
|
For edit posts, set environment variable EDITOR or VISUAL. Otherwise,
|
247
254
|
pass editor="<your favorite editor command and arguments>".
|
248
255
|
|
@@ -255,22 +262,22 @@ private
|
|
255
262
|
$ rake post[other/path/for/new/post]
|
256
263
|
end_desc
|
257
264
|
task :post, [:directory] do |spec, args|
|
258
|
-
|
265
|
+
puts "New post. Type all attributes for new post.\n"
|
259
266
|
path = if args.directory
|
260
267
|
if settings.directories.has_key? args.directory.to_sym
|
261
|
-
settings.
|
268
|
+
settings.path_to(args.directory.to_sym)
|
262
269
|
else
|
263
270
|
args.directory
|
264
271
|
end
|
265
272
|
else
|
266
|
-
settings.
|
273
|
+
settings.path_to(:drafts)
|
267
274
|
end
|
268
275
|
post = Postage::Post.new :title => prompt("Post title"),
|
269
276
|
:publish_date => prompt("Publish date", Date.today),
|
270
277
|
:tags => prompt("Tags separated by spaces").split(' '),
|
271
278
|
:filter => :markdown,
|
272
|
-
:content => <<-end_content.gsub(/^[ ]{
|
273
|
-
|
279
|
+
:content => <<-end_content.gsub(/^[ ]{28}/,'')
|
280
|
+
Thanks for use #{Postview.version_summary}.
|
274
281
|
Input here the content of your post.
|
275
282
|
end_content
|
276
283
|
|
@@ -303,7 +310,7 @@ private
|
|
303
310
|
settings.directories.keys.each do |dirname|
|
304
311
|
desc "Synchronize #{dirname}."
|
305
312
|
task dirname, [:destination] do |spec,args|
|
306
|
-
|
313
|
+
puts "Synchronize #{dirname} directory."
|
307
314
|
ftp(dirname, args.destination)
|
308
315
|
end
|
309
316
|
end
|
@@ -332,6 +339,15 @@ private
|
|
332
339
|
end
|
333
340
|
end
|
334
341
|
|
342
|
+
def prompt_for_site_password
|
343
|
+
init "Settings required for generate new token" do |site|
|
344
|
+
site[:author] = prompt "Author name", @settings.site[:author]
|
345
|
+
site[:domain] = prompt "Domain", @settings.site[:domain], %r{.*\..*}
|
346
|
+
site[:token] = Postview::Site::tokenize(site[:author], hidden_prompt("Password"), site[:domain])
|
347
|
+
@site.update site
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
335
351
|
def prompt_for_directories_settings
|
336
352
|
init "Settings for directories" do |directories|
|
337
353
|
directories[:posts] = prompt "Posts", @settings.directories[:posts]
|