gitdocs 0.4.8 → 0.4.9

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,3 +1,8 @@
1
+ 0.4.9 (12/29/2011)
2
+
3
+ * Adds configuration for web port in settings
4
+ * Adds support for 'add' and 'remove' shares in settings
5
+
1
6
  0.4.8 (12/29/2011)
2
7
 
3
8
  * Only encode to utf-8 on ruby 1.9.x
data/lib/gitdocs.rb CHANGED
@@ -18,10 +18,12 @@ module Gitdocs
18
18
 
19
19
  DEBUG = ENV['DEBUG']
20
20
 
21
- def self.start(config_root = nil, debug = DEBUG, &blk)
21
+ # Gitdocs.start(:config_root => "...", :debug => true)
22
+ def self.start(options={}, &blk)
23
+ options = { :debug => DEBUG, :config_root => nil }.merge(options)
22
24
  @manager.stop if @manager
23
- @manager = Manager.new(config_root, debug, &blk)
24
- @manager.start
25
+ @manager = Manager.new(options[:config_root], options[:debug], &blk)
26
+ @manager.start(options[:port])
25
27
  end
26
28
 
27
29
  def self.restart
data/lib/gitdocs/cli.rb CHANGED
@@ -8,13 +8,14 @@ module Gitdocs
8
8
 
9
9
  desc "start", "Starts a daemonized gitdocs process"
10
10
  method_option :debug, :type => :boolean, :aliases => "-D"
11
+ method_option :port, :type => :string, :aliases => "-p"
11
12
  def start
12
13
  if self.stopped? && !options[:debug]
13
- self.runner.execute { Gitdocs.start }
14
+ self.runner.execute { Gitdocs.start(:port => options[:port]) }
14
15
  self.running? ? say("Started gitdocs", :green) : say("Failed to start gitdocs", :red)
15
16
  elsif self.stopped? && options[:debug]
16
17
  say "Starting in debug mode", :yellow
17
- Gitdocs.start(nil, true)
18
+ Gitdocs.start(:debug => true, :port => options[:port])
18
19
  else # already running
19
20
  say "Gitdocs is already running, please use restart", :red
20
21
  end
@@ -35,7 +35,7 @@ module Gitdocs
35
35
  end
36
36
 
37
37
  class Config < ActiveRecord::Base
38
- attr_accessible :load_browser_on_startup, :start_web_frontend
38
+ attr_accessible :load_browser_on_startup, :start_web_frontend, :web_frontend_port
39
39
  end
40
40
 
41
41
  def add_path(path, opts = nil)
@@ -23,7 +23,7 @@ module Gitdocs
23
23
  results
24
24
  end
25
25
 
26
- def start
26
+ def start(web_port=nil)
27
27
  self.log "Starting Gitdocs v#{VERSION}..."
28
28
  self.log "Using configuration root: '#{self.config.config_root}'"
29
29
  self.log "Shares: #{config.shares.map(&:inspect).join(", ")}"
@@ -41,12 +41,13 @@ module Gitdocs
41
41
  @runners.each(&:run)
42
42
  # Start the web front-end
43
43
  if self.config.global.start_web_frontend
44
- Server.new(self, *@runners).start
44
+ web_port ||= self.config.global.web_frontend_port
45
+ Server.new(self, *@runners).start(web_port.to_i)
45
46
  EM.defer( proc {
46
47
  i = 0
47
48
  web_started = false
48
49
  begin
49
- TCPSocket.open('127.0.0.1', 8888).close
50
+ TCPSocket.open('127.0.0.1', web_port.to_i).close
50
51
  web_started = true
51
52
  rescue Errno::ECONNREFUSED
52
53
  self.log "Retrying server loop..."
@@ -54,7 +55,7 @@ module Gitdocs
54
55
  i += 1
55
56
  retry if i <= 20
56
57
  end
57
- system("open http://localhost:8888/") if !retrying && self.config.global.load_browser_on_startup && web_started
58
+ system("open http://localhost:#{web_port}/") if !retrying && self.config.global.load_browser_on_startup && web_started
58
59
  }, proc {
59
60
  self.log "Web server running!"
60
61
  })
@@ -0,0 +1,9 @@
1
+ class AddWebPortToConfig < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :configs, :web_frontend_port, :integer, :default => 8888
4
+ end
5
+
6
+ def self.down
7
+ raise
8
+ end
9
+ end
@@ -34,24 +34,14 @@ GitDocs = {
34
34
  var extractor = function(e) { return $(e).data('val') || $(e).text() }
35
35
  $("table#fileListing").tablesorter({ textExtraction : extractor, sortList: [[0,0]] });
36
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
- });
37
+ // Displays a closeable alert within the content pane
38
+ // Gitdocs.showAlert('This is the message', 'success')
39
+ showAlert : function(body, result) {
40
+ if (result == null) result = 'info';
41
+ $('.content div.alert-message').remove();
42
+ var el = $('.content').prepend('<div class="alert-message ' + result +
43
+ '"><a class="close" href="#">×</a>' + body + '</div>');
44
+ $('div.alert-message').alert();
55
45
  }
56
46
  };
57
47
 
@@ -59,7 +49,6 @@ $(document).ready(function() {
59
49
  GitDocs.linkBreadcrumbs();
60
50
  GitDocs.fillDirMeta();
61
51
  StringFormatter.autoLink();
62
- GitDocs.observeSettingsForm();
63
52
  });
64
53
 
65
54
  // Redirect to edit page for new file when new file form is submitted
@@ -0,0 +1,25 @@
1
+ GitDocs.settings = {
2
+ // To make the settings form ajax-y
3
+ observeSettingsForm : function() {
4
+ $('#settings').submit(function(e) {
5
+ e.preventDefault();
6
+ $.ajax({
7
+ type: 'POST', url: this.action, data: $(this).serialize(),
8
+ success: function() {
9
+ GitDocs.showAlert('<p><strong>Settings saved!</strong> Gitdocs has been restarted with your new settings.</p>', 'success')
10
+ }
11
+ });
12
+ return false;
13
+ });
14
+ }
15
+ }
16
+
17
+ $(document).ready(function() {
18
+ GitDocs.settings.observeSettingsForm();
19
+ });
20
+
21
+ // Handle delete for settings form
22
+ $('input.remove_share').live('click', function(e){
23
+ $(this).siblings("input[type=hidden]").val("true")
24
+ $(this).parents("form").submit()
25
+ });
@@ -21,7 +21,8 @@ module Gitdocs
21
21
  end
22
22
 
23
23
  def run
24
- return false unless self.valid? && !self.root.empty?
24
+ return false unless self.valid?
25
+
25
26
  @show_notifications = @share.notification
26
27
  @current_remote = @share.remote_name
27
28
  @current_branch = @share.branch_name
@@ -159,7 +160,7 @@ module Gitdocs
159
160
 
160
161
  def valid?
161
162
  out, status = sh_with_code "git status"
162
- status.success?
163
+ @root.present? && status.success?
163
164
  end
164
165
 
165
166
  def warn(title, msg)
@@ -18,6 +18,7 @@ module Gitdocs
18
18
  Thin::Logging.debug = @manager.debug
19
19
  Thin::Server.start('127.0.0.1', port) do
20
20
  use Rack::Static, :urls => ['/css', '/js', '/img', '/doc'], :root => File.expand_path("../public", __FILE__)
21
+ use Rack::MethodOverride
21
22
  run Renee {
22
23
  if request.path_info == '/'
23
24
  render! "home", :layout => 'app', :locals => {:conf => manager.config, :nav_state => "home" }
@@ -31,7 +32,10 @@ module Gitdocs
31
32
  if remote_branch = share.delete('remote_branch')
32
33
  share['remote_name'], share['branch_name'] = remote_branch.split('/', 2)
33
34
  end
34
- shares[Integer(idx)].update_attributes(share)
35
+ # Update paths
36
+ if share['path'] && !share['path'].empty?
37
+ shares[Integer(idx)].update_attributes(share)
38
+ end
35
39
  end
36
40
  EM.add_timer(0.1) { manager.restart }
37
41
  redirect! '/settings'
@@ -42,8 +46,20 @@ module Gitdocs
42
46
  render! "search", :layout => 'app', :locals => {:conf => manager.config, :results => manager.search(request.GET['q']), :nav_state => nil}
43
47
  end
44
48
 
45
- path('shares').post do
46
- Configuration::Share.create
49
+ path('shares') do
50
+ post do
51
+ Configuration::Share.create
52
+ redirect! '/settings'
53
+ end
54
+
55
+ var(:int) do |id|
56
+ delete do
57
+ share = manager.config.shares.find { |s| s.id == id }
58
+ halt 404 if share.nil?
59
+ share.destroy
60
+ redirect! '/settings'
61
+ end
62
+ end
47
63
  end
48
64
 
49
65
  var :int do |idx|
@@ -1,3 +1,3 @@
1
1
  module Gitdocs
2
- VERSION = "0.4.8"
2
+ VERSION = "0.4.9"
3
3
  end
@@ -26,13 +26,13 @@
26
26
  %p No files were found in this directory.
27
27
 
28
28
  .row
29
- .span6
30
- %form.add
31
- %p Add a file in this directory
32
- %input{:type => 'text', :name => "path", :class => "edit" }
33
- %input{:type => 'submit', :value => "New file", :class => "btn secondary" }
34
29
  .span6
35
30
  %form.upload{ :method => "post", :enctype => "multipart/form-data", :action => "/#{idx}#{request.path_info}?mode=upload" }
36
- %p Upload a file to this directory
31
+ %p Upload file to this directory
37
32
  %input{:type => 'file', :value => "Select a file", :name => "file", :class => "uploader" }
38
33
  %input{:type => 'submit', :value => "Upload file", :class => "btn secondary" }
34
+ .span6
35
+ %form.add
36
+ %p Add new file in this directory
37
+ %input{:type => 'text', :name => "path", :class => "edit", :placeholder => "somefile.md" }
38
+ %input{:type => 'submit', :value => "New file", :class => "btn secondary" }
@@ -1,11 +1,17 @@
1
1
  - @title = "Settings"
2
+ %script{ :src => "/js/settings.js", :type => "text/javascript", :charset => "utf-8" }
2
3
 
3
4
  %form#settings{:method => 'POST', :action => '/settings'}
4
5
  %h2 Gitdocs
5
6
  #config.field.config
6
- %input{:type =>'hidden', :value => '0', :name=>"config[load_browser_on_startup]"}
7
- %input{:type =>'checkbox', :value => '1', :name=>"config[load_browser_on_startup]", :checked => conf.global.load_browser_on_startup ? 'checked' : nil}
8
- %span Open browser on startup?
7
+ %dl
8
+ %dt Web Frontend Port
9
+ %dd
10
+ %input{:type =>'input', :name=>"config[web_frontend_port]", :value => conf.global.web_frontend_port }
11
+ %p
12
+ %input{:type =>'hidden', :value => '0', :name=>"config[load_browser_on_startup]"}
13
+ %input{:type =>'checkbox', :value => '1', :name=>"config[load_browser_on_startup]", :checked => conf.global.load_browser_on_startup ? 'checked' : nil}
14
+ %span Open browser on startup?
9
15
 
10
16
  %h2 Shares
11
17
  - conf.shares.each_with_index do |share, idx|
@@ -41,9 +47,9 @@
41
47
  %input{:type =>'hidden', :value => '0', :name=>"share[#{idx}][notification]"}
42
48
  %input{:type =>'checkbox', :value => '1', :name=>"share[#{idx}][notification]", :checked => share.notification ? 'checked' : nil}
43
49
  %span Notifications?
44
- .delete{ :style => "display: none;" }
45
- %input{:type =>'button', :value => "Delete", :class => "btn danger"}
46
- %input{:type =>'hidden', :name=>"share[#{idx}][delete]"}
50
+ .delete
51
+ %a{ :href => "/shares/#{share.id}", :class => "btn remove_share danger", :"data-method" => "delete"}
52
+ Delete
47
53
 
48
54
  %input{:value => 'Save', :type => 'submit', :class => "btn primary" }
49
55
  %a{ :class => "btn secondary new-share", :href => "/shares", :"data-method" => "post" } Add Share
data/test/test_helper.rb CHANGED
@@ -31,7 +31,7 @@ class MiniTest::Spec
31
31
  end
32
32
  begin
33
33
  puts "RUNNING!"
34
- Gitdocs.start(conf_path) do |conf|
34
+ Gitdocs.start(:config_path => conf_path) do |conf|
35
35
  conf.global.update_attributes(:load_browser_on_startup => false, :start_web_frontend => false)
36
36
  conf.add_path(path, :polling_interval => 0.1, :notification => false)
37
37
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gitdocs
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.8
5
+ version: 0.4.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Josh Hull
@@ -262,6 +262,7 @@ files:
262
262
  - lib/gitdocs/migration/003_create_configs.rb
263
263
  - lib/gitdocs/migration/004_add_index_for_path.rb
264
264
  - lib/gitdocs/migration/005_add_start_web_frontend.rb
265
+ - lib/gitdocs/migration/006_add_web_port_to_config.rb
265
266
  - lib/gitdocs/public/css/app.css
266
267
  - lib/gitdocs/public/css/bootstrap.css
267
268
  - lib/gitdocs/public/css/coderay.css
@@ -308,6 +309,7 @@ files:
308
309
  - lib/gitdocs/public/js/jquery.js
309
310
  - lib/gitdocs/public/js/jquery.tablesorter.js
310
311
  - lib/gitdocs/public/js/search.js
312
+ - lib/gitdocs/public/js/settings.js
311
313
  - lib/gitdocs/public/js/util.js
312
314
  - lib/gitdocs/rendering.rb
313
315
  - lib/gitdocs/runner.rb