hydeweb 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +13 -0
- data/README.md +5 -0
- data/VERSION +1 -1
- data/bin/hyde +5 -0
- data/data/new_site/hyde.conf +5 -0
- data/data/pages/404.html +3 -0
- data/hydeweb.gemspec +14 -3
- data/lib/hyde.rb +9 -4
- data/lib/hyde/clicommands.rb +1 -1
- data/lib/hyde/helpers.rb +33 -6
- data/lib/hyde/layout.rb +0 -4
- data/lib/hyde/meta.rb +21 -0
- data/lib/hyde/ostruct.rb +1 -6
- data/lib/hyde/page.rb +16 -32
- data/lib/hyde/page_factory.rb +6 -3
- data/lib/hyde/partial.rb +2 -2
- data/lib/hyde/project.rb +41 -39
- data/lib/hyde/renderer.rb +16 -11
- data/lib/hyde/renderers.rb +9 -1
- data/lib/hyde/{init.rb → sinatra/init.rb} +8 -4
- data/lib/hyde/utils.rb +8 -3
- data/test/fixtures/custom/layouts/default.haml +1 -1
- data/test/fixtures/two/_config.yml +8 -0
- data/test/fixtures/two/layouts/default.haml +4 -0
- data/test/fixtures/two/layouts/shared/test.haml +4 -0
- data/test/fixtures/two/site/default.html.haml +2 -0
- data/test/fixtures/two/site/index.html.haml +9 -0
- data/test/fixtures/two/site/var.html.haml +5 -0
- data/test/fixtures/two/www_control/default.html +2 -0
- data/test/fixtures/two/www_control/index.html +10 -0
- data/test/fixtures/two/www_control/var.html +2 -0
- data/test/helper.rb +9 -0
- data/test/test_hyde.rb +9 -9
- data/test/test_page.rb +1 -1
- metadata +15 -4
data/CHANGELOG
CHANGED
@@ -1 +1,14 @@
|
|
1
|
+
v0.0.5 - 2010-xx-xx
|
2
|
+
-------------------
|
1
3
|
|
4
|
+
- Implemented `content_for` and `yield_content` helpers
|
5
|
+
- Added `partials_path` config variable
|
6
|
+
- Changed helper method `partial`s syntax (from `partial X, :locals => { ... }` to `partial X, ...`)
|
7
|
+
- Line numbers for errors are shown now
|
8
|
+
- Added rudimentary 404 page
|
9
|
+
- Added `hyde_requirement` config variable -- Hyde will now not proceed if the project needs a later version of Hyde
|
10
|
+
- Extensions are now auto-guessed (for example, 'foo.less' will be accessible as 'foo.css')
|
11
|
+
|
12
|
+
v0.0.4 - 2010-05-25
|
13
|
+
-------------------
|
14
|
+
- First public release
|
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/bin/hyde
CHANGED
data/data/new_site/hyde.conf
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# This is a Hyde site.
|
2
2
|
# Install the `hydeweb` Ruby gem and type `hyde` for help.
|
3
3
|
|
4
|
+
hyde_requirement: 0.0.5
|
5
|
+
|
4
6
|
# Path options
|
5
7
|
# -------------
|
6
8
|
|
@@ -13,6 +15,9 @@ layouts_path: layouts
|
|
13
15
|
# The folder where the optional extensions are kept.
|
14
16
|
extensions_path: extensions
|
15
17
|
|
18
|
+
# The folder for partials.
|
19
|
+
partials_path: layouts
|
20
|
+
|
16
21
|
# The folder where the HTML files are to be built when typing `hyde build`.
|
17
22
|
output_path: public
|
18
23
|
|
data/data/pages/404.html
ADDED
data/hydeweb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hydeweb}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rico Sta. Cruz", "Sinefunc, Inc."]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-30}
|
13
13
|
s.default_executable = %q{hyde}
|
14
14
|
s.description = %q{Website preprocessor}
|
15
15
|
s.email = %q{rico@sinefunc.com}
|
@@ -33,13 +33,14 @@ Gem::Specification.new do |s|
|
|
33
33
|
"data/new_site/hyde.conf",
|
34
34
|
"data/new_site/layouts/default.haml",
|
35
35
|
"data/new_site/site/index.html.haml",
|
36
|
+
"data/pages/404.html",
|
36
37
|
"hydeweb.gemspec",
|
37
38
|
"lib/hyde.rb",
|
38
39
|
"lib/hyde/clicommand.rb",
|
39
40
|
"lib/hyde/clicommands.rb",
|
40
41
|
"lib/hyde/helpers.rb",
|
41
|
-
"lib/hyde/init.rb",
|
42
42
|
"lib/hyde/layout.rb",
|
43
|
+
"lib/hyde/meta.rb",
|
43
44
|
"lib/hyde/ostruct.rb",
|
44
45
|
"lib/hyde/page.rb",
|
45
46
|
"lib/hyde/page_factory.rb",
|
@@ -47,6 +48,7 @@ Gem::Specification.new do |s|
|
|
47
48
|
"lib/hyde/project.rb",
|
48
49
|
"lib/hyde/renderer.rb",
|
49
50
|
"lib/hyde/renderers.rb",
|
51
|
+
"lib/hyde/sinatra/init.rb",
|
50
52
|
"lib/hyde/utils.rb",
|
51
53
|
"manual/Extending/ExtendingHyde.md",
|
52
54
|
"manual/Hyde.md",
|
@@ -93,6 +95,15 @@ Gem::Specification.new do |s|
|
|
93
95
|
"test/fixtures/default/www_control/index.html",
|
94
96
|
"test/fixtures/default/www_control/layout_test.html",
|
95
97
|
"test/fixtures/default/www_control/yes.html",
|
98
|
+
"test/fixtures/two/_config.yml",
|
99
|
+
"test/fixtures/two/layouts/default.haml",
|
100
|
+
"test/fixtures/two/layouts/shared/test.haml",
|
101
|
+
"test/fixtures/two/site/default.html.haml",
|
102
|
+
"test/fixtures/two/site/index.html.haml",
|
103
|
+
"test/fixtures/two/site/var.html.haml",
|
104
|
+
"test/fixtures/two/www_control/default.html",
|
105
|
+
"test/fixtures/two/www_control/index.html",
|
106
|
+
"test/fixtures/two/www_control/var.html",
|
96
107
|
"test/helper.rb",
|
97
108
|
"test/test_all_fixtures.rb",
|
98
109
|
"test/test_build.rb",
|
data/lib/hyde.rb
CHANGED
@@ -10,16 +10,17 @@ module Hyde
|
|
10
10
|
autoload :Renderer, "#{prefix}/hyde/renderer"
|
11
11
|
autoload :Renderers, "#{prefix}/hyde/renderers"
|
12
12
|
autoload :Utils, "#{prefix}/hyde/utils"
|
13
|
-
autoload :
|
13
|
+
autoload :Meta, "#{prefix}/hyde/meta"
|
14
14
|
autoload :CLICommand, "#{prefix}/hyde/clicommand"
|
15
15
|
autoload :CLICommands, "#{prefix}/hyde/clicommands"
|
16
16
|
autoload :Helpers, "#{prefix}/hyde/helpers"
|
17
17
|
autoload :Partial, "#{prefix}/hyde/partial"
|
18
18
|
|
19
19
|
Error = Class.new(::StandardError)
|
20
|
-
NoGemError
|
21
|
-
NotFound
|
22
|
-
NoRootError
|
20
|
+
NoGemError = Class.new(Error)
|
21
|
+
NotFound = Class.new(Error)
|
22
|
+
NoRootError = Class.new(Error)
|
23
|
+
IncompatibleError = Class.new(Error)
|
23
24
|
|
24
25
|
class RenderError < Error
|
25
26
|
attr_accessor :message
|
@@ -43,4 +44,8 @@ module Hyde
|
|
43
44
|
def version
|
44
45
|
@version ||= File.open(File.join(File.dirname(__FILE__), '..', 'VERSION')) { |f| f.read.strip }
|
45
46
|
end
|
47
|
+
|
48
|
+
def compatible_with?(given_version)
|
49
|
+
Gem::Version.new(version) >= Gem::Version.new(given_version)
|
50
|
+
end
|
46
51
|
end
|
data/lib/hyde/clicommands.rb
CHANGED
data/lib/hyde/helpers.rb
CHANGED
@@ -1,15 +1,42 @@
|
|
1
1
|
module Hyde
|
2
2
|
module Helpers
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
p =
|
3
|
+
def partial(partial_path, locals = {})
|
4
|
+
begin
|
5
|
+
p = project[partial_path.to_s, :Partial]
|
6
|
+
p.referrer = self.referrer
|
7
7
|
p.render locals
|
8
|
+
rescue ::Hyde::NotFound
|
9
|
+
"<!-- Can't find #{partial_path.to_s} -->"
|
8
10
|
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def content_for(key, &block)
|
14
|
+
content_blocks[key.to_sym] = block
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_content?(key)
|
18
|
+
content_blocks.keys.include? key.to_sym
|
19
|
+
end
|
20
|
+
|
21
|
+
def yield_content(key, *args)
|
22
|
+
block = content_blocks[key.to_sym]
|
23
|
+
return '' if block.nil?
|
9
24
|
|
10
|
-
|
11
|
-
|
25
|
+
if respond_to?(:block_is_haml?) && block_is_haml?(block)
|
26
|
+
capture_haml *args, &block
|
27
|
+
elsif block.is_a? Proc
|
28
|
+
block.call *args
|
29
|
+
elsif block_given?
|
30
|
+
yield
|
31
|
+
else
|
32
|
+
''
|
12
33
|
end
|
13
34
|
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
def content_blocks
|
38
|
+
@@content_blocks ||= Hash.new
|
39
|
+
@@content_blocks[referrer.to_sym] ||= Hash.new { |h, k| h[k] = [] }
|
40
|
+
end
|
14
41
|
end
|
15
42
|
end
|
data/lib/hyde/layout.rb
CHANGED
data/lib/hyde/meta.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Hyde
|
2
|
+
class Meta < OStruct
|
3
|
+
attr_reader :page
|
4
|
+
|
5
|
+
def initialize(page)
|
6
|
+
@page = page
|
7
|
+
super nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def |(data)
|
11
|
+
# TODO: Consider OStruct here?
|
12
|
+
@table.merge data #if data.is_a? Hash
|
13
|
+
end
|
14
|
+
|
15
|
+
def layout=(value)
|
16
|
+
super value
|
17
|
+
@page.layout = @page.project[value, :Layout]
|
18
|
+
@page.layout.referrer = page.referrer
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/hyde/ostruct.rb
CHANGED
@@ -3,16 +3,11 @@ require 'ostruct'
|
|
3
3
|
module Hyde
|
4
4
|
class OStruct < OpenStruct
|
5
5
|
def merge!(hash)
|
6
|
-
hash.each_pair { |
|
6
|
+
hash.each_pair { |key, value| self.send "#{key.to_s}=".to_sym, value }
|
7
7
|
end
|
8
8
|
|
9
9
|
def include?(key)
|
10
10
|
@table.keys.include? key
|
11
11
|
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
def set!(key, value)
|
15
|
-
self.send "#{key.to_s}=".to_sym, value
|
16
|
-
end
|
17
12
|
end
|
18
13
|
end
|
data/lib/hyde/page.rb
CHANGED
@@ -2,20 +2,17 @@ module Hyde
|
|
2
2
|
class Page
|
3
3
|
include Hyde::Utils
|
4
4
|
|
5
|
-
attr :filename
|
6
5
|
attr :renderer
|
7
|
-
attr :meta
|
8
|
-
attr :page
|
9
|
-
attr :layout
|
10
|
-
attr :project
|
11
6
|
|
12
7
|
# The filename of the source file.
|
8
|
+
#
|
13
9
|
# @example
|
14
10
|
# puts page.name
|
15
11
|
# puts page.filename
|
16
12
|
#
|
17
13
|
# # about/index.html
|
18
14
|
# # about/index.html.haml
|
15
|
+
#
|
19
16
|
attr_accessor :filename
|
20
17
|
|
21
18
|
# Metadata hash
|
@@ -28,55 +25,42 @@ module Hyde
|
|
28
25
|
# A reference to the parent {Project} instance
|
29
26
|
attr_reader :project
|
30
27
|
|
28
|
+
attr_accessor :layout
|
29
|
+
|
30
|
+
attr_writer :referrer
|
31
|
+
|
31
32
|
# Factory
|
32
33
|
#
|
33
|
-
def self.
|
34
|
+
def self.[](path, project, def_page_class = Page)
|
34
35
|
PageFactory.create path, project, def_page_class
|
35
36
|
end
|
36
37
|
|
38
|
+
def referrer
|
39
|
+
@referrer.nil? ? name : @referrer
|
40
|
+
end
|
41
|
+
|
37
42
|
# Returns the rendered output.
|
38
43
|
def render(data = {}, &block)
|
44
|
+
data = @meta | data
|
39
45
|
output = @renderer.render(data, &block)
|
40
|
-
|
41
|
-
output = @layout.render(@meta.merge data) { output } unless @layout.nil?
|
46
|
+
output = @layout.render(data) { output } unless @layout.nil?
|
42
47
|
output
|
43
48
|
end
|
44
49
|
|
45
|
-
def
|
46
|
-
meta[meth.to_s] || meta[meth.to_sym] || super
|
47
|
-
end
|
48
|
-
|
49
|
-
def get_binding
|
50
|
+
def get_binding #(&blk)
|
50
51
|
binding
|
51
52
|
end
|
52
53
|
|
53
|
-
# Sets the meta data as read from the file.
|
54
|
-
#
|
55
|
-
# Params:
|
56
|
-
# meta - The metadata Hash.
|
57
|
-
#
|
58
|
-
# Called by Renderer::Base.
|
59
|
-
#
|
60
|
-
def set_meta(meta)
|
61
|
-
# TODO: OStruct and stuff
|
62
|
-
# Merge
|
63
|
-
@meta ||= Hash.new
|
64
|
-
@meta.merge! meta
|
65
|
-
|
66
|
-
# Set the Layout
|
67
|
-
@layout = Layout.create(@meta['layout'], @project) if @meta['layout']
|
68
|
-
end
|
69
|
-
|
70
54
|
protected
|
71
55
|
|
72
56
|
# Constructor.
|
73
57
|
# The `page` argument is a page name
|
74
|
-
# Don't use me: use {Project#
|
58
|
+
# Don't use me: use {Project#[]}
|
75
59
|
#
|
76
60
|
def initialize(path, project, renderer, filename)
|
77
61
|
@project = project
|
78
62
|
@name ||= path
|
79
|
-
@meta ||=
|
63
|
+
@meta ||= Meta.new self
|
80
64
|
@filename = filename
|
81
65
|
@renderer = renderer.new(self, filename)
|
82
66
|
end
|
data/lib/hyde/page_factory.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
module Hyde
|
2
2
|
class PageFactory
|
3
3
|
def self.create(path, project, def_page_class = Page)
|
4
|
+
ext = File.extname(path)
|
4
5
|
begin
|
5
6
|
do_create path, project, def_page_class
|
6
7
|
rescue NotFound
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
begin
|
9
|
+
do_create "#{path.chomp(ext)}", project, def_page_class
|
10
|
+
rescue NotFound
|
11
|
+
do_create "#{path}/index.html".squeeze('/'), project, def_page_class
|
12
|
+
end
|
10
13
|
end
|
11
14
|
end
|
12
15
|
|
data/lib/hyde/partial.rb
CHANGED
data/lib/hyde/project.rb
CHANGED
@@ -3,6 +3,14 @@ module Hyde
|
|
3
3
|
class Project
|
4
4
|
include Hyde::Utils
|
5
5
|
|
6
|
+
# The filename of the configuration file, relative to the project root. (String)
|
7
|
+
#
|
8
|
+
attr :config_file
|
9
|
+
|
10
|
+
# The configuration k/v storage (OStruct)
|
11
|
+
#
|
12
|
+
attr_accessor :config
|
13
|
+
|
6
14
|
# The root path (String).
|
7
15
|
#
|
8
16
|
# @example
|
@@ -12,51 +20,37 @@ module Hyde
|
|
12
20
|
#
|
13
21
|
def root(*args)
|
14
22
|
where = ''
|
15
|
-
where = send("#{args.shift.to_s}_path") if args[0].class == Symbol
|
23
|
+
where = @config.send("#{args.shift.to_s}_path") if args[0].class == Symbol
|
16
24
|
path = args
|
17
25
|
File.expand_path(File.join [@root, where, path].reject(&:empty?))
|
18
26
|
end
|
19
27
|
|
20
|
-
# The filename of the configuration file, relative to the project root. (String)
|
21
|
-
#
|
22
|
-
attr :config_file
|
23
|
-
|
24
|
-
# The configuration k/v storage (OStruct)
|
25
|
-
#
|
26
|
-
attr_accessor :config
|
27
|
-
|
28
28
|
# Can raise a NoRootError
|
29
29
|
#
|
30
30
|
def initialize(root = Dir.pwd)
|
31
31
|
@config = OStruct.new defaults
|
32
32
|
@root, @config_file = find_root_from root
|
33
|
-
@config.merge! YAML::load_file(@config_file)
|
34
|
-
load_extensions
|
35
|
-
end
|
33
|
+
@config.merge! YAML::load_file(@config_file)
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
# Check for version
|
36
|
+
raise IncompatibleError, "This project requires at least Hyde v#{@config.hyde_requirement}." \
|
37
|
+
unless @config.hyde_requirement.nil? or \
|
38
|
+
::Hyde.compatible_with?(@config.hyde_requirement)
|
41
39
|
|
42
|
-
|
43
|
-
# @return {Page} or a subclass of it
|
44
|
-
#
|
45
|
-
def get_page(path)
|
46
|
-
Page.create path, self
|
40
|
+
load_extensions
|
47
41
|
end
|
48
42
|
|
49
|
-
# Returns
|
50
|
-
#
|
43
|
+
# Returns an object in the project.
|
44
|
+
# Can be a page, layout, template...
|
51
45
|
#
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# Can throw a NotFound.
|
46
|
+
# @example
|
47
|
+
# @project['index.html']
|
48
|
+
# @project['default', :Layout]
|
49
|
+
# @project['widgets/sidebar', :Partial]
|
57
50
|
#
|
58
|
-
def
|
59
|
-
|
51
|
+
def [](name, default_class=Page)
|
52
|
+
default_class = ::Hyde.const_get(default_class) if default_class.is_a? Symbol
|
53
|
+
Hyde::Page[name, self, default_class]
|
60
54
|
end
|
61
55
|
|
62
56
|
# Writes the output files.
|
@@ -64,21 +58,25 @@ module Hyde
|
|
64
58
|
# ostream - (Stream) Where to send the messages
|
65
59
|
#
|
66
60
|
def build(ostream = nil)
|
67
|
-
|
68
|
-
|
61
|
+
if File.exists? root(:output)
|
62
|
+
raise Errno::EEXISTS unless File.directory? root(:output)
|
63
|
+
else
|
64
|
+
Dir.mkdir root(:output)
|
65
|
+
end
|
69
66
|
|
70
67
|
begin
|
71
68
|
files.each do |path|
|
72
|
-
ostream << " * #{output_path}/#{path}\n" if ostream
|
69
|
+
ostream << " * #{@config.output_path}/#{path}\n" if ostream
|
70
|
+
|
73
71
|
begin
|
74
|
-
rendered = render
|
75
|
-
|
76
|
-
|
77
|
-
mfile.close
|
72
|
+
rendered = self[path].render
|
73
|
+
force_file_open(root(:output, path)) { |file| file << rendered }
|
74
|
+
|
78
75
|
rescue RenderError => e
|
79
76
|
ostream << " *** Error: #{e.to_s}".gsub("\n", "\n *** ") << "\n"
|
80
77
|
end
|
81
78
|
end
|
79
|
+
|
82
80
|
rescue NoGemError => e
|
83
81
|
ostream << " *** Error: #{e.message}\n"
|
84
82
|
end
|
@@ -96,7 +94,9 @@ module Hyde
|
|
96
94
|
if ignored_files.include?(path) or File.directory?(match)
|
97
95
|
# pass
|
98
96
|
elsif not get_renderer(ext).nil? # Has a renderer associated
|
99
|
-
|
97
|
+
fname = file.chomp(".#{ext}")
|
98
|
+
fname += get_renderer(ext).default_ext unless File.basename(fname).include?('.')
|
99
|
+
a << fname
|
100
100
|
else
|
101
101
|
a << file
|
102
102
|
end
|
@@ -112,8 +112,9 @@ module Hyde
|
|
112
112
|
root(:layouts, '**/*'),
|
113
113
|
root(:extensions, '**/*'),
|
114
114
|
root(:output, '**/*'),
|
115
|
+
root(:partials, '**/*'),
|
115
116
|
@config_file
|
116
|
-
]
|
117
|
+
].uniq
|
117
118
|
end
|
118
119
|
|
119
120
|
# Returns a list of ignored files based on the {ignore_list}.
|
@@ -175,6 +176,7 @@ module Hyde
|
|
175
176
|
def defaults
|
176
177
|
{ 'layouts_path' => 'layouts',
|
177
178
|
'extensions_path' => 'extensions',
|
179
|
+
'partials_path' => 'layouts',
|
178
180
|
'site_path' => 'site',
|
179
181
|
'output_path' => 'public',
|
180
182
|
'gems' => []
|
data/lib/hyde/renderer.rb
CHANGED
@@ -17,7 +17,7 @@ module Hyde
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def render(data, &block)
|
20
|
-
scope = build_scope(page, data)
|
20
|
+
scope = build_scope(page, data, &block)
|
21
21
|
evaluate scope, data, &block
|
22
22
|
end
|
23
23
|
|
@@ -26,7 +26,11 @@ module Hyde
|
|
26
26
|
@markup
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
def self.default_ext
|
30
|
+
''
|
31
|
+
end
|
32
|
+
|
33
|
+
protected
|
30
34
|
def require_lib(lib, gem=lib)
|
31
35
|
begin
|
32
36
|
require lib
|
@@ -37,21 +41,18 @@ module Hyde
|
|
37
41
|
end
|
38
42
|
end
|
39
43
|
|
40
|
-
def build_scope(page, data)
|
44
|
+
def build_scope(page, data, &block)
|
41
45
|
# Page is the scope
|
42
|
-
scope = page.get_binding
|
46
|
+
scope = page.get_binding &block
|
43
47
|
scope_object = eval("self", scope)
|
44
48
|
|
45
49
|
# Inherit local vars
|
46
|
-
|
47
|
-
|
50
|
+
data_object = data.inject({}) { |a, i| a[i[0].to_s] = i[1]; a }
|
51
|
+
scope_object.send(:instance_variable_set, '@_locals', data_object)
|
52
|
+
f_set_locals = data_object.keys.map { |k| "#{k} = @_locals[#{k.inspect}];" }.join("\n")
|
48
53
|
eval(f_set_locals, scope)
|
49
54
|
|
50
55
|
scope_object.instance_eval do
|
51
|
-
def eval_block(src, &block)
|
52
|
-
# This will let you eval something, and `yield` within that block.
|
53
|
-
eval src, &block
|
54
|
-
end
|
55
56
|
get_helpers.each { |helper_class| extend helper_class }
|
56
57
|
end
|
57
58
|
|
@@ -66,6 +67,10 @@ module Hyde
|
|
66
67
|
|
67
68
|
# Any filetype that is split with the -- separator
|
68
69
|
class Parsable < Base
|
70
|
+
def self.default_ext
|
71
|
+
'.html'
|
72
|
+
end
|
73
|
+
|
69
74
|
def initialize(page, filename)
|
70
75
|
super page, filename
|
71
76
|
|
@@ -76,7 +81,7 @@ module Hyde
|
|
76
81
|
@markup = parts[0]
|
77
82
|
else
|
78
83
|
@markup = parts[1]
|
79
|
-
page.
|
84
|
+
page.meta.merge! YAML::load("--- " + parts[0])
|
80
85
|
end
|
81
86
|
end
|
82
87
|
|
data/lib/hyde/renderers.rb
CHANGED
@@ -16,11 +16,15 @@ module Hyde
|
|
16
16
|
def evaluate(scope, data={}, &block)
|
17
17
|
require_lib 'erb'
|
18
18
|
@engine = ::ERB.new markup
|
19
|
-
eval
|
19
|
+
eval @engine.src, scope
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
class Less < Renderer::Base
|
24
|
+
def self.default_ext
|
25
|
+
'.css'
|
26
|
+
end
|
27
|
+
|
24
28
|
def evaluate(scope, data={}, &block)
|
25
29
|
require_lib 'less'
|
26
30
|
begin
|
@@ -50,6 +54,10 @@ module Hyde
|
|
50
54
|
end
|
51
55
|
|
52
56
|
class Textile < Renderer::Parsable
|
57
|
+
def self.default_ext
|
58
|
+
'.css'
|
59
|
+
end
|
60
|
+
|
53
61
|
def evaluate(s, d={}, &block)
|
54
62
|
require_lib 'redcloth', 'RedCloth'
|
55
63
|
RedCloth.new(markup).to_html
|
@@ -6,7 +6,7 @@ rescue LoadError
|
|
6
6
|
exit
|
7
7
|
end
|
8
8
|
|
9
|
-
$:.unshift File.dirname(__FILE__) + "
|
9
|
+
$:.unshift File.dirname(__FILE__) + "/../.."
|
10
10
|
require 'hyde'
|
11
11
|
|
12
12
|
$project = Hyde::Project.new
|
@@ -34,7 +34,7 @@ class Main < Sinatra::Base
|
|
34
34
|
type = File.extname(path)[1..-1]
|
35
35
|
content_type type.to_sym if type.is_a? String
|
36
36
|
|
37
|
-
page =
|
37
|
+
page = @@project[path]
|
38
38
|
|
39
39
|
# Send the last modified time
|
40
40
|
last_modified File.mtime(page.filename)
|
@@ -43,15 +43,19 @@ class Main < Sinatra::Base
|
|
43
43
|
page.render
|
44
44
|
|
45
45
|
rescue Hyde::RenderError => e
|
46
|
-
puts " * `#{path}` error"
|
46
|
+
puts " * `#{path}` line #{e.line} error"
|
47
47
|
puts " *** #{e.message}".gsub("\n","\n *** ")
|
48
48
|
e.message
|
49
49
|
|
50
50
|
rescue Hyde::NotFound
|
51
51
|
raise Sinatra::NotFound
|
52
|
-
|
53
52
|
end
|
54
53
|
end
|
54
|
+
|
55
|
+
not_found do
|
56
|
+
html_path = File.join(File.dirname(__FILE__), %w[.. .. .. data pages 404.html])
|
57
|
+
File.open(html_path) { |f| f.read } + (" "*4096)
|
58
|
+
end
|
55
59
|
end
|
56
60
|
|
57
61
|
Main.show_start
|
data/lib/hyde/utils.rb
CHANGED
@@ -10,15 +10,20 @@ module Hyde
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
def force_file_open(filepath)
|
13
|
+
def force_file_open(filepath, &blk)
|
14
14
|
require 'fileutils'
|
15
15
|
FileUtils.mkdir_p File.dirname(filepath)
|
16
|
-
|
16
|
+
|
17
|
+
if block_given?
|
18
|
+
File.open filepath, 'w', &blk
|
19
|
+
else
|
20
|
+
File.new filepath, 'w'
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
# Returns all helper classes under the Hyde::Helpers module.
|
20
25
|
def get_helpers
|
21
|
-
Hyde::Helpers.constants.inject([]) do |a, constant|
|
26
|
+
Hyde::Helpers.constants.inject([Hyde::Helpers]) do |a, constant|
|
22
27
|
mod = Hyde::Helpers.const_get(constant)
|
23
28
|
a << mod if mod.is_a? Module
|
24
29
|
a
|
data/test/helper.rb
CHANGED
data/test/test_hyde.rb
CHANGED
@@ -36,26 +36,26 @@ class TestHyde < Test::Unit::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
should "use layouts" do
|
39
|
-
output = @project
|
39
|
+
output = @project['layout_test.html'].render
|
40
40
|
assert_match /This is the meta title/, output
|
41
41
|
assert_match /<!-- \(default layout\) -->/, output
|
42
42
|
end
|
43
43
|
|
44
44
|
should "account for index.html" do
|
45
|
-
home_output = @project
|
46
|
-
assert_equal home_output, @project
|
47
|
-
assert_equal home_output, @project
|
45
|
+
home_output = @project['index.html'].render
|
46
|
+
assert_equal home_output, @project['/'].render
|
47
|
+
assert_equal home_output, @project['/index.html'].render
|
48
48
|
|
49
|
-
about_output = @project
|
50
|
-
assert_equal about_output, @project
|
51
|
-
assert_equal about_output, @project
|
49
|
+
about_output = @project['/about/index.html'].render
|
50
|
+
assert_equal about_output, @project['/about'].render
|
51
|
+
assert_equal about_output, @project['/about/'].render
|
52
52
|
end
|
53
53
|
|
54
54
|
should "get types right" do
|
55
|
-
page = @project
|
55
|
+
page = @project['index.html']
|
56
56
|
assert page.is_a? Hyde::Page
|
57
57
|
|
58
|
-
layout =
|
58
|
+
layout = @project['default', Hyde::Layout]
|
59
59
|
assert layout.is_a? Hyde::Layout
|
60
60
|
assert layout.is_a? Hyde::Page
|
61
61
|
end
|
data/test/test_page.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Rico Sta. Cruz
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-05-
|
18
|
+
date: 2010-05-30 00:00:00 +08:00
|
19
19
|
default_executable: hyde
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -84,13 +84,14 @@ files:
|
|
84
84
|
- data/new_site/hyde.conf
|
85
85
|
- data/new_site/layouts/default.haml
|
86
86
|
- data/new_site/site/index.html.haml
|
87
|
+
- data/pages/404.html
|
87
88
|
- hydeweb.gemspec
|
88
89
|
- lib/hyde.rb
|
89
90
|
- lib/hyde/clicommand.rb
|
90
91
|
- lib/hyde/clicommands.rb
|
91
92
|
- lib/hyde/helpers.rb
|
92
|
-
- lib/hyde/init.rb
|
93
93
|
- lib/hyde/layout.rb
|
94
|
+
- lib/hyde/meta.rb
|
94
95
|
- lib/hyde/ostruct.rb
|
95
96
|
- lib/hyde/page.rb
|
96
97
|
- lib/hyde/page_factory.rb
|
@@ -98,6 +99,7 @@ files:
|
|
98
99
|
- lib/hyde/project.rb
|
99
100
|
- lib/hyde/renderer.rb
|
100
101
|
- lib/hyde/renderers.rb
|
102
|
+
- lib/hyde/sinatra/init.rb
|
101
103
|
- lib/hyde/utils.rb
|
102
104
|
- manual/Extending/ExtendingHyde.md
|
103
105
|
- manual/Hyde.md
|
@@ -144,6 +146,15 @@ files:
|
|
144
146
|
- test/fixtures/default/www_control/index.html
|
145
147
|
- test/fixtures/default/www_control/layout_test.html
|
146
148
|
- test/fixtures/default/www_control/yes.html
|
149
|
+
- test/fixtures/two/_config.yml
|
150
|
+
- test/fixtures/two/layouts/default.haml
|
151
|
+
- test/fixtures/two/layouts/shared/test.haml
|
152
|
+
- test/fixtures/two/site/default.html.haml
|
153
|
+
- test/fixtures/two/site/index.html.haml
|
154
|
+
- test/fixtures/two/site/var.html.haml
|
155
|
+
- test/fixtures/two/www_control/default.html
|
156
|
+
- test/fixtures/two/www_control/index.html
|
157
|
+
- test/fixtures/two/www_control/var.html
|
147
158
|
- test/helper.rb
|
148
159
|
- test/test_all_fixtures.rb
|
149
160
|
- test/test_build.rb
|