##// END OF EJS Templates
Refactor: convert News to a REST resource...
Eric Davis -
r4100:79e30e7087d7
parent child
Show More
@@ -1,5 +1,5
1 <p><%= link_to_project(news.project) + ': ' unless @project %>
1 <p><%= link_to_project(news.project) + ': ' unless @project %>
2 <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
2 <%= link_to h(news.title), news_path(news) %>
3 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
3 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
4 <br />
4 <br />
5 <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
5 <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
@@ -1,11 +1,11
1 <h2><%=l(:label_news)%></h2>
1 <h2><%=l(:label_news)%></h2>
2
2
3 <% labelled_tabular_form_for :news, @news, :url => { :action => "update" },
3 <% labelled_tabular_form_for :news, @news, :url => news_path(@news),
4 :html => { :id => 'news-form', :method => :put } do |f| %>
4 :html => { :id => 'news-form', :method => :put } do |f| %>
5 <%= render :partial => 'form', :locals => { :f => f } %>
5 <%= render :partial => 'form', :locals => { :f => f } %>
6 <%= submit_tag l(:button_save) %>
6 <%= submit_tag l(:button_save) %>
7 <%= link_to_remote l(:label_preview),
7 <%= link_to_remote l(:label_preview),
8 { :url => { :controller => 'previews', :action => 'news', :project_id => @project },
8 { :url => preview_news_path(:project_id => @project),
9 :method => 'get',
9 :method => 'get',
10 :update => 'preview',
10 :update => 'preview',
11 :with => "Form.serialize('news-form')"
11 :with => "Form.serialize('news-form')"
@@ -1,18 +1,18
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized(l(:label_news_new),
2 <%= link_to_if_authorized(l(:label_news_new),
3 {:controller => 'news', :action => 'new', :project_id => @project},
3 new_project_news_path(@project),
4 :class => 'icon icon-add',
4 :class => 'icon icon-add',
5 :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %>
5 :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %>
6 </div>
6 </div>
7
7
8 <div id="add-news" style="display:none;">
8 <div id="add-news" style="display:none;">
9 <h2><%=l(:label_news_new)%></h2>
9 <h2><%=l(:label_news_new)%></h2>
10 <% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
10 <% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
11 :html => { :id => 'news-form' } do |f| %>
11 :html => { :id => 'news-form' } do |f| %>
12 <%= render :partial => 'news/form', :locals => { :f => f } %>
12 <%= render :partial => 'news/form', :locals => { :f => f } %>
13 <%= submit_tag l(:button_create) %>
13 <%= submit_tag l(:button_create) %>
14 <%= link_to_remote l(:label_preview),
14 <%= link_to_remote l(:label_preview),
15 { :url => { :controller => 'previews', :action => 'news', :project_id => @project },
15 { :url => preview_news_path(:project_id => @project),
16 :method => 'get',
16 :method => 'get',
17 :update => 'preview',
17 :update => 'preview',
18 :with => "Form.serialize('news-form')"
18 :with => "Form.serialize('news-form')"
@@ -29,7 +29,7
29 <% else %>
29 <% else %>
30 <% @newss.each do |news| %>
30 <% @newss.each do |news| %>
31 <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %>
31 <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %>
32 <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
32 <%= link_to h(news.title), news_path(news) %>
33 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3>
33 <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3>
34 <p class="author"><%= authoring news.created_on, news.author %></p>
34 <p class="author"><%= authoring news.created_on, news.author %></p>
35 <div class="wiki">
35 <div class="wiki">
@@ -1,11 +1,11
1 <h2><%=l(:label_news_new)%></h2>
1 <h2><%=l(:label_news_new)%></h2>
2
2
3 <% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project },
3 <% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project),
4 :html => { :id => 'news-form' } do |f| %>
4 :html => { :id => 'news-form' } do |f| %>
5 <%= render :partial => 'news/form', :locals => { :f => f } %>
5 <%= render :partial => 'news/form', :locals => { :f => f } %>
6 <%= submit_tag l(:button_create) %>
6 <%= submit_tag l(:button_create) %>
7 <%= link_to_remote l(:label_preview),
7 <%= link_to_remote l(:label_preview),
8 { :url => { :controller => 'previews', :action => 'news', :project_id => @project },
8 { :url => preview_news_path(:project_id => @project),
9 :method => 'get',
9 :method => 'get',
10 :update => 'preview',
10 :update => 'preview',
11 :with => "Form.serialize('news-form')"
11 :with => "Form.serialize('news-form')"
@@ -1,22 +1,22
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to_if_authorized l(:button_edit),
2 <%= link_to_if_authorized l(:button_edit),
3 {:controller => 'news', :action => 'edit', :id => @news},
3 edit_news_path(@news),
4 :class => 'icon icon-edit',
4 :class => 'icon icon-edit',
5 :accesskey => accesskey(:edit),
5 :accesskey => accesskey(:edit),
6 :onclick => 'Element.show("edit-news"); return false;' %>
6 :onclick => 'Element.show("edit-news"); return false;' %>
7 <%= link_to_if_authorized l(:button_delete), {:controller => 'news', :action => 'destroy', :id => @news}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
7 <%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %>
8 </div>
8 </div>
9
9
10 <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2>
10 <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2>
11
11
12 <% if authorize_for('news', 'edit') %>
12 <% if authorize_for('news', 'edit') %>
13 <div id="edit-news" style="display:none;">
13 <div id="edit-news" style="display:none;">
14 <% labelled_tabular_form_for :news, @news, :url => { :action => "update", :id => @news },
14 <% labelled_tabular_form_for :news, @news, :url => news_path(@news),
15 :html => { :id => 'news-form', :method => :put } do |f| %>
15 :html => { :id => 'news-form', :method => :put } do |f| %>
16 <%= render :partial => 'form', :locals => { :f => f } %>
16 <%= render :partial => 'form', :locals => { :f => f } %>
17 <%= submit_tag l(:button_save) %>
17 <%= submit_tag l(:button_save) %>
18 <%= link_to_remote l(:label_preview),
18 <%= link_to_remote l(:label_preview),
19 { :url => { :controller => 'previews', :action => 'news', :project_id => @project },
19 { :url => preview_news_path(:project_id => @project),
20 :method => 'get',
20 :method => 'get',
21 :update => 'preview',
21 :update => 'preview',
22 :with => "Form.serialize('news-form')"
22 :with => "Form.serialize('news-form')"
@@ -136,30 +136,7 ActionController::Routing::Routes.draw do |map|
136 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
136 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
137 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
137 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
138 end
138 end
139
140 map.with_options :controller => 'news' do |news_routes|
141 news_routes.connect 'news/:id/preview', :controller => 'previews', :action => 'news'
142 news_routes.connect 'news/preview', :controller => 'previews', :action => 'news'
143
144 news_routes.with_options :conditions => {:method => :get} do |news_views|
145 news_views.connect 'news', :action => 'index'
146 news_views.connect 'projects/:project_id/news', :action => 'index'
147 news_views.connect 'projects/:project_id/news.:format', :action => 'index'
148 news_views.connect 'news.:format', :action => 'index'
149 news_views.connect 'projects/:project_id/news/new', :action => 'new'
150 news_views.connect 'news/:id', :action => 'show'
151 news_views.connect 'news/:id/edit', :action => 'edit'
152 end
153 news_routes.with_options do |news_actions|
154 news_actions.connect 'projects/:project_id/news', :action => 'create', :conditions => {:method => :post}
155 news_actions.connect 'news/:id/destroy', :action => 'destroy'
156 end
157 news_routes.connect 'news/:id/edit', :action => 'update', :conditions => {:method => :put}
158
139
159 news_routes.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
160 news_routes.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
161 end
162
163 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
140 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
164
141
165 map.with_options :controller => 'users' do |users|
142 map.with_options :controller => 'users' do |users|
@@ -182,6 +159,12 ActionController::Routing::Routes.draw do |map|
182 # For nice "roadmap" in the url for the index action
159 # For nice "roadmap" in the url for the index action
183 map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index'
160 map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index'
184
161
162 map.all_news 'news', :controller => 'news', :action => 'index'
163 map.formatted_all_news 'news.:format', :controller => 'news', :action => 'index'
164 map.preview_news '/news/preview', :controller => 'previews', :action => 'news'
165 map.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post}
166 map.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete}
167
185 map.resources :projects, :member => {
168 map.resources :projects, :member => {
186 :copy => [:get, :post],
169 :copy => [:get, :post],
187 :settings => :get,
170 :settings => :get,
@@ -192,6 +175,7 ActionController::Routing::Routes.draw do |map|
192 project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy]
175 project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy]
193 project.resources :files, :only => [:index, :new, :create]
176 project.resources :files, :only => [:index, :new, :create]
194 project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post}
177 project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post}
178 project.resources :news, :shallow => true
195 end
179 end
196
180
197 # Destroy uses a get request to prompt the user before the actual DELETE request
181 # Destroy uses a get request to prompt the user before the actual DELETE request
@@ -113,7 +113,7 class NewsControllerTest < ActionController::TestCase
113
113
114 def test_destroy
114 def test_destroy
115 @request.session[:user_id] = 2
115 @request.session[:user_id] = 2
116 post :destroy, :id => 1
116 delete :destroy, :id => 1
117 assert_redirected_to 'projects/ecookbook/news'
117 assert_redirected_to 'projects/ecookbook/news'
118 assert_nil News.find_by_id(1)
118 assert_nil News.find_by_id(1)
119 end
119 end
@@ -157,17 +157,14 class RoutingTest < ActionController::IntegrationTest
157 should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
157 should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567'
158 should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
158 should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234'
159 should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
159 should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567'
160 should_route :get, "/news/123/preview", :controller => 'previews', :action => 'news', :id => '123'
161 should_route :get, "/news/preview", :controller => 'previews', :action => 'news'
160 should_route :get, "/news/preview", :controller => 'previews', :action => 'news'
162
161
163 should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
162 should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567'
164 should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567'
165 should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
163 should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567'
166
164
167 should_route :post, "/issues/preview/123", :controller => 'previews', :action => 'issue', :id => '123'
165 should_route :put, "/news/567", :controller => 'news', :action => 'update', :id => '567'
168
169 should_route :put, "/news/567/edit", :controller => 'news', :action => 'update', :id => '567'
170
166
167 should_route :delete, "/news/567", :controller => 'news', :action => 'destroy', :id => '567'
171 should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15'
168 should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15'
172 end
169 end
173
170
General Comments 0
You need to be logged in to leave comments. Login now