watch_tower 0.0.0.1 → 0.0.1.beta1

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.
Files changed (106) hide show
  1. data/.todo +3 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +0 -4
  4. data/README.md +48 -2
  5. data/TODO +3 -0
  6. data/ci/travis.rb +4 -1
  7. data/lib/watch_tower/appscript.rb +65 -7
  8. data/lib/watch_tower/cli/install.rb +27 -3
  9. data/lib/watch_tower/cli/open.rb +2 -0
  10. data/lib/watch_tower/cli/start.rb +3 -1
  11. data/lib/watch_tower/cli.rb +2 -0
  12. data/lib/watch_tower/config.rb +2 -0
  13. data/lib/watch_tower/core_ext.rb +2 -0
  14. data/lib/watch_tower/editor/base_appscript.rb +28 -1
  15. data/lib/watch_tower/editor/base_ps.rb +25 -0
  16. data/lib/watch_tower/editor/textmate.rb +2 -0
  17. data/lib/watch_tower/editor/xcode.rb +2 -0
  18. data/lib/watch_tower/editor.rb +2 -0
  19. data/lib/watch_tower/errors.rb +2 -0
  20. data/lib/watch_tower/eye.rb +13 -2
  21. data/lib/watch_tower/file_tree.rb +78 -0
  22. data/lib/watch_tower/project/any_based.rb +2 -0
  23. data/lib/watch_tower/project/git_based.rb +2 -0
  24. data/lib/watch_tower/project/init.rb +2 -0
  25. data/lib/watch_tower/project/path_based.rb +2 -0
  26. data/lib/watch_tower/project.rb +2 -0
  27. data/lib/watch_tower/server/app.rb +37 -7
  28. data/lib/watch_tower/server/assets/javascripts/application.js +4 -0
  29. data/lib/watch_tower/server/assets/javascripts/datepicker.coffee +21 -0
  30. data/lib/watch_tower/server/assets/javascripts/file_tree.coffee +30 -0
  31. data/lib/watch_tower/server/assets/javascripts/percentage.coffee +15 -5
  32. data/lib/watch_tower/server/assets/stylesheets/application.css +1 -0
  33. data/lib/watch_tower/server/assets/stylesheets/date.sass +17 -0
  34. data/lib/watch_tower/server/assets/stylesheets/file_tree.sass +42 -0
  35. data/lib/watch_tower/server/assets/stylesheets/global.sass +7 -4
  36. data/lib/watch_tower/server/configurations/asset.rb +2 -0
  37. data/lib/watch_tower/server/configurations.rb +2 -0
  38. data/lib/watch_tower/server/database.rb +2 -0
  39. data/lib/watch_tower/server/db/migrate/001_create_projects.rb +2 -0
  40. data/lib/watch_tower/server/db/migrate/002_create_files.rb +2 -0
  41. data/lib/watch_tower/server/db/migrate/003_create_time_entries.rb +2 -0
  42. data/lib/watch_tower/server/db/migrate/004_create_durations.rb +2 -0
  43. data/lib/watch_tower/server/db/migrate/005_add_hash_to_time_entries.rb +2 -0
  44. data/lib/watch_tower/server/db/migrate/006_add_hash_to_files.rb +2 -0
  45. data/lib/watch_tower/server/db/migrate/007_add_editor_to_times_entries.rb +8 -0
  46. data/lib/watch_tower/server/db/migrate/008_rename_editor_to_editor_name_in_times_entries.rb +5 -0
  47. data/lib/watch_tower/server/db/migrate/009_remove_editor_index_from_time_entries.rb +7 -0
  48. data/lib/watch_tower/server/db/migrate/010_add_editor_version_to_times_entries.rb +7 -0
  49. data/lib/watch_tower/server/helpers/asset.rb +2 -0
  50. data/lib/watch_tower/server/helpers/improved_partials.rb +2 -0
  51. data/lib/watch_tower/server/helpers/presenters.rb +33 -0
  52. data/lib/watch_tower/server/helpers.rb +3 -0
  53. data/lib/watch_tower/server/models/duration.rb +9 -0
  54. data/lib/watch_tower/server/models/file.rb +17 -0
  55. data/lib/watch_tower/server/models/project.rb +30 -0
  56. data/lib/watch_tower/server/models/time_entry.rb +5 -0
  57. data/lib/watch_tower/server/presenters/application_presenter.rb +165 -0
  58. data/lib/watch_tower/server/presenters/file_presenter.rb +10 -0
  59. data/lib/watch_tower/server/presenters/project_presenter.rb +20 -0
  60. data/lib/watch_tower/server/presenters.rb +13 -0
  61. data/lib/watch_tower/server/public/assets/{WatchTower-4d6de11e1bd34165ad91ac46fb711bf3.jpg → WatchTower-58eff0713efffbc6054defddc879e0b1.jpg} +0 -0
  62. data/lib/watch_tower/server/public/assets/application-4e6971066e06aa53b0c8e52c764044d1.css +389 -0
  63. data/lib/watch_tower/server/public/assets/application-6a1be75d4fd6a545faceb638e47a2486.js +23778 -0
  64. data/lib/watch_tower/server/public/assets/calendar-379834cd6e6321a940b662ace47f3032.gif +0 -0
  65. data/lib/watch_tower/server/public/assets/calendar-blue-d6aa74feef7ee4287532761db99a6c0a.gif +0 -0
  66. data/lib/watch_tower/server/public/assets/calendar-green-3752fe2996091379c8d321f759039385.gif +0 -0
  67. data/lib/watch_tower/server/public/assets/jquery.datepick-9c8dfe3a4d40bcafc7b182e194c13836.css +227 -0
  68. data/lib/watch_tower/server/public/assets/{percentage-d8589e21a5fc85d32a445f531ff8ab95.png → percentage-d0176e99520c95e93eee63738ef5d487.png} +0 -0
  69. data/lib/watch_tower/server/vendor/assets/images/calendar-blue.gif +0 -0
  70. data/lib/watch_tower/server/vendor/assets/images/calendar-green.gif +0 -0
  71. data/lib/watch_tower/server/vendor/assets/images/calendar.gif +0 -0
  72. data/lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick-ext.js +266 -0
  73. data/lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick-validation.js +232 -0
  74. data/lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick.js +2092 -0
  75. data/lib/watch_tower/server/vendor/assets/stylesheets/jquery.datepick.css +226 -0
  76. data/lib/watch_tower/server/views/_project.haml +10 -13
  77. data/lib/watch_tower/server/views/index.haml +9 -6
  78. data/lib/watch_tower/server/views/layout.haml +7 -4
  79. data/lib/watch_tower/server/views/project.haml +9 -11
  80. data/lib/watch_tower/server.rb +8 -1
  81. data/lib/watch_tower/templates/{watchtower.plist → watchtower.plist.erb} +5 -6
  82. data/lib/watch_tower/version.rb +12 -3
  83. data/lib/watch_tower.rb +20 -1
  84. data/spec/factories.rb +2 -0
  85. data/spec/watch_tower/appscript_spec.rb +36 -2
  86. data/spec/watch_tower/editor/base_appscript_spec.rb +83 -0
  87. data/spec/watch_tower/editor/textmate_spec.rb +37 -0
  88. data/spec/watch_tower/editor/xcode_spec.rb +6 -0
  89. data/spec/watch_tower/eye_spec.rb +21 -0
  90. data/spec/watch_tower/file_tree_spec.rb +156 -0
  91. data/spec/watch_tower/server/app_spec.rb +64 -20
  92. data/spec/watch_tower/server/models/file_spec.rb +93 -31
  93. data/spec/watch_tower/server/models/project_spec.rb +147 -18
  94. data/spec/watch_tower/server/models/time_entry_spec.rb +10 -0
  95. data/spec/watch_tower/server/{decorator/project_decorator_spec.rb → presenters/application_presenter_spec.rb} +24 -13
  96. data/spec/watch_tower/server/presenters/file_presenter_spec.rb +8 -0
  97. data/spec/watch_tower/server/presenters/project_presenter_spec.rb +130 -0
  98. data/watch_tower.gemspec +10 -4
  99. metadata +114 -74
  100. data/lib/watch_tower/server/decorator/application_decorator.rb +0 -91
  101. data/lib/watch_tower/server/decorator/file_decorator.rb +0 -38
  102. data/lib/watch_tower/server/decorator/project_decorator.rb +0 -51
  103. data/lib/watch_tower/server/decorator.rb +0 -21
  104. data/lib/watch_tower/server/public/assets/application-7829b53b5ece1a16d22dc3d00f329023.css +0 -107
  105. data/lib/watch_tower/server/public/assets/application-e0e6b7731aade460f680331e65cf0682.js +0 -9359
  106. data/lib/watch_tower/server/views/_file.haml +0 -9
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ module Server
4
+ module Presenters
5
+ describe ProjectPresenter do
6
+
7
+ describe "elapsed formatter" do
8
+ before(:each) do
9
+ @project = FactoryGirl.create :project
10
+ end
11
+
12
+ subject { ProjectPresenter.new(@project, nil) }
13
+
14
+ it "should return a formatted elapsed time" do
15
+ time = 1.day + 2.hours + 3.minutes + 34.seconds
16
+ model = mock
17
+ model.stubs(:elapsed_time).returns(time)
18
+ subject.stubs(:model).returns(model)
19
+ subject.elapsed.should == '1 day, 2 hours, 3 minutes and 34 seconds'
20
+ end
21
+ end
22
+
23
+ describe "File tree" do
24
+ before(:each) do
25
+ @project = FactoryGirl.create :project
26
+ @project_path = @project.path
27
+ @file_paths = [
28
+ "#{@project_path}/file1.rb",
29
+ "#{@project_path}/file2.rb",
30
+ "#{@project_path}/folder/file_under_folder1.rb",
31
+ "#{@project_path}/folder/file_under_folder2.rb",
32
+ ]
33
+ @file_paths.each do |fp|
34
+ f = FactoryGirl.create :file, project: @project, path: fp
35
+ 2.times do
36
+ Timecop.freeze(Time.now + 1)
37
+ FactoryGirl.create :time_entry, file: f, mtime: Time.now
38
+ end
39
+ end
40
+
41
+ @files = @project.reload.files
42
+ @tree = FileTree.new(@project_path, @project.reload.files)
43
+ @elapsed_time = @project.elapsed_time
44
+ end
45
+
46
+ subject { ProjectPresenter.new(@project, nil) }
47
+
48
+ describe "#parse_file_tree" do
49
+ it { should respond_to :parse_file_tree }
50
+
51
+ it "should nest everything under an article with class file_tree" do
52
+ subject.send(:parse_file_tree, @tree, true).should =~ %r(^<article class="file_tree"[^>]*>.*</article>$)
53
+ end
54
+
55
+ it "shouldn't nest everything under an article with class file_tree if it is not the root element" do
56
+ subject.send(:parse_file_tree, @tree.nested_tree['folder']).should_not =~ %r(^<article class="file_tree"[^>]*>.*</article>$)
57
+ end
58
+
59
+ it "should return a div with id root" do
60
+ subject.send(:parse_file_tree, @tree, true).should =~ %r(<div id="root" class="folder"[^>]*>.*</div>)
61
+ end
62
+
63
+ it "should return a div with id nested_folder" do
64
+ subject.send(:parse_file_tree, @tree.nested_tree['folder']).should =~ %r(^<div id="nested_folder" class="nested_folder"[^>]*>.*</div>$)
65
+ end
66
+
67
+ it "should return a span for the expand/collapse for the root" do
68
+ subject.send(:parse_file_tree, @tree, true).should =~
69
+ %r(<div id="root"[^>]*>.*<span class="collapsed">\s*\+\s*</span>.*</div>)
70
+ end
71
+
72
+ it "should return a span for the expand/collapse for the nested_folder" do
73
+ subject.send(:parse_file_tree, @tree.nested_tree['folder']).should =~
74
+ %r(<div id="nested_folder"[^>]*>.*<span class="collapsed">\s*\+\s*</span>.*</div>)
75
+ end
76
+
77
+ it "should return a span for the name, Project for the root" do
78
+ subject.send(:parse_file_tree, @tree, true).should =~
79
+ %r(<div id="root"[^>]*>.*<span class="name">\s*Project\s*</span>.*</div>)
80
+ end
81
+
82
+ it "should return a span for the name, folder for the nested folder" do
83
+ subject.send(:parse_file_tree, @tree.nested_tree['folder']).should =~
84
+ %r(^<div id="nested_folder"[^>]*>.*<span class="name">\s*folder\s*</span>.*</div>$)
85
+ end
86
+
87
+ it "should return a span for the elapsed time (root)" do
88
+ subject.send(:parse_file_tree, @tree, true).should =~
89
+ %r(<div id="root"[^>]*>.*<span class="elapsed_time">\s*#{subject.elapsed(@elapsed_time)}\s*</span>.*</div>)
90
+ end
91
+
92
+ it "should return a span for the elapsed time (folder)" do
93
+ subject.send(:parse_file_tree, @tree.nested_tree['folder']).should =~
94
+ %r(^<div id="nested_folder"[^>]*>.*<span class="elapsed_time">\s*#{subject.elapsed(@elapsed_time / 2)}\s*</span>.*</div>$)
95
+ end
96
+
97
+ it "should return the folder tree inside the tree" do
98
+ subject.send(:parse_file_tree, @tree, true).should =~
99
+ %r(<div id="root"[^>]*>.*<div id="nested_folder"[^>]*>.*</div>)
100
+ end
101
+
102
+ it "should return the files" do
103
+ subject.send(:parse_file_tree, @tree, true).should =~
104
+ %r(<div id="root"[^>]*>.*<ul class="files"[^>]*>.*</ul>.*</div>)
105
+ end
106
+
107
+ it "should return the path of the files" do
108
+ subject.send(:parse_file_tree, @tree, true).should =~
109
+ %r(<div id="root"[^>]*>.*<ul class="files"[^>]*>.*<li class="file">.*<span class="path">file1.rb</span>.*</li>.*</ul>.*</div>)
110
+ end
111
+
112
+ it "should return the elapsed time of the files" do
113
+ subject.send(:parse_file_tree, @tree, true).should =~
114
+ %r(<div id="root"[^>]*>.*<ul class="files"[^>]*>.*<li class="file">.*<span class="elapsed_time">1 second</span>.*</li>.*</ul>.*</div>)
115
+ end
116
+ end
117
+
118
+ describe "#file_tree" do
119
+ it { should respond_to :file_tree }
120
+
121
+ it "should return a div with id root" do
122
+ regex = %r(.*root.*name.*elapsed_time.*nested_folder.*files.*file_under_folder(1|2).*files.*file(1|2).*)
123
+
124
+ subject.file_tree(@files).should =~ regex
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
data/watch_tower.gemspec CHANGED
@@ -1,10 +1,11 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require "watch_tower/version"
4
+ require 'rbconfig'
4
5
 
5
6
  Gem::Specification.new do |s|
6
7
  s.name = "watch_tower"
7
- s.version = WatchTower::VERSION
8
+ s.version = WatchTower.version
8
9
  s.authors = ["Wael Nasreddine"]
9
10
  s.email = ["wael.nasreddine@gmail.com"]
10
11
  s.homepage = ""
@@ -22,6 +23,9 @@ Gem::Specification.new do |s|
22
23
  # Run-time dependencies
23
24
  ####
24
25
 
26
+ # Appscript
27
+ s.add_dependency 'rb-appscript', '~>0.6.1' if RbConfig::CONFIG['target_os'] =~ /darwin/i
28
+
25
29
  # Active Support
26
30
  s.add_dependency 'activesupport', '~>3.1.1'
27
31
  s.add_dependency 'i18n', '~>0.6.0'
@@ -34,9 +38,6 @@ Gem::Specification.new do |s|
34
38
  s.add_dependency 'sinatra-snap', '~>0.3.2'
35
39
  s.add_dependency 'haml', '~>3.1.3'
36
40
 
37
- # Decorators
38
- s.add_dependency 'draper', '~>0.8.0'
39
-
40
41
  # Git
41
42
  s.add_dependency 'git', '~>1.2.5'
42
43
 
@@ -49,11 +50,16 @@ Gem::Specification.new do |s|
49
50
  ####
50
51
  # Development dependencies
51
52
  ####
53
+
54
+ # Guard
52
55
  s.add_development_dependency 'guard', '~>0.8.4'
53
56
  s.add_development_dependency 'guard-bundler', '~>0.1.3'
54
57
  s.add_development_dependency 'guard-rspec', '~>0.4.5'
55
58
  s.add_development_dependency 'guard-sprockets2', '~>0.0.5'
56
59
 
60
+ # Documentation
61
+ s.add_development_dependency 'yard', '~>0.7.2'
62
+
57
63
  ####
58
64
  # Development / Test dependencies
59
65
  ####
metadata CHANGED
@@ -1,19 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watch_tower
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.1
5
- prerelease:
4
+ version: 0.0.1.beta1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Wael Nasreddine
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-11 00:00:00.000000000Z
12
+ date: 2011-10-23 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rb-appscript
16
+ requirement: &2151851000 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2151851000
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: activesupport
16
- requirement: &2151931760 !ruby/object:Gem::Requirement
27
+ requirement: &2151849820 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ~>
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: 3.1.1
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *2151931760
35
+ version_requirements: *2151849820
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: i18n
27
- requirement: &2151930840 !ruby/object:Gem::Requirement
38
+ requirement: &2151846540 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: 0.6.0
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *2151930840
46
+ version_requirements: *2151846540
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: activerecord
38
- requirement: &2151929640 !ruby/object:Gem::Requirement
49
+ requirement: &2151845040 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: 3.1.1
44
55
  type: :runtime
45
56
  prerelease: false
46
- version_requirements: *2151929640
57
+ version_requirements: *2151845040
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: sinatra
49
- requirement: &2151928220 !ruby/object:Gem::Requirement
60
+ requirement: &2151843880 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ~>
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: 1.3.0
55
66
  type: :runtime
56
67
  prerelease: false
57
- version_requirements: *2151928220
68
+ version_requirements: *2151843880
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: sinatra-snap
60
- requirement: &2151927320 !ruby/object:Gem::Requirement
71
+ requirement: &2151853080 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: 0.3.2
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *2151927320
79
+ version_requirements: *2151853080
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: haml
71
- requirement: &2151926700 !ruby/object:Gem::Requirement
82
+ requirement: &2151851600 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ~>
@@ -76,21 +87,10 @@ dependencies:
76
87
  version: 3.1.3
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *2151926700
80
- - !ruby/object:Gem::Dependency
81
- name: draper
82
- requirement: &2151925680 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ~>
86
- - !ruby/object:Gem::Version
87
- version: 0.8.0
88
- type: :runtime
89
- prerelease: false
90
- version_requirements: *2151925680
90
+ version_requirements: *2151851600
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: git
93
- requirement: &2151924880 !ruby/object:Gem::Requirement
93
+ requirement: &2151866400 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.2.5
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *2151924880
101
+ version_requirements: *2151866400
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: coffee-script
104
- requirement: &2151923720 !ruby/object:Gem::Requirement
104
+ requirement: &2151865340 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 2.2.0
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *2151923720
112
+ version_requirements: *2151865340
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: uglifier
115
- requirement: &2151922300 !ruby/object:Gem::Requirement
115
+ requirement: &2151863800 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 1.0.3
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *2151922300
123
+ version_requirements: *2151863800
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sass
126
- requirement: &2151919960 !ruby/object:Gem::Requirement
126
+ requirement: &2151862440 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 3.1.10
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *2151919960
134
+ version_requirements: *2151862440
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: sprockets
137
- requirement: &2151918080 !ruby/object:Gem::Requirement
137
+ requirement: &2151861520 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 2.0.2
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *2151918080
145
+ version_requirements: *2151861520
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: guard
148
- requirement: &2151917220 !ruby/object:Gem::Requirement
148
+ requirement: &2151859720 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ~>
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 0.8.4
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *2151917220
156
+ version_requirements: *2151859720
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: guard-bundler
159
- requirement: &2151916080 !ruby/object:Gem::Requirement
159
+ requirement: &2151875200 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ~>
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 0.1.3
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *2151916080
167
+ version_requirements: *2151875200
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: guard-rspec
170
- requirement: &2151914400 !ruby/object:Gem::Requirement
170
+ requirement: &2151874000 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: 0.4.5
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *2151914400
178
+ version_requirements: *2151874000
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: guard-sprockets2
181
- requirement: &2151910360 !ruby/object:Gem::Requirement
181
+ requirement: &2151872620 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ~>
@@ -186,10 +186,21 @@ dependencies:
186
186
  version: 0.0.5
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *2151910360
189
+ version_requirements: *2151872620
190
+ - !ruby/object:Gem::Dependency
191
+ name: yard
192
+ requirement: &2151871220 !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: 0.7.2
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: *2151871220
190
201
  - !ruby/object:Gem::Dependency
191
202
  name: rspec
192
- requirement: &2151909220 !ruby/object:Gem::Requirement
203
+ requirement: &2151870080 !ruby/object:Gem::Requirement
193
204
  none: false
194
205
  requirements:
195
206
  - - ~>
@@ -197,10 +208,10 @@ dependencies:
197
208
  version: 2.6.0
198
209
  type: :development
199
210
  prerelease: false
200
- version_requirements: *2151909220
211
+ version_requirements: *2151870080
201
212
  - !ruby/object:Gem::Dependency
202
213
  name: rspec-rails
203
- requirement: &2151906920 !ruby/object:Gem::Requirement
214
+ requirement: &2151868940 !ruby/object:Gem::Requirement
204
215
  none: false
205
216
  requirements:
206
217
  - - ~>
@@ -208,10 +219,10 @@ dependencies:
208
219
  version: 2.6.1
209
220
  type: :development
210
221
  prerelease: false
211
- version_requirements: *2151906920
222
+ version_requirements: *2151868940
212
223
  - !ruby/object:Gem::Dependency
213
224
  name: capybara
214
- requirement: &2151902360 !ruby/object:Gem::Requirement
225
+ requirement: &2151881960 !ruby/object:Gem::Requirement
215
226
  none: false
216
227
  requirements:
217
228
  - - ~>
@@ -219,10 +230,10 @@ dependencies:
219
230
  version: 1.1.1
220
231
  type: :development
221
232
  prerelease: false
222
- version_requirements: *2151902360
233
+ version_requirements: *2151881960
223
234
  - !ruby/object:Gem::Dependency
224
235
  name: launchy
225
- requirement: &2151899740 !ruby/object:Gem::Requirement
236
+ requirement: &2151878660 !ruby/object:Gem::Requirement
226
237
  none: false
227
238
  requirements:
228
239
  - - ~>
@@ -230,10 +241,10 @@ dependencies:
230
241
  version: 2.0.5
231
242
  type: :development
232
243
  prerelease: false
233
- version_requirements: *2151899740
244
+ version_requirements: *2151878660
234
245
  - !ruby/object:Gem::Dependency
235
246
  name: mocha
236
- requirement: &2151897580 !ruby/object:Gem::Requirement
247
+ requirement: &2151877020 !ruby/object:Gem::Requirement
237
248
  none: false
238
249
  requirements:
239
250
  - - ~>
@@ -241,10 +252,10 @@ dependencies:
241
252
  version: 0.10.0
242
253
  type: :development
243
254
  prerelease: false
244
- version_requirements: *2151897580
255
+ version_requirements: *2151877020
245
256
  - !ruby/object:Gem::Dependency
246
257
  name: factory_girl
247
- requirement: &2151895320 !ruby/object:Gem::Requirement
258
+ requirement: &2151890840 !ruby/object:Gem::Requirement
248
259
  none: false
249
260
  requirements:
250
261
  - - ~>
@@ -252,10 +263,10 @@ dependencies:
252
263
  version: 2.1.2
253
264
  type: :development
254
265
  prerelease: false
255
- version_requirements: *2151895320
266
+ version_requirements: *2151890840
256
267
  - !ruby/object:Gem::Dependency
257
268
  name: timecop
258
- requirement: &2151892300 !ruby/object:Gem::Requirement
269
+ requirement: &2155949280 !ruby/object:Gem::Requirement
259
270
  none: false
260
271
  requirements:
261
272
  - - ~>
@@ -263,10 +274,10 @@ dependencies:
263
274
  version: 0.3.5
264
275
  type: :development
265
276
  prerelease: false
266
- version_requirements: *2151892300
277
+ version_requirements: *2155949280
267
278
  - !ruby/object:Gem::Dependency
268
279
  name: pry
269
- requirement: &2151890420 !ruby/object:Gem::Requirement
280
+ requirement: &2155958920 !ruby/object:Gem::Requirement
270
281
  none: false
271
282
  requirements:
272
283
  - - ~>
@@ -274,7 +285,7 @@ dependencies:
274
285
  version: 0.9.6.2
275
286
  type: :development
276
287
  prerelease: false
277
- version_requirements: *2151890420
288
+ version_requirements: *2155958920
278
289
  description: WatchTower helps you track the time you spend on each project.
279
290
  email:
280
291
  - wael.nasreddine@gmail.com
@@ -318,6 +329,7 @@ files:
318
329
  - lib/watch_tower/editor/xcode.rb
319
330
  - lib/watch_tower/errors.rb
320
331
  - lib/watch_tower/eye.rb
332
+ - lib/watch_tower/file_tree.rb
321
333
  - lib/watch_tower/project.rb
322
334
  - lib/watch_tower/project/.gitkeep
323
335
  - lib/watch_tower/project/any_based.rb
@@ -330,8 +342,12 @@ files:
330
342
  - lib/watch_tower/server/assets/images/WatchTower.jpg
331
343
  - lib/watch_tower/server/assets/images/percentage.png
332
344
  - lib/watch_tower/server/assets/javascripts/application.js
345
+ - lib/watch_tower/server/assets/javascripts/datepicker.coffee
346
+ - lib/watch_tower/server/assets/javascripts/file_tree.coffee
333
347
  - lib/watch_tower/server/assets/javascripts/percentage.coffee
334
348
  - lib/watch_tower/server/assets/stylesheets/application.css
349
+ - lib/watch_tower/server/assets/stylesheets/date.sass
350
+ - lib/watch_tower/server/assets/stylesheets/file_tree.sass
335
351
  - lib/watch_tower/server/assets/stylesheets/global.sass
336
352
  - lib/watch_tower/server/assets/stylesheets/project.sass
337
353
  - lib/watch_tower/server/configurations.rb
@@ -343,32 +359,47 @@ files:
343
359
  - lib/watch_tower/server/db/migrate/004_create_durations.rb
344
360
  - lib/watch_tower/server/db/migrate/005_add_hash_to_time_entries.rb
345
361
  - lib/watch_tower/server/db/migrate/006_add_hash_to_files.rb
346
- - lib/watch_tower/server/decorator.rb
347
- - lib/watch_tower/server/decorator/application_decorator.rb
348
- - lib/watch_tower/server/decorator/file_decorator.rb
349
- - lib/watch_tower/server/decorator/project_decorator.rb
362
+ - lib/watch_tower/server/db/migrate/007_add_editor_to_times_entries.rb
363
+ - lib/watch_tower/server/db/migrate/008_rename_editor_to_editor_name_in_times_entries.rb
364
+ - lib/watch_tower/server/db/migrate/009_remove_editor_index_from_time_entries.rb
365
+ - lib/watch_tower/server/db/migrate/010_add_editor_version_to_times_entries.rb
350
366
  - lib/watch_tower/server/helpers.rb
351
367
  - lib/watch_tower/server/helpers/asset.rb
352
368
  - lib/watch_tower/server/helpers/improved_partials.rb
369
+ - lib/watch_tower/server/helpers/presenters.rb
353
370
  - lib/watch_tower/server/models/duration.rb
354
371
  - lib/watch_tower/server/models/file.rb
355
372
  - lib/watch_tower/server/models/project.rb
356
373
  - lib/watch_tower/server/models/time_entry.rb
357
- - lib/watch_tower/server/public/assets/WatchTower-4d6de11e1bd34165ad91ac46fb711bf3.jpg
358
- - lib/watch_tower/server/public/assets/application-7829b53b5ece1a16d22dc3d00f329023.css
359
- - lib/watch_tower/server/public/assets/application-e0e6b7731aade460f680331e65cf0682.js
360
- - lib/watch_tower/server/public/assets/percentage-d8589e21a5fc85d32a445f531ff8ab95.png
374
+ - lib/watch_tower/server/presenters.rb
375
+ - lib/watch_tower/server/presenters/application_presenter.rb
376
+ - lib/watch_tower/server/presenters/file_presenter.rb
377
+ - lib/watch_tower/server/presenters/project_presenter.rb
378
+ - lib/watch_tower/server/public/assets/WatchTower-58eff0713efffbc6054defddc879e0b1.jpg
379
+ - lib/watch_tower/server/public/assets/application-4e6971066e06aa53b0c8e52c764044d1.css
380
+ - lib/watch_tower/server/public/assets/application-6a1be75d4fd6a545faceb638e47a2486.js
381
+ - lib/watch_tower/server/public/assets/calendar-379834cd6e6321a940b662ace47f3032.gif
382
+ - lib/watch_tower/server/public/assets/calendar-blue-d6aa74feef7ee4287532761db99a6c0a.gif
383
+ - lib/watch_tower/server/public/assets/calendar-green-3752fe2996091379c8d321f759039385.gif
384
+ - lib/watch_tower/server/public/assets/jquery.datepick-9c8dfe3a4d40bcafc7b182e194c13836.css
385
+ - lib/watch_tower/server/public/assets/percentage-d0176e99520c95e93eee63738ef5d487.png
386
+ - lib/watch_tower/server/vendor/assets/images/calendar-blue.gif
387
+ - lib/watch_tower/server/vendor/assets/images/calendar-green.gif
388
+ - lib/watch_tower/server/vendor/assets/images/calendar.gif
389
+ - lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick-ext.js
390
+ - lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick-validation.js
391
+ - lib/watch_tower/server/vendor/assets/javascripts/jquery-datepick.js
361
392
  - lib/watch_tower/server/vendor/assets/javascripts/jquery-ui.js
362
393
  - lib/watch_tower/server/vendor/assets/javascripts/jquery.js
363
394
  - lib/watch_tower/server/vendor/assets/javascripts/jquery_ujs.js
395
+ - lib/watch_tower/server/vendor/assets/stylesheets/jquery.datepick.css
364
396
  - lib/watch_tower/server/views/.gitkeep
365
- - lib/watch_tower/server/views/_file.haml
366
397
  - lib/watch_tower/server/views/_project.haml
367
398
  - lib/watch_tower/server/views/index.haml
368
399
  - lib/watch_tower/server/views/layout.haml
369
400
  - lib/watch_tower/server/views/project.haml
370
401
  - lib/watch_tower/templates/config.yml
371
- - lib/watch_tower/templates/watchtower.plist
402
+ - lib/watch_tower/templates/watchtower.plist.erb
372
403
  - lib/watch_tower/version.rb
373
404
  - spec/factories.rb
374
405
  - spec/spec_helper.rb
@@ -383,18 +414,22 @@ files:
383
414
  - spec/watch_tower/cli/start_spec.rb
384
415
  - spec/watch_tower/cli_spec.rb
385
416
  - spec/watch_tower/config_spec.rb
417
+ - spec/watch_tower/editor/base_appscript_spec.rb
386
418
  - spec/watch_tower/editor/textmate_spec.rb
387
419
  - spec/watch_tower/editor/xcode_spec.rb
388
420
  - spec/watch_tower/editor_spec.rb
389
421
  - spec/watch_tower/eye_spec.rb
422
+ - spec/watch_tower/file_tree_spec.rb
390
423
  - spec/watch_tower/project/git_based_spec.rb
391
424
  - spec/watch_tower/project/path_based_spec.rb
392
425
  - spec/watch_tower/project_spec.rb
393
426
  - spec/watch_tower/server/app_spec.rb
394
- - spec/watch_tower/server/decorator/project_decorator_spec.rb
395
427
  - spec/watch_tower/server/models/file_spec.rb
396
428
  - spec/watch_tower/server/models/project_spec.rb
397
429
  - spec/watch_tower/server/models/time_entry_spec.rb
430
+ - spec/watch_tower/server/presenters/application_presenter_spec.rb
431
+ - spec/watch_tower/server/presenters/file_presenter_spec.rb
432
+ - spec/watch_tower/server/presenters/project_presenter_spec.rb
398
433
  - spec/watch_tower/server_spec.rb
399
434
  - watch_tower.gemspec
400
435
  homepage: ''
@@ -412,9 +447,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
412
447
  required_rubygems_version: !ruby/object:Gem::Requirement
413
448
  none: false
414
449
  requirements:
415
- - - ! '>='
450
+ - - ! '>'
416
451
  - !ruby/object:Gem::Version
417
- version: '0'
452
+ version: 1.3.1
418
453
  requirements: []
419
454
  rubyforge_project:
420
455
  rubygems_version: 1.8.10
@@ -435,16 +470,21 @@ test_files:
435
470
  - spec/watch_tower/cli/start_spec.rb
436
471
  - spec/watch_tower/cli_spec.rb
437
472
  - spec/watch_tower/config_spec.rb
473
+ - spec/watch_tower/editor/base_appscript_spec.rb
438
474
  - spec/watch_tower/editor/textmate_spec.rb
439
475
  - spec/watch_tower/editor/xcode_spec.rb
440
476
  - spec/watch_tower/editor_spec.rb
441
477
  - spec/watch_tower/eye_spec.rb
478
+ - spec/watch_tower/file_tree_spec.rb
442
479
  - spec/watch_tower/project/git_based_spec.rb
443
480
  - spec/watch_tower/project/path_based_spec.rb
444
481
  - spec/watch_tower/project_spec.rb
445
482
  - spec/watch_tower/server/app_spec.rb
446
- - spec/watch_tower/server/decorator/project_decorator_spec.rb
447
483
  - spec/watch_tower/server/models/file_spec.rb
448
484
  - spec/watch_tower/server/models/project_spec.rb
449
485
  - spec/watch_tower/server/models/time_entry_spec.rb
486
+ - spec/watch_tower/server/presenters/application_presenter_spec.rb
487
+ - spec/watch_tower/server/presenters/file_presenter_spec.rb
488
+ - spec/watch_tower/server/presenters/project_presenter_spec.rb
450
489
  - spec/watch_tower/server_spec.rb
490
+ has_rdoc: