hydeweb 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +10 -0
- data/Rakefile +6 -0
- data/data/new_site/hyde.conf +10 -19
- data/lib/hyde/cli.rb +6 -3
- data/lib/hyde/config.rb +3 -3
- data/lib/hyde/page.rb +55 -35
- data/lib/hyde/project.rb +16 -2
- data/lib/hyde/server.rb +9 -4
- data/lib/hyde.rb +1 -1
- data/test/fixture/nested_layout/hyde.conf +1 -0
- data/test/fixture/subclass/hyde.conf +1 -0
- metadata +3 -3
- /data/data/new_site/{layouts → _layouts}/default.haml +0 -0
- /data/data/new_site/{site/index.html.haml → index.haml} +0 -0
data/HISTORY.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
v0.1.1
|
2
|
+
------
|
3
|
+
|
4
|
+
- Default project is now simpler. The site_path is `.`.
|
5
|
+
- Implement `Project#build`.
|
6
|
+
- If YAML parsing of page metadata fails, treat it as content.
|
7
|
+
- All options in `hyde.conf` are now optional (even `hyde_requirement`).
|
8
|
+
- Page metadata can now only be a hash.
|
9
|
+
- Fix `hyde start`.
|
10
|
+
|
1
11
|
v0.1.0
|
2
12
|
------
|
3
13
|
|
data/Rakefile
CHANGED
data/data/new_site/hyde.conf
CHANGED
@@ -1,32 +1,23 @@
|
|
1
1
|
# This is a Hyde site.
|
2
2
|
# Install the `hydeweb` Ruby gem and type `hyde` for help.
|
3
|
-
|
4
3
|
hyde_requirement: 0.1
|
5
4
|
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
# The folder where the site's main files are kept. (you can set this to '.')
|
10
|
-
site_path: site
|
11
|
-
|
12
|
-
# The folder where the layout templates (and partials) are kept.
|
13
|
-
layouts_path: layouts
|
14
|
-
|
15
|
-
# The folder where the optional extensions are kept.
|
16
|
-
extensions_path: extensions
|
17
|
-
|
18
|
-
# The folder for partials.
|
19
|
-
partials_path: layouts
|
5
|
+
# The folder where the site's source files are kept.
|
6
|
+
site_path: .
|
7
|
+
output_path: _public
|
20
8
|
|
21
|
-
#
|
22
|
-
|
9
|
+
# Other paths:
|
10
|
+
layouts_path: _layouts
|
11
|
+
extensions_path: _extensions
|
12
|
+
partials_path: _layouts
|
23
13
|
|
24
|
-
#
|
14
|
+
# Files to be excluded from processing
|
25
15
|
ignore:
|
26
16
|
- **/*~
|
17
|
+
- README*
|
27
18
|
- **/_*.scss
|
28
19
|
|
29
|
-
#
|
20
|
+
# Optional options for layout engines
|
30
21
|
tilt_options:
|
31
22
|
haml:
|
32
23
|
:escape_html: true
|
data/lib/hyde/cli.rb
CHANGED
@@ -41,22 +41,25 @@ class CLI < Shake
|
|
41
41
|
pre = project.config.output_path
|
42
42
|
|
43
43
|
begin
|
44
|
-
project.
|
44
|
+
project.build { |page|
|
45
45
|
handler = ''
|
46
46
|
handler = "(#{page.tilt_engine_name})" if page.tilt?
|
47
47
|
puts ("\033[0;33m*\033[0;32m #{pre}\033[0;m%-50s%s" % [ page.path, handler ]).strip
|
48
|
-
page.write
|
49
48
|
}
|
50
49
|
rescue NoGemError => e
|
51
50
|
err "Error: #{e.message}"
|
51
|
+
rescue Error => e
|
52
|
+
err "Error: #{e.message}"
|
52
53
|
ensure
|
53
|
-
project.build_cleanup
|
54
|
+
project.send :build_cleanup
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
58
|
task.description = "Builds the current project"
|
58
59
|
|
59
60
|
task(:start) do
|
61
|
+
project
|
62
|
+
|
60
63
|
port = (params.extract('-p') || 4833).to_i
|
61
64
|
host = (params.extract('-o') || '0.0.0.0')
|
62
65
|
|
data/lib/hyde/config.rb
CHANGED
@@ -2,10 +2,10 @@ class Hyde
|
|
2
2
|
class Config < OpenStruct
|
3
3
|
DEFAULTS = {
|
4
4
|
:site_path => '.',
|
5
|
-
:layouts_path =>
|
5
|
+
:layouts_path => nil,
|
6
6
|
:extensions_path => nil,
|
7
|
-
:partials_path =>
|
8
|
-
:output_path =>
|
7
|
+
:partials_path => nil,
|
8
|
+
:output_path => nil
|
9
9
|
}
|
10
10
|
|
11
11
|
def self.load(config_file)
|
data/lib/hyde/page.rb
CHANGED
@@ -3,9 +3,44 @@ class Page
|
|
3
3
|
attr_reader :project
|
4
4
|
attr_reader :file
|
5
5
|
|
6
|
+
def self.[](id, project=$project)
|
7
|
+
site_path = root_path(project)
|
8
|
+
return nil if site_path.nil?
|
9
|
+
|
10
|
+
site = lambda { |*x| File.join site_path, *(x.compact) }
|
11
|
+
try = lambda { |id| p = new(id, project); p if p.exists? }
|
12
|
+
|
13
|
+
# Account for:
|
14
|
+
# ~/mysite/site/about/us.html.haml
|
15
|
+
# about/us.html.haml => ~/mysite/site/about/us.html.haml
|
16
|
+
# about/us.html => ~/mysite/site/about/us.html.*
|
17
|
+
# about/us.html => ~/mysite/site/about/us.*
|
18
|
+
# about/us => ~/mysite/site/about/us/index.*
|
19
|
+
#
|
20
|
+
page = try[id]
|
21
|
+
page ||= try[site[id]]
|
22
|
+
page ||= try[Dir[site["#{id}.*"]].first]
|
23
|
+
page ||= try[Dir[site["#{id.to_s.sub(/\.[^\.]*/,'')}.*"]].first]
|
24
|
+
page ||= try[Dir[site[id, "index.*"]].first]
|
25
|
+
|
26
|
+
# Subclass
|
27
|
+
if page && page.tilt? && page.meta.type
|
28
|
+
klass = Page.get_type(page.meta.type)
|
29
|
+
raise Error, "#{page.filepath}: Class for type '#{page.meta.type}' not found" unless klass
|
30
|
+
page = klass.new(id, project)
|
31
|
+
end
|
32
|
+
page
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(file, project=$project)
|
36
|
+
@file = File.expand_path(file) if file.is_a?(String)
|
37
|
+
@project = project
|
38
|
+
raise Error if project.nil?
|
39
|
+
end
|
40
|
+
|
6
41
|
# Returns the URL path for a page.
|
7
42
|
def path
|
8
|
-
path = @file.sub(root_path, '')
|
43
|
+
path = @file.sub(File.expand_path(root_path), '')
|
9
44
|
|
10
45
|
# if xx.haml (but not xx.html.haml),
|
11
46
|
if tilt?
|
@@ -16,6 +51,14 @@ class Page
|
|
16
51
|
path
|
17
52
|
end
|
18
53
|
|
54
|
+
# Returns a short filepath relative to the project path
|
55
|
+
def filepath
|
56
|
+
root = project.root
|
57
|
+
fpath = file
|
58
|
+
fpath = fpath[root.size..-1] if fpath[0...root.size] == root
|
59
|
+
fpath
|
60
|
+
end
|
61
|
+
|
19
62
|
def title
|
20
63
|
(meta.title if tilt?) || path
|
21
64
|
end
|
@@ -58,32 +101,6 @@ class Page
|
|
58
101
|
end
|
59
102
|
end
|
60
103
|
|
61
|
-
def self.[](id, project=$project)
|
62
|
-
site = lambda { |*x| File.join root_path(project), *(x.compact) }
|
63
|
-
try = lambda { |id| p = new(id, project); p if p.exists? }
|
64
|
-
|
65
|
-
# Account for:
|
66
|
-
# ~/mysite/site/about/us.html.haml
|
67
|
-
# about/us.html.haml => ~/mysite/site/about/us.html.haml
|
68
|
-
# about/us.html => ~/mysite/site/about/us.html.*
|
69
|
-
# about/us.html => ~/mysite/site/about/us.*
|
70
|
-
# about/us => ~/mysite/site/about/us/index.*
|
71
|
-
#
|
72
|
-
page = try[id]
|
73
|
-
page ||= try[site[id]]
|
74
|
-
page ||= try[Dir[site["#{id}.*"]].first]
|
75
|
-
page ||= try[Dir[site["#{id.to_s.sub(/\.[^\.]*/,'')}.*"]].first]
|
76
|
-
page ||= try[Dir[site[id, "index.*"]].first]
|
77
|
-
|
78
|
-
# Subclass
|
79
|
-
if page && page.tilt? && page.meta.type
|
80
|
-
klass = Page.get_type(page.meta.type)
|
81
|
-
raise Error, "Class for type '#{page.meta.type}' not found" unless klass
|
82
|
-
page = klass.new(id, project)
|
83
|
-
end
|
84
|
-
page
|
85
|
-
end
|
86
|
-
|
87
104
|
# Returns a page subtype.
|
88
105
|
# @example Page.get_type('post') => Hyde::Page::Post
|
89
106
|
def self.get_type(type)
|
@@ -92,12 +109,6 @@ class Page
|
|
92
109
|
self.const_get(klass) if self.const_defined?(klass)
|
93
110
|
end
|
94
111
|
|
95
|
-
def initialize(file, project=$project)
|
96
|
-
@file = file
|
97
|
-
@project = project
|
98
|
-
raise Error if project.nil?
|
99
|
-
end
|
100
|
-
|
101
112
|
def exists?
|
102
113
|
@file and File.file?(@file) and valid?
|
103
114
|
end
|
@@ -139,7 +150,7 @@ class Page
|
|
139
150
|
end
|
140
151
|
|
141
152
|
def meta
|
142
|
-
@meta ||= Meta.new(
|
153
|
+
@meta ||= Meta.new(parts.first)
|
143
154
|
end
|
144
155
|
|
145
156
|
# Writes to the given output file.
|
@@ -242,7 +253,16 @@ protected
|
|
242
253
|
@parts ||= begin
|
243
254
|
t = File.open(@file).read.force_encoding('UTF-8')
|
244
255
|
m = t.match(/^(.*)--+\n(.*)$/m)
|
245
|
-
|
256
|
+
|
257
|
+
if m.nil?
|
258
|
+
[{}, t]
|
259
|
+
else
|
260
|
+
data = YAML::load(m[1])
|
261
|
+
raise ArgumentError unless data.is_a?(Hash)
|
262
|
+
[data, m[2]]
|
263
|
+
end
|
264
|
+
rescue ArgumentError
|
265
|
+
[{}, t]
|
246
266
|
end
|
247
267
|
end
|
248
268
|
|
data/lib/hyde/project.rb
CHANGED
@@ -11,7 +11,8 @@ class Project
|
|
11
11
|
def validate_version
|
12
12
|
return unless config_file?
|
13
13
|
req = config.hyde_requirement.to_s
|
14
|
-
if req
|
14
|
+
if req.empty?
|
15
|
+
elsif req < "0.1"
|
15
16
|
raise LegacyError, "This is a legacy project"
|
16
17
|
elsif req > Hyde.version
|
17
18
|
raise VersionError, "You will need Hyde version >= #{req} for this project."
|
@@ -53,7 +54,10 @@ class Project
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def files
|
56
|
-
Dir[File.join(path(:site), '**', '*')]
|
57
|
+
files = Dir[File.join(path(:site), '**', '*')]
|
58
|
+
files = files.select { |f| File.file?(f) }
|
59
|
+
files = files.map { |f| File.expand_path(f) }
|
60
|
+
files - ignored_files
|
57
61
|
end
|
58
62
|
|
59
63
|
def ignored_files
|
@@ -65,6 +69,16 @@ class Project
|
|
65
69
|
specs.compact.map { |s| Dir[s] }.flatten.uniq
|
66
70
|
end
|
67
71
|
|
72
|
+
def build(&blk)
|
73
|
+
pages.each do |page|
|
74
|
+
yield page
|
75
|
+
page.write
|
76
|
+
end
|
77
|
+
ensure
|
78
|
+
build_cleanup
|
79
|
+
end
|
80
|
+
|
81
|
+
protected
|
68
82
|
def build_cleanup
|
69
83
|
FileUtils.rm_rf '.sass_cache'
|
70
84
|
end
|
data/lib/hyde/server.rb
CHANGED
@@ -21,7 +21,7 @@ class Hyde
|
|
21
21
|
status = page ? "\033[0;32m[ OK ]" : "\033[0;31m[404 ]"
|
22
22
|
verb = get ? 'GET ' : (post ? 'POST' : '')
|
23
23
|
puts "%s\033[0;m %s %s" % [ status, verb, env['PATH_INFO'] ]
|
24
|
-
puts "
|
24
|
+
puts " src: #{page.filepath} (#{page.tilt_engine_name})" if page.tilt?
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -30,9 +30,14 @@ class Hyde
|
|
30
30
|
|
31
31
|
define do
|
32
32
|
on default do
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
begin
|
34
|
+
page = Hyde::Page[env['PATH_INFO']] or break not_found
|
35
|
+
res['Content-Type'] = page.mime_type
|
36
|
+
res.write page.to_html
|
37
|
+
show_status page
|
38
|
+
rescue => e
|
39
|
+
res.write "<h1>#{e.class}: #{e.message}</h1><ul>#{e.backtrace.map{|l|"<li>#{l}</li>"}.join('')}</ul>"
|
40
|
+
end
|
36
41
|
end
|
37
42
|
end
|
38
43
|
end
|
data/lib/hyde.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: hydeweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rico Sta. Cruz
|
@@ -141,10 +141,10 @@ files:
|
|
141
141
|
- test/unit/extensions_test.rb
|
142
142
|
- test/unit/fixture_test.rb
|
143
143
|
- test/unit/hyde_test.rb
|
144
|
+
- data/new_site/_layouts/default.haml
|
144
145
|
- data/new_site/hyde.conf
|
145
|
-
- data/new_site/
|
146
|
+
- data/new_site/index.haml
|
146
147
|
- data/new_site/README.md
|
147
|
-
- data/new_site/site/index.html.haml
|
148
148
|
- HISTORY.md
|
149
149
|
- README.md
|
150
150
|
- Rakefile
|
File without changes
|
File without changes
|