watch_tower 0.0.1.beta7 → 0.0.1.beta8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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