taskwarrior-web 1.0.13 → 1.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## v1.0.14 (11/22/12)
2
+
3
+ * Fixed a bug when colorizing tasks based on "due" setting.
4
+ * Fixed bugs that may result from differences between Taskwarrior's date format
5
+ strings and those of Ruby.
6
+
1
7
  ## v1.0.13 (11/22/12)
2
8
 
3
9
  * Added support for `task-web.filter.badge` option to control the Fluid badge
@@ -1,20 +1,21 @@
1
+ require 'active_support/core_ext/date/calculations'
2
+
1
3
  module TaskwarriorWeb::App::Helpers
2
4
 
3
5
  def format_date(timestamp)
4
- format = TaskwarriorWeb::Config.dateformat || 'm/d/Y'
5
- subbed = format.gsub(/([a-zA-Z])/, '%\1')
6
- Time.parse(timestamp).strftime(subbed)
6
+ format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y'
7
+ Time.parse(timestamp).strftime(format)
7
8
  end
8
9
 
9
10
  def colorize_date(timestamp)
10
11
  return if timestamp.nil?
11
- due_def = TaskwarriorWeb::Config.due.to_i || 5
12
- time = Time.parse(timestamp)
12
+ due_def = (TaskwarriorWeb::Config.due || 7).to_i
13
+ date = Date.parse(timestamp)
13
14
  case true
14
- when Time.now.strftime('%D') == time.strftime('%D') then 'success'
15
- when Time.now.to_i > time.to_i then 'error'
16
- when (time.to_i - Time.now.to_i) < (due_def * 86400) then 'info'
17
- else 'regular'
15
+ when Date.today == date then 'warning' # today
16
+ when Date.today > date then 'error' # overdue
17
+ when Date.today.advance(:days => due_def) >= date then 'success' # within the "due" range
18
+ else 'regular' # just a regular task
18
19
  end
19
20
  end
20
21
 
@@ -2,6 +2,25 @@ require 'parseconfig'
2
2
  require 'versionomy'
3
3
 
4
4
  module TaskwarriorWeb::Config
5
+ # A list of date formats, with Taskwarrior's on the left and the Ruby
6
+ # equivalent on the right.
7
+ DATEFORMATS = {
8
+ 'm' => '%-m', # minimal-digit month, for example 1 or 12
9
+ 'd' => '%-d', # minimal-digit day, for example 1 or 30
10
+ 'y' => '%y', # two-digit year, for example 09
11
+ 'D' => '%d', # two-digit day, for example 01 or 30
12
+ 'M' => '%m', # two-digit month, for example 01 or 12
13
+ 'Y' => '%Y', # four-digit year, for example 2009
14
+ 'a' => '%a', # short name of weekday, for example Mon or Wed
15
+ 'A' => '%A', # long name of weekday, for example Monday or Wednesday
16
+ 'b' => '%b', # short name of month, for example Jan or Aug
17
+ 'B' => '%B', # long name of month, for example January or August
18
+ 'V' => '%U', # weeknumber, for example 03 or 37
19
+ 'H' => '%H', # two-digit hour, for example 03 or 11
20
+ 'N' => '%M', # two-digit minutes, for example 05 or 42
21
+ 'S' => '%S', # two-digit seconds, for example 07 or 47
22
+ }
23
+
5
24
  def self.version
6
25
  @version ||= Versionomy.parse(`task _version`.strip)
7
26
  end
@@ -14,7 +33,11 @@ module TaskwarriorWeb::Config
14
33
  self.file[prop]
15
34
  end
16
35
 
36
+ def self.dateformat
37
+ self.file['dateformat'].gsub(/(\w)/, DATEFORMATS) unless self.file['dateformat'].nil?
38
+ end
39
+
17
40
  def self.method_missing(method)
18
- self.file[method]
41
+ self.file[method.to_s]
19
42
  end
20
43
  end
@@ -16,19 +16,22 @@ describe TaskwarriorWeb::App::Helpers do
16
16
  end
17
17
 
18
18
  it 'should format various dates and times to the default format' do
19
- helpers.format_date('2012-01-11 12:23:00').should == '01/11/2012'
20
- helpers.format_date('2012-01-11').should == '01/11/2012'
19
+ helpers.format_date('2012-01-11 12:23:00').should == '1/11/2012'
20
+ helpers.format_date('2012-01-11').should == '1/11/2012'
21
21
  end
22
22
  end
23
23
 
24
24
  context 'with a specified date format' do
25
- before do
26
- TaskwarriorWeb::Config.should_receive(:dateformat).any_number_of_times.and_return('d/m/Y')
25
+ it 'should format dates using the specified format' do
26
+ TaskwarriorWeb::Config.should_receive(:dateformat).any_number_of_times.and_return('%d/%-m/%Y')
27
+ helpers.format_date('2012-12-11 12:23:00').should == '11/12/2012'
28
+ helpers.format_date('2012-12-11').should == '11/12/2012'
27
29
  end
28
30
 
29
- it 'should format dates using the specified format' do
30
- helpers.format_date('2012-01-11 12:23:00').should == '11/01/2012'
31
- helpers.format_date('2012-01-11').should == '11/01/2012'
31
+ it 'should convert Taskwarrior formats to Ruby formats correctly' do
32
+ TaskwarriorWeb::Config.should_receive(:file).any_number_of_times.and_return({'dateformat' => 'd/m/Y'})
33
+ helpers.format_date('2012-01-11 12:23:00').should == '11/1/2012'
34
+ helpers.format_date('2012-12-02 12:23:00').should == '2/12/2012'
32
35
  end
33
36
  end
34
37
  end
@@ -46,19 +49,28 @@ describe TaskwarriorWeb::App::Helpers do
46
49
  TaskwarriorWeb::Config.should_receive(:due).any_number_of_times.and_return(3)
47
50
  end
48
51
 
49
- it 'should return "today" when a given date is today' do
50
- helpers.colorize_date(Time.now.to_s).should eq('success')
52
+ it 'should return "warning" when a given date is today' do
53
+ helpers.colorize_date(Time.now.to_s).should eq('warning')
51
54
  end
52
55
 
53
- it 'should return "overdue" when a date is before today' do
56
+ it 'should return "error" when a date is before today' do
54
57
  helpers.colorize_date(Time.at(0).to_s).should eq('error')
55
58
  end
56
59
 
57
- it 'should return "info" when a date is within the specified range' do
60
+ it 'should return "success" when a date is within the specified range' do
58
61
  TaskwarriorWeb::Config.should_receive(:due).any_number_of_times.and_return(5)
59
- helpers.colorize_date(Date.tomorrow.to_s).should eq('info')
62
+ helpers.colorize_date(Date.tomorrow.to_s).should eq('success')
63
+ end
64
+ end
65
+
66
+ context 'with no due setting specified' do
67
+ before do
68
+ TaskwarriorWeb::Config.should_receive(:due).any_number_of_times.and_return(nil)
60
69
  end
61
70
 
71
+ it 'should use the default setting of 7 days' do
72
+ helpers.colorize_date(Date.tomorrow.to_s).should eq('success')
73
+ end
62
74
  end
63
75
  end
64
76
 
@@ -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.13'
6
+ s.version = '1.0.14'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Jake Bell"]
9
9
  s.email = ["jake@theunraveler.com"]
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.13
4
+ version: 1.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70281201384300 !ruby/object:Gem::Requirement
16
+ requirement: &70303595592080 !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: *70281201384300
24
+ version_requirements: *70303595592080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thin
27
- requirement: &70281201383540 !ruby/object:Gem::Requirement
27
+ requirement: &70303595590940 !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: *70281201383540
35
+ version_requirements: *70303595590940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: parseconfig
38
- requirement: &70281201381840 !ruby/object:Gem::Requirement
38
+ requirement: &70303595590320 !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: *70281201381840
46
+ version_requirements: *70303595590320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: vegas
49
- requirement: &70281200991580 !ruby/object:Gem::Requirement
49
+ requirement: &70303595589220 !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: *70281200991580
57
+ version_requirements: *70303595589220
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rinku
60
- requirement: &70281200989300 !ruby/object:Gem::Requirement
60
+ requirement: &70303595588600 !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: :runtime
67
67
  prerelease: false
68
- version_requirements: *70281200989300
68
+ version_requirements: *70303595588600
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: versionomy
71
- requirement: &70281200987560 !ruby/object:Gem::Requirement
71
+ requirement: &70303595587840 !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: :runtime
78
78
  prerelease: false
79
- version_requirements: *70281200987560
79
+ version_requirements: *70303595587840
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &70281200986500 !ruby/object:Gem::Requirement
82
+ requirement: &70303595587380 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70281200986500
90
+ version_requirements: *70303595587380
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sinatra-simple-navigation
93
- requirement: &70281200985920 !ruby/object:Gem::Requirement
93
+ requirement: &70303595586840 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70281200985920
101
+ version_requirements: *70303595586840
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rake
104
- requirement: &70281200984440 !ruby/object:Gem::Requirement
104
+ requirement: &70303595580440 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70281200984440
112
+ version_requirements: *70303595580440
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rack-test
115
- requirement: &70281201360300 !ruby/object:Gem::Requirement
115
+ requirement: &70303595579780 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70281201360300
123
+ version_requirements: *70303595579780
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rspec
126
- requirement: &70281201359320 !ruby/object:Gem::Requirement
126
+ requirement: &70303595579240 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70281201359320
134
+ version_requirements: *70303595579240
135
135
  description: This gem provides a graphical frontend for the Taskwarrior task manager.
136
136
  It is based on Sinatra.
137
137
  email:
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
219
  version: '0'
220
220
  segments:
221
221
  - 0
222
- hash: 3651661756966679752
222
+ hash: -2980071334250491530
223
223
  requirements: []
224
224
  rubyforge_project: taskwarrior-web
225
225
  rubygems_version: 1.8.11