gitdoc 3.1.0 → 3.2.0

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.
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: