madness 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 667ab17b01bf2fdd81d2b41f224f944f93ebbcd4
4
- data.tar.gz: beb06296be69db6263f654008018f9ae48a6feea
3
+ metadata.gz: 522b6812a30a5263c3860e0dd78d9d516d75142e
4
+ data.tar.gz: dec8f6ee48993a3f02318bd43f3469897544c72a
5
5
  SHA512:
6
- metadata.gz: 0eb617a3a992cd770850cd60ca9a11d88e03f1a05316dbd98e40d0b0e8afc844175f58557ed6501081efa93e1f694fd3788d2e7c6a4bd253fe348a42685edac8
7
- data.tar.gz: 1d823674f3222079ce70a8f0454e7b4a1e83d2d11fe6ac6aac4189dfed180d9ca2cbda005949129d4db44310be325cb065d4b5836e3468ce63b206af6f5243f5
6
+ metadata.gz: c23ac24a8659d80b208020c332c32166d1066874392dd1a1ecf5ff8619a1610caf3832f122b5d40c1c7cd9a58db195529e3585ae16b6b9fd2a30126882720685
7
+ data.tar.gz: e757685713c3379b1cf91f2cb55721b536fb2bb76434a451cf8be4fd3659674cf4066b15173e5cf25562849c40511db0110f111d18f6080294625776185686ce
data/README.md CHANGED
@@ -82,6 +82,28 @@ line_numbers: true
82
82
  ```
83
83
 
84
84
 
85
+ Tips
86
+ --------------------------------------------------
87
+
88
+ **Automatic H1**
89
+ If your markdown document does not start with a level 1 heading, it
90
+ will be automatically added based on the file name.
91
+
92
+ **Hidden Directories**
93
+ Directories that begin with an underscore will not be displayed in the
94
+ navigation.
95
+
96
+ **Images and Static Files**
97
+ Your markdown directory can have a `public` folder. Anything in it
98
+ will be served as is. For example, if you have `public/images/ok.png`
99
+ you can access it from your markdown file by typing:
100
+
101
+ ```markdown
102
+ ![alt text](/images/ok.png)
103
+ ```
104
+
105
+
85
106
  ---
86
107
 
87
108
  [Screenshot]: https://raw.githubusercontent.com/DannyBen/madness/master/screenshot.png
109
+
@@ -1,24 +1,3 @@
1
- * {
2
- box-sizing: border-box; }
3
-
4
- p {
5
- margin-top: 0;
6
- margin-bottom: 10px; }
7
-
8
- blockquote {
9
- margin: 0;
10
- padding: 0 15px;
11
- color: #777;
12
- border-left: 4px solid #ddd; }
13
- blockquote > :first-child {
14
- margin-top: 0; }
15
- blockquote > :last-child {
16
- margin-bottom: 0; }
17
-
18
- p, blockquote, ul, ol, dl, table, pre {
19
- margin-top: 0;
20
- margin-bottom: 16px; }
21
-
22
1
  body {
23
2
  -ms-text-size-adjust: 100%;
24
3
  -webkit-text-size-adjust: 100%;
@@ -218,6 +197,27 @@ kbd {
218
197
  border-radius: 3px;
219
198
  box-shadow: inset 0 -1px 0 #bbb; }
220
199
 
200
+ * {
201
+ box-sizing: border-box; }
202
+
203
+ p {
204
+ margin-top: 0;
205
+ margin-bottom: 10px; }
206
+
207
+ blockquote {
208
+ margin: 0;
209
+ padding: 0 15px;
210
+ color: #777;
211
+ border-left: 4px solid #ddd; }
212
+ blockquote > :first-child {
213
+ margin-top: 0; }
214
+ blockquote > :last-child {
215
+ margin-bottom: 0; }
216
+
217
+ p, blockquote, ul, ol, dl, table, pre {
218
+ margin-top: 0;
219
+ margin-bottom: 16px; }
220
+
221
221
  body {
222
222
  max-width: 1300px;
223
223
  margin: 0 auto; }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "mappings": "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",
4
- "sources": ["../../styles/_general.scss","../../styles/_typography.scss","../../styles/_table.scss","../../styles/_anchor.scss","../../styles/_list.scss","../../styles/_code.scss","../../styles/_coderay.scss","../../styles/_image.scss","../../styles/_line.scss","../../styles/_keyboard.scss","../../styles/main.scss"],
3
+ "mappings": "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",
4
+ "sources": ["../../styles/_typography.scss","../../styles/_table.scss","../../styles/_anchor.scss","../../styles/_list.scss","../../styles/_code.scss","../../styles/_coderay.scss","../../styles/_image.scss","../../styles/_line.scss","../../styles/_keyboard.scss","../../styles/_general.scss","../../styles/main.scss"],
5
5
  "names": [],
6
6
  "file": "main.css"
7
7
  }
@@ -1,4 +1,3 @@
1
- @import "general";
2
1
  @import "typography";
3
2
  @import "table";
4
3
  @import "anchor";
@@ -8,3 +7,6 @@
8
7
  @import "image";
9
8
  @import "line";
10
9
  @import "keyboard";
10
+
11
+ // Last
12
+ @import "general";
@@ -10,6 +10,7 @@ require "sinatra/reloader"
10
10
  require 'sass/plugin/rack'
11
11
  require 'docopt'
12
12
  require 'colsole'
13
+ require 'rack/contrib/try_static'
13
14
 
14
15
  require 'madness/version'
15
16
  require 'madness/settings'
@@ -20,3 +21,4 @@ require 'madness/document'
20
21
  require 'madness/navigation'
21
22
  require 'madness/breadcrumbs'
22
23
  require 'madness/command_line'
24
+
@@ -1,4 +1,7 @@
1
1
  module Madness
2
+
3
+ # Handle breadcumbs generation by converting a path to an array
4
+ # of links
2
5
  class Breadcrumbs
3
6
  attr_reader :path
4
7
 
@@ -1,11 +1,12 @@
1
1
  module Madness
2
+
3
+ # Handle command line execution. Used by bin/madness.
2
4
  class CommandLine
3
5
  include Singleton
4
6
  include Colsole
5
7
 
6
- def initialize
7
- end
8
-
8
+ # Without any argument, we run the server in the current directory.
9
+ # Otherwise, we will set some options before executing.
9
10
  def execute(argv=[])
10
11
  if argv.empty?
11
12
  launch_server
@@ -16,6 +17,8 @@ module Madness
16
17
 
17
18
  private
18
19
 
20
+ # Execute the docopt engine to parse the options and then launch the
21
+ # server.
19
22
  def launch_server_with_options(argv)
20
23
  doc = File.read File.expand_path('docopt.txt', __dir__)
21
24
  begin
@@ -27,16 +30,22 @@ module Madness
27
30
  end
28
31
  end
29
32
 
33
+ # Launch the server, but not before doing some checks and making sure
34
+ # we ask it to "prepare". This will set the server options such as port
35
+ # and static files folder.
30
36
  def launch_server
31
37
  unless File.directory? config.path
32
- puts "Invalid path (#{config.path})"
38
+ STDERR.puts "Invalid path (#{config.path})"
33
39
  return
34
40
  end
35
41
 
36
42
  show_status
43
+ Server.prepare
37
44
  Server.run!
38
45
  end
39
46
 
47
+ # Get the arguments as provided by docopt, and set them to our own
48
+ # config object.
40
49
  def set_config(args)
41
50
  config.path = args['PATH'] if args['PATH']
42
51
  config.port = args['--port'] if args['--port']
@@ -46,6 +55,8 @@ module Madness
46
55
  config.line_numbers = false if args['--no-line-numbers']
47
56
  end
48
57
 
58
+ # Say hello to everybody when the server starts, showing the known
59
+ # config.
49
60
  def show_status
50
61
  say_status :start, 'the madness'
51
62
  say_status :listen, "#{config.bind}:#{config.port}", :txtblu
@@ -1,9 +1,16 @@
1
1
  module Madness
2
+
3
+ # Handle a single markdown document.
2
4
  class Document
3
5
  include ServerHelper
4
6
 
5
7
  attr_reader :file, :dir, :path, :type
6
8
 
9
+ # At initialization, we handle three file "types":
10
+ # :readme - in case the path is a directory, then the only file we
11
+ # MAY show, is the README.md in it
12
+ # :file - in case the path is a *.md file
13
+ # :empty - in any other case, we don't know.
7
14
  def initialize(path)
8
15
  @path = path
9
16
 
@@ -24,10 +31,12 @@ module Madness
24
31
  end
25
32
  end
26
33
 
34
+ # Return the HTML for that document
27
35
  def content
28
36
  @content ||= content!
29
37
  end
30
38
 
39
+ # Return the HTML for that document, force re-read.
31
40
  def content!
32
41
  if File.exist?(file)
33
42
  html = markdown_to_html html
@@ -37,6 +46,7 @@ module Madness
37
46
  end
38
47
  end
39
48
 
49
+ # Return a reasonable HTML title for the file or directory
40
50
  def title
41
51
  if file =~ /README.md/
42
52
  result = File.basename File.dirname(file)
@@ -48,6 +58,9 @@ module Madness
48
58
 
49
59
  private
50
60
 
61
+ # Convert markdown to HTML, wit hsome additional processing:
62
+ # 1. Syntax highilghting
63
+ # 2. Prepend H1 if needed
51
64
  def markdown_to_html(html)
52
65
  html = RDiscount.new(File.read file).to_html
53
66
  html = syntax_highlight(html) if config.highlighter
@@ -55,6 +68,7 @@ module Madness
55
68
  html
56
69
  end
57
70
 
71
+ # If the document does not start with an H1 tag, add it.
58
72
  def prepend_h1(html)
59
73
  unless html[0..3] == "<h1>"
60
74
  html = "<h1>#{title}</h1>\n#{html}"
@@ -62,6 +76,14 @@ module Madness
62
76
  html
63
77
  end
64
78
 
79
+ # Apply syntax highlighting with CodeRay. This will parse for any
80
+ # <code class='LANG'> sections in the HTML, pass it to CodeRay for
81
+ # highlighting.
82
+ # Since CodeRay adds another HTML escaping, on top of what RDiscount
83
+ # does, we unescape it before passing it to CodeRay.
84
+ #
85
+ # Open StackOverflow question:
86
+ # http://stackoverflow.com/questions/37771279/prevent-double-escaping-with-coderay-and-rdiscount
65
87
  def syntax_highlight(html)
66
88
  line_numbers = config.line_numbers ? :table : nil
67
89
  opts = { css: :style, wrap: nil, line_numbers: line_numbers }
@@ -1,29 +1,49 @@
1
1
  module Madness
2
+ # Handle the navigation links for a given directory
2
3
  class Navigation
3
4
  include ServerHelper
4
5
 
5
6
  attr_reader :links, :caption
6
7
 
7
8
  def initialize(dir)
8
- files = Dir["#{dir}/*.md"].map { |f| f.sub(/\.md$/, '') }
9
- files.reject! { |f| File.basename(f) == 'README' }
9
+ @links = make_links dir
10
+ @caption = File.basename(dir) unless dir == docroot
11
+ end
10
12
 
11
- dirs = Dir["#{dir}/*"].select { |f| File.directory? f }
13
+ private
12
14
 
13
- @caption = File.basename(dir) unless dir == docroot
15
+ # Prepare a list of links from all the accepted items in the directory
16
+ def make_links(dir)
17
+ files = get_files dir
18
+ dirs = get_dirs dir
14
19
 
15
- @links = []
20
+ links = []
16
21
 
17
22
  dirs.sort.each do |item|
18
- @links.push link(item, :dir)
23
+ links.push link(item, :dir)
19
24
  end
20
25
 
21
- files.sort.each do |item|
22
- @links.push link(item, :file)
26
+ files.each do |item|
27
+ links.push link(item, :file)
23
28
  end
29
+
30
+ links
24
31
  end
25
32
 
26
- private
33
+ def get_files(dir)
34
+ files = Dir["#{dir}/*.md"].map { |f| f.sub(/\.md$/, '') }
35
+ files.reject! { |f| File.basename(f) == 'README' }
36
+ files.sort
37
+ end
38
+
39
+ def get_dirs(dir)
40
+ dirs = Dir["#{dir}/*"].select { |f| File.directory? f }
41
+ dirs.reject! do |f|
42
+ basename = File.basename(f)
43
+ basename[0] == '_' || basename == 'public'
44
+ end
45
+ dirs
46
+ end
27
47
 
28
48
  def link(item, type)
29
49
  OpenStruct.new({
@@ -1,5 +1,8 @@
1
+ require 'madness/server_base'
2
+
1
3
  module Madness
2
4
 
5
+ # The Sinatra server
3
6
  class Server < ServerBase
4
7
  get '/*' do
5
8
  path = params[:splat].first
@@ -1,22 +1,36 @@
1
1
 
2
2
  module Madness
3
3
 
4
+ # The base class for the sinatra server.
5
+ # Initialize what we can here, but since there are values that will
6
+ # become known only later, the #prepare method is provided.
4
7
  class ServerBase < Sinatra::Application
5
8
  helpers ServerHelper
6
9
 
7
- config = Settings.instance
8
-
9
10
  Sass::Plugin.options[:template_location] = 'app/styles'
10
11
  Sass::Plugin.options[:css_location] = 'app/public/css'
11
12
  Slim::Engine.set_options pretty: true
12
13
 
13
14
  use Sass::Plugin::Rack
14
-
15
- set :bind, config.bind
16
- set :port, config.port
15
+
17
16
  set :root, File.expand_path('../../', __dir__)
18
17
  set :views, File.expand_path('../../app/views', __dir__)
19
18
  set :public_folder, File.expand_path('../../app/public', __dir__)
19
+
20
+ # Since we cannot use any config values in the main body of the class,
21
+ # since they will be updated later, we need to set anything that relys
22
+ # on the config values just before running the server.
23
+ # The CommandLine class and the test suite should both call
24
+ # `Server.prepare` before calling Server.run!
25
+ def self.prepare
26
+ use Rack::TryStatic, :root => "#{config.path}/public/", :urls => %w[/]
27
+ set :bind, config.bind
28
+ set :port, config.port
29
+ end
30
+
31
+ def self.config
32
+ Settings.instance
33
+ end
20
34
  end
21
35
 
22
36
  end
@@ -1,4 +1,7 @@
1
1
  module Madness
2
+
3
+ # All the methods that we may need inside of any server route.
4
+ # The module can also be included manually anywhere else.
2
5
  module ServerHelper
3
6
  def config
4
7
  @config ||= Settings.instance
@@ -1,4 +1,11 @@
1
1
  module Madness
2
+
3
+ # Handle teh configuration options
4
+ # Each configuration option has three sources
5
+ # 1. The default value
6
+ # 2. The setting as provided in the ./.madness.yml
7
+ # 3. Any override provided later (for example, by the CommandLine
8
+ # class)
2
9
  class Settings
3
10
  include Singleton
4
11
 
@@ -9,6 +16,8 @@ module Madness
9
16
  reset
10
17
  end
11
18
 
19
+ # Force reload of the config file, set defaults, and then read from
20
+ # file.
12
21
  def reset
13
22
  @config_file = nil
14
23
  set_defaults
@@ -51,5 +60,6 @@ module Madness
51
60
  {}
52
61
  end
53
62
  end
63
+
54
64
  end
55
65
  end
@@ -1,3 +1,3 @@
1
1
  module Madness
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: madness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-12 00:00:00.000000000 Z
11
+ date: 2016-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack-contrib
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: slim
57
71
  requirement: !ruby/object:Gem::Requirement