watch_tower 0.0.1.beta7 → 0.0.1.beta8

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.
@@ -0,0 +1,34 @@
1
+ # Credits
2
+
3
+ This project is heavily inspired by
4
+ [timetap](https://github.com/elia/timetap) created by [Elia
5
+ Schito](https://github.com/elia).
6
+
7
+ It also uses a number of open source
8
+ projects including, but not limited to:
9
+
10
+ - [rb-appscript](http://appscript.sourceforge.net/)
11
+ - [activesupport](https://github.com/rails/rails)
12
+ - [activerecord](https://github.com/rails/rails)
13
+ - [sinatra](https://github.com/sinatra/sinatra)
14
+ - [sinatra-snap](http://github.com/bcarlso/snap)
15
+ - [haml](http://haml-lang.com)
16
+ - [grit](https://github.com/mojombo/grit)
17
+ - [coffee-script](http://github.com/josh/ruby-coffee-script)
18
+ - [uglifier](https://github.com/lautis/uglifier)
19
+ - [sass](http://sass-lang.com)
20
+ - [sprockets](http://getsprockets.org/)
21
+ - [guard](https://github.com/guard/guard)
22
+ - [guard-bundler](https://github.com/guard/guard-bundler)
23
+ - [guard-rspec](https://github.com/guard/guard-rspec)
24
+ - [guard-sprockets2](https://github.com/stevehodgkiss/guard-sprockets2)
25
+ - [yard](http://github.com/lsegal/yard)
26
+ - [rspec](http://github.com/rspec/rspec)
27
+ - [rspec-rails](http://github.com/rspec/rspec-rails)
28
+ - [capybara](https://github.com/jnicklas/capybara)
29
+ - [launchy](https://github.com/copiousfreetime/launchy)
30
+ - [mocha](https://github.com/floehopper/mocha)
31
+ - [factory_girl](https://github.com/thoughtbot/factory_girl)
32
+ - [timecop](https://github.com/jtrupiano/timecop)
33
+ - [pry](https://github.com/pry/pry)
34
+ - [cronedit](http://cronedit.rubyforge.org)
data/README.md CHANGED
@@ -119,39 +119,9 @@ in mind for the project
119
119
 
120
120
  # Credits
121
121
 
122
- This project is heavily inspired by
123
- [timetap](https://github.com/elia/timetap) created by [Elia
124
- Schito](https://github.com/elia).
125
-
126
- It also uses a number of open source
127
- projects including, but not limited to:
128
-
129
- - [rb-appscript](http://appscript.sourceforge.net/)
130
- - [activesupport](https://github.com/rails/rails)
131
- - [activerecord](https://github.com/rails/rails)
132
- - [sinatra](https://github.com/sinatra/sinatra)
133
- - [sinatra-snap](http://github.com/bcarlso/snap)
134
- - [haml](http://haml-lang.com)
135
- - [grit](https://github.com/mojombo/grit)
136
- - [coffee-script](http://github.com/josh/ruby-coffee-script)
137
- - [uglifier](https://github.com/lautis/uglifier)
138
- - [sass](http://sass-lang.com)
139
- - [sprockets](http://getsprockets.org/)
140
- - [guard](https://github.com/guard/guard)
141
- - [guard-bundler](https://github.com/guard/guard-bundler)
142
- - [guard-rspec](https://github.com/guard/guard-rspec)
143
- - [guard-sprockets2](https://github.com/stevehodgkiss/guard-sprockets2)
144
- - [yard](http://github.com/lsegal/yard)
145
- - [rspec](http://github.com/rspec/rspec)
146
- - [rspec-rails](http://github.com/rspec/rspec-rails)
147
- - [capybara](https://github.com/jnicklas/capybara)
148
- - [launchy](https://github.com/copiousfreetime/launchy)
149
- - [mocha](https://github.com/floehopper/mocha)
150
- - [factory_girl](https://github.com/thoughtbot/factory_girl)
151
- - [timecop](https://github.com/jtrupiano/timecop)
152
- - [pry](https://github.com/pry/pry)
153
- - [systemu](https://github.com/ahoward/systemu)
154
- - [cronedit](http://cronedit.rubyforge.org)
122
+ Please see the
123
+ [CREDITS.md](https://github.com/TechnoGate/watch_tower/blob/master/CREDITS.md) file.
124
+
155
125
 
156
126
  # License
157
127
 
@@ -1,20 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- # Somehow on my laptop, the systemu command works well for vim but does not
4
- # work at all for gvim, in fact calling systemu just returns an empty stdout.
5
- # TODO: Figure out if it's a problem on my box or systemu's bug
6
-
7
- # require 'systemu'
8
- class Object
9
- # This method returns the output of a system command
10
- # much like the original systemu method
11
- #
12
- # @param [String] cmd: The command to run.
13
- # @return [Array] formed of status, stdout, stderr
14
- def systemu(cmd)
15
- [0, `#{cmd}`, '']
16
- end
17
- end
3
+ require 'open3'
18
4
 
19
5
  module WatchTower
20
6
  module Editor
@@ -39,18 +25,21 @@ module WatchTower
39
25
  #
40
26
  # @return [String] The editor's version
41
27
  def version
28
+ version = nil
42
29
  if is_running?
43
- status, stdout, stderr = systemu "#{editor} --version"
44
-
45
- stdout.scan(/^VIM - Vi IMproved (\d+\.\d+).*/).first.first
30
+ Open3.popen2 "#{editor} --version" do |stdin, stdout, wait_thr|
31
+ version = stdout.read.scan(/^VIM - Vi IMproved (\d+\.\d+).*/).first.first
32
+ end
46
33
  end
34
+
35
+ version
47
36
  end
48
37
 
49
38
  # Is it running ?
50
39
  #
51
40
  # @return [Boolean] Is ViM running ?
52
41
  def is_running?
53
- servers.any?
42
+ servers && servers.any?
54
43
  end
55
44
 
56
45
  # Return the open documents of all vim servers
@@ -58,14 +47,24 @@ module WatchTower
58
47
  # @return [Array] Absolute paths to all open documents
59
48
  def current_paths
60
49
  if is_running?
61
- # Make sure All servers has loaded our function
62
- send_extensions_to_editor
63
50
  # Init documents
64
51
  documents = []
65
52
  servers.each do |server|
66
- status, stdout, stderr = systemu "#{editor} --servername #{server} --remote-expr 'watchtower#ls()'"
53
+ stdin, stdout, stderr, wait_thr = Open3.popen3 "#{editor} --servername #{server} --remote-expr 'watchtower#ls()'"
54
+
55
+ if stderr.read =~ /Invalid expression received: Send expression failed/i
56
+ # Close the pipes
57
+ [stdin, stdout, stderr].each { |p| p.try(:close) }
58
+ # Send the extenstion to the ViM server
59
+ send_extensions_to_editor
60
+ # Ask ViM for the documents again
61
+ stdin, stdout, stderr, wait_thr = Open3.popen3 "#{editor} --servername #{server} --remote-expr 'watchtower#ls()'"
62
+ end
67
63
 
68
- documents += stdout.split("\n")
64
+ documents += stdout.read.split("\n")
65
+
66
+ # Close the pipes
67
+ [stdin, stdout, stderr].each { |p| p.try(:close) }
69
68
  end
70
69
 
71
70
  documents.uniq
@@ -81,9 +80,12 @@ module WatchTower
81
80
  # Get the absolute path of the command
82
81
  vim_path = WatchTower.which(vim)
83
82
  # Print the help of the command
84
- status, stdout, stderr = systemu "#{vim_path} --help" if vim_path
83
+ stdin, stdout, wait_thr = Open3.popen2 "#{vim_path} --help" if vim_path
85
84
  # This command is compatible if it exists and if it respond to --remote
86
- vim_path && stdout =~ %r(--remote) ? vim_path : nil
85
+ r = vim_path && (vim != 'vim' || stdout.read =~ %r(--remote)) ? vim_path : nil
86
+ # Close the pipes
87
+ [stdin, stdout].each { |p| p.try(:close) }
88
+ r
87
89
  end.reject { |vim| vim.nil? }
88
90
  end
89
91
 
@@ -91,21 +93,29 @@ module WatchTower
91
93
  #
92
94
  # @return [String|nil] The editor command
93
95
  def editor
94
- @vims.any? && @vims.first
96
+ @vims && @vims.any? ? @vims.first : nil
95
97
  end
96
98
 
97
99
  # Returns the running servers
98
100
  #
99
101
  # @return [Array] Name of running ViM Servers
100
102
  def servers
101
- status, stdout, stderr = systemu "#{editor} --serverlist"
102
- stdout.split("\n")
103
+ servers = nil
104
+ # Tell vim to print the server list
105
+ Open3.popen2 "#{editor} --serverlist" do |stdin, stdout, wait_thr|
106
+ # Read the server list
107
+ servers = stdout.read.split("\n")
108
+ end
109
+ servers
103
110
  end
104
111
 
105
112
  # Send WatchTower extensions to vim
106
113
  def send_extensions_to_editor
107
114
  servers.each do |server|
108
- systemu "#{editor} --servername #{server} --remote-send ':source #{VIM_EXTENSION_PATH}<CR>'"
115
+ # Tell vim to source the extensions
116
+ stdin, stdout, wait_thr = Open3.popen2 "#{editor} --servername #{server} --remote-send '<ESC>:source #{VIM_EXTENSION_PATH}<CR>'"
117
+ # Close the pipes
118
+ [stdin, stdout].each { |p| p.try(:close) }
109
119
  end
110
120
  end
111
121
  end
@@ -2,11 +2,17 @@ window.date_filtering =
2
2
  handleResponse: (response, textStatus, jqXHR) ->
3
3
  ($ '.page').html(response)
4
4
  percentage.applyPercentage()
5
+ file_tree.bind_event_on_buttons()
5
6
 
6
7
  updateMetaTags: (dates) ->
7
8
  ($ 'meta[name="date_filtering_from"]').attr 'content', $.datepick.formatDate(dates[0])
8
9
  ($ 'meta[name="date_filtering_to"]').attr 'content', $.datepick.formatDate(dates[1])
9
10
 
11
+ updateDatePickerDates: ->
12
+ from_date = ($ 'meta[name="date_filtering_from"]').attr 'content'
13
+ to_date = ($ 'meta[name="date_filtering_to"]').attr 'content'
14
+ ($ '#date input').datepick 'setDate', [from_date, to_date]
15
+
10
16
  handleDatePicker: (dates) ->
11
17
  options = { from_date: $.datepick.formatDate(dates[0]), to_date: $.datepick.formatDate(dates[1]) }
12
18
  url = window.location.pathname
@@ -18,4 +24,5 @@ jQuery ->
18
24
  rangeSelect: true,
19
25
  monthsToShow: 2,
20
26
  alignment: 'bottomRight',
21
- onClose: date_filtering.handleDatePicker
27
+ onClose: date_filtering.handleDatePicker
28
+ date_filtering.updateDatePickerDates()
@@ -1,4 +1,8 @@
1
1
  window.file_tree =
2
+ bind_event_on_buttons: ->
3
+ ($ '.collapsed').each (index, element) ->
4
+ ($ element).bind 'click', ->
5
+ file_tree.handle_button element
2
6
  handle_button: (domId) ->
3
7
  if ($ domId).hasClass "collapsed"
4
8
  ($ domId).removeClass "collapsed"
@@ -25,6 +29,4 @@ window.file_tree =
25
29
  ($ element).hide()
26
30
 
27
31
  jQuery ($) ->
28
- ($ '.collapsed').each (index, element) ->
29
- ($ element).bind 'click', ->
30
- file_tree.handle_button element
32
+ file_tree.bind_event_on_buttons()
@@ -23671,12 +23671,19 @@ if ($.fn.validate) {
23671
23671
  window.date_filtering = {
23672
23672
  handleResponse: function(response, textStatus, jqXHR) {
23673
23673
  ($('.page')).html(response);
23674
- return percentage.applyPercentage();
23674
+ percentage.applyPercentage();
23675
+ return file_tree.bind_event_on_buttons();
23675
23676
  },
23676
23677
  updateMetaTags: function(dates) {
23677
23678
  ($('meta[name="date_filtering_from"]')).attr('content', $.datepick.formatDate(dates[0]));
23678
23679
  return ($('meta[name="date_filtering_to"]')).attr('content', $.datepick.formatDate(dates[1]));
23679
23680
  },
23681
+ updateDatePickerDates: function() {
23682
+ var from_date, to_date;
23683
+ from_date = ($('meta[name="date_filtering_from"]')).attr('content');
23684
+ to_date = ($('meta[name="date_filtering_to"]')).attr('content');
23685
+ return ($('#date input')).datepick('setDate', [from_date, to_date]);
23686
+ },
23680
23687
  handleDatePicker: function(dates) {
23681
23688
  var options, url;
23682
23689
  options = {
@@ -23689,16 +23696,24 @@ if ($.fn.validate) {
23689
23696
  }
23690
23697
  };
23691
23698
  jQuery(function() {
23692
- return ($('#date input')).datepick({
23699
+ ($('#date input')).datepick({
23693
23700
  rangeSelect: true,
23694
23701
  monthsToShow: 2,
23695
23702
  alignment: 'bottomRight',
23696
23703
  onClose: date_filtering.handleDatePicker
23697
23704
  });
23705
+ return date_filtering.updateDatePickerDates();
23698
23706
  });
23699
23707
  }).call(this);
23700
23708
  (function() {
23701
23709
  window.file_tree = {
23710
+ bind_event_on_buttons: function() {
23711
+ return ($('.collapsed')).each(function(index, element) {
23712
+ return ($(element)).bind('click', function() {
23713
+ return file_tree.handle_button(element);
23714
+ });
23715
+ });
23716
+ },
23702
23717
  handle_button: function(domId) {
23703
23718
  if (($(domId)).hasClass("collapsed")) {
23704
23719
  ($(domId)).removeClass("collapsed");
@@ -23730,11 +23745,7 @@ if ($.fn.validate) {
23730
23745
  }
23731
23746
  };
23732
23747
  jQuery(function($) {
23733
- return ($('.collapsed')).each(function(index, element) {
23734
- return ($(element)).bind('click', function() {
23735
- return file_tree.handle_button(element);
23736
- });
23737
- });
23748
+ return file_tree.bind_event_on_buttons();
23738
23749
  });
23739
23750
  }).call(this);
23740
23751
  (function() {
@@ -4,7 +4,7 @@ module WatchTower
4
4
  MAJOR = 0
5
5
  MINOR = 0
6
6
  TINY = 1
7
- PRE = 'beta7'
7
+ PRE = 'beta8'
8
8
 
9
9
  def self.version
10
10
  # Init the version
@@ -1,5 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
+ def mock_pipe(out)
4
+ pipe = mock
5
+ pipe.stubs(:read).returns(out)
6
+ pipe.stubs(:close)
7
+ pipe
8
+ end
9
+
3
10
  module Editor
4
11
  describe Vim do
5
12
  before(:each) do
@@ -9,17 +16,17 @@ module Editor
9
16
  WatchTower.stubs(:which).with('mvim').returns(nil)
10
17
 
11
18
  # Stub systemu
12
- Vim.any_instance.stubs(:systemu).with("/usr/bin/vim --help").returns([0, "", ""])
13
- Vim.any_instance.stubs(:systemu).with("/usr/bin/gvim --help").returns([0, "--remote server", ""])
14
- Vim.any_instance.stubs(:systemu).with("/usr/bin/gvim --servername VIM --remote-send ':source #{Vim::VIM_EXTENSION_PATH}<CR>'")
15
- Vim.any_instance.stubs(:systemu).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([0, <<-EOS, ''])
19
+ Open3.stubs(:popen2).with("/usr/bin/vim --help").returns([mock_pipe(""), mock_pipe(""), mock_pipe("")])
20
+ Open3.stubs(:popen2).with("/usr/bin/gvim --help").returns([mock_pipe(""), mock_pipe("--remote-send"), mock_pipe("")])
21
+ Open3.stubs(:popen2).with("/usr/bin/gvim --servername VIM --remote-send ':source #{Vim::VIM_EXTENSION_PATH}<CR>'").returns([mock_pipe(""), mock_pipe(""), mock_pipe("")])
22
+ Open3.stubs(:popen3).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([mock_pipe(""), mock_pipe(<<-EOS), mock_pipe('')])
16
23
  /path/to/file.rb
17
24
  EOS
18
- Vim.any_instance.stubs(:systemu).with('/usr/bin/gvim --serverlist').returns([0, <<-EOC, ''])
25
+ Open3.stubs(:popen2).with('/usr/bin/gvim --serverlist').yields([mock_pipe(""), mock_pipe(<<-EOC), mock_pipe('')])
19
26
  VIM
20
27
  EOC
21
- Vim.any_instance.stubs(:systemu).with("/usr/bin/gvim --version").
22
- returns [0, <<-EOV, '']
28
+ Open3.stubs(:popen2).with("/usr/bin/gvim --version").
29
+ yields [mock_pipe(""), mock_pipe(<<-EOV), mock_pipe('')]
23
30
  VIM - Vi IMproved 7.3 (2010 Aug 15)
24
31
  Included patches: 1-202, 204-222, 224-322
25
32
  Compiled by 'http://www.opensuse.org/'
@@ -63,11 +70,11 @@ EOV
63
70
  it { should respond_to :supported_vims }
64
71
 
65
72
  it "should return gvim" do
66
- Vim.any_instance.expects(:systemu).with("/usr/bin/vim --help").returns([0, "", ""]).once
67
- Vim.any_instance.expects(:systemu).with("/usr/bin/gvim --help").returns([0, "--remote server", ""]).once
68
73
  WatchTower.expects(:which).with('vim').returns('/usr/bin/vim').once
69
74
  WatchTower.expects(:which).with('gvim').returns('/usr/bin/gvim').once
70
75
  WatchTower.expects(:which).with('mvim').returns(nil).once
76
+ Open3.expects(:popen2).with("/usr/bin/vim --help").returns([mock_pipe(""), mock_pipe(""), mock_pipe("")]).once
77
+ Open3.expects(:popen2).with("/usr/bin/gvim --help").returns([mock_pipe(""), mock_pipe("--remote-send"), mock_pipe("")]).once
71
78
 
72
79
  subject.send :supported_vims
73
80
  subject.instance_variable_get('@vims').should == ['/usr/bin/gvim']
@@ -80,13 +87,25 @@ EOV
80
87
  it "should return /usr/bin/gvim" do
81
88
  subject.send(:editor).should == '/usr/bin/gvim'
82
89
  end
90
+
91
+ it "should return nil if @vims is []" do
92
+ subject.instance_variable_set('@vims', [])
93
+
94
+ subject.send(:editor).should == nil
95
+ end
96
+
97
+ it "should return nil if @vims is nil" do
98
+ subject.instance_variable_set('@vims', nil)
99
+
100
+ subject.send(:editor).should == nil
101
+ end
83
102
  end
84
103
 
85
104
  describe "#servers" do
86
105
  it { should respond_to :servers }
87
106
 
88
107
  it "should return VIM" do
89
- Vim.any_instance.expects(:systemu).with('/usr/bin/gvim --serverlist').returns([0, <<-EOC, '']).once
108
+ Open3.expects(:popen2).with('/usr/bin/gvim --serverlist').yields([mock_pipe(""), mock_pipe(<<-EOC), mock_pipe('')]).once
90
109
  VIM
91
110
  EOC
92
111
  subject.send(:servers).should == ['VIM']
@@ -97,7 +116,7 @@ EOC
97
116
  it { should respond_to :send_extensions_to_editor }
98
117
 
99
118
  it "should send the extensions to vim" do
100
- Vim.any_instance.expects(:systemu).with("/usr/bin/gvim --servername VIM --remote-send ':source #{Vim::VIM_EXTENSION_PATH}<CR>'").once
119
+ Open3.expects(:popen2).with("/usr/bin/gvim --servername VIM --remote-send '<ESC>:source #{Vim::VIM_EXTENSION_PATH}<CR>'").once
101
120
 
102
121
  subject.send :send_extensions_to_editor
103
122
  end
@@ -109,6 +128,18 @@ EOC
109
128
  it "should return true if ViM is running" do
110
129
  subject.is_running?.should be_true
111
130
  end
131
+
132
+ it "should return false if servers is []" do
133
+ Vim.any_instance.stubs(:servers).returns([])
134
+
135
+ subject.is_running?.should be_false
136
+ end
137
+
138
+ it "should return false if servers is nil" do
139
+ Vim.any_instance.stubs(:servers).returns(nil)
140
+
141
+ subject.is_running?.should be_false
142
+ end
112
143
  end
113
144
 
114
145
  describe "#current_paths" do
@@ -120,7 +151,16 @@ EOC
120
151
  subject.current_paths
121
152
  end
122
153
 
123
- it "should call send_extensions_to_editor" do
154
+ it "should not call send_extensions_to_editor if the function is already loaded" do
155
+ Vim.any_instance.expects(:send_extensions_to_editor).never
156
+
157
+ subject.current_paths
158
+ end
159
+
160
+ it "should call send_extensions_to_editor only if the remote did not evaluate the command" do
161
+ Open3.expects(:popen3).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([mock_pipe(""), mock_pipe(""), mock_pipe(<<-EOS)]).twice
162
+ E449: Invalid expression received: Send expression failed.
163
+ EOS
124
164
  Vim.any_instance.expects(:send_extensions_to_editor).once
125
165
 
126
166
  subject.current_paths
@@ -133,7 +173,7 @@ EOC
133
173
  end
134
174
 
135
175
  it "should be able to parse ls output" do
136
- Vim.any_instance.expects(:systemu).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([0, <<-EOS, '']).once
176
+ Open3.expects(:popen3).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([mock_pipe(""), mock_pipe(<<-EOS), mock_pipe('')]).once
137
177
  /path/to/file.rb
138
178
  /path/to/file2.rb
139
179
  EOS
@@ -144,7 +184,7 @@ EOS
144
184
  end
145
185
 
146
186
  it "should not return duplicate documents" do
147
- Vim.any_instance.expects(:systemu).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([0, <<-EOS, '']).once
187
+ Open3.expects(:popen3).with("/usr/bin/gvim --servername VIM --remote-expr 'watchtower#ls()'").returns([mock_pipe(""), mock_pipe(<<-EOS), mock_pipe('')]).once
148
188
  /path/to/file.rb
149
189
  /path/to/file.rb
150
190
  /path/to/file.rb
@@ -65,9 +65,6 @@ MSG
65
65
  s.add_dependency 'sass', '~>3.1.10'
66
66
  s.add_dependency 'sprockets', '~>2.0.2'
67
67
 
68
- # System commands
69
- s.add_dependency 'systemu', '~>2.4.0'
70
-
71
68
  # Crontab editor
72
69
  s.add_dependency 'cronedit', '~>0.3.0'
73
70
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watch_tower
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta7
4
+ version: 0.0.1.beta8
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &6301240 !ruby/object:Gem::Requirement
16
+ requirement: &6542020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *6301240
24
+ version_requirements: *6542020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: i18n
27
- requirement: &6300640 !ruby/object:Gem::Requirement
27
+ requirement: &6563580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.6.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *6300640
35
+ version_requirements: *6563580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activerecord
38
- requirement: &6299840 !ruby/object:Gem::Requirement
38
+ requirement: &6561180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.1.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *6299840
46
+ version_requirements: *6561180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sinatra
49
- requirement: &6315020 !ruby/object:Gem::Requirement
49
+ requirement: &6560120 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.3.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *6315020
57
+ version_requirements: *6560120
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sinatra-snap
60
- requirement: &6313040 !ruby/object:Gem::Requirement
60
+ requirement: &6558920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.3.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *6313040
68
+ version_requirements: *6558920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: haml
71
- requirement: &6310680 !ruby/object:Gem::Requirement
71
+ requirement: &6557280 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 3.1.3
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *6310680
79
+ version_requirements: *6557280
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: grit
82
- requirement: &6338160 !ruby/object:Gem::Requirement
82
+ requirement: &6574640 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.4.1
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *6338160
90
+ version_requirements: *6574640
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: coffee-script
93
- requirement: &6336560 !ruby/object:Gem::Requirement
93
+ requirement: &6573800 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 2.2.0
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *6336560
101
+ version_requirements: *6573800
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: uglifier
104
- requirement: &6335200 !ruby/object:Gem::Requirement
104
+ requirement: &6573120 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 1.0.3
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *6335200
112
+ version_requirements: *6573120
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sass
115
- requirement: &6333680 !ruby/object:Gem::Requirement
115
+ requirement: &6571940 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 3.1.10
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *6333680
123
+ version_requirements: *6571940
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sprockets
126
- requirement: &6332500 !ruby/object:Gem::Requirement
126
+ requirement: &6570400 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,21 +131,10 @@ dependencies:
131
131
  version: 2.0.2
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *6332500
135
- - !ruby/object:Gem::Dependency
136
- name: systemu
137
- requirement: &6331640 !ruby/object:Gem::Requirement
138
- none: false
139
- requirements:
140
- - - ~>
141
- - !ruby/object:Gem::Version
142
- version: 2.4.0
143
- type: :runtime
144
- prerelease: false
145
- version_requirements: *6331640
134
+ version_requirements: *6570400
146
135
  - !ruby/object:Gem::Dependency
147
136
  name: cronedit
148
- requirement: &6330720 !ruby/object:Gem::Requirement
137
+ requirement: &6569280 !ruby/object:Gem::Requirement
149
138
  none: false
150
139
  requirements:
151
140
  - - ~>
@@ -153,10 +142,10 @@ dependencies:
153
142
  version: 0.3.0
154
143
  type: :runtime
155
144
  prerelease: false
156
- version_requirements: *6330720
145
+ version_requirements: *6569280
157
146
  - !ruby/object:Gem::Dependency
158
147
  name: guard
159
- requirement: &6359520 !ruby/object:Gem::Requirement
148
+ requirement: &6583600 !ruby/object:Gem::Requirement
160
149
  none: false
161
150
  requirements:
162
151
  - - ~>
@@ -164,10 +153,10 @@ dependencies:
164
153
  version: 0.8.4
165
154
  type: :development
166
155
  prerelease: false
167
- version_requirements: *6359520
156
+ version_requirements: *6583600
168
157
  - !ruby/object:Gem::Dependency
169
158
  name: guard-bundler
170
- requirement: &6358560 !ruby/object:Gem::Requirement
159
+ requirement: &6582220 !ruby/object:Gem::Requirement
171
160
  none: false
172
161
  requirements:
173
162
  - - ~>
@@ -175,10 +164,10 @@ dependencies:
175
164
  version: 0.1.3
176
165
  type: :development
177
166
  prerelease: false
178
- version_requirements: *6358560
167
+ version_requirements: *6582220
179
168
  - !ruby/object:Gem::Dependency
180
169
  name: guard-rspec
181
- requirement: &6358020 !ruby/object:Gem::Requirement
170
+ requirement: &6581500 !ruby/object:Gem::Requirement
182
171
  none: false
183
172
  requirements:
184
173
  - - ~>
@@ -186,10 +175,10 @@ dependencies:
186
175
  version: 0.4.5
187
176
  type: :development
188
177
  prerelease: false
189
- version_requirements: *6358020
178
+ version_requirements: *6581500
190
179
  - !ruby/object:Gem::Dependency
191
180
  name: guard-sprockets2
192
- requirement: &6357400 !ruby/object:Gem::Requirement
181
+ requirement: &6580240 !ruby/object:Gem::Requirement
193
182
  none: false
194
183
  requirements:
195
184
  - - ~>
@@ -197,10 +186,10 @@ dependencies:
197
186
  version: 0.0.5
198
187
  type: :development
199
188
  prerelease: false
200
- version_requirements: *6357400
189
+ version_requirements: *6580240
201
190
  - !ruby/object:Gem::Dependency
202
191
  name: yard
203
- requirement: &6356720 !ruby/object:Gem::Requirement
192
+ requirement: &6579440 !ruby/object:Gem::Requirement
204
193
  none: false
205
194
  requirements:
206
195
  - - ~>
@@ -208,10 +197,10 @@ dependencies:
208
197
  version: 0.7.2
209
198
  type: :development
210
199
  prerelease: false
211
- version_requirements: *6356720
200
+ version_requirements: *6579440
212
201
  - !ruby/object:Gem::Dependency
213
202
  name: rspec
214
- requirement: &6355760 !ruby/object:Gem::Requirement
203
+ requirement: &6577800 !ruby/object:Gem::Requirement
215
204
  none: false
216
205
  requirements:
217
206
  - - ~>
@@ -219,10 +208,10 @@ dependencies:
219
208
  version: 2.6.0
220
209
  type: :development
221
210
  prerelease: false
222
- version_requirements: *6355760
211
+ version_requirements: *6577800
223
212
  - !ruby/object:Gem::Dependency
224
213
  name: rspec-rails
225
- requirement: &6354780 !ruby/object:Gem::Requirement
214
+ requirement: &6592720 !ruby/object:Gem::Requirement
226
215
  none: false
227
216
  requirements:
228
217
  - - ~>
@@ -230,10 +219,10 @@ dependencies:
230
219
  version: 2.6.1
231
220
  type: :development
232
221
  prerelease: false
233
- version_requirements: *6354780
222
+ version_requirements: *6592720
234
223
  - !ruby/object:Gem::Dependency
235
224
  name: capybara
236
- requirement: &6354080 !ruby/object:Gem::Requirement
225
+ requirement: &6591440 !ruby/object:Gem::Requirement
237
226
  none: false
238
227
  requirements:
239
228
  - - ~>
@@ -241,10 +230,10 @@ dependencies:
241
230
  version: 1.1.1
242
231
  type: :development
243
232
  prerelease: false
244
- version_requirements: *6354080
233
+ version_requirements: *6591440
245
234
  - !ruby/object:Gem::Dependency
246
235
  name: launchy
247
- requirement: &6352980 !ruby/object:Gem::Requirement
236
+ requirement: &6588580 !ruby/object:Gem::Requirement
248
237
  none: false
249
238
  requirements:
250
239
  - - ~>
@@ -252,10 +241,10 @@ dependencies:
252
241
  version: 2.0.5
253
242
  type: :development
254
243
  prerelease: false
255
- version_requirements: *6352980
244
+ version_requirements: *6588580
256
245
  - !ruby/object:Gem::Dependency
257
246
  name: mocha
258
- requirement: &6351880 !ruby/object:Gem::Requirement
247
+ requirement: &6587320 !ruby/object:Gem::Requirement
259
248
  none: false
260
249
  requirements:
261
250
  - - ~>
@@ -263,10 +252,10 @@ dependencies:
263
252
  version: 0.10.0
264
253
  type: :development
265
254
  prerelease: false
266
- version_requirements: *6351880
255
+ version_requirements: *6587320
267
256
  - !ruby/object:Gem::Dependency
268
257
  name: factory_girl
269
- requirement: &6375220 !ruby/object:Gem::Requirement
258
+ requirement: &6585700 !ruby/object:Gem::Requirement
270
259
  none: false
271
260
  requirements:
272
261
  - - ~>
@@ -274,10 +263,10 @@ dependencies:
274
263
  version: 2.1.2
275
264
  type: :development
276
265
  prerelease: false
277
- version_requirements: *6375220
266
+ version_requirements: *6585700
278
267
  - !ruby/object:Gem::Dependency
279
268
  name: timecop
280
- requirement: &6374000 !ruby/object:Gem::Requirement
269
+ requirement: &6605860 !ruby/object:Gem::Requirement
281
270
  none: false
282
271
  requirements:
283
272
  - - ~>
@@ -285,10 +274,10 @@ dependencies:
285
274
  version: 0.3.5
286
275
  type: :development
287
276
  prerelease: false
288
- version_requirements: *6374000
277
+ version_requirements: *6605860
289
278
  - !ruby/object:Gem::Dependency
290
279
  name: pry
291
- requirement: &6369980 !ruby/object:Gem::Requirement
280
+ requirement: &6603500 !ruby/object:Gem::Requirement
292
281
  none: false
293
282
  requirements:
294
283
  - - ~>
@@ -296,7 +285,7 @@ dependencies:
296
285
  version: 0.9.6.2
297
286
  type: :development
298
287
  prerelease: false
299
- version_requirements: *6369980
288
+ version_requirements: *6603500
300
289
  description: ! 'Did you ever want to keep track of how much time you _really_ spend
301
290
  on all of
302
291
 
@@ -342,6 +331,7 @@ files:
342
331
  - .gitignore
343
332
  - .todo
344
333
  - .travis.yml
334
+ - CREDITS.md
345
335
  - Gemfile
346
336
  - Guardfile
347
337
  - MIT-LICENSE
@@ -423,7 +413,7 @@ files:
423
413
  - lib/watch_tower/server/presenters/file_presenter.rb
424
414
  - lib/watch_tower/server/presenters/project_presenter.rb
425
415
  - lib/watch_tower/server/public/assets/WatchTower-58eff0713efffbc6054defddc879e0b1.jpg
426
- - lib/watch_tower/server/public/assets/application-6a1be75d4fd6a545faceb638e47a2486.js
416
+ - lib/watch_tower/server/public/assets/application-386eb3efa6bdd52fa22b0b715d80fcc9.js
427
417
  - lib/watch_tower/server/public/assets/application-b8c3ec9943038da13afb0c29ade74542.css
428
418
  - lib/watch_tower/server/public/assets/calendar-379834cd6e6321a940b662ace47f3032.gif
429
419
  - lib/watch_tower/server/public/assets/calendar-blue-d6aa74feef7ee4287532761db99a6c0a.gif