postview 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. data/ABOUT +9 -0
  2. data/HISTORY +27 -1
  3. data/Rakefile +3 -1
  4. data/VERSION +4 -4
  5. data/bin/postview +2 -2
  6. data/lib/postview.rb +64 -13
  7. data/lib/postview/application.rb +34 -21
  8. data/lib/postview/authentication.rb +36 -0
  9. data/lib/postview/cli.rb +10 -0
  10. data/lib/postview/cli/create_command.rb +53 -37
  11. data/lib/postview/cli/server_command.rb +2 -2
  12. data/lib/postview/extensions.rb +10 -0
  13. data/lib/postview/helpers.rb +3 -0
  14. data/lib/postview/settings.rb +19 -17
  15. data/lib/postview/site.rb +13 -1
  16. data/lib/postview/version.rb +1 -1
  17. data/tasks/package.rake +80 -2
  18. data/test/application_test.rb +29 -14
  19. data/test/{extensions.rb → customizations.rb} +1 -0
  20. data/test/fixtures/application/config/settings.yml +4 -1
  21. data/test/fixtures/application/themes/{gemstone → mytheme}/images/banners/banner.jpg +0 -0
  22. data/test/fixtures/application/themes/{gemstone → mytheme}/images/favicon.ico +0 -0
  23. data/test/fixtures/application/themes/{gemstone → mytheme}/images/logo.png +0 -0
  24. data/test/fixtures/application/themes/{gemstone → mytheme}/images/navigation-bar.gif +0 -0
  25. data/test/fixtures/application/themes/{gemstone → mytheme}/images/postview.png +0 -0
  26. data/test/fixtures/application/themes/{gemstone → mytheme}/images/rack.png +0 -0
  27. data/test/fixtures/application/themes/{gemstone → mytheme}/images/ruby.png +0 -0
  28. data/test/fixtures/application/themes/{gemstone → mytheme}/images/sinatra.png +0 -0
  29. data/test/fixtures/application/themes/{gemstone → mytheme}/images/trojan.com +0 -0
  30. data/test/fixtures/application/themes/{gemstone/javascripts/gemstone.js → mytheme/javascripts/postview.js} +0 -0
  31. data/test/fixtures/application/themes/{gemstone → mytheme}/stylesheets/gemstone.css +0 -0
  32. data/test/fixtures/application/themes/{gemstone → mytheme}/stylesheets/postview.css +0 -0
  33. data/test/fixtures/application/themes/mytheme/templates/about.erb +1 -0
  34. data/test/fixtures/application/themes/mytheme/templates/archive/index.erb +3 -0
  35. data/test/fixtures/application/themes/mytheme/templates/archive/show.erb +1 -0
  36. data/test/fixtures/application/themes/mytheme/templates/drafts/index.erb +3 -0
  37. data/test/fixtures/application/themes/mytheme/templates/drafts/show.erb +1 -0
  38. data/test/fixtures/application/themes/mytheme/templates/error.erb +1 -0
  39. data/test/fixtures/application/themes/mytheme/templates/index.erb +3 -0
  40. data/{themes/default → test/fixtures/application/themes/mytheme/templates}/layout.erb +2 -2
  41. data/test/fixtures/application/themes/mytheme/templates/posts/index.erb +3 -0
  42. data/test/fixtures/application/themes/mytheme/templates/posts/show.erb +1 -0
  43. data/test/fixtures/application/themes/mytheme/templates/search.erb +6 -0
  44. data/test/fixtures/application/themes/mytheme/templates/tags/index.erb +3 -0
  45. data/test/fixtures/application/themes/mytheme/templates/tags/show.erb +6 -0
  46. data/test/fixtures/site/blog/config.ru +6 -0
  47. data/test/fixtures/site/blog/config/settings.yml +25 -0
  48. data/test/fixtures/{application/themes/gemstone/error.erb → site/blog/empty.yml} +0 -0
  49. data/test/fixtures/site/blog/posts/20090529-third_article.t1.t2.t3.mkd +4 -0
  50. data/test/fixtures/site/blog/posts/20090602-fourth_article.t1.t2.t3.t4.mkd +4 -0
  51. data/test/fixtures/site/blog/posts/archive/20080529-first_article.t1.mkd +4 -0
  52. data/test/fixtures/site/blog/posts/archive/20080602-second_article.t1.t2.mkd +4 -0
  53. data/test/fixtures/site/blog/posts/drafts/20090730-fifth_article.t1.t2.t3.t4.t5.mkd +4 -0
  54. data/{themes/default/error.erb → test/fixtures/site/themes/mytheme/images/banners/banner.jpg} +0 -0
  55. data/test/fixtures/site/themes/mytheme/images/favicon.ico +0 -0
  56. data/test/fixtures/site/themes/mytheme/images/logo.png +0 -0
  57. data/test/fixtures/site/themes/mytheme/images/navigation-bar.gif +0 -0
  58. data/test/fixtures/site/themes/mytheme/images/postview.png +0 -0
  59. data/test/fixtures/site/themes/mytheme/images/rack.png +0 -0
  60. data/test/fixtures/site/themes/mytheme/images/ruby.png +0 -0
  61. data/test/fixtures/site/themes/mytheme/images/sinatra.png +0 -0
  62. data/test/fixtures/site/themes/mytheme/images/trojan.com +0 -0
  63. data/test/fixtures/site/themes/mytheme/javascripts/postview.js +1 -0
  64. data/test/fixtures/site/themes/mytheme/stylesheets/gemstone.css +1 -0
  65. data/test/fixtures/site/themes/mytheme/stylesheets/postview.css +238 -0
  66. data/test/fixtures/site/themes/mytheme/templates/about.erb +1 -0
  67. data/test/fixtures/site/themes/mytheme/templates/archive/index.erb +3 -0
  68. data/test/fixtures/site/themes/mytheme/templates/archive/show.erb +1 -0
  69. data/test/fixtures/site/themes/mytheme/templates/drafts/index.erb +3 -0
  70. data/test/fixtures/site/themes/mytheme/templates/drafts/show.erb +1 -0
  71. data/test/fixtures/site/themes/mytheme/templates/error.erb +1 -0
  72. data/test/fixtures/site/themes/mytheme/templates/index.erb +3 -0
  73. data/test/fixtures/{application/themes/gemstone → site/themes/mytheme/templates}/layout.erb +20 -14
  74. data/test/fixtures/site/themes/mytheme/templates/posts/index.erb +3 -0
  75. data/test/fixtures/site/themes/mytheme/templates/posts/show.erb +1 -0
  76. data/test/fixtures/site/themes/mytheme/templates/search.erb +6 -0
  77. data/test/fixtures/site/themes/mytheme/templates/tags/index.erb +3 -0
  78. data/test/fixtures/site/themes/mytheme/templates/tags/show.erb +6 -0
  79. data/test/helpers_test.rb +1 -2
  80. data/test/settings_test.rb +12 -3
  81. data/test/site_test.rb +3 -4
  82. data/themes/default/stylesheets/postview.css +1 -0
  83. data/themes/default/{about.erb → templates/about.erb} +1 -1
  84. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/archive/index.erb +0 -0
  85. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/archive/show.erb +0 -0
  86. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/drafts/index.erb +1 -1
  87. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/drafts/show.erb +0 -0
  88. data/themes/default/templates/error.erb +13 -0
  89. data/themes/default/{index.erb → templates/index.erb} +1 -1
  90. data/themes/default/templates/layout.erb +130 -0
  91. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/posts/index.erb +0 -0
  92. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/posts/show.erb +0 -0
  93. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/search.erb +0 -0
  94. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/tags/index.erb +0 -0
  95. data/{test/fixtures/application/themes/gemstone → themes/default/templates}/tags/show.erb +0 -0
  96. metadata +164 -61
  97. data/INFO +0 -14
  98. data/lib/postview/about.rb +0 -34
  99. data/test/fixtures/application/themes/gemstone/about.erb +0 -22
  100. data/test/fixtures/application/themes/gemstone/index.erb +0 -38
  101. data/test/helper.rb +0 -9
  102. data/themes/default/archive/index.erb +0 -21
  103. data/themes/default/archive/show.erb +0 -17
  104. data/themes/default/drafts/index.erb +0 -21
  105. data/themes/default/drafts/show.erb +0 -17
  106. data/themes/default/posts/index.erb +0 -21
  107. data/themes/default/posts/show.erb +0 -17
  108. data/themes/default/search.erb +0 -40
  109. data/themes/default/tags/index.erb +0 -12
  110. data/themes/default/tags/show.erb +0 -40
@@ -47,7 +47,7 @@ private
47
47
  @arguments.summary_indent = " "
48
48
  @arguments.summary_width = 24
49
49
  @arguments.banner = <<-end_banner.gsub(/^[ ]{6}/, '')
50
- #{Postview::Version}
50
+ #{Postview::version_summary}
51
51
 
52
52
  Usage:
53
53
  #{Postview.name.downcase} server <path> [options]
@@ -68,7 +68,7 @@ private
68
68
  puts error
69
69
  puts @arguments
70
70
  end
71
- puts "#{Postview::Version}\n\n"
71
+ puts "#{Postview::version_summary}\n\n"
72
72
  end
73
73
 
74
74
  def load_server
@@ -6,3 +6,13 @@ class Array
6
6
  end
7
7
 
8
8
  end
9
+
10
+ class String
11
+
12
+ # Clean all spaces, non-words and digits.
13
+ def clean
14
+ gsub(/[ \W\d]/,'').downcase
15
+ end
16
+
17
+ end
18
+
@@ -33,6 +33,9 @@ module Helpers
33
33
  # All archived posts found by search.
34
34
  attr_reader :archived_posts_found
35
35
 
36
+ # HTTP status error message
37
+ attr_reader :error_message
38
+
36
39
  # Returns latest posts.
37
40
  def latest_posts(limit = 5)
38
41
  @all_posts.limit(limit) || []
@@ -7,16 +7,18 @@ class Settings
7
7
  :site => {
8
8
  :title => "Postview",
9
9
  :subtitle => "Post your articles",
10
- :author => "Hallison Batista",
11
- :email => "email@example.com",
10
+ :author => "Postview",
11
+ :email => "postview@example.com",
12
12
  :domain => "example.com",
13
13
  :directory => "/var/www/example",
14
- :theme => "default"
14
+ :theme => "default",
15
+ :token => "e44257415827b00557ae5505f93e112d6158c4ba3c567aefbbff47288c6bf7cd" # Password: admin
15
16
  },
16
17
  :directories => {
17
18
  :posts => "posts",
18
19
  :archive => "posts/archive",
19
- :drafts => "posts/drafts"
20
+ :drafts => "posts/drafts",
21
+ :themes => "themes"
20
22
  },
21
23
  :sections => {
22
24
  :root => "/",
@@ -25,14 +27,14 @@ class Settings
25
27
  :archive => "/archive",
26
28
  :drafts => "/drafts",
27
29
  :search => "/search",
28
- :about => "/about"
30
+ :about => "/about",
31
+ :manager => "/manager"
29
32
  }
30
33
  }
31
34
  FILE_NAME = "settings.yml"
32
35
  FILE_DIR = "config"
33
- FILE = Postview::PATH.join(FILE_DIR, FILE_NAME)
34
36
 
35
- attr_reader :site, :theme, :directories, :sections
37
+ attr_reader :site, :directories, :sections
36
38
 
37
39
  # Initialize the settings using attributes passed by arguments.
38
40
  # Only attributes valid are read. See DEFAULTS.
@@ -63,12 +65,12 @@ class Settings
63
65
 
64
66
  # Build a specific finder for directory.
65
67
  def build_finder_for(directory)
66
- Postage::Finder.new(directory_for(directory))
68
+ Postage::Finder.new(path_to(directory))
67
69
  end
68
70
 
69
71
  # Load a default settings values from file placed in +config/settings.yml+.
70
72
  def self.load
71
- load_file(FILE)
73
+ load_file(file)
72
74
  end
73
75
 
74
76
  # Load a specific settings file.
@@ -89,25 +91,25 @@ class Settings
89
91
 
90
92
  # Build settings file using DEFAULTS.
91
93
  def self.build_default_file
92
- FILE.open "w+" do |file|
94
+ file.open "w+" do |file|
93
95
  file << DEFAULTS.to_yaml
94
- end unless FILE.exist?
96
+ end unless file.exist?
95
97
  end
96
98
 
97
99
  # Returns settings file.
98
- def file
99
- FILE
100
+ def self.file
101
+ Postview::path.join(FILE_DIR, FILE_NAME)
100
102
  end
101
103
 
102
104
  # Check directory and returns file that matches with a pattern.
103
- def file_names_for(directory, pattern = "**.*")
104
- directory_for(directory, pattern)
105
+ def file_names_from(directory, pattern = "**.*")
106
+ path_to(directory, pattern)
105
107
  end
106
108
 
107
109
  # Returns a valid directory loaded from settings file.
108
- def directory_for(name, *paths)
110
+ def path_to(name, *paths)
109
111
  return Pathname.new(directories[name], *paths) if directories[name].match(%r{^/.*})
110
- PATH.join(directories[name], *paths)
112
+ Postview::path.join(directories[name], *paths)
111
113
  end
112
114
 
113
115
  # Parse all attributes to hash.
data/lib/postview/site.rb CHANGED
@@ -24,6 +24,9 @@ class Site
24
24
  # Theme directory name.
25
25
  attr_accessor :theme
26
26
 
27
+ # Token pass.
28
+ attr_accessor :token
29
+
27
30
  # Finder for posts
28
31
  attr_accessor :find
29
32
 
@@ -49,7 +52,6 @@ class Site
49
52
  end
50
53
 
51
54
  # Find all posts tagged with a specific tag.
52
- # Returns two lists: posts and archived posts.
53
55
  def find_all_posts_tagged_with(tag)
54
56
  [ find.all_posts_by_tag(tag), find_in_archive.all_posts_by_tag(tag) ]
55
57
  end
@@ -60,6 +62,16 @@ class Site
60
62
  [ find.posts(*values), find_in_archive.posts(*values) ]
61
63
  end
62
64
 
65
+ # Check authentication for user.
66
+ def authenticate?(username, password)
67
+ @token == self.class.tokenize(username, password, domain)
68
+ end
69
+
70
+ # Generate digest token.
71
+ def self.tokenize(username, password, domain)
72
+ Digest::SHA256.hexdigest("$#{username}?#{password}@#{domain}")
73
+ end
74
+
63
75
  end # class Site
64
76
 
65
77
  end #module Postview
@@ -16,7 +16,7 @@ module Version #:nodoc: all
16
16
  end
17
17
 
18
18
  def to_s
19
- "#{name.sub(/::.*/,'')} v#{tag} (#{info.date.strftime('%B, %d %Y')}, #{info.cycle})"
19
+ "#{name.sub(/::.*/,'')} v#{tag} (#{info.date.strftime('%B %d, %Y')}, #{info.cycle})"
20
20
  end
21
21
 
22
22
  end
data/tasks/package.rake CHANGED
@@ -1,8 +1,86 @@
1
1
  require 'rake/gempackagetask'
2
2
 
3
+ def files
4
+ #`git ls-files`.split.sort.reject{ |out| out =~ /^\./ || out =~ /^doc/ }
5
+ @files ||= OpenStruct.new :documents => Dir[*%w{ABOUT HISTORY LICENSE Rakefile VERSION README.rdoc}],
6
+ :binaries => Dir[*%w{{bin,scripts}/**}],
7
+ :libraries => Dir[*%w{{lib,tasks}/**/**.rb tasks/**/**.rake}],
8
+ :tests => Dir[*%w{test/**.rb test/fixtures/**/**}],
9
+ :resources => Dir[*%w{themes/**/**}]
10
+ end
11
+
12
+ def manifest
13
+ files.documents +
14
+ files.binaries +
15
+ files.libraries +
16
+ files.tests +
17
+ files.resources
18
+ end
19
+
3
20
  def gemspec
4
- load 'postview.gemspec' unless @gemspec
5
- @gemspec
21
+ @gemspec ||= Gem::Specification.new do |spec|
22
+
23
+ # Global information
24
+ spec.platform = Gem::Platform::RUBY
25
+ spec.executable = "postview"
26
+ spec.name = Postview.name.downcase
27
+ spec.version = Postview::version_tag
28
+ spec.date = Postview::version_spec.date.to_s
29
+ spec.summary = Postview::about_info.summary
30
+ spec.description = Postview::about_info.description
31
+ spec.authors = Postview::about_info.authors
32
+ spec.email = Postview::about_info.email
33
+ spec.homepage = Postview::about_info.homepage
34
+
35
+ # Dependencies
36
+ spec.add_dependency "sinatra", ">= 0.9.1.1"
37
+ spec.add_dependency "sinatra-mapping", ">= 1.0.5"
38
+ spec.add_dependency "postage", ">= 0.1.4.1"
39
+
40
+ spec.files = manifest
41
+ spec.require_paths = ["lib"]
42
+ spec.test_files = files.tests
43
+ spec.has_rdoc = true
44
+ spec.extra_rdoc_files = %w{README.rdoc LICENSE}
45
+ spec.rdoc_options = [
46
+ "--line-numbers",
47
+ "--inline-source",
48
+ "--title", Postview::version_summary,
49
+ "--main", "README.rdoc"
50
+ ]
51
+ spec.rubyforge_project = spec.name
52
+ spec.rubygems_version = Gem::VERSION
53
+ spec.post_install_message = <<-end_message.gsub(/^[ ]{6}/,'')
54
+ #{'-'*78}
55
+ #{Postview::version_summary}
56
+
57
+ Thanks for use this lightweight blogware. Now, you can read your posts by
58
+ editing in your favorite editor.
59
+
60
+ Please, feedback in http://github.com/hallison/postview/issues.
61
+ #{'-'*78}
62
+ end_message
63
+ end
64
+ end
65
+
66
+ def gemspec_file
67
+ @gemspec_file ||= Pathname.new("#{gemspec.name}.gemspec")
68
+ end
69
+
70
+ namespace :gem do
71
+
72
+ file gemspec_file.to_s => gemspec.files do
73
+ when_writing "Creating #{gemspec_file}" do
74
+ gemspec_file.open "w+" do |spec|
75
+ spec << gemspec.to_yaml
76
+ end
77
+ end
78
+ puts "Successfully built #{gemspec_file}"
79
+ end
80
+
81
+ desc "Build #{gemspec_file}"
82
+ task :spec => [gemspec_file]
83
+
6
84
  end
7
85
 
8
86
  Rake::GemPackageTask.new gemspec do |pkg|
@@ -3,12 +3,16 @@ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/..")
3
3
  require 'lib/postview'
4
4
  require 'test/unit'
5
5
  require 'rack/test'
6
- require 'test/helper'
6
+ require 'test/customizations'
7
7
 
8
8
  class ApplicationTest < Test::Unit::TestCase
9
9
 
10
10
  include Rack::Test::Methods
11
11
 
12
+ def setup
13
+ Postview::path = "test/fixtures/application"
14
+ end
15
+
12
16
  def app
13
17
  @app = Postview::Application
14
18
 
@@ -18,29 +22,24 @@ class ApplicationTest < Test::Unit::TestCase
18
22
  end
19
23
 
20
24
  def test_should_return_ok_for_theme_resources
21
- get app.theme_path "/images/favicon.ico" do |response|
25
+ get "/images/favicon.ico" do |response|
22
26
  assert response.ok?
23
- assert_equal "http://example.org/images/favicon.ico/", last_request.url
27
+ assert_equal "http://example.org/images/favicon.ico", last_request.url
24
28
  end
25
29
 
26
- get app.theme_path "/javascripts/gemstone.js" do |response|
30
+ get "/javascripts/postview.js" do |response|
27
31
  assert response.ok?
28
- assert_equal "http://example.org/javascripts/gemstone.js/", last_request.url
32
+ assert_equal "http://example.org/javascripts/postview.js", last_request.url
29
33
  end
30
34
 
31
- get app.theme_path "/stylesheets/gemstone.css" do |response|
35
+ get "/stylesheets/postview.css" do |response|
32
36
  assert response.ok?
33
- assert_equal "http://example.org/stylesheets/gemstone.css/", last_request.url
37
+ assert_equal "http://example.org/stylesheets/postview.css", last_request.url
34
38
  end
35
39
 
36
- get app.theme_path "/images/banners/banner.jpg" do |response|
40
+ get "/images/banners/banner.jpg" do |response|
37
41
  assert response.ok?
38
- assert_equal "http://example.org/images/banners/banner.jpg/", last_request.url
39
- end
40
-
41
- # TOFIX: Fix test to check security.
42
- get app.theme_path "/images/trojan.com" do |response|
43
- #assert !response.ok?
42
+ assert_equal "http://example.org/images/banners/banner.jpg", last_request.url
44
43
  end
45
44
  end
46
45
 
@@ -91,6 +90,7 @@ class ApplicationTest < Test::Unit::TestCase
91
90
  end
92
91
 
93
92
  def test_should_return_ok_in_drafts_path
93
+ authorize("Jack Ducklet", "s3kr3t")
94
94
  get app.drafts_path do |response|
95
95
  assert response.ok?
96
96
  assert_equal "http://example.org/drafts/", last_request.url
@@ -98,6 +98,7 @@ class ApplicationTest < Test::Unit::TestCase
98
98
  end
99
99
 
100
100
  def test_should_return_ok_in_drafts_path_with_params
101
+ authorize("Jack Ducklet", "s3kr3t")
101
102
  get app.drafts_path "2009/07/30/fifth_article" do |response|
102
103
  assert response.ok?
103
104
  assert_equal "http://example.org/drafts/2009/07/30/fifth_article/", last_request.url
@@ -118,5 +119,19 @@ class ApplicationTest < Test::Unit::TestCase
118
119
  end
119
120
  end
120
121
 
122
+ should "return ok in authorize path" do
123
+ authorize("Jack Ducklet", "s3kr3t")
124
+ get app.manager_path do |response|
125
+ assert response.ok?
126
+ assert_equal "http://example.org/manager/", last_request.url
127
+ end
128
+ end
129
+
130
+ should "load shared themes" do
131
+ site_path = Pathname.new("test/fixtures/site").expand_path
132
+ Postview::path = site_path.join("blog")
133
+ assert_equal site_path.join("themes/mytheme"), app.theme
134
+ end
135
+
121
136
  end
122
137
 
@@ -21,3 +21,4 @@ module Test::Unit
21
21
 
22
22
  end
23
23
  end
24
+
@@ -7,11 +7,13 @@
7
7
  :title: Postview
8
8
  :theme: default
9
9
  :subtitle: Post your articles
10
- :theme: gemstone
10
+ :theme: mytheme
11
+ :token: 948632a3174ea34188f1f261d26941cabd8a5a42b27577ff8e400d2cd139c6e1
11
12
  :directories:
12
13
  :posts: posts
13
14
  :archive: posts/archive
14
15
  :drafts: posts/drafts
16
+ :themes: themes
15
17
  :sections:
16
18
  :about: about
17
19
  :posts: posts
@@ -20,3 +22,4 @@
20
22
  :search: search
21
23
  :tags: tags
22
24
  :drafts: drafts
25
+ :manager: manager
@@ -0,0 +1 @@
1
+ <%=Postview::about_to_html%>
@@ -0,0 +1,3 @@
1
+ <%for post in all_archived_posts%>
2
+ <%=post%>
3
+ <%end%>
@@ -0,0 +1,3 @@
1
+ <%for post in all_drafted_posts%>
2
+ <%=post%>
3
+ <%end%>
@@ -0,0 +1 @@
1
+ <%=error_message%>
@@ -0,0 +1,3 @@
1
+ <%for post in latest_posts%>
2
+ <%=post.summary%>
3
+ <%end%>
@@ -5,7 +5,7 @@
5
5
 
6
6
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
7
  <title><%=site.title%> :: <%=page.title%></title>
8
- <meta name="generator" content="<%=Postview::Version%>" />
8
+ <meta name="generator" content="<%=Postview::version_summary%>" />
9
9
  <meta name="description" content="<%=site.subtitle%>" />
10
10
  <meta name="keywords" content="<%=page.keywords%>" />
11
11
  <link rel="shortcut icon" href="<%=path_to :images, "favicon.ico"%>" />
@@ -119,7 +119,7 @@
119
119
  <div id="footer">
120
120
 
121
121
  <p>
122
- <small><%=site.title%> &copy; 2009 <%=site.author%>. Powered by <%=link_to Postview::Version, "http://github.com/hallison/postview"%>.</small>
122
+ <small><%=site.title%> &copy; 2009 <%=site.author%>. Powered by <%=link_to Postview::version_summary, "http://github.com/hallison/postview"%>.</small>
123
123
  </p>
124
124
 
125
125
  </div><!-- footer -->