Revision 1297:0a574315af3e .svn/pristine/05

View differences:

.svn/pristine/05/0513c24a062b523037219d9978aab2b119808571.svn-base
1
<%= form_for @project,
2
            :url => { :action => 'modules', :id => @project },
3
            :html => {:id => 'modules-form',
4
                      :method => :post} do |f| %>
5

  
6
<div class="box">
7
<fieldset>
8
<legend><%= l(:text_select_project_modules) %></legend>
9

  
10
<% Redmine::AccessControl.available_project_modules.each do |m| %>
11
<p><label><%= check_box_tag 'enabled_module_names[]', m, @project.module_enabled?(m) -%>
12
 <%= l_or_humanize(m, :prefix => "project_module_") %></label></p>
13
<% end %>
14
</fieldset>
15
</div>
16

  
17
<p><%= check_all_links 'modules-form' %></p>
18
<p><%= submit_tag l(:button_save) %></p>
19

  
20
<% end %>
.svn/pristine/05/0548f38a902595a77747491d864f451fe12f0f47.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2012  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
RedmineApp::Application.routes.draw do
19
  root :to => 'welcome#index', :as => 'home'
20

  
21
  match 'login', :to => 'account#login', :as => 'signin'
22
  match 'logout', :to => 'account#logout', :as => 'signout'
23
  match 'account/register', :to => 'account#register', :via => [:get, :post], :as => 'register'
24
  match 'account/lost_password', :to => 'account#lost_password', :via => [:get, :post], :as => 'lost_password'
25
  match 'account/activate', :to => 'account#activate', :via => :get
26

  
27
  match '/news/preview', :controller => 'previews', :action => 'news', :as => 'preview_news'
28
  match '/issues/preview/new/:project_id', :to => 'previews#issue', :as => 'preview_new_issue'
29
  match '/issues/preview/edit/:id', :to => 'previews#issue', :as => 'preview_edit_issue'
30
  match '/issues/preview', :to => 'previews#issue', :as => 'preview_issue'
31

  
32
  match 'projects/:id/wiki', :to => 'wikis#edit', :via => :post
33
  match 'projects/:id/wiki/destroy', :to => 'wikis#destroy', :via => [:get, :post]
34

  
35
  match 'boards/:board_id/topics/new', :to => 'messages#new', :via => [:get, :post]
36
  get 'boards/:board_id/topics/:id', :to => 'messages#show', :as => 'board_message'
37
  match 'boards/:board_id/topics/quote/:id', :to => 'messages#quote', :via => [:get, :post]
38
  get 'boards/:board_id/topics/:id/edit', :to => 'messages#edit'
39

  
40
  post 'boards/:board_id/topics/preview', :to => 'messages#preview'
41
  post 'boards/:board_id/topics/:id/replies', :to => 'messages#reply'
42
  post 'boards/:board_id/topics/:id/edit', :to => 'messages#edit'
43
  post 'boards/:board_id/topics/:id/destroy', :to => 'messages#destroy'
44

  
45
  # Misc issue routes. TODO: move into resources
46
  match '/issues/auto_complete', :to => 'auto_completes#issues', :via => :get, :as => 'auto_complete_issues'
47
  match '/issues/context_menu', :to => 'context_menus#issues', :as => 'issues_context_menu'
48
  match '/issues/changes', :to => 'journals#index', :as => 'issue_changes'
49
  match '/issues/:id/quoted', :to => 'journals#new', :id => /\d+/, :via => :post, :as => 'quoted_issue'
50

  
51
  match '/journals/diff/:id', :to => 'journals#diff', :id => /\d+/, :via => :get
52
  match '/journals/edit/:id', :to => 'journals#edit', :id => /\d+/, :via => [:get, :post]
53

  
54
  match '/projects/:project_id/issues/gantt', :to => 'gantts#show'
55
  match '/issues/gantt', :to => 'gantts#show'
56

  
57
  match '/projects/:project_id/issues/calendar', :to => 'calendars#show'
58
  match '/issues/calendar', :to => 'calendars#show'
59

  
60
  match 'projects/:id/issues/report', :to => 'reports#issue_report', :via => :get
61
  match 'projects/:id/issues/report/:detail', :to => 'reports#issue_report_details', :via => :get
62

  
63
  match 'my/account', :controller => 'my', :action => 'account', :via => [:get, :post]
64
  match 'my/account/destroy', :controller => 'my', :action => 'destroy', :via => [:get, :post]
65
  match 'my/page', :controller => 'my', :action => 'page', :via => :get
66
  match 'my', :controller => 'my', :action => 'index', :via => :get # Redirects to my/page
67
  match 'my/reset_rss_key', :controller => 'my', :action => 'reset_rss_key', :via => :post
68
  match 'my/reset_api_key', :controller => 'my', :action => 'reset_api_key', :via => :post
69
  match 'my/password', :controller => 'my', :action => 'password', :via => [:get, :post]
70
  match 'my/page_layout', :controller => 'my', :action => 'page_layout', :via => :get
71
  match 'my/add_block', :controller => 'my', :action => 'add_block', :via => :post
72
  match 'my/remove_block', :controller => 'my', :action => 'remove_block', :via => :post
73
  match 'my/order_blocks', :controller => 'my', :action => 'order_blocks', :via => :post
74

  
75
  resources :users
76
  match 'users/:id/memberships/:membership_id', :to => 'users#edit_membership', :via => :put, :as => 'user_membership'
77
  match 'users/:id/memberships/:membership_id', :to => 'users#destroy_membership', :via => :delete
78
  match 'users/:id/memberships', :to => 'users#edit_membership', :via => :post, :as => 'user_memberships'
79

  
80
  match 'watchers/new', :controller=> 'watchers', :action => 'new', :via => :get
81
  match 'watchers', :controller=> 'watchers', :action => 'create', :via => :post
82
  match 'watchers/append', :controller=> 'watchers', :action => 'append', :via => :post
83
  match 'watchers/destroy', :controller=> 'watchers', :action => 'destroy', :via => :post
84
  match 'watchers/watch', :controller=> 'watchers', :action => 'watch', :via => :post
85
  match 'watchers/unwatch', :controller=> 'watchers', :action => 'unwatch', :via => :post
86
  match 'watchers/autocomplete_for_user', :controller=> 'watchers', :action => 'autocomplete_for_user', :via => :get
87

  
88
  match 'projects/:id/settings/:tab', :to => "projects#settings"
89

  
90
  resources :projects do
91
    member do
92
      get 'settings'
93
      post 'modules'
94
      post 'archive'
95
      post 'unarchive'
96
      post 'close'
97
      post 'reopen'
98
      match 'copy', :via => [:get, :post]
99
    end
100

  
101
    resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do
102
      collection do
103
        get 'autocomplete'
104
      end
105
    end
106

  
107
    resource :enumerations, :controller => 'project_enumerations', :only => [:update, :destroy]
108

  
109
    match 'issues/:copy_from/copy', :to => 'issues#new'
110
    resources :issues, :only => [:index, :new, :create] do
111
      resources :time_entries, :controller => 'timelog' do
112
        collection do
113
          get 'report'
114
        end
115
      end
116
    end
117
    # issue form update
118
    match 'issues/new', :controller => 'issues', :action => 'new', :via => [:put, :post], :as => 'issue_form'
119

  
120
    resources :files, :only => [:index, :new, :create]
121

  
122
    resources :versions, :except => [:index, :show, :edit, :update, :destroy] do
123
      collection do
124
        put 'close_completed'
125
      end
126
    end
127
    match 'versions.:format', :to => 'versions#index'
128
    match 'roadmap', :to => 'versions#index', :format => false
129
    match 'versions', :to => 'versions#index'
130

  
131
    resources :news, :except => [:show, :edit, :update, :destroy]
132
    resources :time_entries, :controller => 'timelog' do
133
      get 'report', :on => :collection
134
    end
135
    resources :queries, :only => [:new, :create]
136
    resources :issue_categories, :shallow => true
137
    resources :documents, :except => [:show, :edit, :update, :destroy]
138
    resources :boards
139
    resources :repositories, :shallow => true, :except => [:index, :show] do
140
      member do
141
        match 'committers', :via => [:get, :post]
142
      end
143
    end
144

  
145
    match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get
146
    resources :wiki, :except => [:index, :new, :create] do
147
      member do
148
        get 'rename'
149
        post 'rename'
150
        get 'history'
151
        get 'diff'
152
        match 'preview', :via => [:post, :put]
153
        post 'protect'
154
        post 'add_attachment'
155
      end
156
      collection do
157
        get 'export'
158
        get 'date_index'
159
      end
160
    end
161
    match 'wiki', :controller => 'wiki', :action => 'show', :via => :get
162
    get 'wiki/:id/:version', :to => 'wiki#show'
163
    delete 'wiki/:id/:version', :to => 'wiki#destroy_version'
164
    get 'wiki/:id/:version/annotate', :to => 'wiki#annotate'
165
    get 'wiki/:id/:version/diff', :to => 'wiki#diff'
166
  end
167

  
168
  resources :issues do
169
    collection do
170
      match 'bulk_edit', :via => [:get, :post]
171
      post 'bulk_update'
172
    end
173
    resources :time_entries, :controller => 'timelog' do
174
      collection do
175
        get 'report'
176
      end
177
    end
178
    resources :relations, :shallow => true, :controller => 'issue_relations', :only => [:index, :show, :create, :destroy]
179
  end
180
  match '/issues', :controller => 'issues', :action => 'destroy', :via => :delete
181

  
182
  resources :queries, :except => [:show]
183

  
184
  resources :news, :only => [:index, :show, :edit, :update, :destroy]
185
  match '/news/:id/comments', :to => 'comments#create', :via => :post
186
  match '/news/:id/comments/:comment_id', :to => 'comments#destroy', :via => :delete
187

  
188
  resources :versions, :only => [:show, :edit, :update, :destroy] do
189
    post 'status_by', :on => :member
190
  end
191

  
192
  resources :documents, :only => [:show, :edit, :update, :destroy] do
193
    post 'add_attachment', :on => :member
194
  end
195

  
196
  match '/time_entries/context_menu', :to => 'context_menus#time_entries', :as => :time_entries_context_menu
197

  
198
  resources :time_entries, :controller => 'timelog', :except => :destroy do
199
    collection do
200
      get 'report'
201
      get 'bulk_edit'
202
      post 'bulk_update'
203
    end
204
  end
205
  match '/time_entries/:id', :to => 'timelog#destroy', :via => :delete, :id => /\d+/
206
  # TODO: delete /time_entries for bulk deletion
207
  match '/time_entries/destroy', :to => 'timelog#destroy', :via => :delete
208

  
209
  # TODO: port to be part of the resources route(s)
210
  match 'projects/:id/settings/:tab', :to => 'projects#settings', :via => :get
211

  
212
  get 'projects/:id/activity', :to => 'activities#index'
213
  get 'projects/:id/activity.:format', :to => 'activities#index'
214
  get 'activity', :to => 'activities#index'
215

  
216
  # repositories routes
217
  get 'projects/:id/repository/:repository_id/statistics', :to => 'repositories#stats'
218
  get 'projects/:id/repository/:repository_id/graph', :to => 'repositories#graph'
219

  
220
  get 'projects/:id/repository/:repository_id/changes(/*path(.:ext))',
221
      :to => 'repositories#changes'
222

  
223
  get 'projects/:id/repository/:repository_id/revisions/:rev', :to => 'repositories#revision'
224
  get 'projects/:id/repository/:repository_id/revision', :to => 'repositories#revision'
225
  post   'projects/:id/repository/:repository_id/revisions/:rev/issues', :to => 'repositories#add_related_issue'
226
  delete 'projects/:id/repository/:repository_id/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue'
227
  get 'projects/:id/repository/:repository_id/revisions', :to => 'repositories#revisions'
228
  get 'projects/:id/repository/:repository_id/revisions/:rev/:action(/*path(.:ext))',
229
      :controller => 'repositories',
230
      :format => false,
231
      :constraints => {
232
            :action => /(browse|show|entry|raw|annotate|diff)/,
233
            :rev    => /[a-z0-9\.\-_]+/
234
          }
235

  
236
  get 'projects/:id/repository/statistics', :to => 'repositories#stats'
237
  get 'projects/:id/repository/graph', :to => 'repositories#graph'
238

  
239
  get 'projects/:id/repository/changes(/*path(.:ext))',
240
      :to => 'repositories#changes'
241

  
242
  get 'projects/:id/repository/revisions', :to => 'repositories#revisions'
243
  get 'projects/:id/repository/revisions/:rev', :to => 'repositories#revision'
244
  get 'projects/:id/repository/revision', :to => 'repositories#revision'
245
  post   'projects/:id/repository/revisions/:rev/issues', :to => 'repositories#add_related_issue'
246
  delete 'projects/:id/repository/revisions/:rev/issues/:issue_id', :to => 'repositories#remove_related_issue'
247
  get 'projects/:id/repository/revisions/:rev/:action(/*path(.:ext))',
248
      :controller => 'repositories',
249
      :format => false,
250
      :constraints => {
251
            :action => /(browse|show|entry|raw|annotate|diff)/,
252
            :rev    => /[a-z0-9\.\-_]+/
253
          }
254
  get 'projects/:id/repository/:repository_id/:action(/*path(.:ext))',
255
      :controller => 'repositories',
256
      :action => /(browse|show|entry|raw|changes|annotate|diff)/
257
  get 'projects/:id/repository/:action(/*path(.:ext))',
258
      :controller => 'repositories',
259
      :action => /(browse|show|entry|raw|changes|annotate|diff)/
260

  
261
  get 'projects/:id/repository/:repository_id', :to => 'repositories#show', :path => nil
262
  get 'projects/:id/repository', :to => 'repositories#show', :path => nil
263

  
264
  # additional routes for having the file name at the end of url
265
  match 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/, :via => :get
266
  match 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/, :via => :get
267
  match 'attachments/download/:id', :controller => 'attachments', :action => 'download', :id => /\d+/, :via => :get
268
  match 'attachments/thumbnail/:id(/:size)', :controller => 'attachments', :action => 'thumbnail', :id => /\d+/, :via => :get, :size => /\d+/
269
  resources :attachments, :only => [:show, :destroy]
270

  
271
  resources :groups do
272
    member do
273
      get 'autocomplete_for_user'
274
    end
275
  end
276

  
277
  match 'groups/:id/users', :controller => 'groups', :action => 'add_users', :id => /\d+/, :via => :post, :as => 'group_users'
278
  match 'groups/:id/users/:user_id', :controller => 'groups', :action => 'remove_user', :id => /\d+/, :via => :delete, :as => 'group_user'
279
  match 'groups/destroy_membership/:id', :controller => 'groups', :action => 'destroy_membership', :id => /\d+/, :via => :post
280
  match 'groups/edit_membership/:id', :controller => 'groups', :action => 'edit_membership', :id => /\d+/, :via => :post
281

  
282
  resources :trackers, :except => :show do
283
    collection do
284
      match 'fields', :via => [:get, :post]
285
    end
286
  end
287
  resources :issue_statuses, :except => :show do
288
    collection do
289
      post 'update_issue_done_ratio'
290
    end
291
  end
292
  resources :custom_fields, :except => :show
293
  resources :roles do
294
    collection do
295
      match 'permissions', :via => [:get, :post]
296
    end
297
  end
298
  resources :enumerations, :except => :show
299
  match 'enumerations/:type', :to => 'enumerations#index', :via => :get
300

  
301
  get 'projects/:id/search', :controller => 'search', :action => 'index'
302
  get 'search', :controller => 'search', :action => 'index'
303

  
304
  match 'mail_handler', :controller => 'mail_handler', :action => 'index', :via => :post
305

  
306
  match 'admin', :controller => 'admin', :action => 'index', :via => :get
307
  match 'admin/projects', :controller => 'admin', :action => 'projects', :via => :get
308
  match 'admin/plugins', :controller => 'admin', :action => 'plugins', :via => :get
309
  match 'admin/info', :controller => 'admin', :action => 'info', :via => :get
310
  match 'admin/test_email', :controller => 'admin', :action => 'test_email', :via => :get
311
  match 'admin/default_configuration', :controller => 'admin', :action => 'default_configuration', :via => :post
312

  
313
  resources :auth_sources do
314
    member do
315
      get 'test_connection'
316
    end
317
  end
318

  
319
  match 'workflows', :controller => 'workflows', :action => 'index', :via => :get
320
  match 'workflows/edit', :controller => 'workflows', :action => 'edit', :via => [:get, :post]
321
  match 'workflows/permissions', :controller => 'workflows', :action => 'permissions', :via => [:get, :post]
322
  match 'workflows/copy', :controller => 'workflows', :action => 'copy', :via => [:get, :post]
323
  match 'settings', :controller => 'settings', :action => 'index', :via => :get
324
  match 'settings/edit', :controller => 'settings', :action => 'edit', :via => [:get, :post]
325
  match 'settings/plugin/:id', :controller => 'settings', :action => 'plugin', :via => [:get, :post]
326

  
327
  match 'sys/projects', :to => 'sys#projects', :via => :get
328
  match 'sys/projects/:id/repository', :to => 'sys#create_project_repository', :via => :post
329
  match 'sys/fetch_changesets', :to => 'sys#fetch_changesets', :via => :get
330

  
331
  match 'uploads', :to => 'attachments#upload', :via => :post
332

  
333
  get 'robots.txt', :to => 'welcome#robots'
334

  
335
  Dir.glob File.expand_path("plugins/*", Rails.root) do |plugin_dir|
336
    file = File.join(plugin_dir, "config/routes.rb")
337
    if File.exists?(file)
338
      begin
339
        instance_eval File.read(file)
340
      rescue Exception => e
341
        puts "An error occurred while loading the routes definition of #{File.basename(plugin_dir)} plugin (#{file}): #{e.message}."
342
        exit 1
343
      end
344
    end
345
  end
346
end
.svn/pristine/05/057b1251b6a5ec11a65817e4473e1f88569bdb9e.svn-base
1
Return-Path: <jsmith@somenet.foo>
2
Received: from osiris ([127.0.0.1])
3
	by OSIRIS
4
	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
5
Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
6
From: "John Smith" <jsmith@somenet.foo>
7
To: <redmine@somenet.foo>
8
Subject: New ticket on a given project
9
Date: Sun, 22 Jun 2008 12:28:07 +0200
10
MIME-Version: 1.0
11
Content-Type: text/plain;
12
	format=flowed;
13
	charset="iso-8859-1";
14
	reply-type=original
15
Content-Transfer-Encoding: 7bit
16
X-Priority: 3
17
X-MSMail-Priority: Normal
18
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
19
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
20

  
21
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
22
turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
23
blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
24
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
25
in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
26
sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
27
id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
28
eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
29
sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
30
malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
31
platea dictumst.
32

  
33
Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
34
sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
35
Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
36
dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
37
massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
38
pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
39

  
40
Projet: onlinestore
41
Tracker: Feature request
42
cat?gorie: Stock management
43
priorit?: Urgent
.svn/pristine/05/05bd9a477032dec0ee79cadb6f6626cf79ccae69.svn-base
1
# Redmine - project management software
2
# Copyright (C) 2006-2012  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17

  
18
require File.expand_path('../../../test_helper', __FILE__)
19

  
20
class RoutingRepositoriesTest < ActionController::IntegrationTest
21
  def setup
22
    @path_hash  = repository_path_hash(%w[path to file.c])
23
    assert_equal "path/to/file.c", @path_hash[:path]
24
    assert_equal "path/to/file.c", @path_hash[:param]
25
  end
26

  
27
  def test_repositories_resources
28
    assert_routing(
29
        { :method => 'get',
30
          :path => "/projects/redmine/repositories/new" },
31
        { :controller => 'repositories', :action => 'new', :project_id => 'redmine' }
32
      )
33
    assert_routing(
34
        { :method => 'post',
35
          :path => "/projects/redmine/repositories" },
36
        { :controller => 'repositories', :action => 'create', :project_id => 'redmine' }
37
      )
38
    assert_routing(
39
        { :method => 'get',
40
          :path => "/repositories/1/edit" },
41
        { :controller => 'repositories', :action => 'edit', :id => '1' }
42
      )
43
    assert_routing(
44
        { :method => 'put',
45
          :path => "/repositories/1" },
46
        { :controller => 'repositories', :action => 'update', :id => '1' }
47
      )
48
    assert_routing(
49
        { :method => 'delete',
50
          :path => "/repositories/1" },
51
        { :controller => 'repositories', :action => 'destroy', :id => '1' }
52
      )
53
    ["get", "post"].each do |method|
54
      assert_routing(
55
          { :method => method,
56
            :path => "/repositories/1/committers" },
57
          { :controller => 'repositories', :action => 'committers', :id => '1' }
58
        )
59
    end
60
  end
61

  
62
  def test_repositories_show
63
    assert_routing(
64
        { :method => 'get',
65
          :path => "/projects/redmine/repository" },
66
        { :controller => 'repositories', :action => 'show', :id => 'redmine' }
67
      )
68
  end
69

  
70
  def test_repositories
71
    assert_routing(
72
        { :method => 'get',
73
          :path => "/projects/redmine/repository/statistics" },
74
        { :controller => 'repositories', :action => 'stats', :id => 'redmine' }
75
     )
76
    assert_routing(
77
        { :method => 'get',
78
          :path => "/projects/redmine/repository/graph" },
79
        { :controller => 'repositories', :action => 'graph', :id => 'redmine' }
80
     )
81
  end
82

  
83
  def test_repositories_show_with_repository_id
84
    assert_routing(
85
        { :method => 'get',
86
          :path => "/projects/redmine/repository/foo" },
87
        { :controller => 'repositories', :action => 'show', :id => 'redmine', :repository_id => 'foo' }
88
      )
89
  end
90

  
91
  def test_repositories_with_repository_id
92
    assert_routing(
93
        { :method => 'get',
94
          :path => "/projects/redmine/repository/foo/statistics" },
95
        { :controller => 'repositories', :action => 'stats', :id => 'redmine', :repository_id => 'foo' }
96
     )
97
    assert_routing(
98
        { :method => 'get',
99
          :path => "/projects/redmine/repository/foo/graph" },
100
        { :controller => 'repositories', :action => 'graph', :id => 'redmine', :repository_id => 'foo' }
101
     )
102
  end
103

  
104
  def test_repositories_revisions
105
    empty_path_param = []
106
    assert_routing(
107
        { :method => 'get',
108
          :path => "/projects/redmine/repository/revisions" },
109
        { :controller => 'repositories', :action => 'revisions', :id => 'redmine' }
110
      )
111
    assert_routing(
112
        { :method => 'get',
113
          :path => "/projects/redmine/repository/revisions.atom" },
114
        { :controller => 'repositories', :action => 'revisions', :id => 'redmine',
115
          :format => 'atom' }
116
      )
117
    assert_routing(
118
        { :method => 'get',
119
          :path => "/projects/redmine/repository/revisions/2457" },
120
        { :controller => 'repositories', :action => 'revision', :id => 'redmine',
121
          :rev => '2457' }
122
      )
123
    assert_routing(
124
        { :method => 'get',
125
          :path => "/projects/redmine/repository/revisions/2457/show" },
126
        { :controller => 'repositories', :action => 'show', :id => 'redmine',
127
          :rev => '2457' }
128
      )
129
    assert_routing(
130
        { :method => 'get',
131
          :path => "/projects/redmine/repository/revisions/2457/show/#{@path_hash[:path]}" },
132
        { :controller => 'repositories', :action => 'show', :id => 'redmine',
133
          :path => @path_hash[:param] , :rev => '2457'}
134
      )
135
    assert_routing(
136
        { :method => 'get',
137
          :path => "/projects/redmine/repository/revisions/2457/diff" },
138
        { :controller => 'repositories', :action => 'diff', :id => 'redmine',
139
          :rev => '2457' }
140
      )
141
    assert_routing(
142
        { :method => 'get',
143
          :path => "/projects/redmine/repository/revisions/2457/diff" },
144
        { :controller => 'repositories', :action => 'diff', :id => 'redmine',
145
          :rev => '2457', :format => 'diff' },
146
        {},
147
        { :format => 'diff' }
148
      )
149
    assert_routing(
150
        { :method => 'get',
151
          :path => "/projects/redmine/repository/revisions/2/diff/#{@path_hash[:path]}" },
152
        { :controller => 'repositories', :action => 'diff', :id => 'redmine',
153
          :path => @path_hash[:param], :rev => '2' }
154
      )
155
    assert_routing(
156
        { :method => 'get',
157
          :path => "/projects/redmine/repository/revisions/2/diff/#{@path_hash[:path]}" },
158
        { :controller => 'repositories', :action => 'diff', :id => 'redmine',
159
          :path => @path_hash[:param], :rev => '2', :format => 'diff' },
160
        {},
161
        { :format => 'diff' }
162
      )
163
    assert_routing(
164
        { :method => 'get',
165
          :path => "/projects/redmine/repository/revisions/2/entry/#{@path_hash[:path]}" },
166
        { :controller => 'repositories', :action => 'entry', :id => 'redmine',
167
          :path => @path_hash[:param], :rev => '2' }
168
      )
169
    assert_routing(
170
        { :method => 'get',
171
          :path => "/projects/redmine/repository/revisions/2/raw/#{@path_hash[:path]}" },
172
        { :controller => 'repositories', :action => 'raw', :id => 'redmine',
173
          :path => @path_hash[:param], :rev => '2' }
174
      )
175
    assert_routing(
176
        { :method => 'get',
177
          :path => "/projects/redmine/repository/revisions/2/annotate/#{@path_hash[:path]}" },
178
        { :controller => 'repositories', :action => 'annotate', :id => 'redmine',
179
          :path => @path_hash[:param], :rev => '2' }
180
      )
181
  end
182

  
183
  def test_repositories_revisions_with_repository_id
184
    empty_path_param = []
185
    assert_routing(
186
        { :method => 'get',
187
          :path => "/projects/redmine/repository/foo/revisions" },
188
        { :controller => 'repositories', :action => 'revisions', :id => 'redmine', :repository_id => 'foo' }
189
      )
190
    assert_routing(
191
        { :method => 'get',
192
          :path => "/projects/redmine/repository/foo/revisions.atom" },
193
        { :controller => 'repositories', :action => 'revisions', :id => 'redmine', :repository_id => 'foo',
194
          :format => 'atom' }
195
      )
196
    assert_routing(
197
        { :method => 'get',
198
          :path => "/projects/redmine/repository/foo/revisions/2457" },
199
        { :controller => 'repositories', :action => 'revision', :id => 'redmine', :repository_id => 'foo',
200
          :rev => '2457' }
201
      )
202
    assert_routing(
203
        { :method => 'get',
204
          :path => "/projects/redmine/repository/foo/revisions/2457/show" },
205
        { :controller => 'repositories', :action => 'show', :id => 'redmine', :repository_id => 'foo',
206
          :rev => '2457' }
207
      )
208
    assert_routing(
209
        { :method => 'get',
210
          :path => "/projects/redmine/repository/foo/revisions/2457/show/#{@path_hash[:path]}" },
211
        { :controller => 'repositories', :action => 'show', :id => 'redmine', :repository_id => 'foo',
212
          :path => @path_hash[:param] , :rev => '2457'}
213
      )
214
    assert_routing(
215
        { :method => 'get',
216
          :path => "/projects/redmine/repository/foo/revisions/2457/diff" },
217
        { :controller => 'repositories', :action => 'diff', :id => 'redmine', :repository_id => 'foo',
218
          :rev => '2457' }
219
      )
220
    assert_routing(
221
        { :method => 'get',
222
          :path => "/projects/redmine/repository/foo/revisions/2457/diff" },
223
        { :controller => 'repositories', :action => 'diff', :id => 'redmine', :repository_id => 'foo',
224
          :rev => '2457', :format => 'diff' },
225
        {},
226
        { :format => 'diff' }
227
      )
228
    assert_routing(
229
        { :method => 'get',
230
          :path => "/projects/redmine/repository/foo/revisions/2/diff/#{@path_hash[:path]}" },
231
        { :controller => 'repositories', :action => 'diff', :id => 'redmine', :repository_id => 'foo',
232
          :path => @path_hash[:param], :rev => '2' }
233
      )
234
    assert_routing(
235
        { :method => 'get',
236
          :path => "/projects/redmine/repository/foo/revisions/2/diff/#{@path_hash[:path]}" },
237
        { :controller => 'repositories', :action => 'diff', :id => 'redmine', :repository_id => 'foo',
238
          :path => @path_hash[:param], :rev => '2', :format => 'diff' },
239
        {},
240
        { :format => 'diff' }
241
      )
242
    assert_routing(
243
        { :method => 'get',
244
          :path => "/projects/redmine/repository/foo/revisions/2/entry/#{@path_hash[:path]}" },
245
        { :controller => 'repositories', :action => 'entry', :id => 'redmine', :repository_id => 'foo',
246
          :path => @path_hash[:param], :rev => '2' }
247
      )
248
    assert_routing(
249
        { :method => 'get',
250
          :path => "/projects/redmine/repository/foo/revisions/2/raw/#{@path_hash[:path]}" },
251
        { :controller => 'repositories', :action => 'raw', :id => 'redmine', :repository_id => 'foo',
252
          :path => @path_hash[:param], :rev => '2' }
253
      )
254
    assert_routing(
255
        { :method => 'get',
256
          :path => "/projects/redmine/repository/foo/revisions/2/annotate/#{@path_hash[:path]}" },
257
        { :controller => 'repositories', :action => 'annotate', :id => 'redmine', :repository_id => 'foo',
258
          :path => @path_hash[:param], :rev => '2' }
259
      )
260
  end
261

  
262
  def test_repositories_non_revisions_path
263
    assert_routing(
264
        { :method => 'get',
265
          :path => "/projects/redmine/repository/changes" },
266
        { :controller => 'repositories', :action => 'changes', :id => 'redmine' }
267
      )
268
    ['2457', 'master', 'slash/slash'].each do |rev|
269
      assert_routing(
270
           { :method => 'get',
271
             :path => "/projects/redmine/repository/changes" },
272
           { :controller => 'repositories', :action => 'changes', :id => 'redmine',
273
             :rev => rev },
274
           {},
275
           { :rev => rev }
276
         )
277
    end
278
    ['2457', 'master', 'slash/slash'].each do |rev|
279
      assert_routing(
280
           { :method => 'get',
281
             :path => "/projects/redmine/repository/changes/#{@path_hash[:path]}" },
282
           { :controller => 'repositories', :action => 'changes', :id => 'redmine',
283
             :path => @path_hash[:param], :rev => rev },
284
           {},
285
           { :rev => rev }
286
         )
287
    end
288
    assert_routing(
289
        { :method => 'get',
290
          :path => "/projects/redmine/repository/diff/#{@path_hash[:path]}" },
291
        { :controller => 'repositories', :action => 'diff', :id => 'redmine',
292
          :path => @path_hash[:param] }
293
      )
294
    assert_routing(
295
        { :method => 'get',
296
          :path => "/projects/redmine/repository/browse/#{@path_hash[:path]}" },
297
        { :controller => 'repositories', :action => 'browse', :id => 'redmine',
298
          :path => @path_hash[:param] }
299
      )
300
    assert_routing(
301
        { :method => 'get',
302
          :path => "/projects/redmine/repository/entry/#{@path_hash[:path]}" },
303
        { :controller => 'repositories', :action => 'entry', :id => 'redmine',
304
          :path => @path_hash[:param] }
305
      )
306
    assert_routing(
307
        { :method => 'get',
308
          :path => "/projects/redmine/repository/raw/#{@path_hash[:path]}" },
309
        { :controller => 'repositories', :action => 'raw', :id => 'redmine',
310
          :path => @path_hash[:param] }
311
      )
312
    assert_routing(
313
        { :method => 'get',
314
          :path => "/projects/redmine/repository/annotate/#{@path_hash[:path]}" },
315
        { :controller => 'repositories', :action => 'annotate', :id => 'redmine',
316
          :path => @path_hash[:param] }
317
      )
318
    assert_routing(
319
        { :method => 'get',
320
          :path => "/projects/redmine/repository/changes/#{@path_hash[:path]}" },
321
        { :controller => 'repositories', :action => 'changes', :id => 'redmine',
322
          :path => @path_hash[:param] }
323
      )
324
    assert_routing(
325
        { :method => 'get',
326
          :path => "/projects/redmine/repository/revision" },
327
        { :controller => 'repositories', :action => 'revision', :id => 'redmine' }
328
      )
329
  end
330

  
331
  def test_repositories_non_revisions_path_with_repository_id
332
    assert_routing(
333
        { :method => 'get',
334
          :path => "/projects/redmine/repository/foo/changes" },
335
        { :controller => 'repositories', :action => 'changes',
336
          :id => 'redmine', :repository_id => 'foo' }
337
      )
338
    ['2457', 'master', 'slash/slash'].each do |rev|
339
      assert_routing(
340
           { :method => 'get',
341
             :path => "/projects/redmine/repository/foo/changes" },
342
           { :controller => 'repositories', :action => 'changes',
343
             :id => 'redmine',
344
             :repository_id => 'foo', :rev => rev },
345
           {},
346
           { :rev => rev }
347
         )
348
    end
349
    ['2457', 'master', 'slash/slash'].each do |rev|
350
      assert_routing(
351
           { :method => 'get',
352
             :path => "/projects/redmine/repository/foo/changes/#{@path_hash[:path]}" },
353
           { :controller => 'repositories', :action => 'changes', :id => 'redmine',
354
             :repository_id => 'foo', :path => @path_hash[:param], :rev => rev },
355
           {},
356
           { :rev => rev }
357
         )
358
    end
359
    assert_routing(
360
        { :method => 'get',
361
          :path => "/projects/redmine/repository/foo/diff/#{@path_hash[:path]}" },
362
        { :controller => 'repositories', :action => 'diff', :id => 'redmine', :repository_id => 'foo',
363
          :path => @path_hash[:param] }
364
      )
365
    assert_routing(
366
        { :method => 'get',
367
          :path => "/projects/redmine/repository/foo/browse/#{@path_hash[:path]}" },
368
        { :controller => 'repositories', :action => 'browse', :id => 'redmine', :repository_id => 'foo',
369
          :path => @path_hash[:param] }
370
      )
371
    assert_routing(
372
        { :method => 'get',
373
          :path => "/projects/redmine/repository/foo/entry/#{@path_hash[:path]}" },
374
        { :controller => 'repositories', :action => 'entry', :id => 'redmine', :repository_id => 'foo',
375
          :path => @path_hash[:param] }
376
      )
377
    assert_routing(
378
        { :method => 'get',
379
          :path => "/projects/redmine/repository/foo/raw/#{@path_hash[:path]}" },
380
        { :controller => 'repositories', :action => 'raw', :id => 'redmine', :repository_id => 'foo',
381
          :path => @path_hash[:param] }
382
      )
383
    assert_routing(
384
        { :method => 'get',
385
          :path => "/projects/redmine/repository/foo/annotate/#{@path_hash[:path]}" },
386
        { :controller => 'repositories', :action => 'annotate', :id => 'redmine', :repository_id => 'foo',
387
          :path => @path_hash[:param] }
388
      )
389
    assert_routing(
390
        { :method => 'get',
391
          :path => "/projects/redmine/repository/foo/changes/#{@path_hash[:path]}" },
392
        { :controller => 'repositories', :action => 'changes', :id => 'redmine', :repository_id => 'foo',
393
          :path => @path_hash[:param] }
394
      )
395
    assert_routing(
396
        { :method => 'get',
397
          :path => "/projects/redmine/repository/foo/revision" },
398
        { :controller => 'repositories', :action => 'revision', :id => 'redmine', :repository_id => 'foo'}
399
      )
400
  end
401

  
402
  def test_repositories_related_issues
403
    assert_routing(
404
        { :method => 'post',
405
          :path => "/projects/redmine/repository/revisions/123/issues" },
406
        { :controller => 'repositories', :action => 'add_related_issue',
407
          :id => 'redmine', :rev => '123' }
408
      )
409
    assert_routing(
410
        { :method => 'delete',
411
          :path => "/projects/redmine/repository/revisions/123/issues/25" },
412
        { :controller => 'repositories', :action => 'remove_related_issue',
413
          :id => 'redmine', :rev => '123', :issue_id => '25' }
414
      )
415
  end
416

  
417
  def test_repositories_related_issues_with_repository_id
418
    assert_routing(
419
        { :method => 'post',
420
          :path => "/projects/redmine/repository/foo/revisions/123/issues" },
421
        { :controller => 'repositories', :action => 'add_related_issue',
422
          :id => 'redmine', :repository_id => 'foo', :rev => '123' }
423
      )
424
    assert_routing(
425
        { :method => 'delete',
426
          :path => "/projects/redmine/repository/foo/revisions/123/issues/25" },
427
        { :controller => 'repositories', :action => 'remove_related_issue',
428
          :id => 'redmine', :repository_id => 'foo', :rev => '123', :issue_id => '25' }
429
      )
430
  end
431
end
.svn/pristine/05/05cdc085e6ab746bd3734a56f879f137f280e27b.svn-base
1
require 'rexml/document'
2
require 'SVG/Graph/Graph'
3

  
4
module SVG
5
  module Graph
6
		# = Synopsis
7
		#
8
		# A superclass for bar-style graphs.  Do not attempt to instantiate
9
		# directly; use one of the subclasses instead.
10
		#
11
    # = Author
12
    #
13
    # Sean E. Russell <serATgermaneHYPHENsoftwareDOTcom>
14
		#
15
    # Copyright 2004 Sean E. Russell
16
		# This software is available under the Ruby license[LICENSE.txt]
17
    #
18
    class BarBase < SVG::Graph::Graph
19
			# Ensures that :fields are provided in the configuration.
20
      def initialize config
21
        raise "fields was not supplied or is empty" unless config[:fields] &&
22
        config[:fields].kind_of?(Array) &&
23
        config[:fields].length > 0
24
				super
25
			end
26

  
27
			# In addition to the defaults set in Graph::initialize, sets
28
			# [bar_gap] true
29
			# [stack] :overlap
30
			def set_defaults
31
        init_with( :bar_gap => true, :stack => :overlap )
32
      end
33

  
34
      #   Whether to have a gap between the bars or not, default
35
      #   is true, set to false if you don't want gaps.
36
      attr_accessor :bar_gap
37
      #   How to stack data sets.  :overlap overlaps bars with
38
      #   transparent colors, :top stacks bars on top of one another,
39
      #   :side stacks the bars side-by-side. Defaults to :overlap.
40
      attr_accessor :stack
41

  
42

  
43
			protected
44

  
45
      def max_value
46
        @data.collect{|x| x[:data].max}.max
47
      end
48

  
49
      def min_value
50
        min = 0
51
        if min_scale_value.nil? 
52
          min = @data.collect{|x| x[:data].min}.min
53
          min = min > 0 ? 0 : min
54
        else
55
          min = min_scale_value
56
        end
57
        return min
58
      end
59

  
60
      def get_css
61
        return <<EOL
62
/* default fill styles for multiple datasets (probably only use a single dataset on this graph though) */
63
.key1,.fill1{
64
	fill: #ff0000;
65
	fill-opacity: 0.5;
66
	stroke: none;
67
	stroke-width: 0.5px;	
68
}
69
.key2,.fill2{
70
	fill: #0000ff;
71
	fill-opacity: 0.5;
72
	stroke: none;
73
	stroke-width: 1px;	
74
}
75
.key3,.fill3{
76
	fill: #00ff00;
77
	fill-opacity: 0.5;
78
	stroke: none;
79
	stroke-width: 1px;	
80
}
81
.key4,.fill4{
82
	fill: #ffcc00;
83
	fill-opacity: 0.5;
84
	stroke: none;
85
	stroke-width: 1px;	
86
}
87
.key5,.fill5{
88
	fill: #00ccff;
89
	fill-opacity: 0.5;
90
	stroke: none;
91
	stroke-width: 1px;	
92
}
93
.key6,.fill6{
94
	fill: #ff00ff;
95
	fill-opacity: 0.5;
96
	stroke: none;
97
	stroke-width: 1px;	
98
}
99
.key7,.fill7{
100
	fill: #00ffff;
101
	fill-opacity: 0.5;
102
	stroke: none;
103
	stroke-width: 1px;	
104
}
105
.key8,.fill8{
106
	fill: #ffff00;
107
	fill-opacity: 0.5;
108
	stroke: none;
109
	stroke-width: 1px;	
110
}
111
.key9,.fill9{
112
	fill: #cc6666;
113
	fill-opacity: 0.5;
114
	stroke: none;
115
	stroke-width: 1px;	
116
}
117
.key10,.fill10{
118
	fill: #663399;
119
	fill-opacity: 0.5;
120
	stroke: none;
121
	stroke-width: 1px;	
122
}
123
.key11,.fill11{
124
	fill: #339900;
125
	fill-opacity: 0.5;
126
	stroke: none;
127
	stroke-width: 1px;	
128
}
129
.key12,.fill12{
130
	fill: #9966FF;
131
	fill-opacity: 0.5;
132
	stroke: none;
133
	stroke-width: 1px;	
134
}
135
EOL
136
      end
137
    end
138
  end
139
end

Also available in: Unified diff