jabe 0.8.0 → 0.9.0
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.textile +8 -1
- data/Rakefile +5 -1
- data/app/assets/javascripts/jabe/application.js +13 -0
- data/app/controllers/jabe/admin/settings_controller.rb +1 -1
- data/app/controllers/jabe/comments_controller.rb +12 -3
- data/app/mailers/jabe/comment_mailer.rb +5 -5
- data/app/models/jabe/comment.rb +31 -10
- data/app/models/jabe/settings.rb +5 -3
- data/app/views/jabe/admin/settings/edit.html.erb +8 -0
- data/app/views/jabe/comment_mailer/notification.html.erb +12 -6
- data/app/views/jabe/entries/show.html.erb +16 -11
- data/app/views/layouts/jabe/_flash_messages.html.erb +1 -3
- data/app/views/layouts/jabe/application.html.erb +1 -1
- data/db/migrate/20101230010436_devise_create_admins.rb +10 -12
- data/db/migrate/20121017015058_akismetify_comments.rb +32 -0
- data/lib/jabe.rb +1 -1
- data/lib/jabe/version.rb +1 -1
- metadata +37 -4
data/README.textile
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
h1. Just Another Blog Engine
|
2
2
|
|
3
|
+
h2. Status
|
4
|
+
|
5
|
+
"!https://codeclimate.com/badge.png!":https://codeclimate.com/github/pixels-and-bits/jabe
|
6
|
+
|
3
7
|
h3. What is this?
|
4
8
|
|
5
9
|
JABE is a bare bones blogging engine that is installed as a gem. It will grow as its needs do.
|
@@ -13,6 +17,7 @@ Edit your Gemfile and add the required gems
|
|
13
17
|
<pre><code>gem 'devise', '>= 2.0.0'
|
14
18
|
gem 'friendly_id', '>= 4.0.0'
|
15
19
|
gem 'kaminari', '>= 0.13.0'
|
20
|
+
gem 'sanitize', '>= 2.0.0'
|
16
21
|
</code></pre>
|
17
22
|
|
18
23
|
From your rails root
|
@@ -62,4 +67,6 @@ Create a new migration to handle the database changes.
|
|
62
67
|
h2. TODO
|
63
68
|
|
64
69
|
* Migrate generators
|
65
|
-
*
|
70
|
+
* Integrate Akismet
|
71
|
+
* Add a comment moderation queue?
|
72
|
+
|
data/Rakefile
CHANGED
@@ -27,5 +27,9 @@ Bundler::GemHelper.install_tasks
|
|
27
27
|
|
28
28
|
task :default do
|
29
29
|
# NOTE: There has to be a better way to do this
|
30
|
-
|
30
|
+
Dir.chdir('test/dummy') do
|
31
|
+
FileUtils.rm(%w(db/dev.sqlite3)) rescue Errno::ENOENT
|
32
|
+
FileUtils.rm(%w(db/test.sqlite3)) rescue Errno::ENOENT
|
33
|
+
exit system("bundle exec rake db:migrate db:test:prepare && bundle exec cucumber features")
|
34
|
+
end
|
31
35
|
end
|
@@ -9,6 +9,19 @@ $(function() {
|
|
9
9
|
}
|
10
10
|
|
11
11
|
$('.dropdown-toggle').dropdown()
|
12
|
+
|
13
|
+
$('.comment_delete').click(function() {
|
14
|
+
var elem = $(this)
|
15
|
+
if (confirm(elem.data('confirm'))) {
|
16
|
+
$.ajax({
|
17
|
+
url: elem.attr('href'),
|
18
|
+
type: 'DELETE'
|
19
|
+
}).success(function() {
|
20
|
+
elem.closest('.comment').fadeOut()
|
21
|
+
})
|
22
|
+
}
|
23
|
+
return false
|
24
|
+
})
|
12
25
|
});
|
13
26
|
|
14
27
|
var JABE = function() {
|
@@ -2,7 +2,7 @@ module Jabe
|
|
2
2
|
class Admin::SettingsController < Admin::BaseController
|
3
3
|
|
4
4
|
def update
|
5
|
-
if
|
5
|
+
if Jabe::SETTINGS.update_attributes(params[:settings])
|
6
6
|
Jabe::SETTINGS.do_updates
|
7
7
|
redirect_to admin_root_path, :notice => 'Settings updated.'
|
8
8
|
else
|
@@ -1,13 +1,17 @@
|
|
1
1
|
module Jabe
|
2
2
|
class CommentsController < Admin::BaseController
|
3
|
+
include PublicEntryUrl
|
4
|
+
|
3
5
|
layout 'application'
|
4
6
|
skip_before_filter :authenticate_admin!, :only => [ :create, :new ]
|
5
7
|
helper_method :entry, :comment
|
6
8
|
|
7
9
|
def create
|
10
|
+
comment.request = request
|
11
|
+
comment.permalink = public_entry_url(entry)
|
12
|
+
|
8
13
|
if comment.save
|
9
|
-
comment.
|
10
|
-
redirect_to entry_path(entry), :notice => 'Your comment was submitted.'
|
14
|
+
redirect_to public_entry_url(entry), :notice => 'Your comment was submitted.'
|
11
15
|
else
|
12
16
|
flash[:error] = 'Unable to submit your comment.'
|
13
17
|
render 'entries/show'
|
@@ -16,7 +20,12 @@ module Jabe
|
|
16
20
|
|
17
21
|
def destroy
|
18
22
|
comment.destroy
|
19
|
-
|
23
|
+
|
24
|
+
if request.xhr?
|
25
|
+
render :nothing => true
|
26
|
+
else
|
27
|
+
redirect_to entry_path(entry), :notice => 'Comment was deleted.'
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
private
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Jabe
|
2
2
|
class CommentMailer < ActionMailer::Base
|
3
|
-
|
4
|
-
@comment = comment
|
5
|
-
@request = request
|
3
|
+
include PublicEntryUrl
|
6
4
|
|
7
|
-
|
5
|
+
def notification(comment)
|
6
|
+
@comment = comment
|
8
7
|
|
9
8
|
mail(:to => Admin.all.map(&:email),
|
10
|
-
:subject => "Comment on: #{comment.entry.title}"
|
9
|
+
:subject => "Comment on: #{comment.entry.title}",
|
10
|
+
:from => Jabe::SETTINGS.mail_from || 'edit-me-in-settings@example.com'
|
11
11
|
)
|
12
12
|
end
|
13
13
|
end
|
data/app/models/jabe/comment.rb
CHANGED
@@ -1,23 +1,29 @@
|
|
1
1
|
module Jabe
|
2
2
|
class Comment < ActiveRecord::Base
|
3
|
+
include Rakismet::Model
|
4
|
+
include PublicEntryUrl
|
5
|
+
|
3
6
|
if defined?(Gravtastic)
|
4
7
|
include Gravtastic
|
5
|
-
|
8
|
+
gravtastic :author_email, :size => 64
|
6
9
|
end
|
7
10
|
|
8
|
-
attr_accessor :nickname
|
11
|
+
attr_accessor :nickname, :request
|
9
12
|
|
10
13
|
belongs_to :entry
|
11
|
-
default_scope :order => 'created_at ASC'
|
14
|
+
default_scope :conditions => { :spam => false }, :order => 'created_at ASC'
|
15
|
+
scope :spam, :conditions => { :spam => true }
|
16
|
+
|
17
|
+
before_validation :bot_check, :check_akismet, :sanitize
|
18
|
+
validates_presence_of :author, :author_email, :content, :message => 'Required'
|
12
19
|
|
13
|
-
|
14
|
-
validates_presence_of :name, :email, :body, :message => 'Required'
|
20
|
+
after_create :send_notification
|
15
21
|
|
16
|
-
acts_as_textiled :
|
22
|
+
acts_as_textiled :content
|
17
23
|
|
18
|
-
def send_notification
|
24
|
+
def send_notification
|
19
25
|
begin
|
20
|
-
CommentMailer.notification(self
|
26
|
+
CommentMailer.notification(self).deliver
|
21
27
|
rescue => e
|
22
28
|
logger.error "#{e}\n#{e.backtrace.join("\n")}"
|
23
29
|
end
|
@@ -28,8 +34,23 @@ module Jabe
|
|
28
34
|
def bot_check
|
29
35
|
unless self.nickname.blank?
|
30
36
|
errors.add(:nickname, 'You shouldn\'t have seen this...')
|
31
|
-
false
|
37
|
+
return false
|
32
38
|
end
|
33
39
|
end
|
40
|
+
|
41
|
+
def check_akismet
|
42
|
+
self.user_ip = request.remote_ip
|
43
|
+
self.user_agent = request.env['HTTP_USER_AGENT']
|
44
|
+
self.referrer = request.env['HTTP_REFERER']
|
45
|
+
self.spam = spam?
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
def sanitize
|
50
|
+
self.author_email = Sanitize.clean(author_email)
|
51
|
+
self.author_url = Sanitize.clean(author_url)
|
52
|
+
self.content = Sanitize.clean(content)
|
53
|
+
true
|
54
|
+
end
|
34
55
|
end
|
35
|
-
end
|
56
|
+
end
|
data/app/models/jabe/settings.rb
CHANGED
@@ -3,12 +3,14 @@ module Jabe
|
|
3
3
|
def do_updates
|
4
4
|
Time.zone = self.time_zone
|
5
5
|
ActionMailer::Base.default_url_options[:host] = self.host_name
|
6
|
+
Rakismet.key = self.akismet_key rescue nil
|
7
|
+
Rakismet.url = self.akismet_url rescue nil
|
6
8
|
end
|
7
9
|
end
|
8
10
|
|
9
|
-
|
11
|
+
begin
|
10
12
|
SETTINGS = Settings.first || Settings.create
|
11
13
|
SETTINGS.do_updates
|
12
|
-
|
13
|
-
|
14
|
+
rescue ActiveRecord::StatementInvalid
|
15
|
+
end
|
14
16
|
end
|
@@ -43,6 +43,14 @@
|
|
43
43
|
<%= form.label :google_tracker_id %>
|
44
44
|
<%= form.text_field :google_tracker_id, :input_html => { :class => "span7" } %>
|
45
45
|
|
46
|
+
<%= form.label :akismet_key, 'Akismet Key (leave blank to skip Akismet)' %>
|
47
|
+
<%= form.text_field :akismet_key, :input_html => { :class => "span7" } %>
|
48
|
+
|
49
|
+
<% Jabe::SETTINGS.akismet_url ||= root_url %>
|
50
|
+
|
51
|
+
<%= form.label :akismet_url, 'Akismet URL' %>
|
52
|
+
<%= form.text_field :akismet_url, :input_html => { :class => "span7" } %>
|
53
|
+
|
46
54
|
<br><br>
|
47
55
|
|
48
56
|
<%= form.submit 'Save', :class => 'btn btn-success' %>
|
@@ -1,19 +1,25 @@
|
|
1
1
|
<p>
|
2
|
-
|
2
|
+
On: <%= public_entry_url(@comment.entry) %>
|
3
3
|
</p>
|
4
4
|
<p>
|
5
|
-
|
5
|
+
SPAM: <%= @comment.spam? %>
|
6
6
|
</p>
|
7
7
|
<p>
|
8
|
-
|
8
|
+
From: <%= @comment.author %>
|
9
9
|
</p>
|
10
10
|
<p>
|
11
|
-
<%= @comment.
|
11
|
+
Email: <%= @comment.author_email %>
|
12
|
+
</p>
|
13
|
+
<p>
|
14
|
+
URL: <%= @comment.author_url %>
|
15
|
+
</p>
|
16
|
+
<p>
|
17
|
+
<%= @comment.content.html_safe %>
|
12
18
|
</p>
|
13
19
|
<hr>
|
14
20
|
<p>
|
15
|
-
Remote IP: <%= @
|
21
|
+
Remote IP: <%= @comment.user_ip %>
|
16
22
|
</p>
|
17
23
|
<p>
|
18
|
-
User agent: <%= @
|
24
|
+
User agent: <%= @comment.user_agent %>
|
19
25
|
</p>
|
@@ -24,7 +24,12 @@
|
|
24
24
|
<div class="comment">
|
25
25
|
<% if admin_signed_in? %>
|
26
26
|
<div class="delete">
|
27
|
-
<%= link_to image_tag('jabe/delete.png'),
|
27
|
+
<%= link_to image_tag('jabe/delete.png'),
|
28
|
+
entry_comment_path(entry, comment),
|
29
|
+
:confirm => 'Are you sure?',
|
30
|
+
:method => :delete,
|
31
|
+
:class => 'comment_delete'
|
32
|
+
%>
|
28
33
|
</div>
|
29
34
|
<% end %>
|
30
35
|
|
@@ -35,13 +40,13 @@
|
|
35
40
|
<% end %>
|
36
41
|
|
37
42
|
<div class="author">
|
38
|
-
<%= comment.
|
43
|
+
<%= comment.author %>
|
39
44
|
<span class="when">
|
40
45
|
<%= comment.created_at.to_s(:long) %>
|
41
46
|
</span>
|
42
47
|
</div>
|
43
48
|
<div class="body">
|
44
|
-
<%= comment.
|
49
|
+
<%= comment.content.html_safe %>
|
45
50
|
</div>
|
46
51
|
</div>
|
47
52
|
<% end %>
|
@@ -60,20 +65,20 @@
|
|
60
65
|
<div id="new_comment">
|
61
66
|
<h4>Add a comment</h4>
|
62
67
|
<%= form_for [entry, comment] do |form| %>
|
63
|
-
<%= form.label :
|
64
|
-
<%= form.text_field :
|
68
|
+
<%= form.label :author, 'Name' %>
|
69
|
+
<%= form.text_field :author %>
|
65
70
|
|
66
71
|
<%= form.label :nickname %>
|
67
72
|
<%= form.text_field :nickname %>
|
68
73
|
|
69
|
-
<%= form.label :
|
70
|
-
<%= form.text_field :
|
74
|
+
<%= form.label :author_email, 'Email (not shown to the public)' %>
|
75
|
+
<%= form.text_field :author_email %>
|
71
76
|
|
72
|
-
<%= form.label :
|
73
|
-
<%= form.text_field :
|
77
|
+
<%= form.label :author_url, 'Website' %>
|
78
|
+
<%= form.text_field :author_url %>
|
74
79
|
|
75
|
-
<%= form.label :
|
76
|
-
<%= form.text_area :
|
80
|
+
<%= form.label :content, "Comment - Textile enabled (#{link_to 'Reference', 'http://redcloth.org/try-redcloth/', :target => '_blank'})".html_safe %>
|
81
|
+
<%= form.text_area :content %>
|
77
82
|
|
78
83
|
<br>
|
79
84
|
|
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
<% unless Jabe::SETTINGS.twitter_username.blank? %>
|
56
56
|
<li>
|
57
|
-
<%= link_to 'Twitter', "https://twitter.com
|
57
|
+
<%= link_to 'Twitter', "https://twitter.com/#{Jabe::SETTINGS.twitter_username}" %>
|
58
58
|
</li>
|
59
59
|
<% end %>
|
60
60
|
|
@@ -1,23 +1,21 @@
|
|
1
1
|
class DeviseCreateAdmins < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
3
|
create_table(:jabe_admins) do |t|
|
4
|
-
t.
|
5
|
-
t.
|
6
|
-
t.
|
7
|
-
t.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
t.string :email, :null => false, :default => ""
|
5
|
+
t.string :encrypted_password, :null => false, :default => ""
|
6
|
+
t.string :reset_password_token
|
7
|
+
t.datetime :reset_password_sent_at
|
8
|
+
t.datetime :remember_created_at
|
9
|
+
t.integer :sign_in_count, :default => 0
|
10
|
+
t.datetime :current_sign_in_at
|
11
|
+
t.datetime :last_sign_in_at
|
12
|
+
t.string :current_sign_in_ip
|
13
|
+
t.string :last_sign_in_ip
|
14
14
|
t.timestamps
|
15
15
|
end
|
16
16
|
|
17
17
|
add_index :jabe_admins, :email, :unique => true
|
18
18
|
add_index :jabe_admins, :reset_password_token, :unique => true
|
19
|
-
# add_index :jabe_admins, :confirmation_token, :unique => true
|
20
|
-
# add_index :jabe_admins, :unlock_token, :unique => true
|
21
19
|
end
|
22
20
|
|
23
21
|
def self.down
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class AkismetifyComments < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
rename_column :jabe_comments, :name, :author
|
4
|
+
rename_column :jabe_comments, :email, :author_email
|
5
|
+
rename_column :jabe_comments, :url, :author_url
|
6
|
+
rename_column :jabe_comments, :body, :content
|
7
|
+
add_column :jabe_comments, :permalink, :string
|
8
|
+
add_column :jabe_comments, :user_ip, :string
|
9
|
+
add_column :jabe_comments, :user_agent, :string
|
10
|
+
add_column :jabe_comments, :referrer, :string
|
11
|
+
add_column :jabe_comments, :spam, :boolean
|
12
|
+
|
13
|
+
add_column :jabe_settings, :akismet_key, :string
|
14
|
+
add_column :jabe_settings, :akismet_url, :string
|
15
|
+
end
|
16
|
+
|
17
|
+
def down
|
18
|
+
remove_column :jabe_settings, :akismet_key
|
19
|
+
remove_column :jabe_settings, :akismet_url
|
20
|
+
|
21
|
+
remove_column :jabe_comments, :permalink
|
22
|
+
remove_column :jabe_comments, :user_ip
|
23
|
+
remove_column :jabe_comments, :user_agent
|
24
|
+
remove_column :jabe_comments, :referrer
|
25
|
+
remove_column :jabe_comments, :spam
|
26
|
+
|
27
|
+
rename_column :jabe_comments, :author, :name
|
28
|
+
rename_column :jabe_comments, :author_email, :email
|
29
|
+
rename_column :jabe_comments, :author_url, :url
|
30
|
+
rename_column :jabe_comments, :content, :body
|
31
|
+
end
|
32
|
+
end
|
data/lib/jabe.rb
CHANGED
@@ -8,7 +8,7 @@ module Jabe
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def public_entry_url(entry)
|
11
|
-
"
|
11
|
+
"http://#{SETTINGS.host_name}#{root_path}#{entry.published_at.in_time_zone.to_s(:url_part)}/#{entry.to_param}"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
data/lib/jabe/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jabe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -108,6 +108,38 @@ dependencies:
|
|
108
108
|
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 4.2.9
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sanitize
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 2.0.0
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 2.0.0
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: rakismet
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - '='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 1.3.0
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - '='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 1.3.0
|
111
143
|
- !ruby/object:Gem::Dependency
|
112
144
|
name: sqlite3
|
113
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,6 +222,7 @@ files:
|
|
190
222
|
- db/migrate/20101230010436_devise_create_admins.rb
|
191
223
|
- db/migrate/20101230010437_create_entries.rb
|
192
224
|
- db/migrate/20101230010438_create_comments.rb
|
225
|
+
- db/migrate/20121017015058_akismetify_comments.rb
|
193
226
|
- lib/acts_as_textiled/base.rb
|
194
227
|
- lib/jabe/engine.rb
|
195
228
|
- lib/jabe/version.rb
|
@@ -213,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
246
|
version: '0'
|
214
247
|
segments:
|
215
248
|
- 0
|
216
|
-
hash: -
|
249
|
+
hash: -2851312894657140189
|
217
250
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
251
|
none: false
|
219
252
|
requirements:
|
@@ -222,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
255
|
version: '0'
|
223
256
|
segments:
|
224
257
|
- 0
|
225
|
-
hash: -
|
258
|
+
hash: -2851312894657140189
|
226
259
|
requirements: []
|
227
260
|
rubyforge_project:
|
228
261
|
rubygems_version: 1.8.23
|