hitchens 0.0.1 → 0.0.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/app/controllers/hitchens/admin/base_controller.rb +20 -0
- data/app/controllers/hitchens/admin/posts_controller.rb +45 -0
- data/app/controllers/hitchens/application_controller.rb +2 -3
- data/app/controllers/hitchens/posts_controller.rb +2 -20
- data/app/decorators/hitchens/application_decorator.rb +1 -12
- data/app/decorators/hitchens/post_decorator.rb +13 -1
- data/app/views/hitchens/admin/base/index.html.haml +3 -0
- data/app/views/hitchens/{posts → admin/posts}/_form.html.haml +1 -1
- data/app/views/hitchens/admin/posts/_post.html.haml +7 -0
- data/app/views/hitchens/admin/posts/index.html.haml +7 -0
- data/app/views/hitchens/posts/_post.html.haml +3 -3
- data/app/views/hitchens/posts/index.html.haml +0 -1
- data/config/routes.rb +5 -0
- data/lib/hitchens/version.rb +1 -1
- data/lib/hitchens.rb +5 -1
- data/test/dummy/app/models/user.rb +5 -0
- data/test/dummy/app/views/layouts/application.html.erb +6 -0
- data/test/dummy/config/locales/en.yml +9 -1
- data/test/dummy/log/development.log +8008 -0
- metadata +12 -7
- /data/app/views/hitchens/{posts → admin/posts}/edit.html.haml +0 -0
- /data/app/views/hitchens/{posts → admin/posts}/new.html.haml +0 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module Hitchens
|
2
|
+
module Admin
|
3
|
+
class BaseController < ApplicationController
|
4
|
+
before_filter :authenticate_hitchens_admin
|
5
|
+
skip_authorization_check :only => [:index]
|
6
|
+
|
7
|
+
def index
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def authenticate_hitchens_admin
|
13
|
+
unless current_hitchens_user && current_hitchens_user.blog_admin?
|
14
|
+
flash.alert = t("hitchens.errors.access_denied")
|
15
|
+
redirect_to main_app.__send__(Hitchens.sign_in_url_helper)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Hitchens
|
2
|
+
module Admin
|
3
|
+
class PostsController < BaseController
|
4
|
+
load_and_authorize_resource :class => 'Hitchens::Post'
|
5
|
+
|
6
|
+
def index
|
7
|
+
@posts = @posts.page(params[:page]).per_page(Hitchens.posts_per_page)
|
8
|
+
@posts = PostDecorator.decorate @posts
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
@post = PostDecorator.decorate @post
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
if @post.save
|
17
|
+
flash[:notice] = t 'hitchens.notices.post_created'
|
18
|
+
redirect_to admin_posts_path
|
19
|
+
else
|
20
|
+
render 'new'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def update
|
24
|
+
if @post.update_attributes params[:post]
|
25
|
+
flash[:notice] = t 'hitchens.notices.post_updated'
|
26
|
+
redirect_to admin_posts_path
|
27
|
+
else
|
28
|
+
flash[:error] = t 'hitchens.errors.post_not_updated'
|
29
|
+
render 'edit'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def new
|
34
|
+
end
|
35
|
+
def edit
|
36
|
+
end
|
37
|
+
def destroy
|
38
|
+
@post.destroy
|
39
|
+
flash[:notice] = t('hitchens.notices.post_deleted')
|
40
|
+
redirect_to admin_posts_path
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -1,16 +1,15 @@
|
|
1
1
|
module Hitchens
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
check_authorization
|
4
|
-
load_and_authorize_resource
|
5
4
|
layout Hitchens.use_parent_layout ? 'application' : 'hitchens/application'
|
6
5
|
|
7
6
|
def current_ability
|
8
7
|
# we need to tell CanCan to use our Hitchens::Ability class
|
9
|
-
@current_ability ||= Ability.new(
|
8
|
+
@current_ability ||= Ability.new(current_hitchens_user)
|
10
9
|
end
|
11
10
|
|
12
11
|
private
|
13
|
-
def
|
12
|
+
def current_hitchens_user
|
14
13
|
__send__ Hitchens.current_user_helper_name
|
15
14
|
end
|
16
15
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Hitchens
|
2
2
|
class PostsController < ApplicationController
|
3
|
+
load_and_authorize_resource
|
4
|
+
|
3
5
|
def index
|
4
6
|
@posts = @posts.page(params[:page]).per_page(Hitchens.posts_per_page)
|
5
7
|
@posts = PostDecorator.decorate @posts
|
@@ -8,25 +10,5 @@ module Hitchens
|
|
8
10
|
def show
|
9
11
|
@post = PostDecorator.decorate @post
|
10
12
|
end
|
11
|
-
|
12
|
-
def create
|
13
|
-
if @post.save
|
14
|
-
redirect_to posts_path
|
15
|
-
else
|
16
|
-
render 'new'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
def update
|
20
|
-
if @post.update_attributes params[:post]
|
21
|
-
redirect_to posts_path
|
22
|
-
else
|
23
|
-
render 'edit'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def new
|
28
|
-
end
|
29
|
-
def edit
|
30
|
-
end
|
31
13
|
end
|
32
14
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Hitchens
|
2
2
|
class ApplicationDecorator < Draper::Base
|
3
3
|
def markdown(text)
|
4
|
-
|
4
|
+
markdown_parser.render(text).html_safe
|
5
5
|
end
|
6
6
|
|
7
7
|
private
|
@@ -10,16 +10,5 @@ private
|
|
10
10
|
:autolink => true, :space_after_headers => true,
|
11
11
|
:fenced_code_blocks => true)
|
12
12
|
end
|
13
|
-
|
14
|
-
def syntax_highlighter(html)
|
15
|
-
doc = Nokogiri::HTML(html)
|
16
|
-
doc.search("code").each do |pre|
|
17
|
-
code_ray = CodeRay.scan(pre.text.rstrip, pre[:class]).div
|
18
|
-
# first line of code wasn't indented as much as others
|
19
|
-
# need to add a line break after the pre tag
|
20
|
-
pre.replace code_ray.sub('<pre>', "<pre>\n")
|
21
|
-
end
|
22
|
-
doc.to_s
|
23
|
-
end
|
24
13
|
end
|
25
14
|
end
|
@@ -3,7 +3,8 @@ module Hitchens
|
|
3
3
|
decorates 'Hitchens::Post'
|
4
4
|
|
5
5
|
def body_to_html
|
6
|
-
markdown(body)
|
6
|
+
html = markdown(body)
|
7
|
+
syntax_highlight(html).html_safe
|
7
8
|
end
|
8
9
|
|
9
10
|
def pubdate_tag
|
@@ -18,5 +19,16 @@ module Hitchens
|
|
18
19
|
def pubdate_display
|
19
20
|
publication_date.getlocal.strftime("%A, %B %e, %Y at %l:%M %p")
|
20
21
|
end
|
22
|
+
def syntax_highlight(html)
|
23
|
+
doc = Nokogiri::HTML.fragment(html)
|
24
|
+
# remove all pre tags.
|
25
|
+
# coderay will nest pre tags within the code tags.
|
26
|
+
doc.css("pre").each { |pre| pre.replace pre.inner_html }
|
27
|
+
doc.css("code").each do |code|
|
28
|
+
code_ray = CodeRay.scan(code.text.rstrip, code[:class]).div
|
29
|
+
code.replace code_ray
|
30
|
+
end
|
31
|
+
doc.to_s
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
= content_tag_for :div, post do
|
2
|
+
%h2.title= post.title
|
3
|
+
%p.dateline= post.pubdate_tag
|
4
|
+
-# %p.body= find_and_preserve post.body_to_html
|
5
|
+
= link_to 'Edit', edit_admin_post_path(post) if can? :update, post
|
6
|
+
= link_to 'Delete', admin_post_path(post), :method => :delete if can? :delete, post
|
7
|
+
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= content_tag_for :div, post do
|
2
|
-
%h2.title
|
2
|
+
%h2.title
|
3
|
+
= link_to post.title, post
|
3
4
|
%p.dateline= post.pubdate_tag
|
4
|
-
%p.body= post.body_to_html
|
5
|
-
= link_to 'Edit', edit_post_path(post) if can? :update, post
|
5
|
+
%p.body= find_and_preserve post.body_to_html
|
data/config/routes.rb
CHANGED
data/lib/hitchens/version.rb
CHANGED
data/lib/hitchens.rb
CHANGED
@@ -17,7 +17,9 @@ module Hitchens
|
|
17
17
|
:use_parent_layout,
|
18
18
|
:user_class_name,
|
19
19
|
:current_user_helper_name,
|
20
|
-
:blog_admin_user_method
|
20
|
+
:blog_admin_user_method,
|
21
|
+
:sign_in_url_helper,
|
22
|
+
:sign_out_url_helper
|
21
23
|
|
22
24
|
#TODO: set these up in the Hitchens initializer file
|
23
25
|
self.blog_name = "Ian's test blog"
|
@@ -27,6 +29,8 @@ module Hitchens
|
|
27
29
|
self.user_class_name = 'User'
|
28
30
|
self.current_user_helper_name = 'current_user'
|
29
31
|
self.blog_admin_user_method = 'blog_admin?'
|
32
|
+
self.sign_in_url_helper = 'new_user_session_path'
|
33
|
+
self.sign_out_url_helper = 'destroy_user_session_path'
|
30
34
|
|
31
35
|
def self.user_class
|
32
36
|
user_class_name.constantize
|
@@ -6,4 +6,9 @@ class User < ActiveRecord::Base
|
|
6
6
|
|
7
7
|
# Setup accessible (or protected) attributes for your model
|
8
8
|
attr_accessible :email, :password, :password_confirmation, :remember_me
|
9
|
+
|
10
|
+
# let's assume they're an admin if they have a real account
|
11
|
+
def blog_admin?
|
12
|
+
email.present?
|
13
|
+
end
|
9
14
|
end
|
@@ -7,6 +7,12 @@
|
|
7
7
|
<%= csrf_meta_tags %>
|
8
8
|
</head>
|
9
9
|
<body>
|
10
|
+
<% if flash[:notice] %>
|
11
|
+
<p class="notice"><%= flash[:notice] %></p>
|
12
|
+
<% end %>
|
13
|
+
<% if flash[:error] %>
|
14
|
+
<p class="error"><%= flash[:error] %></p>
|
15
|
+
<% end %>
|
10
16
|
<p>
|
11
17
|
<% if current_user %>
|
12
18
|
<%= link_to 'sign out', main_app.destroy_user_session_path, method: 'delete' %>
|
@@ -2,4 +2,12 @@
|
|
2
2
|
# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
|
3
3
|
|
4
4
|
en:
|
5
|
-
|
5
|
+
hitchens:
|
6
|
+
errors:
|
7
|
+
access_denied: Access denied.
|
8
|
+
post_not_updated: Post could not be updated.
|
9
|
+
notices:
|
10
|
+
post_deleted: Post successfully deleted.
|
11
|
+
post_created: Post successfully created.
|
12
|
+
post_updated: Post successfully updated.
|
13
|
+
|