taskwarrior-web 1.0.0 → 1.0.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/.travis.yml CHANGED
@@ -3,3 +3,7 @@ rvm:
3
3
  - 1.9.2
4
4
  - 1.9.3
5
5
  script: "rake spec"
6
+ before_install:
7
+ - sudo apt-get install task
8
+ - cp -v /home/vagrant/builds/theunraveler/taskwarrior-web/spec/files/taskrc /home/vagrant/.taskrc
9
+ - mkdir /home/vagrant/.task
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v1.0.1 (4/3/12)
2
+
3
+ * Added fadeOut animation to task completion.
4
+
1
5
  ## v1.0.0 (3/19/12)
2
6
 
3
7
  * Refactored for taskwarrior 2.0 compatibility.
data/Gemfile CHANGED
@@ -3,5 +3,10 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in taskwarrior-web.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rb-fsevent', :require => false
7
- gem 'growl', :require => false
6
+ group :local do
7
+ gem 'rb-fsevent', :require => false
8
+ gem 'growl', :require => false
9
+ gem 'simplecov'
10
+ gem 'guard-rspec'
11
+ gem 'guard-bundler'
12
+ end
data/README.md CHANGED
@@ -33,6 +33,8 @@ The current featureset includes:
33
33
  "due".
34
34
  * If you are on a Mac and use Fluid.app, you get a dock badge showing the
35
35
  number of pending tasks.
36
+ * Optional Basic HTTP Auth protection. To enable, set `task-web.user` and
37
+ `task-web.passwd` in your `.taskrc` file.
36
38
 
37
39
  ## Known Issues
38
40
 
data/config.ru CHANGED
@@ -1,5 +1,3 @@
1
- # To use with thin
2
- # thin start -p PORT -R config.ru
3
1
  require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web')
4
2
 
5
3
  disable :run
@@ -110,7 +110,7 @@ module TaskwarriorWeb
110
110
  get '/ajax/tags/?' do
111
111
  tags = []
112
112
  TaskwarriorWeb::Task.query('status.not' => 'deleted').each do |task|
113
- tags = tags + task.tags
113
+ tags.concat(task.tags)
114
114
  end
115
115
  tags.compact!.uniq!.to_json
116
116
  end
@@ -12,7 +12,6 @@ module TaskwarriorWeb
12
12
  def initialize(command, id = nil, *args)
13
13
  @command = command if command
14
14
  @id = id if id
15
- puts "@id in command.rb: #{@id}"
16
15
  @params = args.last.is_a?(::Hash) ? args.pop : {}
17
16
  end
18
17
 
@@ -31,7 +31,7 @@ module TaskwarriorWeb::CommandBuilder
31
31
  @command_string.gsub!(':id', "uuid:#{@id.to_s}")
32
32
  return self
33
33
  else
34
- raise MissingTaskIDError
34
+ raise TaskwarriorWeb::CommandBuilder::MissingTaskIDError
35
35
  end
36
36
  end
37
37
 
@@ -22,14 +22,13 @@ module TaskwarriorWeb::CommandBuilder::V1
22
22
  @command_string.gsub!(':id', @id.to_s)
23
23
  return self
24
24
  else
25
- raise MissingTaskIDError
25
+ raise TaskwarriorWeb::CommandBuilder::MissingTaskIDError
26
26
  end
27
27
  end
28
28
 
29
29
  def assign_id_from_uuid
30
30
  @all_tasks ||= TaskwarriorWeb::Task.query('status.not' => [:deleted, :completed])
31
31
  @id = @all_tasks.index { |task| task.uuid == @id } + 1
32
- puts "@id in v1.rb:19: #{@id}"
33
32
  end
34
33
 
35
34
  end
@@ -79,19 +79,21 @@ var initAutocomplete = function() {
79
79
  var initTaskCompletion = function() {
80
80
  $('input.complete').click(function() {
81
81
  // Cache the checkbox in case we need to restore it.
82
+ var container $(this).parent();
83
+ var checkbox = container.html();
82
84
  var row = $(this).closest('tr');
83
- $(this).parent().html('<img src="/images/ajax-loader.gif" />');
85
+ container.html('<img src="/images/ajax-loader.gif" />');
84
86
  $.ajax({
85
87
  url: '/ajax/task-complete/' + $(this).data('task-id'),
86
88
  type: 'POST',
87
89
  success: function(data) {
88
90
  var message = (data === '') ? 'Task marked as completed.' : data;
89
91
  set_message(message, 'success');
90
- row.remove();
92
+ row.fadeOut();
91
93
  },
92
94
  error: function(data) {
93
95
  set_message('There was an error when marking the task as completed.', 'error');
94
- // TODO: Re-insert the checkbox.
96
+ container.html(checkbox);
95
97
  }
96
98
  });
97
99
  });
@@ -8,7 +8,7 @@ module TaskwarriorWeb
8
8
  def run
9
9
  @built ||= build
10
10
  to_run = "#{TASK_BIN} #{@built}"
11
- puts "Final command: #{to_run}"
11
+ puts "Command: #{to_run}"
12
12
  `#{to_run}`
13
13
  end
14
14
 
data/spec/app/app_spec.rb CHANGED
@@ -15,13 +15,33 @@ describe "My App" do
15
15
  TaskwarriorWeb::Runner.should_receive(:run).any_number_of_times.and_return('{}')
16
16
  end
17
17
 
18
- describe 'GET /' do
19
- it 'should redirect to /tasks/pending' do
20
- get "/"
18
+ ['/', '/tasks'].each do |path|
19
+ describe "GET #{path}" do
20
+ it 'should redirect to /tasks/pending' do
21
+ get path
22
+ follow_redirect!
23
+
24
+ last_request.url.should =~ /tasks\/pending/
25
+ last_response.should be_ok
26
+ end
27
+ end
28
+ end
29
+
30
+ describe 'GET /projects' do
31
+ it 'should redirect to /projects/overview' do
32
+ get '/projects'
21
33
  follow_redirect!
22
34
 
23
- last_request.url.should =~ /tasks\/pending/
35
+ last_request.url.should =~ /projects\/overview/
24
36
  last_response.should be_ok
25
37
  end
26
38
  end
39
+
40
+ describe 'GET /ajax/count' do
41
+ it 'should return the current pending task count' do
42
+ TaskwarriorWeb::Task.should_receive(:count).and_return(15)
43
+ get '/ajax/count'
44
+ last_response.body.should eq('15')
45
+ end
46
+ end
27
47
  end
@@ -30,7 +30,36 @@ describe TaskwarriorWeb::App::Helpers do
30
30
  helpers.format_date('2012-01-11').should == '11/01/2012'
31
31
  end
32
32
  end
33
+ end
34
+
35
+ describe '#colorize_date' do
36
+ context 'when no timestamp is given' do
37
+ it 'should simply return' do
38
+ TaskwarriorWeb::Config.should_not_receive(:due)
39
+ helpers.colorize_date(nil)
40
+ end
41
+ end
42
+
43
+ context 'with a due setting specified' do
44
+ before do
45
+ TaskwarriorWeb::Config.should_receive(:due).any_number_of_times.and_return(3)
46
+ end
33
47
 
48
+ it 'should return "today" when a given date is today' do
49
+ helpers.colorize_date(Time.now.to_s).should eq('today')
50
+ end
51
+
52
+ it 'should return "overdue" when a date is before today' do
53
+ helpers.colorize_date(Time.at(0).to_s).should eq('overdue')
54
+ end
55
+ end
56
+ end
57
+
58
+ describe '#auto_link' do
59
+ it 'should just call Rinku.auto_link' do
60
+ Rinku.should_receive(:auto_link).with('hello', :all, 'target="_blank"')
61
+ helpers.auto_link('hello')
62
+ end
34
63
  end
35
64
  end
36
65
 
data/spec/files/taskrc ADDED
@@ -0,0 +1,27 @@
1
+ # [Created by task 2.0.0 3/22/2012 16:07:48]
2
+ # Taskwarrior program configuration file.
3
+ # For more documentation, see http://taskwarrior.org or try 'man task', 'man task-faq',
4
+ # 'man task-tutorial', 'man task-color', 'man task-sync' or 'man taskrc'
5
+
6
+ # Here is an example of entries that use the default, override and blank values
7
+ # variable=foo -- By specifying a value, this overrides the default
8
+ # variable= -- By specifying no value, this means no default
9
+ # #variable=foo -- By commenting out the line, or deleting it, this uses the default
10
+
11
+ # Use the command 'task show' to see all defaults and overrides
12
+
13
+ # Files
14
+ data.location=/home/vagrant/.task
15
+
16
+ # Color theme (uncomment one to use)
17
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/light-16.theme
18
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/light-256.theme
19
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-16.theme
20
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-256.theme
21
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-red-256.theme
22
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-green-256.theme
23
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-blue-256.theme
24
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-violets-256.theme
25
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-yellow-green.theme
26
+ #include /usr/local/Cellar/task/2.0.0/share/doc/task/rc/dark-gray-256.theme
27
+
@@ -1,6 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
2
  require 'taskwarrior-web/command'
3
- require 'ostruct'
4
3
 
5
4
  describe TaskwarriorWeb::CommandBuilder::Base do
6
5
  describe '#substitute_parts' do
@@ -8,12 +7,6 @@ describe TaskwarriorWeb::CommandBuilder::Base do
8
7
  @command = TaskwarriorWeb::Command.new(:complete, 34588)
9
8
  end
10
9
 
11
- it 'should replace the :id string with the given task ID' do
12
- TaskwarriorWeb::Task.should_receive(:query).and_return([OpenStruct.new(:uuid => 34588)])
13
- @command.task_command.substitute_parts
14
- @command.command_string.should eq('1 done')
15
- end
16
-
17
10
  it 'should throw an error if the command has no task ID' do
18
11
  @command.id = nil
19
12
  expect { @command.substitute_parts }.to raise_error(TaskwarriorWeb::CommandBuilder::MissingTaskIDError)
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ require 'taskwarrior-web/command_builders/v1'
3
+ require 'taskwarrior-web/command'
4
+ require 'ostruct'
5
+
6
+ describe TaskwarriorWeb::CommandBuilder::V1 do
7
+ describe '#substitute_parts' do
8
+ before do
9
+ TaskwarriorWeb::Command.class_eval do |class_name|
10
+ include TaskwarriorWeb::CommandBuilder::V1
11
+ end
12
+ @command = TaskwarriorWeb::Command.new(:complete, 34588)
13
+ end
14
+
15
+ it 'should replace the :id string with the given task ID' do
16
+ TaskwarriorWeb::Task.should_receive(:query).and_return([OpenStruct.new(:uuid => 34588)])
17
+ @command.task_command.substitute_parts
18
+ @command.command_string.should eq('1 done')
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'taskwarrior-web/config'
3
+ require 'ostruct'
4
+
5
+ describe TaskwarriorWeb::Config do
6
+ describe '.property' do
7
+ it 'should call #get_value on the config file object' do
8
+ file = OpenStruct.new
9
+ TaskwarriorWeb::Config.should_receive(:file).and_return(file)
10
+ file.should_receive(:get_value).with('testing')
11
+ TaskwarriorWeb::Config.property('testing')
12
+ end
13
+ end
14
+ end
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "taskwarrior-web"
6
- s.version = '1.0.0'
6
+ s.version = '1.0.1'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Jake Bell"]
9
9
  s.email = ["jake@theunraveler.com"]
@@ -23,9 +23,6 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency('rake')
24
24
  s.add_development_dependency('rack-test')
25
25
  s.add_development_dependency('rspec')
26
- s.add_development_dependency('simplecov')
27
- s.add_development_dependency('guard-rspec')
28
- s.add_development_dependency('guard-bundler')
29
26
 
30
27
  s.files = `git ls-files`.split("\n")
31
28
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taskwarrior-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-19 00:00:00.000000000 Z
12
+ date: 2012-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70160263316020 !ruby/object:Gem::Requirement
16
+ requirement: &70130852817600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70160263316020
24
+ version_requirements: *70130852817600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: parseconfig
27
- requirement: &70160263313300 !ruby/object:Gem::Requirement
27
+ requirement: &70130852816500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70160263313300
35
+ version_requirements: *70130852816500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: vegas
38
- requirement: &70160263347360 !ruby/object:Gem::Requirement
38
+ requirement: &70130852815980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70160263347360
46
+ version_requirements: *70130852815980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rinku
49
- requirement: &70160263345300 !ruby/object:Gem::Requirement
49
+ requirement: &70130852815260 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70160263345300
57
+ version_requirements: *70130852815260
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70160263342060 !ruby/object:Gem::Requirement
60
+ requirement: &70130852814200 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70160263342060
68
+ version_requirements: *70130852814200
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack-test
71
- requirement: &70160263340640 !ruby/object:Gem::Requirement
71
+ requirement: &70130852812760 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70160263340640
79
+ version_requirements: *70130852812760
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70160263363240 !ruby/object:Gem::Requirement
82
+ requirement: &70130852811760 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,40 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70160263363240
91
- - !ruby/object:Gem::Dependency
92
- name: simplecov
93
- requirement: &70160263362440 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *70160263362440
102
- - !ruby/object:Gem::Dependency
103
- name: guard-rspec
104
- requirement: &70160263361760 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: *70160263361760
113
- - !ruby/object:Gem::Dependency
114
- name: guard-bundler
115
- requirement: &70160263359760 !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- type: :development
122
- prerelease: false
123
- version_requirements: *70160263359760
90
+ version_requirements: *70130852811760
124
91
  description: This gem provides a graphical frontend for the Taskwarrior task manager.
125
92
  It is based on Sinatra.
126
93
  email:
@@ -188,11 +155,13 @@ files:
188
155
  - lib/taskwarrior-web/views/task_form.erb
189
156
  - spec/app/app_spec.rb
190
157
  - spec/app/helpers_spec.rb
158
+ - spec/files/taskrc
191
159
  - spec/models/command_builder_spec.rb
192
160
  - spec/models/command_builders/base_spec.rb
193
161
  - spec/models/command_builders/v1_spec.rb
194
162
  - spec/models/command_builders/v2_spec.rb
195
163
  - spec/models/command_spec.rb
164
+ - spec/models/config_spec.rb
196
165
  - spec/models/runner_spec.rb
197
166
  - spec/models/task_spec.rb
198
167
  - spec/spec_helper.rb
@@ -217,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
186
  version: '0'
218
187
  segments:
219
188
  - 0
220
- hash: -1098967059428710404
189
+ hash: -1240316319720686914
221
190
  requirements: []
222
191
  rubyforge_project: taskwarrior-web
223
192
  rubygems_version: 1.8.11
@@ -227,11 +196,13 @@ summary: Web frontend for taskwarrior command line task manager.
227
196
  test_files:
228
197
  - spec/app/app_spec.rb
229
198
  - spec/app/helpers_spec.rb
199
+ - spec/files/taskrc
230
200
  - spec/models/command_builder_spec.rb
231
201
  - spec/models/command_builders/base_spec.rb
232
202
  - spec/models/command_builders/v1_spec.rb
233
203
  - spec/models/command_builders/v2_spec.rb
234
204
  - spec/models/command_spec.rb
205
+ - spec/models/config_spec.rb
235
206
  - spec/models/runner_spec.rb
236
207
  - spec/models/task_spec.rb
237
208
  - spec/spec_helper.rb