gitdoc 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Rakefile +7 -4
  2. data/TODO +2 -1
  3. data/VERSION +1 -1
  4. data/bin/gitdoc +1 -1
  5. data/gitdoc.rb +64 -13
  6. metadata +56 -8
data/Rakefile CHANGED
@@ -7,10 +7,13 @@ begin
7
7
  gs.email = "myles@myles.id.au"
8
8
  gs.authors = ["Myles Byrne"]
9
9
  gs.require_path = '.'
10
- gs.add_dependency('rdiscount', '>=1.5.8')
11
- gs.add_dependency('haml', '>=2.2.22')
12
- gs.add_dependency('sinatra', '>=1.0')
13
- gs.add_dependency('unicorn','>=3.1.0')
10
+ gs.add_dependency('rdiscount', '~>1.5.8')
11
+ gs.add_dependency('haml', '~>2.2.22')
12
+ gs.add_dependency('sinatra', '~>1.0')
13
+ gs.add_dependency('unicorn','~>3.1.0')
14
+ gs.add_dependency('coffee-script', '~>2.1.1')
15
+ gs.add_dependency('therubyracer', '~>0.8.0') # v8 implementation
16
+ gs.add_dependency('json','~>1.4.6') # dependency of coffee-script
14
17
  end
15
18
  Jeweler::GemcutterTasks.new
16
19
  rescue LoadError
data/TODO CHANGED
@@ -1,5 +1,6 @@
1
1
  * Open web browser after server launches
2
2
  * Less http logging
3
- * TomDoc the public API
4
3
  * A :scriptable option that supports script embedding and an /index.json call
5
4
  * Don't run the server on a port that's in use
5
+ * Support ///cs syntax
6
+ * running `gitdoc` launches gitdoc in current directory
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.0
1
+ 3.2.0
data/bin/gitdoc CHANGED
@@ -19,7 +19,7 @@ GitDoc!
19
19
  END
20
20
 
21
21
  rakefile = <<-END
22
- require 'bundler/setup' unless $LOAD_PATH.detect { |p| p =~ /gitdoc$/ }
22
+ require 'bundler/setup' unless $LOAD_PATH.last =~ /gitdoc$/
23
23
  require 'gitdoc/tasks'
24
24
  END
25
25
 
data/gitdoc.rb CHANGED
@@ -2,32 +2,54 @@ require 'sinatra'
2
2
  require 'rdiscount'
3
3
  require 'haml'
4
4
  require 'sass'
5
- require 'digest/sha1'
5
+
6
+ ## The Public Interface
7
+ #
8
+ # To run gitdoc in a directory create a rackup file like this:
9
+ #
10
+ # require 'gitdoc'
11
+ # GitDoc!
12
+ #
13
+ # Boom. There are also some optional arguments:
14
+ #
15
+ # require 'gitdoc'
16
+ # GitDoc! "Title to use",
17
+ # :header => '<!-- this will appear before the </head> tag -->'
18
+ # # This turns off GitDoc's default css, you still get reset and code
19
+ # # highligting styles
20
+ # :default_styles => false
6
21
 
7
22
  def GitDoc! title = nil, opts = {}
8
23
  dir = File.dirname(File.expand_path(caller.first.split(':').first))
9
24
  set :dir, dir
10
- set :styles, dir + '/styles.sass'
11
25
  set :title, title
12
26
  set :header, opts[:header]
13
27
  set :default_styles, opts[:default_styles] != false
14
28
  run Sinatra::Application
15
29
  end
16
30
 
31
+ ## The Implementation
32
+
17
33
  set :haml, {:format => :html5}
18
34
  set :views, lambda { root }
19
35
  disable :logging # the server always writes its own log anyway
20
36
 
21
37
  helpers do
22
38
 
23
- def md source
39
+ ### Document Compiler
40
+
41
+ require 'digest/sha1'
42
+
43
+ # Compiles a GitDoc document (basically markdown with code highlighting)
44
+ # into html
45
+ def gd source
24
46
  source_without_code = extract_code source
25
47
  html = RDiscount.new(source_without_code).to_html
26
48
  html = highlight_code html
27
49
  newline_entities_for_tag :pre, html
28
50
  end
29
51
 
30
- # extract_code and highlight_code cribbed from:
52
+ # `extract_code` and `highlight_code` based on:
31
53
  # https://github.com/github/gollum/blob/0b8bc597a7e9495b272e5dbb743827f56ccd2fe6/lib/gollum/markup.rb#L367
32
54
 
33
55
  # Replaces all code fragments with a SHA1 hash. Stores the original fragment
@@ -70,29 +92,58 @@ helpers do
70
92
  end
71
93
  end
72
94
 
95
+ ### Coffee Compiler
96
+
97
+ require 'v8'
98
+ require 'coffee-script'
99
+
100
+ def coffee source
101
+ CoffeeScript.compile source
102
+ end
103
+
73
104
  end
74
105
 
106
+ # If the path doesn't have a file extension and a matching GitDoc document
107
+ # exists then it is compiled and rendered
75
108
  get '/*' do |name|
76
109
  name = 'index' if name.empty?
77
110
  file = File.join(settings.dir + '/' + name + '.md')
78
111
  pass unless File.exist? file
79
- @doc = md File.read(file)
112
+ @doc = gd File.read(file)
80
113
  haml :doc
81
114
  end
82
115
 
83
- get '/*.*' do |name,ext|
84
- file = File.join(settings.dir + '/' + name + '.' + ext)
85
- pass unless File.exist? file
86
- send_file file
87
- end
88
-
116
+ # GitDoc document styles
89
117
  get '/.css' do
90
118
  content_type :css
91
119
  styles = sass(:reset)
92
120
  styles += File.read(settings.root + '/highlight.css')
93
121
  styles += sass(:default) if settings.default_styles?
94
- styles += sass(File.read(settings.styles)) if File.exist? settings.styles
122
+ custom_styles = settings.dir + '/styles.sass'
123
+ styles += sass(File.read(custom_styles)) if File.exist? custom_styles
95
124
  styles
96
125
  end
97
126
 
98
- not_found { "404. Oh Noes!" }
127
+ # If the corresponding .coffee file exists it is compiled and rendered
128
+ get '*.coffee.js' do |name|
129
+ file = settings.dir + '/' + name + '.coffee'
130
+ pass unless File.exist? file
131
+ coffee File.read file
132
+ end
133
+
134
+ # If the path matches any file in the directory then send that down
135
+ get '/*.*' do |name,ext|
136
+ file = File.join(settings.dir + '/' + name + '.' + ext)
137
+ pass unless File.exist? file
138
+ send_file file
139
+ end
140
+
141
+ not_found do
142
+ version = File.read(File.dirname(__FILE__)+'/VERSION')
143
+ @doc = gd(
144
+ "# Not Found"+
145
+ "\n\n"+
146
+ "GitDoc version #{version}"
147
+ )
148
+ haml :doc
149
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitdoc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 3.1.0
10
+ version: 3.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Myles Byrne
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-20 00:00:00 +11:00
18
+ date: 2011-01-23 00:00:00 +11:00
19
19
  default_executable: gitdoc
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,7 +24,7 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ">="
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  hash: 19
30
30
  segments:
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ">="
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  hash: 43
46
46
  segments:
@@ -56,7 +56,7 @@ dependencies:
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ">="
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  hash: 15
62
62
  segments:
@@ -71,7 +71,7 @@ dependencies:
71
71
  requirement: &id004 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
- - - ">="
74
+ - - ~>
75
75
  - !ruby/object:Gem::Version
76
76
  hash: 3
77
77
  segments:
@@ -81,6 +81,54 @@ dependencies:
81
81
  version: 3.1.0
82
82
  type: :runtime
83
83
  version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: coffee-script
86
+ prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 9
93
+ segments:
94
+ - 2
95
+ - 1
96
+ - 1
97
+ version: 2.1.1
98
+ type: :runtime
99
+ version_requirements: *id005
100
+ - !ruby/object:Gem::Dependency
101
+ name: therubyracer
102
+ prerelease: false
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ hash: 63
109
+ segments:
110
+ - 0
111
+ - 8
112
+ - 0
113
+ version: 0.8.0
114
+ type: :runtime
115
+ version_requirements: *id006
116
+ - !ruby/object:Gem::Dependency
117
+ name: json
118
+ prerelease: false
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ hash: 11
125
+ segments:
126
+ - 1
127
+ - 4
128
+ - 6
129
+ version: 1.4.6
130
+ type: :runtime
131
+ version_requirements: *id007
84
132
  description:
85
133
  email: myles@myles.id.au
86
134
  executables: