ecrire 0.24.1 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/Rakefile +2 -2
- data/lib/ecrire/app/controllers/admin/posts_controller.rb +2 -2
- data/lib/ecrire/app/controllers/application_controller.rb +19 -14
- data/lib/ecrire/app/controllers/ecrire/theme_controller.rb +11 -16
- data/lib/ecrire/app/helpers/application_helper.rb +0 -18
- data/lib/ecrire/app/models/post.rb +8 -8
- data/lib/ecrire/app/models/tag.rb +17 -0
- data/lib/ecrire/app/views/admin/posts/new.html.erb +1 -1
- data/lib/ecrire/application.rb +1 -1
- data/lib/ecrire/config/environment.rb +1 -1
- data/lib/ecrire/onboarding/controllers/databases_controller.rb +2 -1
- data/lib/ecrire/onboarding/controllers/onboarding_controller.rb +2 -1
- data/lib/ecrire/onboarding/controllers/users_controller.rb +1 -1
- data/lib/ecrire/onboarding/views/databases/index.html.erb +1 -1
- data/lib/ecrire/onboarding/views/layouts/application.html.erb +5 -1
- data/lib/ecrire/onboarding/views/onboarding/welcome.html.erb +1 -1
- data/lib/ecrire/onboarding/views/users/index.html.erb +1 -1
- data/lib/ecrire/theme/engine.rb +1 -0
- data/lib/ecrire/theme/template/controllers/posts_controller.rb +27 -0
- data/lib/ecrire/theme/template/routes.rb +2 -0
- data/lib/ecrire/theme/template/views/layouts/application.html.erb +6 -1
- data/lib/ecrire/theme/template/views/posts/_post.html.erb +2 -2
- data/lib/ecrire/theme/template/views/posts/index.html.erb +1 -1
- data/lib/ecrire/theme/template/views/static/customize/_layout.html.erb +5 -1
- data/lib/ecrire/version.rb +1 -1
- data/test/editor/controllers/posts_controller_test.rb +32 -0
- data/test/editor/controllers/tags_controller_test.rb +14 -0
- data/test/editor/theme/routes.rb +4 -0
- data/test/fixtures/titles.yml +3 -0
- data/test/onboarding/controllers/databases_controller_test.rb +24 -0
- data/test/onboarding/controllers/onboarding_controller_test.rb +31 -0
- data/test/onboarding/controllers/users_controller_test.rb +54 -0
- data/test/test_controller.rb +6 -1
- data/test/theme/controllers/posts_controller_test.rb +22 -0
- data/test/theme/theme/config.ru +3 -0
- data/test/theme/theme/controllers/posts_controller.rb +10 -0
- data/test/theme/theme/routes.rb +16 -0
- data/test/theme/theme/secrets.yml +8 -0
- data/test/theme/theme/views/posts/index.html.erb +14 -0
- data/test/theme/theme/views/posts/show.html.erb +8 -0
- metadata +18 -7
- /data/lib/ecrire/onboarding/assets/javascripts/{base.js → theme.js} +0 -0
- /data/lib/ecrire/onboarding/assets/stylesheets/{base.css.scss → theme.css.scss} +0 -0
- /data/lib/ecrire/theme/template/assets/javascripts/{base.js.coffee → theme.js.coffee} +0 -0
- /data/lib/ecrire/theme/template/assets/stylesheets/{base.css.scss → theme.css.scss} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fcb3e04a26a184a4a0c334415d276f85622427a
|
4
|
+
data.tar.gz: 4291e04867ed0c6e5f372a0f7271ae2a10557324
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 922ddfce245632546f95b59e7866db2411f57018626aa205d9df87bd00a2c46279a23f4cecb501fd9ab1be62fea88c37cf3f9760a869a69e0ee4f3cb5c7f34a4
|
7
|
+
data.tar.gz: 5a5572199c40d7c95b40ee807ae914a9413992388d729b6395a5b9455b0e578666edcbef368b1446c1457322abf7a94e2b47728c6da891dd5e94d46245099d61
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ namespace :database do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
namespace :test do
|
19
|
-
['editor', 'onboarding'].each do |name|
|
19
|
+
['editor', 'onboarding', 'theme'].each do |name|
|
20
20
|
task = Ecrire::TestTask.new(name) do |t|
|
21
21
|
t.theme = Dir.pwd + "/test/#{name}/theme"
|
22
22
|
t.libs << "test"
|
@@ -28,7 +28,7 @@ namespace :test do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
task :test do
|
31
|
-
%w(test:editor test:onboarding).each do |name|
|
31
|
+
%w(test:editor test:onboarding test:theme).each do |name|
|
32
32
|
Rake::Task[name].invoke
|
33
33
|
end
|
34
34
|
end
|
@@ -22,7 +22,7 @@ module Admin
|
|
22
22
|
render 'new' and return
|
23
23
|
end
|
24
24
|
|
25
|
-
redirect_to
|
25
|
+
redirect_to url('/admin/posts/:post.id/edit', post: @post)
|
26
26
|
end
|
27
27
|
|
28
28
|
def destroy
|
@@ -47,7 +47,7 @@ module Admin
|
|
47
47
|
when 'publish'
|
48
48
|
@post.publish!
|
49
49
|
flash[:notice] = t(".successful", title: @post.title)
|
50
|
-
redirect_to post_path
|
50
|
+
redirect_to url(Ecrire::Theme::Engine.post_path, post: @post) and return
|
51
51
|
when 'unpublish'
|
52
52
|
@post.unpublish!
|
53
53
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
class ApplicationController < ::ActionController::Base
|
2
|
-
|
3
2
|
protect_from_forgery with: :exception
|
4
|
-
helper_method :current_user, :signed_in?
|
5
3
|
|
6
|
-
helper_method :
|
4
|
+
helper_method :current_user, :signed_in?
|
5
|
+
helper_method :warden, :post_path, :url
|
7
6
|
|
8
7
|
def current_user
|
9
8
|
warden.user
|
@@ -13,17 +12,22 @@ class ApplicationController < ::ActionController::Base
|
|
13
12
|
!warden.user.nil?
|
14
13
|
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
def url(path, options = {})
|
16
|
+
records = options.with_indifferent_access
|
17
|
+
regex = /(:([a-z]+)\.([a-z]+))/i
|
18
|
+
path.gsub! regex do |match|
|
19
|
+
records[$2].send($3)
|
20
|
+
end
|
21
|
+
|
22
|
+
if options.delete(:full_path)
|
23
|
+
options[:path] = path
|
24
|
+
options[:host] ||= request.host
|
25
|
+
options[:protocol] ||= request.protocol
|
26
|
+
options[:port] ||= request.port
|
27
|
+
ActionDispatch::Http::URL.full_url_for(options)
|
28
|
+
else
|
29
|
+
path
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
|
@@ -36,4 +40,5 @@ class ApplicationController < ::ActionController::Base
|
|
36
40
|
def warden
|
37
41
|
env['warden']
|
38
42
|
end
|
43
|
+
|
39
44
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
module Ecrire
|
2
2
|
class ThemeController < ::ApplicationController
|
3
3
|
|
4
|
+
unless Rails.env.development?
|
5
|
+
rescue_from ActiveRecord::RecordNotFound, with: :redirect_home
|
6
|
+
rescue_from ActionController::RoutingError, with: :redirect_home
|
7
|
+
rescue_from ActionView::ActionViewError, with: :redirect_home
|
8
|
+
end
|
9
|
+
|
4
10
|
before_action :pagination, only: :index
|
5
11
|
protect_from_forgery except: :index
|
6
12
|
|
7
|
-
helper_method :post, :posts
|
8
|
-
|
9
13
|
def index
|
10
14
|
respond_to do |format|
|
11
15
|
format.html
|
@@ -17,27 +21,18 @@ module Ecrire
|
|
17
21
|
end
|
18
22
|
|
19
23
|
def show
|
20
|
-
redirect_to :root and return if post.nil?
|
21
|
-
redirect_to :root and return unless post.published?
|
22
|
-
if post.titles.first != @title
|
23
|
-
redirect_to post_path(post), status: :moved_permanently
|
24
|
-
end
|
25
24
|
end
|
26
25
|
|
27
26
|
protected
|
28
27
|
|
29
|
-
def posts
|
30
|
-
@posts ||= Post.published.page(params[:page]).per(params[:per]).order('published_at DESC')
|
31
|
-
end
|
32
|
-
|
33
|
-
def post
|
34
|
-
@title ||= Title.find_by_slug(params[:id])
|
35
|
-
@post ||= @title.post
|
36
|
-
end
|
37
|
-
|
38
28
|
def pagination
|
39
29
|
params[:per] ||= 10
|
40
30
|
params[:page] ||= 1
|
41
31
|
end
|
32
|
+
|
33
|
+
def redirect_home(exception)
|
34
|
+
flash[:errors] = t('errors.request.not_found')
|
35
|
+
redirect_to '/'
|
36
|
+
end
|
42
37
|
end
|
43
38
|
end
|
@@ -16,13 +16,6 @@ module ApplicationHelper
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def assets_tags
|
20
|
-
[
|
21
|
-
stylesheet_link_tag("application", "base", media: "all", "data-turbolinks-track" => true),
|
22
|
-
javascript_include_tag("application", "base", "data-turbolinks-track" => true)
|
23
|
-
].join.html_safe
|
24
|
-
end
|
25
|
-
|
26
19
|
def meta_informations_tags
|
27
20
|
[
|
28
21
|
content_tag(:link, nil, rel: 'alternate', type: 'application/rss+xml', title: 'RSS', href: '/feed'),
|
@@ -50,15 +43,4 @@ module ApplicationHelper
|
|
50
43
|
content_tag :body, html_options, &block
|
51
44
|
end
|
52
45
|
|
53
|
-
|
54
|
-
def flash_messages
|
55
|
-
return if flash.empty?
|
56
|
-
|
57
|
-
flash.map do |name, msg|
|
58
|
-
content_tag :div, class: %W(flash #{name}) do
|
59
|
-
content_tag(:span, h(msg), class: %w(message))
|
60
|
-
end
|
61
|
-
end.join.html_safe
|
62
|
-
end
|
63
|
-
|
64
46
|
end
|
@@ -38,6 +38,14 @@ class Post < ActiveRecord::Base
|
|
38
38
|
(self.titles.first || self.titles.new).name
|
39
39
|
end
|
40
40
|
|
41
|
+
def year
|
42
|
+
published_at.year
|
43
|
+
end
|
44
|
+
|
45
|
+
def month
|
46
|
+
published_at.month
|
47
|
+
end
|
48
|
+
|
41
49
|
def slug
|
42
50
|
self.titles.first.slug
|
43
51
|
end
|
@@ -62,14 +70,6 @@ class Post < ActiveRecord::Base
|
|
62
70
|
published_at.nil?
|
63
71
|
end
|
64
72
|
|
65
|
-
def to_param
|
66
|
-
if self.instance_of?(Admin::Post)
|
67
|
-
id.to_s
|
68
|
-
else
|
69
|
-
slug
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
73
|
def content
|
74
74
|
(self.compiled_content || super || '').html_safe
|
75
75
|
end
|
@@ -2,4 +2,21 @@ class Tag < ActiveRecord::Base
|
|
2
2
|
def ==(other)
|
3
3
|
self.class.table_name == other.class.table_name && self.id == other.id
|
4
4
|
end
|
5
|
+
|
6
|
+
def posts
|
7
|
+
post_scope = ->(tag) { where '? = ANY (posts.tags)', tag.id }
|
8
|
+
options = {}
|
9
|
+
reflection = ActiveRecord::Reflection::HasManyReflection.new(:posts, post_scope, options, self.class)
|
10
|
+
association = PostsAssociation.new(self, reflection)
|
11
|
+
@posts ||= ActiveRecord::Associations::CollectionProxy.new(Post, association)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
class PostsAssociation < ActiveRecord::Associations::HasManyAssociation
|
17
|
+
def scope(opts = {})
|
18
|
+
Post.where('? = ANY (posts.tags)', owner.id).published.order('published_at DESC')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
5
22
|
end
|
data/lib/ecrire/application.rb
CHANGED
@@ -26,7 +26,7 @@ module Ecrire
|
|
26
26
|
@paths ||= begin
|
27
27
|
paths = super
|
28
28
|
paths.add 'config/routes.rb', with: 'routes.rb'
|
29
|
-
paths.add 'config/locales', with: 'locales', glob: "
|
29
|
+
paths.add 'config/locales', with: 'locales', glob: "**/*.{rb,yml}"
|
30
30
|
paths
|
31
31
|
end
|
32
32
|
end
|
@@ -18,7 +18,7 @@ Ecrire::Application.configure do
|
|
18
18
|
lambda do |filename, path|
|
19
19
|
path =~ /assets/ && !%w(.js .css).include?(File.extname(filename))
|
20
20
|
end,
|
21
|
-
/^(admin|application
|
21
|
+
/^(admin|application)\.(css|js)$/
|
22
22
|
]
|
23
23
|
|
24
24
|
Warden::Manager.serialize_into_session do |user|
|
@@ -15,6 +15,7 @@ class DatabasesController < OnboardingController
|
|
15
15
|
begin
|
16
16
|
ActiveRecord::Base.configurations = {
|
17
17
|
'development' => info,
|
18
|
+
'test' => info,
|
18
19
|
'production' => info
|
19
20
|
}
|
20
21
|
ActiveRecord::Base.establish_connection
|
@@ -26,7 +27,7 @@ class DatabasesController < OnboardingController
|
|
26
27
|
render 'index' and return
|
27
28
|
end
|
28
29
|
|
29
|
-
redirect_to
|
30
|
+
redirect_to '/users'
|
30
31
|
end
|
31
32
|
|
32
33
|
protected
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class OnboardingController < ApplicationController
|
2
|
-
include Ecrire::Onboarding::Engine.routes.url_helpers
|
3
2
|
|
4
3
|
def index
|
5
4
|
if File.exist?(Rails.application.paths['config/secrets'].expanded.last)
|
@@ -13,6 +12,8 @@ class OnboardingController < ApplicationController
|
|
13
12
|
def save_configurations!
|
14
13
|
File.open(Rails.application.paths['config/secrets'].expanded.last, 'w') do |file|
|
15
14
|
config = ActiveRecord::Base.configurations
|
15
|
+
config['development'] ||= {}
|
16
|
+
config['production'] ||= {}
|
16
17
|
config['development']['secret_key_base'] = config['production']['secret_key'] = Rails.application.secrets.secret_key_base
|
17
18
|
file.write(config.to_yaml)
|
18
19
|
end
|
@@ -3,7 +3,11 @@
|
|
3
3
|
|
4
4
|
<head>
|
5
5
|
<%= title_tag 'Before you start blogging...' %>
|
6
|
-
<%=
|
6
|
+
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
|
7
|
+
<%= javascript_include_tag "application", "base", "data-turbolinks-track" => true %>
|
8
|
+
|
9
|
+
<%= stylesheet_link_tag "theme", media: "all", "data-turbolinks-track" => true %>
|
10
|
+
<%= javascript_include_tag "theme", "base", "data-turbolinks-track" => true %>
|
7
11
|
<%= meta_informations_tags %>
|
8
12
|
</head>
|
9
13
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<section>
|
3
3
|
<h2>Create a user</h2>
|
4
4
|
|
5
|
-
<%= form_for user, method: :post do |f| %>
|
5
|
+
<%= form_for user, method: :post, url: '/users' do |f| %>
|
6
6
|
<% if user.errors.any? %>
|
7
7
|
<%= content_tag :div, class: %w(error), as: 'Message' do %>
|
8
8
|
<%= content_tag :p, user.errors.full_messages.first %>
|
data/lib/ecrire/theme/engine.rb
CHANGED
@@ -1,2 +1,29 @@
|
|
1
1
|
class PostsController < Ecrire::ThemeController
|
2
|
+
helper_method :post, :posts
|
3
|
+
|
4
|
+
def index
|
5
|
+
@posts = posts.published.includes(:titles).order('published_at DESC').page(params[:page]).per(params[:per])
|
6
|
+
@tags = Tag.all
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
redirect_to :root and return if post.nil?
|
12
|
+
redirect_to :root and return unless post.published?
|
13
|
+
if post.titles.first != @title
|
14
|
+
redirect_to theme.post_path(post.year, post.month, post), status: :moved_permanently
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def posts
|
21
|
+
@posts ||= Post.published.page(params[:page]).per(params[:per]).order('published_at DESC')
|
22
|
+
end
|
23
|
+
|
24
|
+
def post
|
25
|
+
@title ||= Title.find_by_slug(params[:id])
|
26
|
+
@post ||= @title.post
|
27
|
+
end
|
28
|
+
|
2
29
|
end
|
@@ -3,7 +3,12 @@
|
|
3
3
|
|
4
4
|
<head>
|
5
5
|
<%= title_tag %>
|
6
|
-
<%=
|
6
|
+
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
|
7
|
+
<%= javascript_include_tag "application", "base", "data-turbolinks-track" => true %>
|
8
|
+
|
9
|
+
<%= stylesheet_link_tag "theme", media: "all", "data-turbolinks-track" => true %>
|
10
|
+
<%= javascript_include_tag "theme", "base", "data-turbolinks-track" => true %>
|
11
|
+
|
7
12
|
<%= meta_informations_tags %>
|
8
13
|
</head>
|
9
14
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
<li class="post">
|
2
|
-
<%= content_tag :h2, link_to(post.title,
|
2
|
+
<%= content_tag :h2, link_to(post.title, url('/:post.year/:post.month/:post.slug', post: post)) %>
|
3
3
|
<%= content_tag :time, l(post.published_at.to_date, format: :long) %>
|
4
4
|
<div class='content'>
|
5
5
|
<%= post.excerpt %>
|
6
6
|
</div>
|
7
7
|
|
8
|
-
<%= link_to 'Read more',
|
8
|
+
<%= link_to 'Read more', url('/:post.year/:post.month/:post.slug/', post: post), class: %w(read) %>
|
9
9
|
</li>
|
@@ -3,7 +3,11 @@
|
|
3
3
|
|
4
4
|
<head>
|
5
5
|
<%= '<'.html_safe %>%= title_tag %>
|
6
|
-
<%= '<'.html_safe %>%=
|
6
|
+
<%= '<'.html_safe %>%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
|
7
|
+
<%= '<'.html_safe %>%= javascript_include_tag "application", "base", "data-turbolinks-track" => true %>
|
8
|
+
|
9
|
+
<%= '<'.html_safe %>%= stylesheet_link_tag "theme", media: "all", "data-turbolinks-track" => true %>
|
10
|
+
<%= '<'.html_safe %>%= javascript_include_tag "theme", "base", "data-turbolinks-track" => true %>
|
7
11
|
<%= '<'.html_safe %>%= meta_informations_tags %>
|
8
12
|
</head>
|
9
13
|
|
data/lib/ecrire/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_controller'
|
2
|
+
require 'editor/test_helper'
|
3
|
+
|
4
|
+
class PostsControllerTest < TestController
|
5
|
+
tests Admin::PostsController
|
6
|
+
|
7
|
+
test "cannot create a new post if the user isn't logged in" do
|
8
|
+
assert_throws :warden, "Expecting Warden to throw a symbol" do
|
9
|
+
post :create, post: {title: 'A new post'}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'creating a new post should redirect to the editor' do
|
14
|
+
log_in!
|
15
|
+
post :create, post: {title: 'A new post'}
|
16
|
+
assert_redirected_to @controller.url('/admin/posts/:post.id/edit', post: assigns(:post))
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'a new post with an existing title should render errors' do
|
20
|
+
log_in!
|
21
|
+
post :create, post: {title: Post.first.title}
|
22
|
+
assert_select 'ul.errors' do
|
23
|
+
assert_select 'li[key=title]'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
test "publishing a post redirect the user to the post's URL" do
|
28
|
+
log_in!
|
29
|
+
put :update, id: Post.status(:draft).first.id, button: :publish
|
30
|
+
assert_redirected_to @controller.url(Ecrire::Theme::Engine.post_path, post: assigns(:post))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_controller'
|
2
|
+
require 'editor/test_helper'
|
3
|
+
|
4
|
+
class TagsControllerTest < TestController
|
5
|
+
tests Admin::Posts::TagsController
|
6
|
+
|
7
|
+
test 'can create a new tag' do
|
8
|
+
log_in!
|
9
|
+
post :create, post_id: Post.published.last, tag: {name: 'A new tag'}, format: :js
|
10
|
+
assert_response :success
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
data/test/editor/theme/routes.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
Ecrire::Theme::Engine.post_path = '/:post.year/:post.month/:post.slug/'
|
2
|
+
|
1
3
|
Ecrire::Theme::Engine.routes.draw do
|
4
|
+
|
2
5
|
get '/:year/:month/:id', controller: :posts, action: :show, constraints: { year: /\d+/, month: /\d+/ }, as: "post"
|
6
|
+
|
3
7
|
get '/feed', controller: :posts, action: :index, defaults: { format: :rss }
|
4
8
|
|
5
9
|
resources :posts, only: [:index]
|
data/test/fixtures/titles.yml
CHANGED
@@ -1,4 +1,28 @@
|
|
1
1
|
require 'test_controller'
|
2
2
|
|
3
3
|
class DatabasesControllerTest < TestController
|
4
|
+
tests DatabasesController
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@routes = Ecrire::Onboarding::Engine.routes
|
8
|
+
end
|
9
|
+
|
10
|
+
test 'show error if the connection is refused' do
|
11
|
+
post :create, database: {user: 'invalid!', password: 'Nothing', name: 'ecrire_test'}
|
12
|
+
assert_response :success
|
13
|
+
assert_select 'div.error' do
|
14
|
+
assert_select 'p', 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'even if the connection to the server is done, secrets.yml is not yet generated' do
|
19
|
+
post :create, database: {user: 'postgres', password: '', name: 'ecrire_test'}
|
20
|
+
assert Rails.application.paths['config/secrets'].existent.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'redirect to users if the connection is successful' do
|
24
|
+
post :create, database: {user: 'postgres', password: '', name: 'ecrire_test'}
|
25
|
+
assert_redirected_to '/users'
|
26
|
+
end
|
27
|
+
|
4
28
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_controller'
|
2
|
+
|
3
|
+
class OnboadingControllerTest < TestController
|
4
|
+
tests OnboardingController
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@routes = Ecrire::Onboarding::Engine.routes
|
8
|
+
end
|
9
|
+
|
10
|
+
test 'show welcome page when using access the root page' do
|
11
|
+
get :index
|
12
|
+
assert_response :success
|
13
|
+
assert_template :welcome
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
test 'show complete page if secrets.yml exists' do
|
18
|
+
File.open(Rails.application.paths['config/secrets'].expanded.last, 'w') do |file|
|
19
|
+
file.write('')
|
20
|
+
end
|
21
|
+
|
22
|
+
get :index
|
23
|
+
assert_response :success
|
24
|
+
assert_template :complete
|
25
|
+
end
|
26
|
+
|
27
|
+
teardown do
|
28
|
+
file = Rails.application.paths['config/secrets'].existent
|
29
|
+
FileUtils.rm(file) unless file.nil?
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_controller'
|
2
|
+
|
3
|
+
class UsersControllerTest < TestController
|
4
|
+
tests UsersController
|
5
|
+
|
6
|
+
# I'm hardcoding those values right now because I think
|
7
|
+
# it's easy for someone to set a new database. Maybe I could make these test depends on
|
8
|
+
# the databases controller so the setup would actually be a simple posts to that controller..
|
9
|
+
#
|
10
|
+
# On the flip side, that would make it look like an integration tests... anyway.
|
11
|
+
setup do
|
12
|
+
info ||= {
|
13
|
+
'adapter' => 'postgresql',
|
14
|
+
'database' => 'ecrire_test',
|
15
|
+
'user' => 'postgres',
|
16
|
+
'password' => 'password',
|
17
|
+
'encoding' => 'utf8'
|
18
|
+
}
|
19
|
+
ActiveRecord::Base.configurations = { 'test' => info }
|
20
|
+
ActiveRecord::Base.establish_connection
|
21
|
+
migrate!
|
22
|
+
@routes = Ecrire::Onboarding::Engine.routes
|
23
|
+
end
|
24
|
+
|
25
|
+
def migrate!
|
26
|
+
ActiveRecord::Tasks::DatabaseTasks.database_configuration = ActiveRecord::Base.configurations
|
27
|
+
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
28
|
+
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
29
|
+
ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil) do |migration|
|
30
|
+
ENV["SCOPE"].blank? || (ENV["SCOPE"] == migration.scope)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
test 'should show errors if there are problems with the user submitted' do
|
36
|
+
post :create, user: { email: 'bob@dilan.ca', password: 'password', password_confirmation: 'password1' }
|
37
|
+
assert_template :index
|
38
|
+
assert_select 'div.error' do
|
39
|
+
assert_select 'p', 1
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
test 'configuration should be saved as soon as the user is created' do
|
45
|
+
post :create, user: { email: 'bob@dilan.ca', password: 'password', password_confirmation: 'password' }
|
46
|
+
assert_redirected_to '/'
|
47
|
+
assert Rails.application.paths['config/secrets'].existent.any?
|
48
|
+
end
|
49
|
+
|
50
|
+
teardown do
|
51
|
+
file = Rails.application.paths['config/secrets'].existent
|
52
|
+
FileUtils.rm(file) unless file.nil?
|
53
|
+
end
|
54
|
+
end
|
data/test/test_controller.rb
CHANGED
@@ -3,11 +3,16 @@ require 'warden'
|
|
3
3
|
|
4
4
|
class TestController < ActionController::TestCase
|
5
5
|
|
6
|
-
|
6
|
+
setup do
|
7
7
|
@routes = Rails.application.routes
|
8
8
|
@controller.env['warden'] = @request.env['warden'] = Warden::Proxy.new(@request.env, self.class.manager)
|
9
9
|
end
|
10
10
|
|
11
|
+
def log_in!(user = nil)
|
12
|
+
user ||= User.first
|
13
|
+
proxy.set_user user
|
14
|
+
end
|
15
|
+
|
11
16
|
def self.manager
|
12
17
|
@manager ||= Warden::Manager.new(self,
|
13
18
|
{
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_controller'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class PostsControllerTest < TestController
|
5
|
+
tests PostsController
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@routes = Ecrire::Theme::Engine.routes
|
9
|
+
end
|
10
|
+
|
11
|
+
test "redirect if page doesn't exist" do
|
12
|
+
get :show, year: 323, month: 1, id: "doesn't exist"
|
13
|
+
assert_redirected_to '/'
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'show post if it exists' do
|
17
|
+
p = Post.published.first
|
18
|
+
get :show, year: p.year, month: p.month, id: p.slug
|
19
|
+
assert_response :success
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Ecrire::Theme::Engine.post_path = '/:post.year/:post.month/:post.slug/'
|
2
|
+
|
3
|
+
Ecrire::Theme::Engine.routes.draw do
|
4
|
+
root 'posts#index'
|
5
|
+
|
6
|
+
get '/:year/:month/:id', controller: :posts, action: :show, constraints: { year: /\d+/, month: /\d+/ }, as: "post"
|
7
|
+
get '/feed', controller: :posts, action: :index, defaults: { format: :rss }
|
8
|
+
|
9
|
+
resources :posts, only: [:index]
|
10
|
+
|
11
|
+
resources :tags
|
12
|
+
|
13
|
+
get '/:view', to: 'static#show'
|
14
|
+
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% if @posts.any? %>
|
2
|
+
<ol class='posts'>
|
3
|
+
<%= render @posts %>
|
4
|
+
<%= paginate @posts %>
|
5
|
+
</ol>
|
6
|
+
<% else %>
|
7
|
+
<div class='posts empty'>
|
8
|
+
<p>You haven't published yet.</p>
|
9
|
+
<% if signed_in? %>
|
10
|
+
<%= link_to 'Create a new post', new_title_admin_posts_path %>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecrire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pier-Olivier Thibault
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Blog engine on Rails
|
14
14
|
email: pothibo@gmail.com
|
@@ -196,15 +196,15 @@ files:
|
|
196
196
|
- lib/ecrire/onboarding/assets/images/github-logo.png
|
197
197
|
- lib/ecrire/onboarding/assets/images/profile.png
|
198
198
|
- lib/ecrire/onboarding/assets/images/twitter-logo.png
|
199
|
-
- lib/ecrire/onboarding/assets/javascripts/base.js
|
200
199
|
- lib/ecrire/onboarding/assets/javascripts/databases/information.js.coffee
|
201
200
|
- lib/ecrire/onboarding/assets/javascripts/message.js.coffee
|
202
|
-
- lib/ecrire/onboarding/assets/
|
201
|
+
- lib/ecrire/onboarding/assets/javascripts/theme.js
|
203
202
|
- lib/ecrire/onboarding/assets/stylesheets/complete.css.scss
|
204
203
|
- lib/ecrire/onboarding/assets/stylesheets/fonts.css.scss
|
205
204
|
- lib/ecrire/onboarding/assets/stylesheets/form.css.scss
|
206
205
|
- lib/ecrire/onboarding/assets/stylesheets/message.css.scss
|
207
206
|
- lib/ecrire/onboarding/assets/stylesheets/terminal.css.scss
|
207
|
+
- lib/ecrire/onboarding/assets/stylesheets/theme.css.scss
|
208
208
|
- lib/ecrire/onboarding/assets/stylesheets/variables.css.scss
|
209
209
|
- lib/ecrire/onboarding/assets/stylesheets/welcome.css.scss
|
210
210
|
- lib/ecrire/onboarding/controllers/databases_controller.rb
|
@@ -225,12 +225,12 @@ files:
|
|
225
225
|
- lib/ecrire/theme/template/Procfile
|
226
226
|
- lib/ecrire/theme/template/Rakefile
|
227
227
|
- lib/ecrire/theme/template/assets/images/.keep
|
228
|
-
- lib/ecrire/theme/template/assets/javascripts/
|
229
|
-
- lib/ecrire/theme/template/assets/stylesheets/base.css.scss
|
228
|
+
- lib/ecrire/theme/template/assets/javascripts/theme.js.coffee
|
230
229
|
- lib/ecrire/theme/template/assets/stylesheets/code.css.scss
|
231
230
|
- lib/ecrire/theme/template/assets/stylesheets/footer.css.scss
|
232
231
|
- lib/ecrire/theme/template/assets/stylesheets/header.css.scss
|
233
232
|
- lib/ecrire/theme/template/assets/stylesheets/home.css.scss
|
233
|
+
- lib/ecrire/theme/template/assets/stylesheets/theme.css.scss
|
234
234
|
- lib/ecrire/theme/template/config.ru
|
235
235
|
- lib/ecrire/theme/template/controllers/posts_controller.rb
|
236
236
|
- lib/ecrire/theme/template/helpers/blog_helper.rb
|
@@ -249,7 +249,9 @@ files:
|
|
249
249
|
- lib/ecrire/theme/template/views/static/customize/_layout.html.erb
|
250
250
|
- lib/ecrire/theme/template/views/static/customize/_post.html
|
251
251
|
- lib/ecrire/version.rb
|
252
|
+
- test/editor/controllers/posts_controller_test.rb
|
252
253
|
- test/editor/controllers/sessions_controller_test.rb
|
254
|
+
- test/editor/controllers/tags_controller_test.rb
|
253
255
|
- test/editor/helpers/base_helper_test.rb
|
254
256
|
- test/editor/models/image_test.rb
|
255
257
|
- test/editor/models/post_test.rb
|
@@ -273,10 +275,19 @@ files:
|
|
273
275
|
- test/fixtures/users.yml
|
274
276
|
- test/initializations/engine_test.rb
|
275
277
|
- test/onboarding/controllers/databases_controller_test.rb
|
278
|
+
- test/onboarding/controllers/onboarding_controller_test.rb
|
279
|
+
- test/onboarding/controllers/users_controller_test.rb
|
276
280
|
- test/onboarding/theme/.keep
|
277
281
|
- test/test_controller.rb
|
278
282
|
- test/test_helper.rb
|
279
283
|
- test/test_task.rb
|
284
|
+
- test/theme/controllers/posts_controller_test.rb
|
285
|
+
- test/theme/theme/config.ru
|
286
|
+
- test/theme/theme/controllers/posts_controller.rb
|
287
|
+
- test/theme/theme/routes.rb
|
288
|
+
- test/theme/theme/secrets.yml
|
289
|
+
- test/theme/theme/views/posts/index.html.erb
|
290
|
+
- test/theme/theme/views/posts/show.html.erb
|
280
291
|
homepage: http://pothibo.com
|
281
292
|
licenses:
|
282
293
|
- MIT
|
@@ -297,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
297
308
|
version: '0'
|
298
309
|
requirements: []
|
299
310
|
rubyforge_project:
|
300
|
-
rubygems_version: 2.
|
311
|
+
rubygems_version: 2.0.14
|
301
312
|
signing_key:
|
302
313
|
specification_version: 4
|
303
314
|
summary: Blog engine
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|