backlog 0.2.0 → 0.2.1
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/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
|