johnny 0.1.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.
- data/README.md +0 -0
- data/VERSION +1 -0
- data/bin/johnny +5 -0
- data/lib/johnny.rb +89 -0
- data/templates/default.html.erb +60 -0
- metadata +89 -0
data/README.md
ADDED
File without changes
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/johnny
ADDED
data/lib/johnny.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "erb"
|
3
|
+
require "fssm"
|
4
|
+
require "rdiscount"
|
5
|
+
|
6
|
+
class Johnny
|
7
|
+
def initialize(dir=Dir.pwd)
|
8
|
+
@source = File.expand_path(dir)
|
9
|
+
@destination = File.join(@source, "html")
|
10
|
+
|
11
|
+
@template = ERB.new(File.read(File.expand_path(File.join(File.dirname(__FILE__), "..", "templates", "default.html.erb"))))
|
12
|
+
|
13
|
+
unless File.exists?(@destination) && File.directory?(@destination)
|
14
|
+
Dir.mkdir(@destination)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def handle(action, path)
|
19
|
+
if [".md", ".mdown", ".markdown"].include?(File.extname(path))
|
20
|
+
source = File.join(@source, path)
|
21
|
+
target = File.join(@destination, "#{File.basename(path, File.extname(path))}.html")
|
22
|
+
action = "handle_#{action}"
|
23
|
+
|
24
|
+
if self.respond_to?(action)
|
25
|
+
self.send(action, source, target)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def handle_create(source, target)
|
32
|
+
parse(source, target)
|
33
|
+
puts "Create: #{target}"
|
34
|
+
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
|
38
|
+
def handle_update(source, target)
|
39
|
+
parse(source, target)
|
40
|
+
puts "Update: #{target}"
|
41
|
+
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
def handle_delete(source, target)
|
46
|
+
if File.exists?(target)
|
47
|
+
puts "Deleted: #{target}"
|
48
|
+
File.delete(target)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def run!
|
53
|
+
# this is something I'd expect in javascript, not ruby.
|
54
|
+
johnny = self
|
55
|
+
|
56
|
+
puts "Watching directory for changes to files..."
|
57
|
+
puts "-> Parsed files will be placed in: #{File.join(Dir.pwd, "html")}"
|
58
|
+
|
59
|
+
FSSM.monitor(@source, "**/*.*") do
|
60
|
+
update {|base, relative| johnny.handle("update", relative) }
|
61
|
+
delete {|base, relative| johnny.handle("delete", relative) }
|
62
|
+
create {|base, relative| johnny.handle("create", relative) }
|
63
|
+
end
|
64
|
+
|
65
|
+
return
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse(source, target)
|
69
|
+
File.open("#{target}", "w+") {|f|
|
70
|
+
f.write(@template.result(ERBTemplate.new(
|
71
|
+
File.basename(source, File.extname(source)),
|
72
|
+
RDiscount.new(File.read(source)).to_html
|
73
|
+
).getBinding))
|
74
|
+
}
|
75
|
+
|
76
|
+
return nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class ERBTemplate
|
81
|
+
def initialize(title, content)
|
82
|
+
@title = title
|
83
|
+
@content = content
|
84
|
+
end
|
85
|
+
|
86
|
+
def getBinding
|
87
|
+
return binding()
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
3
|
+
|
4
|
+
<html lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
7
|
+
<title><%= @title %></title>
|
8
|
+
<style type='text/css'>
|
9
|
+
body {margin:0}
|
10
|
+
#wrapper, #wrapper code, #wrapper pre, #wrapper tt, #wrapper kbd, #wrapper samp {
|
11
|
+
font-family:serif;
|
12
|
+
font-size:15px;
|
13
|
+
line-height:1.3;
|
14
|
+
color:#343331;
|
15
|
+
background:#fff; }
|
16
|
+
#wrapper { max-width:89ex; text-align:justify; margin:0 25px 25px 25px }
|
17
|
+
#wrapper h1, #wrapper h2, #wrapper h3 { color:#232221;clear:left }
|
18
|
+
#wrapper h1 { font-size:28px; margin:15px 0 30px 0; text-align:center }
|
19
|
+
#wrapper h2 { font-size:18px; margin-bottom:0; margin-top:10px; line-height:1.3; }
|
20
|
+
#wrapper h3 { font-size:16px; margin:0 0 0 4ex; }
|
21
|
+
#wrapper p, #wrapper ul, #wrapper ol, #wrapper dl, #wrapper pre { margin:0 0 18px 0; }
|
22
|
+
#wrapper pre {
|
23
|
+
color:#333231;
|
24
|
+
background:#edeceb;
|
25
|
+
padding:5px 7px;
|
26
|
+
margin:0px 0 20px 0;
|
27
|
+
border-left:2ex solid #ddd}
|
28
|
+
#wrapper pre + h2, #wrapper pre + h3 {
|
29
|
+
margin-top:22px;
|
30
|
+
}
|
31
|
+
#wrapper h2 + pre, #wrapper h3 + pre {
|
32
|
+
margin-top:5px;
|
33
|
+
}
|
34
|
+
#wrapper > p, #wrapper > ul, #wrapper > ol, #wrapper > dl, #wrapper > pre { margin-left:8ex; }
|
35
|
+
#wrapper dt { margin:0; clear:left }
|
36
|
+
#wrapper dt.flush { float:left; width:8ex }
|
37
|
+
#wrapper dd { margin:0 0 0 9ex }
|
38
|
+
#wrapper code, #wrapper strong, #wrapper b { font-weight:bold; color:#131211; }
|
39
|
+
#wrapper pre code { font-weight:normal; color:#232221; background:inherit }
|
40
|
+
#wrapper em, var, u {
|
41
|
+
font-style:normal; color:#333231; border-bottom:1px solid #999; }
|
42
|
+
#wrapper h1.wrapper-title { display:none; }
|
43
|
+
#wrapper ol.wrapper, #wrapper ol.wrapper li { margin:2px 0 10px 0; padding:0;
|
44
|
+
float:left; width:33%; list-style-type:none;
|
45
|
+
text-transform:uppercase; font-size:18px; color:#999;
|
46
|
+
letter-spacing:1px;}
|
47
|
+
#wrapper ol.wrapper { width:100%; }
|
48
|
+
#wrapper ol.wrapper li.tl { text-align:left }
|
49
|
+
#wrapper ol.wrapper li.tc { text-align:center;letter-spacing:4px }
|
50
|
+
#wrapper ol.wrapper li.tr { text-align:right }
|
51
|
+
#wrapper ol.wrapper a { color:#999 }
|
52
|
+
#wrapper ol.wrapper a:hover { color:#333231 }
|
53
|
+
</style>
|
54
|
+
</head>
|
55
|
+
<body>
|
56
|
+
<div id="wrapper">
|
57
|
+
<%= @content %>
|
58
|
+
</div>
|
59
|
+
</body>
|
60
|
+
</html>
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: johnny
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Micheil Smith
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-29 00:00:00 +11:00
|
18
|
+
default_executable: johnny
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: fssm
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rdiscount
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
description: Watches directories and converts markdown documents to other formats through erb templates
|
45
|
+
email: micheil@brandedcode.com
|
46
|
+
executables:
|
47
|
+
- johnny
|
48
|
+
extensions: []
|
49
|
+
|
50
|
+
extra_rdoc_files:
|
51
|
+
- README.md
|
52
|
+
files:
|
53
|
+
- README.md
|
54
|
+
- VERSION
|
55
|
+
- bin/johnny
|
56
|
+
- lib/johnny.rb
|
57
|
+
- templates/default.html.erb
|
58
|
+
has_rdoc: true
|
59
|
+
homepage: http://github.com/miksago/johnny
|
60
|
+
licenses: []
|
61
|
+
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options:
|
64
|
+
- --charset=UTF-8
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.3.6
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: Watches directories and converts markdown documents to other formats
|
88
|
+
test_files: []
|
89
|
+
|