Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
08d1c63
initial typo setup
kedevlin Mar 28, 2016
43e55a3
add db/db_test to gitignore
kedevlin Mar 28, 2016
48eeb14
fixed untracked files
kedevlin Mar 28, 2016
7fc0ddd
added cucumber test for clicking category link
kedevlin Mar 28, 2016
ccfbc0e
create failing rspec test for bug
kedevlin Mar 28, 2016
cfe2496
add pry to gemfile, fix bug so tests pass
kedevlin Mar 28, 2016
f73ad31
add test for post edit
kedevlin Mar 28, 2016
c0ffdf4
create rspec and cucumber test for handling a new category with no name
kedevlin Mar 29, 2016
53d9920
cucumber test passes, need to fix rspec test
kedevlin Mar 29, 2016
2c19f06
fixed rspec test for bad params, checked that it fails when original …
kedevlin Mar 29, 2016
716395c
create failing cucumber test for unique name requirement
kedevlin Mar 29, 2016
0a83ce6
create failing rspec tests for unique name requirement
kedevlin Mar 29, 2016
db76e89
fixed bug for handling duplicate category name
kedevlin Mar 29, 2016
17aba9f
create failing test for editing a category with a duplicate name
kedevlin Mar 29, 2016
4a47d2c
add failing rspec test for changing name to duplicate
kedevlin Mar 29, 2016
796a6c9
removed tests validating uniqueness of name on edit; based on model v…
kedevlin Mar 29, 2016
0a9b276
remove require pry, move pry gem to pre-exisitng dev-test group
kedevlin Mar 29, 2016
0e02649
utilize the save method without the bang in conditional
kedevlin Mar 29, 2016
5e047aa
remove bin/ from git ignore, add db/db_development to gitignore
kedevlin Mar 29, 2016
106f474
create new feature file and create first scenario
kedevlin Mar 29, 2016
f00576f
add cucumber test for showing form to non-admin users
kedevlin Mar 29, 2016
61a23e8
add merge form, route, and controller method
kedevlin Mar 29, 2016
9bd79e1
cannot view merge form on new articles
kedevlin Mar 29, 2016
7d11ec6
change article id field id to merge_with per requirements
kedevlin Mar 29, 2016
e3ad079
remove @new variable from controller
kedevlin Mar 29, 2016
888fa03
add cucumber test for merging two articles as an admin
kedevlin Mar 30, 2016
8032860
add cucumber test for merging articles when one does not exist
kedevlin Mar 30, 2016
92bc841
add cucumber test for merging article with itself
kedevlin Mar 30, 2016
3c9be19
add cucumber tests for feature scenarios
kedevlin Mar 30, 2016
3c30118
create skeleton of specs
kedevlin Mar 30, 2016
7ce1069
create merge_with method and skeleton specs for model and controller
kedevlin Mar 30, 2016
a55b0f1
create failing rspec tests for good params and skeleton for bad params
kedevlin Mar 30, 2016
0ce609b
failing tests for bad params with merge
kedevlin Mar 30, 2016
26afd55
update skeleton of model tests
kedevlin Mar 30, 2016
5c13eb8
create article model rspec tests
kedevlin Mar 30, 2016
720ba06
add tests for functionality when article does not exist or same article
kedevlin Mar 30, 2016
2bf626f
merge_with method returns nil if article doesn't exist or it's the sa…
kedevlin Mar 30, 2016
0aac034
create new article in merge_with method
kedevlin Mar 30, 2016
aad6af0
update article count test
kedevlin Mar 30, 2016
b60a687
transfer comments to new article
kedevlin Mar 30, 2016
673b158
destroy original articles, fix artic spec testing change in Article c…
kedevlin Mar 30, 2016
afb8046
update before action for controller spec, add model method call in co…
kedevlin Mar 30, 2016
b4e5cba
change flash tests to be_present
kedevlin Mar 30, 2016
88a8f66
confirm user is admin before merge method
kedevlin Mar 30, 2016
2e2660b
error message displays, unable to get specs to pass
kedevlin Mar 30, 2016
9b74812
update cucumber tests based on actual flash error message
kedevlin Mar 30, 2016
80cc199
remove notice for successful merge from test
kedevlin Mar 30, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ config/mail.yml
*~
db/*.sqlite*
db/schema.rb
db/db_test
db/db_development
.*.swp
.*.swo
.DS_Store
Expand All @@ -21,5 +23,4 @@ tmp/*
nbproject
public/cache/*
.rbenv-version
bin/
.bundle/
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@ group :development, :test do
gem 'cucumber-rails-training-wheels'
gem 'database_cleaner'
gem 'capybara'
gem 'pry-nav'
end
19 changes: 18 additions & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
GEM
remote: http://rubygems.org/
remote: https://rubygems.org/
specs:
RedCloth (4.2.9)
abstract (1.0.0)
Expand Down Expand Up @@ -87,13 +87,22 @@ GEM
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
method_source (0.6.7)
ruby_parser (>= 2.3.1)
mime-types (1.19)
mini_magick (1.3.3)
subexec (~> 0.0.4)
multi_json (1.3.6)
nokogiri (1.5.5)
pg (0.14.1)
polyglot (0.3.3)
pry (0.9.7.4)
coderay (~> 0.9.8)
method_source (~> 0.6.7)
ruby_parser (>= 2.3.1)
slop (~> 2.1.0)
pry-nav (0.0.4)
pry (~> 0.9.7.4)
rack (1.2.5)
rack-mount (0.6.14)
rack (>= 1.0.0)
Expand Down Expand Up @@ -141,17 +150,21 @@ GEM
ruby-debug-base19 (>= 0.11.19)
ruby_core_source (0.1.5)
archive-tar-minitar (>= 0.5.2)
ruby_parser (3.8.1)
sexp_processor (~> 4.1)
rubypants (0.2.0)
rubyzip (0.9.9)
selenium-webdriver (2.25.0)
childprocess (>= 0.2.5)
libwebsocket (~> 0.1.3)
multi_json (~> 1.0)
rubyzip
sexp_processor (4.7.0)
simplecov (0.6.4)
multi_json (~> 1.0)
simplecov-html (~> 0.5.3)
simplecov-html (0.5.3)
slop (2.1.0)
sqlite3 (1.3.6)
subexec (0.0.4)
thin (1.5.0)
Expand Down Expand Up @@ -193,6 +206,7 @@ DEPENDENCIES
kaminari
mini_magick (~> 1.3.3)
pg
pry-nav
rails (~> 3.0.10)
rake (~> 0.9.2)
recaptcha
Expand All @@ -205,3 +219,6 @@ DEPENDENCIES
thin
uuidtools (~> 2.1.1)
webrat

BUNDLED WITH
1.11.2
15 changes: 9 additions & 6 deletions app/controllers/admin/categories_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ class Admin::CategoriesController < Admin::BaseController
def index; redirect_to :action => 'new' ; end
def edit; new_or_edit; end

def new
def new
respond_to do |format|
format.html { new_or_edit }
format.js {
format.js {
@category = Category.new
}
end
Expand All @@ -25,12 +25,16 @@ def destroy

def new_or_edit
@categories = Category.find(:all)
@category = Category.find(params[:id])
if params[:id].nil?
@category = Category.new
else
@category = Category.find(params[:id])
end
@category.attributes = params[:category]
if request.post?
respond_to do |format|
format.html { save_category }
format.js do
format.js do
@category.save
@article = Article.new
@article.categories << @category
Expand All @@ -43,12 +47,11 @@ def new_or_edit
end

def save_category
if @category.save!
if @category.save
flash[:notice] = _('Category was successfully saved.')
else
flash[:error] = _('Category could not be saved.')
end
redirect_to :action => 'new'
end

end
27 changes: 21 additions & 6 deletions app/controllers/admin/content_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,28 @@ class Admin::ContentController < Admin::BaseController

cache_sweeper :blog_sweeper

def merge
unless current_user.admin?
redirect_to admin_content_path
flash[:error] = _("Error, you are not allowed to perform this action")
return
end
first = Article.find(params[:id])
merged = first.merge_with(params[:merge_with])
if merged.nil?
flash[:error] = _('Unable to perform merge.')
end
redirect_to admin_content_path
end

def auto_complete_for_article_keywords
@items = Tag.find_with_char params[:article][:keywords].strip
render :inline => "<%= raw auto_complete_result @items, 'name' %>"
end

def index
@search = params[:search] ? params[:search] : {}

@articles = Article.search_with_pagination(@search, {:page => params[:page], :per_page => this_blog.admin_display_elements})

if request.xhr?
Expand Down Expand Up @@ -44,7 +58,7 @@ def destroy
flash[:error] = _("Error, you are not allowed to perform this action")
return(redirect_to :action => 'index')
end

return(render 'admin/shared/destroy') unless request.post?

@record.destroy
Expand Down Expand Up @@ -77,7 +91,7 @@ def attachment_box_add

def attachment_save(attachment)
begin
Resource.create(:filename => attachment.original_filename, :mime => attachment.content_type.chomp,
Resource.create(:filename => attachment.original_filename, :mime => attachment.content_type.chomp,
:created_at => Time.now).write_to_disk(attachment)
rescue => e
logger.info(e.message)
Expand All @@ -92,7 +106,7 @@ def autosave
@article.text_filter = current_user.text_filter if current_user.simple_editor?

get_fresh_or_existing_draft_for_article

@article.attributes = params[:article]
@article.published = false
set_article_author
Expand Down Expand Up @@ -159,13 +173,13 @@ def new_or_edit
@article.keywords = Tag.collection_to_string @article.tags
@article.attributes = params[:article]
# TODO: Consider refactoring, because double rescue looks... weird.

@article.published_at = DateTime.strptime(params[:article][:published_at], "%B %e, %Y %I:%M %p GMT%z").utc rescue Time.parse(params[:article][:published_at]).utc rescue nil

if request.post?
set_article_author
save_attachments

@article.state = "draft" if @article.draft

if @article.save
Expand All @@ -183,6 +197,7 @@ def new_or_edit
render 'new'
end


def set_the_flash
case params[:action]
when 'new'
Expand Down
35 changes: 32 additions & 3 deletions app/models/article.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,35 @@ def initialize(*args)
end
end

def merge_with(other_article_id)
return nil if (self.id == other_article_id) || !Article.exists?(other_article_id)
first = self
second = Article.find(other_article_id)
merged = Article.new
merged.title = first.title
merged.body = first.body + " " + second.body
merged.user_id = first.user_id
merged.author = first.author
merged.extended = first.extended ||= second.extended
merged.excerpt = first.excerpt ||= second.excerpt
merged.created_at = first.created_at
merged.text_filter_id = first.text_filter_id ||= second.text_filter_id
merged.whiteboard = first.whiteboard ||= second.whiteboard
merged.name = first.name ||= second.name
merged.published = first.published ||= second.published
merged.published_at = first.published_at ||= second.published_at
merged.allow_pings = first.allow_pings ||= second.allow_pings
merged.allow_comments = first.allow_comments ||= second.allow_comments
merged.parent_id = first.parent_id ||= second.parent_id
merged.post_type = first.post_type
merged.comments << first.comments
merged.comments << second.comments
merged.save
first.destroy
second.destroy
return merged
end

def set_permalink
return if self.state == 'draft'
self.permalink = self.title.to_permalink if self.permalink.nil? or self.permalink.empty?
Expand Down Expand Up @@ -104,10 +133,10 @@ def last_draft(article_id)
end

def search_with_pagination(search_hash, paginate_hash)

state = (search_hash[:state] and ["no_draft", "drafts", "published", "withdrawn", "pending"].include? search_hash[:state]) ? search_hash[:state] : 'no_draft'


list_function = ["Article.#{state}"] + function_search_no_draft(search_hash)

if search_hash[:category] and search_hash[:category].to_i > 0
Expand Down
1 change: 0 additions & 1 deletion app/models/category.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,3 @@ def set_permalink
validates_presence_of :name
validates_uniqueness_of :name, :on => :create
end

10 changes: 10 additions & 0 deletions app/views/admin/content/new.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
<% @page_heading = _('New article') %>

<%= render "admin/shared/edit", { :form_type => "article", :form_action => { :action => "new", :id => @article.id , :class => ('autosave')} } %>

<% if current_user.admin? && !@article.id.nil? %>
<h3>Merge Articles</h3>
<%= form_tag merge_articles_path do %>
<p>
Article ID <%= number_field_tag 'merge_with', nil, min: 1 %>
</p>
<%= submit_tag(value = "Merge") %>
<% end %>
<% end %>
3 changes: 3 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
end
end

# merge articles
match 'admin/content/:id/merge' => 'admin/content#merge', :as => :merge_articles

# for CK Editor
match 'fm/filemanager(/:action(/:id))', :to => 'Fm::Filemanager', :format => false
match 'ckeditor/command', :to => 'ckeditor#command', :format => false
Expand Down
3 changes: 0 additions & 3 deletions db/schema.sqlite.sql

This file was deleted.

3 changes: 0 additions & 3 deletions db/schema.sqlite3.sql

This file was deleted.

25 changes: 25 additions & 0 deletions features/create_category.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Feature: Create Categories
As a blog administrator
In order to categorize my articles
I want to be able to create new categories

Background:
Given the blog is set up
And I am logged into the admin panel

Scenario: View Categories Page
Given I am on the admin dashboard page
When I follow "Categories"
Then I should see "Categories"

Scenario: Create New Category Requires Name
Given I am on the admin categories page
When I press "Save"
Then I should see "Category could not be saved."

Scenario: Create New Category Requires Unique Name
Given I am on the admin categories page
And a category named "test" already exists
When I enter "test" into the "category_name" input field
And I press "Save"
Then I should see "Category could not be saved."
Loading