backlog 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/README.txt +17 -1
- data/Rakefile +2 -1
- data/app/models/estimate.rb +5 -0
- data/app/models/party.rb +4 -0
- data/app/models/task.rb +1 -0
- data/app/models/user.rb +8 -8
- data/app/views/periods/_form.rhtml +9 -4
- data/app/views/periods/_title.rhtml +1 -1
- data/app/views/tasks/_form.rhtml +9 -9
- data/app/views/tasks/_task.rhtml +2 -1
- data/public/stylesheets/backlog.css +1 -1
- metadata +3 -4
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -2,4 +2,20 @@
|
|
2
2
|
|
3
3
|
Welcome to Backlog!
|
4
4
|
|
5
|
-
Backlog is a tool to help you collect and organize all your tasks,
|
5
|
+
Backlog is a tool to help you collect and organize all your tasks,
|
6
|
+
wether you are a single persion or a small or large group.
|
7
|
+
|
8
|
+
=== Installation
|
9
|
+
|
10
|
+
* Install ruby
|
11
|
+
* Install RubyGems
|
12
|
+
* Install PostgreSQL
|
13
|
+
* run <tt>sudo gem install backlog -y</tt>
|
14
|
+
* run <tt>sudo backlog setup</tt>
|
15
|
+
* run <tt>sudo backlog start</tt>
|
16
|
+
|
17
|
+
=== Updates
|
18
|
+
|
19
|
+
* run <tt>sudo backlog stop</tt>
|
20
|
+
* run <tt>sudo gem update -y</tt>
|
21
|
+
* run <tt>sudo backlog start</tt>
|
data/Rakefile
CHANGED
@@ -11,8 +11,9 @@ require 'tasks/rails'
|
|
11
11
|
|
12
12
|
require 'hoe'
|
13
13
|
|
14
|
-
Hoe.new("backlog", '0.2.
|
14
|
+
Hoe.new("backlog", '0.2.1') do |p|
|
15
15
|
p.rubyforge_name = "backlog"
|
16
|
+
p.summary = "Application to aid collecting, processing, organizing, reviewing and doing tasks."
|
16
17
|
p.description = p.paragraphs_of('README.txt', 0..-1).join("\n\n")
|
17
18
|
p.remote_rdoc_dir = '' # Release to root
|
18
19
|
p.changes = p.paragraphs_of('History.txt', 0..-1).join("\n\n")
|
data/app/models/estimate.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# Holds a value given by a user at a certain time estimating how many work-points (gummybears?)
|
2
|
+
# still remain until this task is completed.
|
3
|
+
#
|
4
|
+
# A value of zero indicated that the task is completed.
|
1
5
|
class Estimate < ActiveRecord::Base
|
2
6
|
belongs_to :task
|
3
7
|
belongs_to :user
|
4
8
|
|
9
|
+
validates_presence_of :task_id
|
5
10
|
validates_associated :task
|
6
11
|
|
7
12
|
def after_create
|
data/app/models/party.rb
CHANGED
data/app/models/task.rb
CHANGED
@@ -18,6 +18,7 @@ class Task < ActiveRecord::Base
|
|
18
18
|
validates_presence_of :backlog_id, :if => Proc.new { |task| task.parent_id.nil? }
|
19
19
|
validates_presence_of :parent_id, :if => Proc.new { |task| task.backlog_id.nil? }
|
20
20
|
validates_uniqueness_of :description, :scope => :period_id
|
21
|
+
validates_uniqueness_of :position, :scope => :period_id, :allow_nil => true
|
21
22
|
|
22
23
|
def validate
|
23
24
|
unless (self.period_id || self.parent_id) && !(self.period_id && self.parent_id)
|
data/app/models/user.rb
CHANGED
@@ -14,17 +14,13 @@ class User < Party
|
|
14
14
|
after_save '@password_needs_confirmation = false'
|
15
15
|
after_validation :crypt_password
|
16
16
|
|
17
|
-
validates_presence_of :login
|
18
|
-
validates_length_of :login, :within => 3..40
|
19
|
-
|
20
|
-
# TODO (uwe): This is commented out since it is broken by ClassTableInheritanceInRails
|
21
|
-
#validates_uniqueness_of :login, :on => :create
|
17
|
+
validates_presence_of :login
|
18
|
+
validates_length_of :login, :within => 3..40
|
19
|
+
validates_uniqueness_of :login
|
22
20
|
|
23
21
|
validates_presence_of :email
|
24
22
|
validates_length_of :email, :allow_nil => false, :maximum => 60, :if => :email
|
25
|
-
|
26
|
-
# TODO (uwe): This is commented out since it is broken by ClassTableInheritanceInRails
|
27
|
-
#validates_uniqueness_of :email, :on => :create
|
23
|
+
validates_uniqueness_of :email
|
28
24
|
|
29
25
|
# This is commented out since I want to allow empty passwords
|
30
26
|
# validates_presence_of :password, :if => :validate_password?
|
@@ -46,6 +42,10 @@ class User < Party
|
|
46
42
|
@password_needs_confirmation = false
|
47
43
|
end
|
48
44
|
|
45
|
+
def controller
|
46
|
+
self.class.name.downcase
|
47
|
+
end
|
48
|
+
|
49
49
|
def self.authenticate(login, pass)
|
50
50
|
u = find(:first, :conditions => ["login = ? AND verified = TRUE AND deleted = FALSE", login])
|
51
51
|
return nil if u.nil?
|
@@ -1,13 +1,18 @@
|
|
1
1
|
<%= error_messages_for 'period' %>
|
2
2
|
|
3
3
|
<!--[form:period]-->
|
4
|
+
<p>
|
4
5
|
<% if @period.new_record? %>
|
5
|
-
<
|
6
|
-
<%= select 'period', 'party_id', [['', '']] + @parties.map{|party| [party.name, party.id]}, {}, :onchange => "form.action = '#{url_for :action => :new}'; form.submit();"
|
6
|
+
<label for="period_party_id"><%=l :group%>/<%=l :user%></label><br/>
|
7
|
+
<%= select 'period', 'party_id', (@period.party ? [] : [['', '']]) + @parties.map{|party| [party.name, party.id]}, {}, :onchange => "form.action = '#{url_for :action => :new}'; form.submit();" %>
|
7
8
|
<% else %>
|
8
|
-
<
|
9
|
-
<%= hidden_field 'period', 'party_id' %><%=detour_to h(@period.party.name), :controller => @period.party.type.name.downcase.pluralize, :action => :edit, :id => @period.party
|
9
|
+
<label for="period_party_id"><%=l @period.party.class.name.downcase.to_s%></label>:
|
10
|
+
<%= hidden_field 'period', 'party_id' %><%=detour_to h(@period.party.name), :controller => @period.party.type.name.downcase.pluralize, :action => :edit, :id => @period.party%>
|
10
11
|
<% end %>
|
12
|
+
<% if @period.party %>
|
13
|
+
<%=image_detour_to(@period.party.to_sym.to_s + '.png', "#{l(@period.party.to_sym)} #{@period.party.name}", nil, :controller => @period.party.to_s, :action => :edit, :id => @period.party) %>
|
14
|
+
<% end %>
|
15
|
+
</p>
|
11
16
|
|
12
17
|
<%= hidden_field 'period', 'position' %>
|
13
18
|
<% if @period.party %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<%=if @period.lower_item then link_to(image_tag(url_for("arrow_right.png"), :alt => "#{l :next} #{l :period}", :title => "#{l :next} #{l :period}", :class => 'image-submit'), :controller => 'periods', :action => :show, :id => @period.lower_item) end%>
|
4
4
|
<%=link_to(image_tag(url_for("period.png"), :alt => l(:period), :title => l(:period), :class => 'image-submit'), :controller => 'periods', :action => :edit, :id => @period) %>
|
5
5
|
|
6
|
-
<%=detour_to(image_tag(url_for(@period.party.to_sym.to_s + ".png"), :alt => l(@period.party.to_sym), :title => l(@period.party.to_sym), :class => 'image-submit'), :controller => @period.party.
|
6
|
+
<%=detour_to(image_tag(url_for(@period.party.to_sym.to_s + ".png"), :alt => l(@period.party.to_sym), :title => l(@period.party.to_sym), :class => 'image-submit'), :controller => @period.party.controller, :action => :edit, :id => @period.party) %>
|
7
7
|
|
8
8
|
<%=if @period.higher_item then link_to(image_tag(url_for("arrow_left.png"), :alt => "#{l :previous} #{l :period}", :title => "#{l :previous} #{l :period}", :class => 'image-submit'), :controller => 'periods', :action => :show, :id => @period.higher_item) end%>
|
9
9
|
<%=unless @period.passed? then link_to(image_tag(url_for("add.png"), :alt => l(:add_task), :title => l(:add_task), :class => 'image-submit'), :controller => 'tasks', :action => 'new', :task => {:period_id => (@period ? @period.id : (@backlog && @backlog.periods.first ? @backlog.periods.first.id : nil))} ) end %>
|
data/app/views/tasks/_form.rhtml
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
<%= error_messages_for 'task' %>
|
2
2
|
|
3
3
|
<!--[form:task]-->
|
4
|
+
<p>
|
4
5
|
<% if @task.backlog.nil? || @task.new_record? %>
|
5
|
-
|
6
|
-
|
7
|
-
<%= select 'task', 'backlog_id', [['', '']] + @backlogs.map{|backlog| [backlog.name, backlog.id]}, {}, :onchange => "form.action = '#{url_for}'; form.submit();" %></p>
|
8
|
-
|
6
|
+
<label for="task_backlog_id"><%=l :backlog%></label><br/>
|
7
|
+
<%= select 'task', 'backlog_id', [['', '']] + @backlogs.map{|backlog| [backlog.name, backlog.id]}, {}, :onchange => "form.action = '#{url_for}'; form.submit();" %>
|
9
8
|
<% else %>
|
10
|
-
|
11
|
-
|
12
|
-
<%= hidden_field 'task', 'backlog_id' %><%=h @task.backlog.name%></p>
|
13
|
-
|
9
|
+
<label for="task_backlog_id"><%=l :backlog%></label>:
|
10
|
+
<%= hidden_field 'task', 'backlog_id' %><%=h @task.backlog.name%>
|
14
11
|
<% end %>
|
15
|
-
|
12
|
+
<% if @task.backlog %>
|
13
|
+
<%=image_detour_to('clipboard.png', "#{l(:backlog)} #{@task.backlog.name}", {:class => 'image-submit', :style => 'vertical-align: bottom'}, :controller => 'backlogs', :action => :edit, :id => @task.backlog) %>
|
14
|
+
<% end %>
|
15
|
+
</p>
|
16
16
|
|
17
17
|
|
18
18
|
<p><label for="task_period_id"><%=l :period%></label><br/>
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @task = task %>
|
2
|
-
<tr valign="top" <%= '
|
2
|
+
<tr valign="top" <%= 'class="highlight"' if highlight %>>
|
3
3
|
<td width="1">
|
4
4
|
<% if @task.enable_subtasks? && @task.period.active_or_future? && active %>
|
5
5
|
<% form_tag({:controller => 'tasks', :action => :specify, :id => @task}) do %>
|
@@ -8,6 +8,7 @@
|
|
8
8
|
<% end %>
|
9
9
|
</td>
|
10
10
|
<td align="left" valign="top" width="1" nowrap="true">
|
11
|
+
<%= @task.position if @task.depth == 0 %>
|
11
12
|
<%= (" " * @task.depth * 4) if @task.depth > 0 %>
|
12
13
|
<%= l(@task.resolution.downcase) if @task.finished_at %>
|
13
14
|
<%= "-" if @task.children.size > 0 %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
.task_description { width: 300px; }
|
2
2
|
.task_hours { width: 32px; }
|
3
3
|
.task_time { width: 40px; border: 1 }
|
4
|
-
.image-submit {height: 22px; border: 0; margin:
|
4
|
+
.image-submit {height: 22px; border: 0; margin-bottom: 1px; padding: 0; vertical-align: bottom; float: none;}
|
5
5
|
table.input {border-collapse: collapse}
|
6
6
|
table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
|
7
7
|
#spotlight img.image-submit {float: none;}
|
metadata
CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: backlog
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
6
|
+
version: 0.2.1
|
7
7
|
date: 2007-07-31 00:00:00 +02:00
|
8
|
-
summary:
|
8
|
+
summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: ryand-ruby@zenspider.com
|
12
12
|
homepage: http://www.zenspider.com/ZSS/Products/backlog/
|
13
13
|
rubyforge_project: backlog
|
14
|
-
description: == Backlog Welcome to Backlog! Backlog is a tool to help you collect and organize all your tasks, wether you are a
|
14
|
+
description: == Backlog Welcome to Backlog! Backlog is a tool to help you collect and organize all your tasks, wether you are a single persion or a small or large group. === Installation * Install ruby * Install RubyGems * Install PostgreSQL * run <tt>sudo gem install backlog -y</tt> * run <tt>sudo backlog setup</tt> * run <tt>sudo backlog start</tt> === Updates * run <tt>sudo backlog stop</tt> * run <tt>sudo gem update -y</tt> * run <tt>sudo backlog start</tt>
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
@@ -226,7 +226,6 @@ files:
|
|
226
226
|
- config/environments/datek_production.rb
|
227
227
|
- LICENSE_LOCALIZATION
|
228
228
|
- README.txt
|
229
|
-
- doc
|
230
229
|
- Manifest.txt
|
231
230
|
- vendor
|
232
231
|
- vendor/plugins
|