gitdocs 0.4.7 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,32 +1,42 @@
1
- 0.4.1 (12/13/2012)
1
+ 0.4.8 (12/29/2011)
2
2
 
3
- * Adds a basic search to web front-end
4
- * Beginning of the work towards cross-platform notifications
3
+ * Only encode to utf-8 on ruby 1.9.x
4
+ * Fixes so that settings form on the web front-end saves
5
+ * Cleanup the front-end directory listing significantly
6
+ * More robust EM reactor loop handling
5
7
 
6
- 0.4.2 (12/13/2012)
8
+ 0.4.7 (12/15/2011)
7
9
 
8
- * Fixes search on blank results case
10
+ * Re-throw exceptions from reactor loop
11
+ * Socket testing moved to defer block
9
12
 
10
- 0.4.3 (12/13/2012)
13
+ 0.4.5, 0.4.6 (12/14/2011)
11
14
 
12
- * Javascript fixes for front-end
15
+ * Enables logs in ~/.gitdocs/log for easier debugging
16
+ * Fix issue with default sort order on web interface
17
+ * Fixes major mime type detection issues
18
+ * Fixes rendering issues
13
19
 
14
- 0.4.4 (12/14/2012)
20
+ 0.4.4 (12/14/2011)
15
21
 
16
22
  * Lock to eventmachine 1.0
17
23
  * Use mime-types over file for better platform support
18
24
  * Remove signal handling and just leverage EM start/stop
19
25
  * Adds table sorting and file+folder icons in web front-end
20
26
 
21
- 0.4.5, 0.4.6 (12/14/2012)
27
+ 0.4.3 (12/13/2011)
28
+
29
+ * Javascript fixes for front-end
30
+
31
+ 0.4.2 (12/13/2011)
32
+
33
+ * Fixes search on blank results case
34
+
35
+ 0.4.1 (12/13/2011)
36
+
37
+ * Adds a basic search to web front-end
38
+ * Beginning of the work towards cross-platform notifications
39
+
22
40
 
23
- * Enables logs in ~/.gitdocs/log for easier debugging
24
- * Fix issue with default sort order on web interface
25
- * Fixes major mime type detection issues
26
- * Fixes rendering issues
27
41
 
28
- 0.4.7 (12/15/2012)
29
42
 
30
- * Re-throw exceptions from reactor loop
31
- * Socket testing moved to defer block
32
-
@@ -19,15 +19,15 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_dependency 'joshbuddy-guard', '~> 0.10.0'
22
- s.add_dependency 'thin'
22
+ s.add_dependency 'thin', '~> 1.3.1'
23
23
  s.add_dependency 'renee', '~> 0.3.7'
24
24
  s.add_dependency 'redcarpet', '~> 2.0.0'
25
- s.add_dependency 'thor'
26
- s.add_dependency 'coderay'
25
+ s.add_dependency 'thor', '~> 0.14.6'
26
+ s.add_dependency 'coderay', '~> 1.0.4'
27
27
  s.add_dependency 'dante', '~> 0.1.2'
28
28
  s.add_dependency 'growl', '~> 1.0.3'
29
- s.add_dependency 'yajl-ruby'
30
- s.add_dependency 'haml'
29
+ s.add_dependency 'yajl-ruby', '~> 1.1.0'
30
+ s.add_dependency 'haml', '~> 3.1.4'
31
31
  s.add_dependency 'sqlite3', "~> 1.3.4"
32
32
  s.add_dependency 'activerecord', "~> 3.1.0"
33
33
  s.add_dependency 'grit', "~> 2.4.1"
@@ -1,6 +1,7 @@
1
1
  module Gitdocs
2
2
  class Docfile
3
- attr_reader :parent, :path, :name, :author, :modified
3
+ attr_accessor :parent
4
+ attr_reader :path, :name
4
5
 
5
6
  def initialize(path)
6
7
  @path = path
@@ -15,31 +16,8 @@ module Gitdocs
15
16
  File.expand_path(@path, root).include?(expanded_root)
16
17
  end
17
18
 
18
- def file?
19
- true
20
- end
21
- end
22
-
23
- class Docdir < Docfile
24
- attr_accessor :subdirs
25
- attr_accessor :files
26
-
27
- def initialize(path)
28
- super
29
- @subdirs = []
30
- @files = []
31
- end
32
-
33
- def items
34
- (subdirs + files).sort { |a,b| a.name.downcase <=> b.name.downcase }
35
- end
36
-
37
- def parent=(dir)
38
- dir.subdirs.push(self) if dir
39
- end
40
-
41
- def file?
42
- false
19
+ def dir?
20
+ File.directory?(@path)
43
21
  end
44
22
  end
45
23
  end
@@ -29,30 +29,40 @@ module Gitdocs
29
29
  self.log "Shares: #{config.shares.map(&:inspect).join(", ")}"
30
30
  # Start the repo watchers
31
31
  runners = nil
32
- EM.run do
33
- self.log "Starting EM loop..."
34
- @runners = config.shares.map { |share| Runner.new(share) }
35
- @runners.each(&:run)
36
- # Start the web front-end
37
- if self.config.global.start_web_frontend
38
- Server.new(self, *@runners).start
39
- EM.defer( proc {
40
- i = 0
41
- web_started = false
42
- begin
43
- TCPSocket.open('127.0.0.1', 8888).close
44
- web_started = true
45
- rescue Errno::ECONNREFUSED
46
- self.log "Retrying server loop..."
47
- sleep 0.2
48
- i += 1
49
- retry if i <= 20
50
- end
51
- system("open http://localhost:8888/") if self.config.global.load_browser_on_startup && web_started
52
- }, proc {
53
- self.log "Web server running!"
54
- })
32
+ retrying = false
33
+ begin
34
+ EM.run do
35
+ self.log "Starting EM loop..."
36
+ @runners = config.shares.map { |share|
37
+ self.log "Starting #{share}"
38
+ Runner.new(share)
39
+ }
40
+ self.log "Running runners... #{@runners.size}"
41
+ @runners.each(&:run)
42
+ # Start the web front-end
43
+ if self.config.global.start_web_frontend
44
+ Server.new(self, *@runners).start
45
+ EM.defer( proc {
46
+ i = 0
47
+ web_started = false
48
+ begin
49
+ TCPSocket.open('127.0.0.1', 8888).close
50
+ web_started = true
51
+ rescue Errno::ECONNREFUSED
52
+ self.log "Retrying server loop..."
53
+ sleep 0.2
54
+ i += 1
55
+ retry if i <= 20
56
+ end
57
+ system("open http://localhost:8888/") if !retrying && self.config.global.load_browser_on_startup && web_started
58
+ }, proc {
59
+ self.log "Web server running!"
60
+ })
61
+ end
55
62
  end
63
+ rescue Restart
64
+ retrying = true
65
+ retry
56
66
  end
57
67
  rescue Exception => e # Report all errors in log
58
68
  self.log(e.class.inspect + " - " + e.inspect + " - " + e.message.inspect, :error)
@@ -63,8 +73,11 @@ module Gitdocs
63
73
  end
64
74
 
65
75
  def restart
66
- stop
67
- start
76
+ Thread.new do
77
+ Thread.main.raise Restart, "restarting ... "
78
+ sleep 0.1 while EM.reactor_running?
79
+ start
80
+ end
68
81
  end
69
82
 
70
83
  def stop
@@ -33,6 +33,25 @@ GitDocs = {
33
33
  // Enable table sorter
34
34
  var extractor = function(e) { return $(e).data('val') || $(e).text() }
35
35
  $("table#fileListing").tablesorter({ textExtraction : extractor, sortList: [[0,0]] });
36
+ },
37
+ // To make the settings form ajax-y
38
+ observeSettingsForm : function() {
39
+ $('#settings').submit(function(e) {
40
+ e.preventDefault();
41
+ $.ajax({
42
+ type: 'POST',
43
+ url: this.action,
44
+ data: $(this).serialize(),
45
+ success: function() {
46
+ $('.content div.alert-message').remove();
47
+ var el = $('.content').prepend('<div class="alert-message success"><a class="close" href="#">×</a>' +
48
+ '<p><strong>Settings saved!</strong> Gitdocs has been restarted with your new settings.</p>' +
49
+ '</div>');
50
+ $('div.alert-message').alert();
51
+ }
52
+ });
53
+ return false;
54
+ });
36
55
  }
37
56
  };
38
57
 
@@ -40,6 +59,7 @@ $(document).ready(function() {
40
59
  GitDocs.linkBreadcrumbs();
41
60
  GitDocs.fillDirMeta();
42
61
  StringFormatter.autoLink();
62
+ GitDocs.observeSettingsForm();
43
63
  });
44
64
 
45
65
  // Redirect to edit page for new file when new file form is submitted
@@ -51,3 +71,17 @@ $('form.add').live('submit', function(e){
51
71
  window.location = newPath;
52
72
  e.preventDefault(); return false;
53
73
  });
74
+
75
+ // Link method redirection
76
+ $('a[data-method]').live('click', function(e) {
77
+ e.preventDefault();
78
+ var link = $(this);
79
+ var href = link.attr('href'),
80
+ method = link.data('method'),
81
+ target = link.attr('target'),
82
+ form = $('<form method="post" action="' + href + '"></form>'),
83
+ metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
84
+ if (target) { form.attr('target', target); }
85
+ form.hide().append(metadata_input).appendTo('body');
86
+ form.submit();
87
+ });
@@ -0,0 +1,113 @@
1
+ /* ==========================================================
2
+ * bootstrap-alerts.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
4
+ * ==========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================== */
19
+
20
+
21
+ !function( $ ){
22
+
23
+ "use strict"
24
+
25
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+ * ======================================================= */
27
+
28
+ var transitionEnd
29
+
30
+ $(document).ready(function () {
31
+
32
+ $.support.transition = (function () {
33
+ var thisBody = document.body || document.documentElement
34
+ , thisStyle = thisBody.style
35
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
36
+ return support
37
+ })()
38
+
39
+ // set CSS transition event type
40
+ if ( $.support.transition ) {
41
+ transitionEnd = "TransitionEnd"
42
+ if ( $.browser.webkit ) {
43
+ transitionEnd = "webkitTransitionEnd"
44
+ } else if ( $.browser.mozilla ) {
45
+ transitionEnd = "transitionend"
46
+ } else if ( $.browser.opera ) {
47
+ transitionEnd = "oTransitionEnd"
48
+ }
49
+ }
50
+
51
+ })
52
+
53
+ /* ALERT CLASS DEFINITION
54
+ * ====================== */
55
+
56
+ var Alert = function ( content, options ) {
57
+ this.settings = $.extend({}, $.fn.alert.defaults, options)
58
+ this.$element = $(content)
59
+ .delegate(this.settings.selector, 'click', this.close)
60
+ }
61
+
62
+ Alert.prototype = {
63
+
64
+ close: function (e) {
65
+ var $element = $(this).parent('.alert-message')
66
+
67
+ e && e.preventDefault()
68
+ $element.removeClass('in')
69
+
70
+ function removeElement () {
71
+ $element.remove()
72
+ }
73
+
74
+ $.support.transition && $element.hasClass('fade') ?
75
+ $element.bind(transitionEnd, removeElement) :
76
+ removeElement()
77
+ }
78
+
79
+ }
80
+
81
+
82
+ /* ALERT PLUGIN DEFINITION
83
+ * ======================= */
84
+
85
+ $.fn.alert = function ( options ) {
86
+
87
+ if ( options === true ) {
88
+ return this.data('alert')
89
+ }
90
+
91
+ return this.each(function () {
92
+ var $this = $(this)
93
+
94
+ if ( typeof options == 'string' ) {
95
+ return $this.data('alert')[options]()
96
+ }
97
+
98
+ $(this).data('alert', new Alert( this, options ))
99
+
100
+ })
101
+ }
102
+
103
+ $.fn.alert.defaults = {
104
+ selector: '.close'
105
+ }
106
+
107
+ $(document).ready(function () {
108
+ new Alert($('body'), {
109
+ selector: '.alert-message[data-alert] .close'
110
+ })
111
+ })
112
+
113
+ }( window.jQuery || window.ender );
@@ -1,7 +1,7 @@
1
1
  GitDocs.search = {
2
2
  highlight : function(query) {
3
3
  $('.results dl dd').each(function(idx, el) {
4
- var result = $(el).text().replace(query, "<strong>" + query + "</strong>");
4
+ var result = $(el).text().replace(new RegExp(query, 'ig'), function($0) { return"<strong>" + $0 + "</strong>"; });
5
5
  $(el).html(result);
6
6
  });
7
7
  }
@@ -17,6 +17,7 @@ require 'redcarpet'
17
17
  # Markdown.
18
18
  class RedcarpetCompat
19
19
  def to_html(*_dummy)
20
- @markdown.render(@text.encode('utf-8'))
20
+ @text = @text.encode('utf-8') if @text.respond_to?(:encode)
21
+ @markdown.render(@text)
21
22
  end
22
23
  end
@@ -6,7 +6,7 @@ module Gitdocs
6
6
 
7
7
  def initialize(share)
8
8
  @share = share
9
- @root = share.path
9
+ @root = share.path.sub(%r{/+$},'') if share.path
10
10
  @polling_interval = share.polling_interval
11
11
  @icon = File.expand_path("../../img/icon.png", __FILE__)
12
12
  end
@@ -14,14 +14,14 @@ module Gitdocs
14
14
  SearchResult = Struct.new(:file, :context)
15
15
  def search(term)
16
16
  results = []
17
- if result_test = sh_string("git grep #{ShellTools.escape(term)}")
17
+ if result_test = sh_string("git grep -i #{ShellTools.escape(term)}")
18
18
  result_test.scan(/(.*?):([^\n]*)/) { |(file, context)| results << SearchResult.new(file, context) }
19
19
  end
20
20
  results
21
21
  end
22
22
 
23
23
  def run
24
- return false unless self.valid?
24
+ return false unless self.valid? && !self.root.empty?
25
25
  @show_notifications = @share.notification
26
26
  @current_remote = @share.remote_name
27
27
  @current_branch = @share.branch_name
@@ -140,26 +140,21 @@ module Gitdocs
140
140
 
141
141
  IGNORED_FILES = ['.gitignore']
142
142
  # dir_files("some/dir") => [<Docfile>, <Docfile>]
143
- def dir_files(dir)
144
- dir_path = File.expand_path(dir, @root)
145
- files = {}
146
- ls_files = sh_string("git ls-files").split("\n").map { |f| Docfile.new(f) }
147
- ls_files.select { |f| f.within?(dir, @root) }.each do |f|
148
- path = File.expand_path(f.parent, root)
149
- files[path] ||= Docdir.new(path)
150
- files[path].files << f unless IGNORED_FILES.include?(f.name)
151
- end
152
- files.keys.each { |f| files[f].parent = files[File.dirname(f)] }
153
- files[dir_path]
143
+ def dir_files(dir_path)
144
+ Dir[File.join(dir_path, "*")].to_a.map { |path| Docfile.new(path) }
154
145
  end
155
146
 
156
147
  def file_meta(file)
148
+ result = {}
157
149
  file = file.gsub(%r{^/}, '')
158
150
  full_path = File.expand_path(file, @root)
159
- author, modified = sh_string("git log --format='%aN|%ai' -n1 #{ShellTools.escape(file)}").split("|")
151
+ log_result = sh_string("git log --format='%aN|%ai' -n1 #{ShellTools.escape(file)}")
152
+ result = {} unless File.exist?(full_path) && log_result
153
+ author, modified = log_result.split("|")
160
154
  modified = Time.parse(modified.sub(' ', 'T')).utc.iso8601
161
155
  size = (File.symlink?(full_path) || File.directory?(full_path)) ? -1 : File.size(full_path)
162
- { :author => author, :size => size, :modified => modified }
156
+ result = { :author => author, :size => size, :modified => modified }
157
+ result
163
158
  end
164
159
 
165
160
  def valid?
@@ -33,7 +33,7 @@ module Gitdocs
33
33
  end
34
34
  shares[Integer(idx)].update_attributes(share)
35
35
  end
36
- manager.restart
36
+ EM.add_timer(0.1) { manager.restart }
37
37
  redirect! '/settings'
38
38
  end
39
39
  end
@@ -42,6 +42,10 @@ module Gitdocs
42
42
  render! "search", :layout => 'app', :locals => {:conf => manager.config, :results => manager.search(request.GET['q']), :nav_state => nil}
43
43
  end
44
44
 
45
+ path('shares').post do
46
+ Configuration::Share.create
47
+ end
48
+
45
49
  var :int do |idx|
46
50
  gd = gds[idx]
47
51
  halt 404 if gd.nil?
@@ -68,7 +72,7 @@ module Gitdocs
68
72
  elsif !File.exist?(expanded_path) # edit for non-existent file
69
73
  render! "edit", :layout => 'app', :locals => locals.merge(:contents => "")
70
74
  elsif File.directory?(expanded_path) # list directory
71
- contents = gd.dir_files(expanded_path)
75
+ contents = gd.dir_files(expanded_path)
72
76
  render! "dir", :layout => 'app', :locals => locals.merge(:contents => contents)
73
77
  elsif mode == 'delete' # delete file
74
78
  FileUtils.rm(expanded_path)
@@ -1,3 +1,3 @@
1
1
  module Gitdocs
2
- VERSION = "0.4.7"
3
- end
2
+ VERSION = "0.4.8"
3
+ end
@@ -9,6 +9,7 @@
9
9
  %script{ :src => "/js/util.js", :type => "text/javascript", :charset => "utf-8" }
10
10
  %script{ :src => "/js/jquery.js", :type => "text/javascript", :charset => "utf-8" }
11
11
  %script{ :src => "/js/jquery.tablesorter.js", :type => "text/javascript", :charset => "utf-8" }
12
+ %script{ :src => "/js/bootstrap-alerts.js", :type => "text/javascript", :charset => "utf-8" }
12
13
  %script{ :src => "/js/app.js", :type => "text/javascript", :charset => "utf-8" }
13
14
  %body
14
15
  #nav.topbar
@@ -2,24 +2,28 @@
2
2
 
3
3
  = partial("header", :locals => { :parent => parent, :file => false, :idx => idx })
4
4
 
5
- %table#fileListing.condensed-table.zebra-striped
6
- %thead
7
- %tr
8
- %th File
9
- %th Author
10
- %th Last Modified
11
- %th Size
12
-
13
- %tbody
14
- - contents.items.each_with_index do |f, i|
5
+ - if contents && contents.any?
6
+ %table#fileListing.condensed-table.zebra-striped
7
+ %thead
15
8
  %tr
16
- %td
17
- %img{ :src => "/img/#{f.file? ? 'file' : 'folder'}.png", :width => 16, :height => 16 }
18
- %a{ :href => "/#{idx}#{request.path_info}/#{f.name}" }
19
- = f.name
20
- %td.author
21
- %td.modified
22
- %td.size
9
+ %th File
10
+ %th Author
11
+ %th Last Modified
12
+ %th Size
13
+
14
+ %tbody
15
+ - contents.each_with_index do |f, i|
16
+ %tr
17
+ %td
18
+ %img{ :src => "/img/#{f.dir? ? 'folder' : 'file'}.png", :width => 16, :height => 16 }
19
+ %a{ :href => "/#{idx}#{request.path_info}/#{f.name}" }
20
+ = f.name
21
+ %td.author
22
+ %td.modified
23
+ %td.size
24
+
25
+ - if contents.empty?
26
+ %p No files were found in this directory.
23
27
 
24
28
  .row
25
29
  .span6
@@ -1,6 +1,6 @@
1
1
  - @title = "Settings"
2
2
 
3
- %form{:method => 'POST', :action => '/settings'}
3
+ %form#settings{:method => 'POST', :action => '/settings'}
4
4
  %h2 Gitdocs
5
5
  #config.field.config
6
6
  %input{:type =>'hidden', :value => '0', :name=>"config[load_browser_on_startup]"}
@@ -41,8 +41,9 @@
41
41
  %input{:type =>'hidden', :value => '0', :name=>"share[#{idx}][notification]"}
42
42
  %input{:type =>'checkbox', :value => '1', :name=>"share[#{idx}][notification]", :checked => share.notification ? 'checked' : nil}
43
43
  %span Notifications?
44
- .delete
44
+ .delete{ :style => "display: none;" }
45
45
  %input{:type =>'button', :value => "Delete", :class => "btn danger"}
46
46
  %input{:type =>'hidden', :name=>"share[#{idx}][delete]"}
47
47
 
48
- %input{:value => 'Save', :type => 'submit', :class => "btn primary" }
48
+ %input{:value => 'Save', :type => 'submit', :class => "btn primary" }
49
+ %a{ :class => "btn secondary new-share", :href => "/shares", :"data-method" => "post" } Add Share
metadata CHANGED
@@ -1,246 +1,249 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gitdocs
3
- version: !ruby/object:Gem::Version
4
- version: 0.4.7
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.4.8
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Josh Hull
9
9
  - Nathan Esquenazi
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-15 00:00:00.000000000Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
13
+
14
+ date: 2011-12-30 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
16
17
  name: joshbuddy-guard
17
- requirement: &70196233094940 !ruby/object:Gem::Requirement
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
18
20
  none: false
19
- requirements:
21
+ requirements:
20
22
  - - ~>
21
- - !ruby/object:Gem::Version
23
+ - !ruby/object:Gem::Version
22
24
  version: 0.10.0
23
25
  type: :runtime
24
- prerelease: false
25
- version_requirements: *70196233094940
26
- - !ruby/object:Gem::Dependency
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
27
28
  name: thin
28
- requirement: &70196233094500 !ruby/object:Gem::Requirement
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
29
31
  none: false
30
- requirements:
31
- - - ! '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.3.1
34
36
  type: :runtime
35
- prerelease: false
36
- version_requirements: *70196233094500
37
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
38
39
  name: renee
39
- requirement: &70196233093960 !ruby/object:Gem::Requirement
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
40
42
  none: false
41
- requirements:
43
+ requirements:
42
44
  - - ~>
43
- - !ruby/object:Gem::Version
45
+ - !ruby/object:Gem::Version
44
46
  version: 0.3.7
45
47
  type: :runtime
46
- prerelease: false
47
- version_requirements: *70196233093960
48
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
49
50
  name: redcarpet
50
- requirement: &70196233093440 !ruby/object:Gem::Requirement
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
51
53
  none: false
52
- requirements:
54
+ requirements:
53
55
  - - ~>
54
- - !ruby/object:Gem::Version
56
+ - !ruby/object:Gem::Version
55
57
  version: 2.0.0
56
58
  type: :runtime
57
- prerelease: false
58
- version_requirements: *70196233093440
59
- - !ruby/object:Gem::Dependency
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
60
61
  name: thor
61
- requirement: &70196233092900 !ruby/object:Gem::Requirement
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
62
64
  none: false
63
- requirements:
64
- - - ! '>='
65
- - !ruby/object:Gem::Version
66
- version: '0'
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.14.6
67
69
  type: :runtime
68
- prerelease: false
69
- version_requirements: *70196233092900
70
- - !ruby/object:Gem::Dependency
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
71
72
  name: coderay
72
- requirement: &70196233092440 !ruby/object:Gem::Requirement
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
73
75
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 1.0.4
78
80
  type: :runtime
79
- prerelease: false
80
- version_requirements: *70196233092440
81
- - !ruby/object:Gem::Dependency
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
82
83
  name: dante
83
- requirement: &70196233091920 !ruby/object:Gem::Requirement
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
84
86
  none: false
85
- requirements:
87
+ requirements:
86
88
  - - ~>
87
- - !ruby/object:Gem::Version
89
+ - !ruby/object:Gem::Version
88
90
  version: 0.1.2
89
91
  type: :runtime
90
- prerelease: false
91
- version_requirements: *70196233091920
92
- - !ruby/object:Gem::Dependency
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
93
94
  name: growl
94
- requirement: &70196233091380 !ruby/object:Gem::Requirement
95
+ prerelease: false
96
+ requirement: &id008 !ruby/object:Gem::Requirement
95
97
  none: false
96
- requirements:
98
+ requirements:
97
99
  - - ~>
98
- - !ruby/object:Gem::Version
100
+ - !ruby/object:Gem::Version
99
101
  version: 1.0.3
100
102
  type: :runtime
101
- prerelease: false
102
- version_requirements: *70196233091380
103
- - !ruby/object:Gem::Dependency
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
104
105
  name: yajl-ruby
105
- requirement: &70196233090980 !ruby/object:Gem::Requirement
106
+ prerelease: false
107
+ requirement: &id009 !ruby/object:Gem::Requirement
106
108
  none: false
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: 1.1.0
111
113
  type: :runtime
112
- prerelease: false
113
- version_requirements: *70196233090980
114
- - !ruby/object:Gem::Dependency
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
115
116
  name: haml
116
- requirement: &70196233090520 !ruby/object:Gem::Requirement
117
+ prerelease: false
118
+ requirement: &id010 !ruby/object:Gem::Requirement
117
119
  none: false
118
- requirements:
119
- - - ! '>='
120
- - !ruby/object:Gem::Version
121
- version: '0'
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 3.1.4
122
124
  type: :runtime
123
- prerelease: false
124
- version_requirements: *70196233090520
125
- - !ruby/object:Gem::Dependency
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
126
127
  name: sqlite3
127
- requirement: &70196233090000 !ruby/object:Gem::Requirement
128
+ prerelease: false
129
+ requirement: &id011 !ruby/object:Gem::Requirement
128
130
  none: false
129
- requirements:
131
+ requirements:
130
132
  - - ~>
131
- - !ruby/object:Gem::Version
133
+ - !ruby/object:Gem::Version
132
134
  version: 1.3.4
133
135
  type: :runtime
134
- prerelease: false
135
- version_requirements: *70196233090000
136
- - !ruby/object:Gem::Dependency
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
137
138
  name: activerecord
138
- requirement: &70196233089500 !ruby/object:Gem::Requirement
139
+ prerelease: false
140
+ requirement: &id012 !ruby/object:Gem::Requirement
139
141
  none: false
140
- requirements:
142
+ requirements:
141
143
  - - ~>
142
- - !ruby/object:Gem::Version
144
+ - !ruby/object:Gem::Version
143
145
  version: 3.1.0
144
146
  type: :runtime
145
- prerelease: false
146
- version_requirements: *70196233089500
147
- - !ruby/object:Gem::Dependency
147
+ version_requirements: *id012
148
+ - !ruby/object:Gem::Dependency
148
149
  name: grit
149
- requirement: &70196233089020 !ruby/object:Gem::Requirement
150
+ prerelease: false
151
+ requirement: &id013 !ruby/object:Gem::Requirement
150
152
  none: false
151
- requirements:
153
+ requirements:
152
154
  - - ~>
153
- - !ruby/object:Gem::Version
155
+ - !ruby/object:Gem::Version
154
156
  version: 2.4.1
155
157
  type: :runtime
156
- prerelease: false
157
- version_requirements: *70196233089020
158
- - !ruby/object:Gem::Dependency
158
+ version_requirements: *id013
159
+ - !ruby/object:Gem::Dependency
159
160
  name: shell_tools
160
- requirement: &70196233088540 !ruby/object:Gem::Requirement
161
+ prerelease: false
162
+ requirement: &id014 !ruby/object:Gem::Requirement
161
163
  none: false
162
- requirements:
164
+ requirements:
163
165
  - - ~>
164
- - !ruby/object:Gem::Version
166
+ - !ruby/object:Gem::Version
165
167
  version: 0.1.0
166
168
  type: :runtime
167
- prerelease: false
168
- version_requirements: *70196233088540
169
- - !ruby/object:Gem::Dependency
169
+ version_requirements: *id014
170
+ - !ruby/object:Gem::Dependency
170
171
  name: mimetype-fu
171
- requirement: &70196233088080 !ruby/object:Gem::Requirement
172
+ prerelease: false
173
+ requirement: &id015 !ruby/object:Gem::Requirement
172
174
  none: false
173
- requirements:
175
+ requirements:
174
176
  - - ~>
175
- - !ruby/object:Gem::Version
177
+ - !ruby/object:Gem::Version
176
178
  version: 0.1.2
177
179
  type: :runtime
178
- prerelease: false
179
- version_requirements: *70196233088080
180
- - !ruby/object:Gem::Dependency
180
+ version_requirements: *id015
181
+ - !ruby/object:Gem::Dependency
181
182
  name: eventmachine
182
- requirement: &70196233087600 !ruby/object:Gem::Requirement
183
+ prerelease: false
184
+ requirement: &id016 !ruby/object:Gem::Requirement
183
185
  none: false
184
- requirements:
185
- - - ! '>='
186
- - !ruby/object:Gem::Version
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
187
189
  version: 1.0.0.beta.3
188
190
  type: :runtime
189
- prerelease: false
190
- version_requirements: *70196233087600
191
- - !ruby/object:Gem::Dependency
191
+ version_requirements: *id016
192
+ - !ruby/object:Gem::Dependency
192
193
  name: minitest
193
- requirement: &70196233087140 !ruby/object:Gem::Requirement
194
+ prerelease: false
195
+ requirement: &id017 !ruby/object:Gem::Requirement
194
196
  none: false
195
- requirements:
197
+ requirements:
196
198
  - - ~>
197
- - !ruby/object:Gem::Version
199
+ - !ruby/object:Gem::Version
198
200
  version: 2.6.1
199
201
  type: :development
200
- prerelease: false
201
- version_requirements: *70196233087140
202
- - !ruby/object:Gem::Dependency
202
+ version_requirements: *id017
203
+ - !ruby/object:Gem::Dependency
203
204
  name: rake
204
- requirement: &70196233086740 !ruby/object:Gem::Requirement
205
+ prerelease: false
206
+ requirement: &id018 !ruby/object:Gem::Requirement
205
207
  none: false
206
- requirements:
207
- - - ! '>='
208
- - !ruby/object:Gem::Version
209
- version: '0'
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: "0"
210
212
  type: :development
211
- prerelease: false
212
- version_requirements: *70196233086740
213
- - !ruby/object:Gem::Dependency
213
+ version_requirements: *id018
214
+ - !ruby/object:Gem::Dependency
214
215
  name: mocha
215
- requirement: &70196233086280 !ruby/object:Gem::Requirement
216
+ prerelease: false
217
+ requirement: &id019 !ruby/object:Gem::Requirement
216
218
  none: false
217
- requirements:
218
- - - ! '>='
219
- - !ruby/object:Gem::Version
220
- version: '0'
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: "0"
221
223
  type: :development
222
- prerelease: false
223
- version_requirements: *70196233086280
224
- - !ruby/object:Gem::Dependency
224
+ version_requirements: *id019
225
+ - !ruby/object:Gem::Dependency
225
226
  name: fakeweb
226
- requirement: &70196233085840 !ruby/object:Gem::Requirement
227
+ prerelease: false
228
+ requirement: &id020 !ruby/object:Gem::Requirement
227
229
  none: false
228
- requirements:
229
- - - ! '>='
230
- - !ruby/object:Gem::Version
231
- version: '0'
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: "0"
232
234
  type: :development
233
- prerelease: false
234
- version_requirements: *70196233085840
235
+ version_requirements: *id020
235
236
  description: Open-source Dropbox using Ruby and Git.
236
- email:
237
+ email:
237
238
  - joshbuddy@gmail.com
238
239
  - nesquena@gmail.com
239
- executables:
240
+ executables:
240
241
  - gitdocs
241
242
  extensions: []
243
+
242
244
  extra_rdoc_files: []
243
- files:
245
+
246
+ files:
244
247
  - .gitignore
245
248
  - CHANGELOG
246
249
  - Gemfile
@@ -300,6 +303,7 @@ files:
300
303
  - lib/gitdocs/public/js/ace/worker-css.js
301
304
  - lib/gitdocs/public/js/ace/worker-javascript.js
302
305
  - lib/gitdocs/public/js/app.js
306
+ - lib/gitdocs/public/js/bootstrap-alerts.js
303
307
  - lib/gitdocs/public/js/edit.js
304
308
  - lib/gitdocs/public/js/jquery.js
305
309
  - lib/gitdocs/public/js/jquery.tablesorter.js
@@ -324,35 +328,32 @@ files:
324
328
  - test/test_helper.rb
325
329
  homepage: http://engineering.gomiso.com/2011/11/30/collaborate-and-track-tasks-with-ease-using-gitdocs/
326
330
  licenses: []
331
+
327
332
  post_install_message:
328
333
  rdoc_options: []
329
- require_paths:
334
+
335
+ require_paths:
330
336
  - lib
331
- required_ruby_version: !ruby/object:Gem::Requirement
337
+ required_ruby_version: !ruby/object:Gem::Requirement
332
338
  none: false
333
- requirements:
334
- - - ! '>='
335
- - !ruby/object:Gem::Version
336
- version: '0'
337
- segments:
338
- - 0
339
- hash: -356674648532103914
340
- required_rubygems_version: !ruby/object:Gem::Requirement
339
+ requirements:
340
+ - - ">="
341
+ - !ruby/object:Gem::Version
342
+ version: "0"
343
+ required_rubygems_version: !ruby/object:Gem::Requirement
341
344
  none: false
342
- requirements:
343
- - - ! '>='
344
- - !ruby/object:Gem::Version
345
- version: '0'
346
- segments:
347
- - 0
348
- hash: -356674648532103914
345
+ requirements:
346
+ - - ">="
347
+ - !ruby/object:Gem::Version
348
+ version: "0"
349
349
  requirements: []
350
+
350
351
  rubyforge_project: gitdocs
351
- rubygems_version: 1.8.10
352
+ rubygems_version: 1.8.12
352
353
  signing_key:
353
354
  specification_version: 3
354
355
  summary: Open-source Dropbox using Ruby and Git
355
- test_files:
356
+ test_files:
356
357
  - test/configuration_test.rb
357
358
  - test/runner_test.rb
358
359
  - test/test_helper.rb