gitdocs 0.3.2 → 0.3.3

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/gitdocs.gemspec CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
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"
34
+ s.add_dependency 'shell_tools', "~> 0.1.0"
34
35
 
35
36
  s.add_development_dependency 'minitest', "~> 2.6.1"
36
37
  s.add_development_dependency 'rake'
@@ -4,14 +4,14 @@ body {
4
4
  font-family: Helvetica, Arial, Verdana;
5
5
  }
6
6
 
7
- body h1, h2 {
7
+ h1, h2 {
8
8
  margin: 0;
9
9
  padding-bottom: 0.8em;
10
10
  font-weight: bold;
11
11
  }
12
12
 
13
- body h1 { font-size: 1.8em; }
14
- body h2 { font-size: 1.5em; margin-top: 0.2em; }
13
+ h1 { font-size: 1.8em; }
14
+ h2 { font-size: 1.5em; margin-top: 0.2em; }
15
15
 
16
16
  .nav h1 {
17
17
  text-align: center;
@@ -47,7 +47,7 @@ div.share input {
47
47
  width :100%;
48
48
  }
49
49
 
50
- body .container {
50
+ .container {
51
51
  min-width: 700px;
52
52
  background: #FCEA97;
53
53
  border-style: solid;
@@ -58,21 +58,27 @@ body .container {
58
58
  margin-top: 1.2em;
59
59
  }
60
60
 
61
- body a { text-decoration: none; color: #33e; }
62
- body a:hover { text-decoration: underline; }
61
+ .container .inline-file {
62
+ width:100%;
63
+ min-height: 600px;
64
+ background: white;
65
+ }
66
+
67
+ a { text-decoration: none; color: #33e; }
68
+ a:hover { text-decoration: underline; }
63
69
 
64
- body #editor {
70
+ #editor {
65
71
  position: relative;
66
72
  width: 700px;
67
73
  height: 600px;
68
74
  margin-bottom: 1em;
69
75
  }
70
76
 
71
- body form.upload, form.add {
77
+ form.upload, form.add {
72
78
  padding-top: 1.4em;
73
79
  }
74
80
 
75
- body form.upload p, form.add p {
81
+ form.upload p, form.add p {
76
82
  padding-bottom: 0.6em;
77
83
  font-weight: bold;
78
84
  }
@@ -1,5 +1,7 @@
1
1
  module Gitdocs
2
2
  class Runner
3
+ include ShellTools
4
+
3
5
  attr_reader :root, :listener
4
6
 
5
7
  def initialize(share)
@@ -148,18 +150,10 @@ module Gitdocs
148
150
  (val.nil? || val.empty?) ? default : val
149
151
  end
150
152
 
151
- def sh(cmd)
152
- out, code = sh_with_code(cmd)
153
- code == 0 ? out : raise(out.empty? ? "Running `#{cmd}' failed. Run this command directly for more detailed output." : out)
154
- end
155
-
156
153
  # Run in shell, return both status and output
157
154
  # @see #sh
158
155
  def sh_with_code(cmd)
159
- cmd << " 2>&1"
160
- outbuf = ''
161
- outbuf = `cd "#{@root}" && #{cmd}`
162
- [outbuf, $?]
156
+ ShellTools.sh_with_code(cmd, @root)
163
157
  end
164
158
  end
165
159
  end
@@ -1,6 +1,7 @@
1
1
  require 'thin'
2
2
  require 'renee'
3
3
  require 'coderay'
4
+ require 'uri'
4
5
 
5
6
  module Gitdocs
6
7
  class Server
@@ -37,7 +38,7 @@ module Gitdocs
37
38
  var :int do |idx|
38
39
  gd = gds[idx]
39
40
  halt 404 if gd.nil?
40
- file_path = request.path_info
41
+ file_path = URI.unescape(request.path_info)
41
42
  file_ext = File.extname(file_path)
42
43
  expanded_path = File.expand_path(".#{file_path}", gd.root)
43
44
  halt 400 unless expanded_path[/^#{Regexp.quote(gd.root)}/]
@@ -45,7 +46,8 @@ module Gitdocs
45
46
  parent = '' if parent == '/'
46
47
  parent = nil if parent == '.'
47
48
  locals = {:idx => idx, :parent => parent, :root => gd.root, :file_path => expanded_path}
48
- mode, mime = request.params['mode'], `file -I #{expanded_path}`.strip
49
+ mode, mime = request.params['mode'], `file -I #{ShellTools.escape(expanded_path)}`.strip
50
+ puts "mode, mime: #{mode.inspect}, #{mime.inspect}"
49
51
  if mode == 'save' # Saving
50
52
  File.open(expanded_path, 'w') { |f| f.print request.params['data'] }
51
53
  redirect! "/" + idx.to_s + file_path
@@ -65,11 +67,15 @@ module Gitdocs
65
67
  elsif mode == 'edit' && mime.match(%r{text/}) # edit file
66
68
  contents = File.read(expanded_path)
67
69
  render! "edit", :layout => 'app', :locals => locals.merge(:contents => contents)
68
- elsif mode != 'raw' && mime.match(%r{text/}) # render file
70
+ elsif mode != 'raw' # render file
69
71
  begin # attempting to render file
70
72
  contents = '<div class="tilt">' + Tilt.new(expanded_path).render + '</div>'
71
73
  rescue RuntimeError => e # not tilt supported
72
- contents = '<pre class="CodeRay">' + CodeRay.scan_file(expanded_path).encode(:html) + '</pre>'
74
+ contents = if mime.match(%r{text/})
75
+ '<pre class="CodeRay">' + CodeRay.scan_file(expanded_path).encode(:html) + '</pre>'
76
+ else
77
+ %|<embed class="inline-file" src="/#{idx}#{request.path_info}?mode=raw"></embed>|
78
+ end
73
79
  end
74
80
  render! "file", :layout => 'app', :locals => locals.merge(:contents => contents)
75
81
  else # other file
@@ -1,3 +1,3 @@
1
1
  module Gitdocs
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
data/lib/gitdocs.rb CHANGED
@@ -1,15 +1,17 @@
1
- require 'gitdocs/version'
2
- require 'gitdocs/configuration'
3
- require 'gitdocs/runner'
4
- require 'gitdocs/server'
5
- require 'gitdocs/cli'
6
- require 'gitdocs/manager'
7
1
  require 'thread'
8
2
  require 'rb-fsevent'
9
3
  require 'growl'
10
4
  require 'yajl'
11
5
  require 'dante'
12
6
  require 'socket'
7
+ require 'shell_tools'
8
+
9
+ require 'gitdocs/version'
10
+ require 'gitdocs/configuration'
11
+ require 'gitdocs/runner'
12
+ require 'gitdocs/server'
13
+ require 'gitdocs/cli'
14
+ require 'gitdocs/manager'
13
15
 
14
16
  module Gitdocs
15
17
 
@@ -2,7 +2,7 @@ require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  describe "gitdocs configuration" do
4
4
  before do
5
- capture_out { @config = Gitdocs::Configuration.new("/tmp/gitdocs") }
5
+ ShellTools.capture { @config = Gitdocs::Configuration.new("/tmp/gitdocs") }
6
6
  end
7
7
 
8
8
  it "has sensible default config root" do
data/test/test_helper.rb CHANGED
@@ -11,38 +11,14 @@ FakeWeb.allow_net_connect = false
11
11
  ## Kernel Extensions
12
12
  require 'stringio'
13
13
 
14
- module Kernel
15
- # Redirect standard out, standard error and the buffered logger for sprinkle to StringIO
16
- # capture_stdout { any_commands; you_want } => "all output from the commands"
17
- def capture_out
18
- yield and return if ENV['DEBUG']
19
- begin
20
- old_out, old_err = STDOUT.dup, STDERR.dup
21
- stdout_read, stdout_write = IO.pipe
22
- stderr_read, stderr_write = IO.pipe
23
- $stdout.reopen(stdout_write)
24
- $stderr.reopen(stderr_write)
25
- yield
26
- stdout_write.close
27
- stderr_write.close
28
- out = stdout_read.rewind && stdout_read.read rescue nil
29
- err = stderr_read.rewind && stderr_read.read rescue nil
30
- [out, err]
31
- ensure
32
- $stdout.reopen(old_out)
33
- $stderr.reopen(old_err)
34
- end
35
- end
36
- end
37
-
38
14
  class MiniTest::Spec
39
15
  def with_clones(count = 3)
40
16
  FileUtils.rm_rf("/tmp/gitdocs")
41
17
  master_path = "/tmp/gitdocs/master"
42
18
  FileUtils.mkdir_p("/tmp/gitdocs/master")
43
- capture_out { `git init /tmp/gitdocs/master --bare` }
19
+ ShellTools.capture { `git init /tmp/gitdocs/master --bare` }
44
20
  sub_paths = count.times.map do |c|
45
- capture_out { `cd /tmp/gitdocs && git clone file://#{master_path} #{c}` }
21
+ ShellTools.capture { `cd /tmp/gitdocs && git clone file://#{master_path} #{c}` }
46
22
  conf_path = "/tmp/gitdocs/config/#{c}"
47
23
  FileUtils.mkdir_p(conf_path)
48
24
  ["/tmp/gitdocs/#{c}", conf_path]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gitdocs
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.2
5
+ version: 0.3.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Josh Hull
@@ -158,29 +158,29 @@ dependencies:
158
158
  type: :runtime
159
159
  version_requirements: *id013
160
160
  - !ruby/object:Gem::Dependency
161
- name: minitest
161
+ name: shell_tools
162
162
  prerelease: false
163
163
  requirement: &id014 !ruby/object:Gem::Requirement
164
164
  none: false
165
165
  requirements:
166
166
  - - ~>
167
167
  - !ruby/object:Gem::Version
168
- version: 2.6.1
169
- type: :development
168
+ version: 0.1.0
169
+ type: :runtime
170
170
  version_requirements: *id014
171
171
  - !ruby/object:Gem::Dependency
172
- name: rake
172
+ name: minitest
173
173
  prerelease: false
174
174
  requirement: &id015 !ruby/object:Gem::Requirement
175
175
  none: false
176
176
  requirements:
177
- - - ">="
177
+ - - ~>
178
178
  - !ruby/object:Gem::Version
179
- version: "0"
179
+ version: 2.6.1
180
180
  type: :development
181
181
  version_requirements: *id015
182
182
  - !ruby/object:Gem::Dependency
183
- name: mocha
183
+ name: rake
184
184
  prerelease: false
185
185
  requirement: &id016 !ruby/object:Gem::Requirement
186
186
  none: false
@@ -191,7 +191,7 @@ dependencies:
191
191
  type: :development
192
192
  version_requirements: *id016
193
193
  - !ruby/object:Gem::Dependency
194
- name: fakeweb
194
+ name: mocha
195
195
  prerelease: false
196
196
  requirement: &id017 !ruby/object:Gem::Requirement
197
197
  none: false
@@ -201,6 +201,17 @@ dependencies:
201
201
  version: "0"
202
202
  type: :development
203
203
  version_requirements: *id017
204
+ - !ruby/object:Gem::Dependency
205
+ name: fakeweb
206
+ prerelease: false
207
+ requirement: &id018 !ruby/object:Gem::Requirement
208
+ none: false
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: "0"
213
+ type: :development
214
+ version_requirements: *id018
204
215
  description: Open-source Dropbox using Ruby and Git.
205
216
  email:
206
217
  - joshbuddy@gmail.com