monologue 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +47 -32
- data/app/assets/stylesheets/monologue/blog/monologue.css +5 -0
- data/app/controllers/monologue/admin/base_controller.rb +1 -1
- data/app/controllers/monologue/admin/comments_controller.rb +4 -0
- data/app/controllers/monologue/admin/posts_controller.rb +15 -4
- data/app/controllers/monologue/application_controller.rb +2 -0
- data/app/controllers/monologue/posts_controller.rb +2 -2
- data/app/helpers/monologue/application_helper.rb +4 -0
- data/app/models/monologue/post.rb +1 -1
- data/app/models/monologue/posts_revision.rb +30 -1
- data/app/sweepers/monologue/posts_sweeper.rb +1 -0
- data/app/views/layouts/monologue/admin/_nav_bar.html.erb +4 -4
- data/app/views/layouts/monologue/application.html.erb +1 -19
- data/app/views/layouts/monologue/application/_fb_open_graph.html.erb +4 -0
- data/app/views/layouts/monologue/{_google_analytics.html.erb → application/_google_analytics.html.erb} +0 -0
- data/app/views/layouts/monologue/application/_head.html.erb +18 -0
- data/app/views/layouts/monologue/application/_meta_description.html.erb +1 -0
- data/app/views/layouts/monologue/application/_title.html.erb +3 -0
- data/app/views/monologue/admin/comments/show.html.erb +4 -0
- data/app/views/monologue/admin/posts/_form.html.erb +2 -2
- data/app/views/monologue/posts/_social_sharing.html.erb +1 -1
- data/app/views/monologue/posts/feed.rss.builder +2 -2
- data/app/views/monologue/posts/index.html.erb +1 -1
- data/app/views/monologue/posts/show.html.erb +2 -2
- data/config/locales/en.yml +30 -1
- data/config/locales/fr.yml +30 -1
- data/config/routes.rb +1 -0
- data/db/migrate/20120526131841_migrate_old_urls.rb +19 -0
- data/db/migrate/20120526195147_add_index_to_posts_revision_url.rb +5 -0
- data/lib/monologue.rb +2 -1
- data/lib/monologue/version.rb +1 -1
- metadata +11 -3
data/README.md
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# MONOLOGUE
|
2
|
-
---
|
3
2
|
Monologue is a basic mountable blogging engine in Rails built to be easily mounted in an already existing Rails app, but it can also be used alone.
|
4
3
|
|
5
4
|
[](http://travis-ci.org/jipiboily/monologue)
|
6
5
|
|
7
6
|
|
8
7
|
## Features
|
9
|
-
---
|
10
8
|
- Rails mountable engine (fully named spaced)
|
11
9
|
- tested
|
12
10
|
- back to basics: few features
|
@@ -23,51 +21,68 @@ Monologue is a basic mountable blogging engine in Rails built to be easily mount
|
|
23
21
|
|
24
22
|
|
25
23
|
## Installation
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
24
|
+
### 1. Add the gem to your `Gemfile`
|
25
|
+
```ruby
|
26
|
+
gem "monologue"
|
27
|
+
```
|
28
|
+
And run `bundle install` to fetch the gem and update your 'Gemfile.lock'.
|
29
|
+
|
30
|
+
### 2. Route to Monologue
|
31
|
+
|
32
|
+
Add this to your route file (`config/route.rb`)
|
33
|
+
```ruby
|
34
|
+
# This line mounts Monologue's routes at the root of your application.
|
35
|
+
# This means, any requests to URLs such as /my-post, will go to Monologue::PostsController.
|
36
|
+
# If you would like to change where this engine is mounted, simply change the :at option to something different.
|
37
|
+
#
|
38
|
+
# We ask that you don't use the :as option here, as Monologue relies on it being the default of "monologue"
|
39
|
+
mount Monologue::Engine, :at => '/' # or whatever path, be it "/blog" or "/monologue"
|
40
|
+
```
|
41
|
+
|
42
|
+
### 3. Migrate Monologue's database tables
|
43
|
+
Run these commands:
|
44
|
+
|
45
|
+
1. $`bundle exec rake monologue:install:migrations`
|
46
|
+
2. $`bundle exec rake db:create` (only if this is a new project)
|
47
|
+
3. $`bundle exec rake db:migrate`
|
48
|
+
|
42
49
|
|
43
|
-
|
50
|
+
### 4. Create a user
|
51
|
+
Open your development console with `rails c`, then:
|
52
|
+
```ruby
|
53
|
+
Monologue::User.create(name: "monologue", email:"monologue@example.com", password:"my-password", password_confirmation: "my-password")
|
54
|
+
```
|
55
|
+
|
56
|
+
### 5. Configure Monologue.
|
57
|
+
This is all done in an initializer file, say `config/initializers/monologue.rb`. More on this in the [Wiki - Configuration](https://github.com/jipiboily/monologue/wiki/Configuration).
|
58
|
+
|
59
|
+
### 6. Ready
|
60
|
+
Start your server and head on [http://localhost:3000/monologue](http://localhost:3000/monologue) to log in the admin section.
|
44
61
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
62
|
+
### Note to Heroku users
|
63
|
+
Additionnal step: turn caching off in `config/environments/production.rb`:
|
64
|
+
```ruby
|
65
|
+
config.action_controller.perform_caching = false
|
66
|
+
```
|
49
67
|
|
50
68
|
## Enable caching
|
51
|
-
---
|
52
69
|
Just turn perform_caching to true in your environment config file (`config/environment/{environment}.rb):
|
53
|
-
|
54
|
-
|
70
|
+
```ruby
|
71
|
+
config.action_controller.perform_caching = true
|
72
|
+
```
|
55
73
|
|
56
74
|
**IMPORTANT**: if monologue is mounted at root ("/"), you must also add that in your `routes.rb` file, before the monologue mount:
|
57
75
|
|
58
|
-
|
76
|
+
```ruby
|
77
|
+
root to: 'monologue/posts#index'
|
78
|
+
```
|
59
79
|
|
60
80
|
## Customization
|
61
|
-
---
|
62
|
-
|
63
81
|
See the [Wiki - Customizations](https://github.com/jipiboily/monologue/wiki/Customizations).
|
64
82
|
|
65
83
|
## Requirements
|
66
|
-
---
|
67
84
|
- Rails 3.1 +
|
68
85
|
- Database: MySQL & Postgres are supported but other databases might work too.
|
69
86
|
|
70
87
|
## Contribute
|
71
|
-
---
|
72
|
-
|
73
88
|
Fork it, then pull request. Please add tests for your feature or bug fix.
|
@@ -6,7 +6,7 @@ class Monologue::Admin::BaseController < Monologue::ApplicationController
|
|
6
6
|
|
7
7
|
def authenticate_user!
|
8
8
|
if current_user.nil?
|
9
|
-
redirect_to admin_login_url, :alert => "
|
9
|
+
redirect_to admin_login_url, :alert => I18n.t("monologue.admin.login.need_auth")
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -20,7 +20,13 @@ class Monologue::Admin::PostsController < Monologue::Admin::BaseController
|
|
20
20
|
@revision.user_id = current_user.id
|
21
21
|
|
22
22
|
if @post.save
|
23
|
-
|
23
|
+
|
24
|
+
if @revision.published_at > DateTime.now && @post.published && ActionController::Base.perform_caching
|
25
|
+
flash[:warning] = I18n.t("monologue.admin.posts.create.created_with_future_date_and_cache")
|
26
|
+
else
|
27
|
+
flash[:notice] = I18n.t("monologue.admin.posts.create.created")
|
28
|
+
end
|
29
|
+
redirect_to edit_admin_post_path(@post)
|
24
30
|
else
|
25
31
|
render :action => "new"
|
26
32
|
end
|
@@ -37,7 +43,12 @@ class Monologue::Admin::PostsController < Monologue::Admin::BaseController
|
|
37
43
|
@revision = @post.posts_revisions.build(params[:post][:posts_revision])
|
38
44
|
@revision.user_id = current_user.id
|
39
45
|
if @post.save
|
40
|
-
|
46
|
+
if @revision.published_at > DateTime.now && @post.published && ActionController::Base.perform_caching
|
47
|
+
flash[:warning] = I18n.t("monologue.admin.posts.update.saved_with_future_date_and_cache")
|
48
|
+
else
|
49
|
+
flash[:notice] = I18n.t("monologue.admin.posts.update.saved")
|
50
|
+
end
|
51
|
+
redirect_to edit_admin_post_path(@post)
|
41
52
|
else
|
42
53
|
render :edit
|
43
54
|
end
|
@@ -46,9 +57,9 @@ class Monologue::Admin::PostsController < Monologue::Admin::BaseController
|
|
46
57
|
def destroy
|
47
58
|
post = Monologue::Post.find(params[:id])
|
48
59
|
if post.destroy
|
49
|
-
redirect_to admin_posts_path, :notice => "
|
60
|
+
redirect_to admin_posts_path, :notice => I18n.t("monologue.admin.posts.delete.removed")
|
50
61
|
else
|
51
|
-
redirect_to admin_posts_path, :alert => "
|
62
|
+
redirect_to admin_posts_path, :alert => I18n.t("monologue.admin.posts.delete.failed")
|
52
63
|
end
|
53
64
|
end
|
54
65
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class Monologue::ApplicationController < ApplicationController
|
2
2
|
|
3
|
+
layout Monologue.layout if Monologue.layout # TODO: find a way to test that. It was asked in issue #54 (https://github.com/jipiboily/monologue/issues/54)
|
4
|
+
|
3
5
|
def not_found
|
4
6
|
# fallback to the default 404.html page from main_app.
|
5
7
|
file = Rails.root.join('public', '404.html')
|
@@ -8,9 +8,9 @@ class Monologue::PostsController < Monologue::ApplicationController
|
|
8
8
|
|
9
9
|
def show
|
10
10
|
unless current_user
|
11
|
-
post = Monologue::Post.published.where("monologue_posts_revisions.url = :url", {:url =>
|
11
|
+
post = Monologue::Post.published.where("monologue_posts_revisions.url = :url", {:url => params[:post_url]}).first
|
12
12
|
else
|
13
|
-
post = Monologue::Post.default.where("monologue_posts_revisions.url = :url", {:url =>
|
13
|
+
post = Monologue::Post.default.where("monologue_posts_revisions.url = :url", {:url => params[:post_url]}).first
|
14
14
|
end
|
15
15
|
if post.nil?
|
16
16
|
not_found
|
@@ -9,7 +9,7 @@ module Monologue
|
|
9
9
|
|
10
10
|
|
11
11
|
scope :default, includes(:posts_revisions).where("posts_revision_id = monologue_posts_revisions.id").order("published_at DESC")
|
12
|
-
scope :published, default.where(:published => true)
|
12
|
+
scope :published, default.where(:published => true).where("published_at <= ?", DateTime.now)
|
13
13
|
|
14
14
|
validates :posts_revision_id, :uniqueness => true
|
15
15
|
|
@@ -13,6 +13,8 @@ module Monologue
|
|
13
13
|
validates :title, :presence => true
|
14
14
|
validates :content, :presence => true
|
15
15
|
validates :url, :presence => true
|
16
|
+
validate :url_do_not_start_with_slash
|
17
|
+
validate :url_is_unique
|
16
18
|
validates :user_id, :presence => true
|
17
19
|
# validates :post_id, :presence => true # TODO: do something about this validation on the first creation of a POST
|
18
20
|
validates :published_at, :presence => true
|
@@ -23,12 +25,39 @@ module Monologue
|
|
23
25
|
post.save!
|
24
26
|
end
|
25
27
|
|
28
|
+
def full_url
|
29
|
+
"#{Monologue::Engine.routes.url_helpers.root_path}#{self.url}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def url_do_not_start_with_slash
|
33
|
+
errors.add(:url, I18n.t("activerecord.errors.models.monologue/posts_revision.attributes.url.start_with_slash")) if self.url.start_with?("/")
|
34
|
+
end
|
35
|
+
|
36
|
+
def url_is_unique
|
37
|
+
errors.add(:url, I18n.t("activerecord.errors.models.monologue/posts_revision.attributes.url.unique")) if self.url_exists?
|
38
|
+
end
|
39
|
+
|
40
|
+
def url_exists?
|
41
|
+
if self.post_id.nil?
|
42
|
+
return Monologue::PostsRevision.where("url = ?", self.url).count > 0
|
43
|
+
else
|
44
|
+
return Monologue::PostsRevision.where("url = ? and post_id <> ?", self.url, self.post_id).count > 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
26
48
|
private
|
27
49
|
|
28
50
|
def generate_url
|
29
51
|
year = self.published_at.class == ActiveSupport::TimeWithZone ? self.published_at.year : DateTime.now.year
|
30
52
|
self.title = "" if self.title.nil?
|
31
|
-
|
53
|
+
base_title = "#{year}/#{self.title.parameterize}"
|
54
|
+
url_empty = self.url.nil? || self.url.strip == ""
|
55
|
+
self.url = base_title if url_empty
|
56
|
+
while self.url_exists? && url_empty
|
57
|
+
i ||= 1
|
58
|
+
self.url = "#{base_title}-#{i}"
|
59
|
+
i += 1
|
60
|
+
end
|
32
61
|
end
|
33
62
|
end
|
34
63
|
end
|
@@ -3,6 +3,7 @@ class Monologue::PostsSweeper < ActionController::Caching::Sweeper
|
|
3
3
|
|
4
4
|
|
5
5
|
def sweep(post)
|
6
|
+
return unless post.published
|
6
7
|
root_path = Monologue::Engine.routes.url_helpers.root_path if root_path.nil? # TODO: why do I have to do this to make tests pass? There must be something much more clean to make tests pass
|
7
8
|
page_cache_directory = Rails.public_path if page_cache_directory.nil? # TODO: we should not need this either...
|
8
9
|
if post.posts_revisions.count > 0
|
@@ -5,13 +5,13 @@
|
|
5
5
|
<ul class="nav pull-left">
|
6
6
|
|
7
7
|
<li class="<%= request.fullpath === new_admin_post_path ? "active":"" %>">
|
8
|
-
|
8
|
+
<%= link_to t(".add_a_monologue"), new_admin_post_path%>
|
9
9
|
</li>
|
10
10
|
<li class="<%= request.fullpath === admin_posts_path || request.fullpath === admin_path ? "active":"" %>">
|
11
|
-
|
11
|
+
<%= link_to t(".list_monologues"), admin_posts_path %>
|
12
12
|
</li>
|
13
|
-
<li>
|
14
|
-
|
13
|
+
<li class="<%= request.fullpath === admin_comments_path ? "active":"" %>">
|
14
|
+
<%= link_to t(".comments"), admin_comments_path %></a>
|
15
15
|
</li>
|
16
16
|
</ul>
|
17
17
|
<ul class="nav pull-right">
|
@@ -4,25 +4,7 @@
|
|
4
4
|
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
|
5
5
|
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]-->
|
6
6
|
<head>
|
7
|
-
|
8
|
-
<%= content_for?(:title) ? ((yield :title) + " | #{Monologue.site_name}") : Monologue.site_name %>
|
9
|
-
</title>
|
10
|
-
<meta charset="utf-8" />
|
11
|
-
<meta name="description" content="<%= content_for?(:meta_description) ? yield(:meta_description) : Monologue.meta_description %>" />
|
12
|
-
<meta name="keyword" content="<%=Monologue.meta_keyword%>">
|
13
|
-
|
14
|
-
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
15
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
16
|
-
|
17
|
-
<%= stylesheet_link_tag "monologue/blog/application" %>
|
18
|
-
<%= javascript_include_tag "monologue/blog/application" %>
|
19
|
-
|
20
|
-
<!-- Mobile Specific Metas
|
21
|
-
================================================== -->
|
22
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
23
|
-
|
24
|
-
<link href="/feed" rel="alternate" title="RSS" type="application/rss+xml" >
|
25
|
-
<%= render "layouts/monologue/google_analytics" %>
|
7
|
+
<%= render "layouts/monologue/application/head" %>
|
26
8
|
</head>
|
27
9
|
<body>
|
28
10
|
<div class="container">
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<meta property="og:title" content="<%= monologue_accurate_title %>"/>
|
2
|
+
<meta property="og:type" content="<%= controller.action_name == "show" ? "article" : "blog" %>"/>
|
3
|
+
<meta property="og:url" content="http://<%= request.host_with_port %><%= request.path.gsub("//","/") %>"/>
|
4
|
+
<meta property="og:site_name" content="<%= Monologue.site_name %>"/>
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= render "layouts/monologue/application/title" %>
|
2
|
+
<meta charset="utf-8" />
|
3
|
+
<%= render "layouts/monologue/application/meta_description" %>
|
4
|
+
<%= render "layouts/monologue/application/fb_open_graph" %>
|
5
|
+
<meta name="keyword" content="<%=Monologue.meta_keyword%>">
|
6
|
+
|
7
|
+
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
9
|
+
|
10
|
+
<%= stylesheet_link_tag "monologue/blog/application" %>
|
11
|
+
<%= javascript_include_tag "monologue/blog/application" %>
|
12
|
+
|
13
|
+
<!-- Mobile Specific Metas
|
14
|
+
================================================== -->
|
15
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
16
|
+
|
17
|
+
<link href="/feed" rel="alternate" title="RSS" type="application/rss+xml" >
|
18
|
+
<%= render "layouts/monologue/application/google_analytics" %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<meta name="description" content="<%= content_for?(:meta_description) ? yield(:meta_description) : Monologue.meta_description %>" />
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<div id="recentcomments" class="dsq-widget">
|
2
|
+
<h1 class="dsq-widget-title"><%= t(".recent_comments") %></h1>
|
3
|
+
<script type="text/javascript" src="http://<%= Monologue.disqus_shortname%>.disqus.com/recent_comments_widget.js?num_items=20&hide_avatars=0&avatar_size=48&excerpt_length=500"></script>
|
4
|
+
</div>
|
@@ -2,12 +2,12 @@
|
|
2
2
|
<%= post.fields_for @revision do |revision| %>
|
3
3
|
<%= revision.text_field :title, :label => t(".title"), :class => "span6" %>
|
4
4
|
<%= revision.text_area :content, :label => t(".content"), :class => "span12 ckeditor" %>
|
5
|
-
<%= revision.text_field :url, :label => raw("#{t(".url.before_generated_url")} '#{
|
5
|
+
<%= revision.text_field :url, :label => raw("#{t(".url.before_generated_url")} '#{DateTime.now.year}/#{t(".url.generated_title")}'#{t(".url.after_generated_url")}. #{t(".url.do_not_add_mount_point")} <i>'#{monologue.root_path}'.</i>") %>
|
6
6
|
<%= revision.text_field :published_at, :label => t(".published_at"), :data => {:datepicker => "datepicker"}, :value => revision.object.published_at.nil? ? "" : revision.object.published_at.strftime("%Y-%m-%d") %>
|
7
7
|
<% end %>
|
8
8
|
<%= post.check_box :published, :label => t(".published") %>
|
9
9
|
|
10
|
-
<%= post.submit t(".save"), :class => "btn btn-large btn-primary" %> <a href="<%= @revision.
|
10
|
+
<%= post.submit t(".save"), :class => "btn btn-large btn-primary" %> <a href="<%= @revision.full_url %>" target="_blank" class="btn btn-large"><%= t(".preview") %></a>
|
11
11
|
|
12
12
|
<script>
|
13
13
|
if($.fn.datepicker.defaults_<%= I18n.locale %>){
|
@@ -16,7 +16,7 @@
|
|
16
16
|
<!-- TWITTER -->
|
17
17
|
<a href="https://twitter.com/share" class="twitter-share-button"
|
18
18
|
data-lang="<%= Monologue.twitter_locale || "en" %>"
|
19
|
-
data-url="
|
19
|
+
data-url="http://<%= request.host_with_port %><%= request.path.gsub("//","/") %>"
|
20
20
|
data-via="<%=Monologue.twitter_username%>"
|
21
21
|
data-text="<%=@revision.title%>"
|
22
22
|
data-count="vertical">Tweet</a>
|
@@ -11,8 +11,8 @@ xml.rss :version => "2.0" do
|
|
11
11
|
xml.title revision.title
|
12
12
|
xml.description raw(revision.content)
|
13
13
|
xml.pubDate revision.published_at.to_s(:rfc822)
|
14
|
-
xml.link Monologue.site_url + revision.
|
15
|
-
xml.guid Monologue.site_url + revision.
|
14
|
+
xml.link Monologue.site_url + revision.full_url
|
15
|
+
xml.guid Monologue.site_url + revision.full_url
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
<section>
|
5
5
|
<header>
|
6
|
-
<h1><%= link_to revision.title, revision.
|
6
|
+
<h1><%= link_to revision.title, revision.full_url %></h1>
|
7
7
|
<time datetime="<%= revision.published_at %>">
|
8
8
|
<%= revision.published_at.to_date.to_formatted_s(:long_ordinal) %>
|
9
9
|
</time> | <%= revision.user.name %> | <a href="<%= revision.url + "#disqus_thread" %>"></a>
|
@@ -8,11 +8,11 @@
|
|
8
8
|
<% end %>
|
9
9
|
|
10
10
|
<article>
|
11
|
-
<header><h1><%= link_to @revision.title, @revision.
|
11
|
+
<header><h1><%= link_to @revision.title, @revision.full_url %></h1></header>
|
12
12
|
<div class="posted">
|
13
13
|
<time datetime="<%= @revision.published_at %>">
|
14
14
|
<%= @revision.published_at.to_date.to_formatted_s(:long_ordinal) %>
|
15
|
-
</time> | <%= @revision.user.name %> | <a href="<%= @revision.
|
15
|
+
</time> | <%= @revision.user.name %> | <a href="<%= @revision.full_url + "#disqus_thread" %>"></a>
|
16
16
|
</div>
|
17
17
|
<p><%= raw @revision.content %></p>
|
18
18
|
|
data/config/locales/en.yml
CHANGED
@@ -18,6 +18,9 @@ en:
|
|
18
18
|
message:
|
19
19
|
"You may have mistyped the address or the page may have moved."
|
20
20
|
admin:
|
21
|
+
login:
|
22
|
+
need_auth:
|
23
|
+
"You must first log in to access admin section."
|
21
24
|
posts:
|
22
25
|
index:
|
23
26
|
title:
|
@@ -35,9 +38,24 @@ en:
|
|
35
38
|
new:
|
36
39
|
header:
|
37
40
|
"New monologue"
|
41
|
+
create:
|
42
|
+
created:
|
43
|
+
"Monologue created"
|
44
|
+
created_with_future_date_and_cache:
|
45
|
+
"Monologue created: posts with a future publication date will not be shown unless cache is cleared on that same day. Cache will most probably be generated before that and won't be refreshed automatically."
|
38
46
|
edit:
|
39
47
|
header:
|
40
48
|
"Edit"
|
49
|
+
update:
|
50
|
+
saved_with_future_date_and_cache:
|
51
|
+
"Monologue saved: posts with a future publication date will not be shown unless cache is cleared on that same day. Cache will most probably be generated before that and won't be refreshed automatically."
|
52
|
+
saved:
|
53
|
+
"Monologue saved"
|
54
|
+
delete:
|
55
|
+
removed:
|
56
|
+
"Monologue removed"
|
57
|
+
fail:
|
58
|
+
"Failed to remove monologue!"
|
41
59
|
form:
|
42
60
|
title:
|
43
61
|
"Title"
|
@@ -48,6 +66,8 @@ en:
|
|
48
66
|
"URL <br /><i> This will be filled by default with "
|
49
67
|
after_generated_url:
|
50
68
|
". You can choose your own URL. </i>"
|
69
|
+
do_not_add_mount_point:
|
70
|
+
"Do not add at the beginning of your URL :"
|
51
71
|
generated_title:
|
52
72
|
"your-post-title"
|
53
73
|
published_at:
|
@@ -58,6 +78,10 @@ en:
|
|
58
78
|
"Save"
|
59
79
|
preview:
|
60
80
|
"Preview"
|
81
|
+
comments:
|
82
|
+
show:
|
83
|
+
recent_comments:
|
84
|
+
"Recent comments"
|
61
85
|
sessions:
|
62
86
|
new:
|
63
87
|
title:
|
@@ -103,4 +127,9 @@ en:
|
|
103
127
|
attributes:
|
104
128
|
published_at:
|
105
129
|
blank:
|
106
|
-
"'Published at' is required"
|
130
|
+
"'Published at' is required"
|
131
|
+
url:
|
132
|
+
start_with_slash:
|
133
|
+
"URL can't start with a slash ('/')"
|
134
|
+
unique:
|
135
|
+
"URL is already used by another post"
|
data/config/locales/fr.yml
CHANGED
@@ -18,6 +18,9 @@ fr:
|
|
18
18
|
message:
|
19
19
|
"You pourriez avoir mal tappé l'adresse ou la page pourrait avoir été déplacée."
|
20
20
|
admin:
|
21
|
+
login:
|
22
|
+
need_auth:
|
23
|
+
"Vous devez d'abord vous connectez à la section d'administration."
|
21
24
|
posts:
|
22
25
|
index:
|
23
26
|
title:
|
@@ -35,9 +38,24 @@ fr:
|
|
35
38
|
new:
|
36
39
|
header:
|
37
40
|
"Nouveau monologue"
|
41
|
+
create:
|
42
|
+
created:
|
43
|
+
"Monologue créé: les articles avec une date de publication future ne seront pas affichés à moins que la cache soit vidée la même journée. La cache sera probablement générée avant ce moment et ne sera pas rafraichie automatiquement."
|
44
|
+
created_with_future_date_and_cache:
|
45
|
+
"Monologue créé avec succès."
|
38
46
|
edit:
|
39
47
|
header:
|
40
48
|
"Modifier"
|
49
|
+
update:
|
50
|
+
saved_with_future_date_and_cache:
|
51
|
+
"Monologue sauvegardé: les articles avec une date de publication future ne seront pas affichés à moins que la cache soit vidée la même journée. La cache sera probablement générée avant ce moment et ne sera pas rafraichie automatiquement."
|
52
|
+
saved:
|
53
|
+
"Monologue sauvegardé"
|
54
|
+
delete:
|
55
|
+
removed:
|
56
|
+
"Monologue effacé"
|
57
|
+
fail:
|
58
|
+
"Le monologue n'as pas pu être effacé!"
|
41
59
|
form:
|
42
60
|
title:
|
43
61
|
"Titre"
|
@@ -48,6 +66,8 @@ fr:
|
|
48
66
|
"Adresse URL <br /><i> Ce sera rempli par défaut avec "
|
49
67
|
after_generated_url:
|
50
68
|
". Vous pouvez aussi choisir votre propre adresse URL. </i>"
|
69
|
+
do_not_add_mount_point:
|
70
|
+
"N'ajoutez pas au début de l'adresse URL:"
|
51
71
|
generated_title:
|
52
72
|
"nom-de-votre-article"
|
53
73
|
published_at:
|
@@ -58,6 +78,10 @@ fr:
|
|
58
78
|
"Sauvegarder"
|
59
79
|
preview:
|
60
80
|
"Aperçu"
|
81
|
+
comments:
|
82
|
+
show:
|
83
|
+
recent_comments:
|
84
|
+
"Commentaires récents"
|
61
85
|
sessions:
|
62
86
|
new:
|
63
87
|
title:
|
@@ -103,4 +127,9 @@ fr:
|
|
103
127
|
attributes:
|
104
128
|
published_at:
|
105
129
|
blank:
|
106
|
-
"'Publié le' est requis"
|
130
|
+
"'Publié le' est requis"
|
131
|
+
url:
|
132
|
+
start_with_slash:
|
133
|
+
"L'adresse URL ne peut débuter par un slash ('/')"
|
134
|
+
unique:
|
135
|
+
"L'adresse URL est déjà utilisée par un autre article"
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
class MigrateOldUrls < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
mount_point = Monologue::Engine.routes.url_helpers.root_path
|
4
|
+
Monologue::PostsRevision.all.each do |r|
|
5
|
+
next if r.url.nil?
|
6
|
+
r.url = r.url.sub(mount_point, "")
|
7
|
+
r.save!
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def down
|
12
|
+
mount_point = Monologue::Engine.routes.url_helpers.root_path
|
13
|
+
Monologue::PostsRevision.all.each do |r|
|
14
|
+
next if r.url.nil?
|
15
|
+
r.url = mount_point + r.url
|
16
|
+
r.save!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/monologue.rb
CHANGED
data/lib/monologue/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monologue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -207,6 +207,7 @@ files:
|
|
207
207
|
- app/assets/stylesheets/monologue/blog/skeleton/layout.css
|
208
208
|
- app/assets/stylesheets/monologue/blog/skeleton/skeleton.css
|
209
209
|
- app/controllers/monologue/admin/base_controller.rb
|
210
|
+
- app/controllers/monologue/admin/comments_controller.rb
|
210
211
|
- app/controllers/monologue/admin/posts_controller.rb
|
211
212
|
- app/controllers/monologue/admin/sessions_controller.rb
|
212
213
|
- app/controllers/monologue/application_controller.rb
|
@@ -220,10 +221,15 @@ files:
|
|
220
221
|
- app/models/monologue/posts_revision.rb
|
221
222
|
- app/models/monologue/user.rb
|
222
223
|
- app/sweepers/monologue/posts_sweeper.rb
|
223
|
-
- app/views/layouts/monologue/_google_analytics.html.erb
|
224
224
|
- app/views/layouts/monologue/admin/_nav_bar.html.erb
|
225
225
|
- app/views/layouts/monologue/admin.html.erb
|
226
|
+
- app/views/layouts/monologue/application/_fb_open_graph.html.erb
|
227
|
+
- app/views/layouts/monologue/application/_google_analytics.html.erb
|
228
|
+
- app/views/layouts/monologue/application/_head.html.erb
|
229
|
+
- app/views/layouts/monologue/application/_meta_description.html.erb
|
230
|
+
- app/views/layouts/monologue/application/_title.html.erb
|
226
231
|
- app/views/layouts/monologue/application.html.erb
|
232
|
+
- app/views/monologue/admin/comments/show.html.erb
|
227
233
|
- app/views/monologue/admin/posts/_form.html.erb
|
228
234
|
- app/views/monologue/admin/posts/edit.html.erb
|
229
235
|
- app/views/monologue/admin/posts/index.html.erb
|
@@ -241,6 +247,8 @@ files:
|
|
241
247
|
- db/migrate/20120114001001_create_monologue_users.rb
|
242
248
|
- db/migrate/20120120193858_create_monologue_posts_revisions.rb
|
243
249
|
- db/migrate/20120120193907_create_monologue_posts.rb
|
250
|
+
- db/migrate/20120526131841_migrate_old_urls.rb
|
251
|
+
- db/migrate/20120526195147_add_index_to_posts_revision_url.rb
|
244
252
|
- db/seeds.rb
|
245
253
|
- lib/monologue/engine.rb
|
246
254
|
- lib/monologue/version.rb
|