hydeweb 0.1.1 → 0.1.2
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/HISTORY.md +19 -2
- data/data/new_site/README.md +2 -10
- data/data/new_site/_layouts/default.haml +17 -0
- data/data/new_site/config.ru +8 -0
- data/data/new_site/hyde.conf +3 -1
- data/lib/hyde/cli/helpers.rb +33 -2
- data/lib/hyde/cli.rb +55 -1
- data/lib/hyde/config.rb +2 -0
- data/lib/hyde/helpers.rb +6 -0
- data/lib/hyde/page.rb +13 -3
- data/lib/hyde/server.rb +3 -1
- data/lib/hyde.rb +1 -1
- data/test/fixture/one/control/about/us.html +1 -0
- data/test/fixture/one/site/about/us.haml +3 -0
- data/test/unit/page_test.rb +27 -0
- metadata +5 -1
data/HISTORY.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
v0.1.2
|
2
|
+
------
|
3
|
+
|
4
|
+
- Allow `hyde create .` to add a hyde.conf in the current folder.
|
5
|
+
- Revamp the help screen.
|
6
|
+
- Fix: change the default load path for Sass/SCSS to 'css'.
|
7
|
+
- Add Page#depth.
|
8
|
+
- Fix Page#breadcrumbs.
|
9
|
+
- Fix Page#parent.
|
10
|
+
- Add the `rel` helper.
|
11
|
+
- Generated Hyde projects are now Rack-compatible.
|
12
|
+
|
1
13
|
v0.1.1
|
2
14
|
------
|
3
15
|
|
@@ -11,8 +23,13 @@ v0.1.1
|
|
11
23
|
v0.1.0
|
12
24
|
------
|
13
25
|
|
14
|
-
|
15
|
-
|
26
|
+
**Complete rewrite.** Many thing have been deprecated.
|
27
|
+
|
28
|
+
- Now uses Tilt (for templates), Shake (for CLI) and Cuba (for the server).
|
29
|
+
- Now supports everything Tilt supports: CoffeeScript, Liquid, etc.
|
30
|
+
- Allow `tilt_options` in hyde.conf.
|
31
|
+
- Old extensions will be broken (but who made any yet, anyway?)
|
32
|
+
- Update the `hyde create` template's gitignore file to account for _public.
|
16
33
|
|
17
34
|
v0.0.8
|
18
35
|
------
|
data/data/new_site/README.md
CHANGED
@@ -1,18 +1,10 @@
|
|
1
|
-
{sitename}
|
2
|
-
==========
|
3
|
-
|
4
|
-
This is my site.
|
5
|
-
|
6
|
-
|
7
1
|
Instructions
|
8
2
|
------------
|
9
3
|
|
10
4
|
1. Make sure Ruby (>= v1.8) is installed.
|
11
|
-
2. Install the hydeweb gem: `gem install hydeweb
|
5
|
+
2. Install the hydeweb gem: `gem install hydeweb`
|
12
6
|
3. Build the site HTML files by typing: `hyde build`
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
(If #2 fails, you may need to type `sudo gem install hydeweb` instead)
|
8
|
+
(If #2 fails, you may need to type `sudo gem install hydeweb` instead)
|
17
9
|
|
18
10
|
|
@@ -2,9 +2,26 @@
|
|
2
2
|
%html
|
3
3
|
%head
|
4
4
|
%title= page.title
|
5
|
+
|
6
|
+
%meta(charset='UTF-8')
|
7
|
+
-# Use the latest IE engine, or Chrome frame.
|
8
|
+
%meta(http-equiv='X-UA-Compatible' content='IE=edge,chrome=1')
|
9
|
+
|
10
|
+
-# Mobile viewport optimization. j.mp/bplateviewport
|
11
|
+
%meta(name='viewport' content='width=device-width, initial-scale=1.0')
|
12
|
+
|
13
|
+
-# Standard SEO meta
|
14
|
+
- if page.meta.keywords
|
15
|
+
%meta{:name => 'keywords', :content => page.meta.keywords}
|
16
|
+
- if page.meta.description
|
17
|
+
%meta{:name => 'description', :content => page.meta.description}
|
18
|
+
|
19
|
+
%link{:rel => 'stylesheet', :href => '/css/style.css'}
|
20
|
+
|
5
21
|
%body
|
6
22
|
#content
|
7
23
|
!= yield
|
24
|
+
|
8
25
|
%div#footer
|
9
26
|
%hr
|
10
27
|
%p Generated by Hyde
|
data/data/new_site/hyde.conf
CHANGED
@@ -15,6 +15,8 @@ partials_path: _layouts
|
|
15
15
|
ignore:
|
16
16
|
- **/*~
|
17
17
|
- README*
|
18
|
+
- config.ru
|
19
|
+
- **/.*
|
18
20
|
- **/_*.scss
|
19
21
|
|
20
22
|
# Optional options for layout engines
|
@@ -22,5 +24,5 @@ tilt_options:
|
|
22
24
|
haml:
|
23
25
|
:escape_html: true
|
24
26
|
scss:
|
25
|
-
:load_paths: [ '
|
27
|
+
:load_paths: [ 'css' ]
|
26
28
|
|
data/lib/hyde/cli/helpers.rb
CHANGED
@@ -1,6 +1,29 @@
|
|
1
1
|
class Hyde
|
2
2
|
class CLI
|
3
3
|
module Helpers
|
4
|
+
def show_help_for(task)
|
5
|
+
name = params.first
|
6
|
+
task = task(name)
|
7
|
+
pass "No such command. Try: #{executable} help" unless task
|
8
|
+
|
9
|
+
help = task.help
|
10
|
+
if help
|
11
|
+
help.each { |line| err line }
|
12
|
+
err
|
13
|
+
else
|
14
|
+
err "Usage: #{executable} #{task.usage || name}"
|
15
|
+
err "#{task.description}." if task.description
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def tasks_for(category)
|
20
|
+
tasks.select { |name, t| t.category == category }
|
21
|
+
end
|
22
|
+
|
23
|
+
def other_tasks
|
24
|
+
tasks.select { |name, t| t.category.nil? }
|
25
|
+
end
|
26
|
+
|
4
27
|
def say_info(str)
|
5
28
|
say_status '*', str, 30
|
6
29
|
end
|
@@ -12,12 +35,20 @@ module Helpers
|
|
12
35
|
end
|
13
36
|
|
14
37
|
def no_project
|
15
|
-
"
|
38
|
+
"Error: This is not a Hyde project.\n" +
|
39
|
+
"You may convert it into one by creating a config file:\n" +
|
40
|
+
" $ #{executable} create .\n\n" +
|
41
|
+
"You may also create an empty project in a new directory:\n" +
|
42
|
+
" $ #{executable} create NAME\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def project?
|
46
|
+
!! @hydefile
|
16
47
|
end
|
17
48
|
|
18
49
|
def project
|
19
50
|
@project ||= begin
|
20
|
-
pass no_project unless
|
51
|
+
pass no_project unless project?
|
21
52
|
Dir.chdir File.dirname(@hydefile)
|
22
53
|
|
23
54
|
begin
|
data/lib/hyde/cli.rb
CHANGED
@@ -7,10 +7,16 @@ class CLI < Shake
|
|
7
7
|
|
8
8
|
task(:create) do
|
9
9
|
wrong_usage unless params.size == 1
|
10
|
-
|
11
10
|
template = File.expand_path('../../../data/new_site', __FILE__)
|
12
11
|
target = params.first
|
13
12
|
|
13
|
+
if target == '.'
|
14
|
+
pass "This is already a Hyde project." if @hydefile
|
15
|
+
FileUtils.cp_r File.join(template, 'hyde.conf'), target
|
16
|
+
say_status :create, 'hyde.conf'
|
17
|
+
pass
|
18
|
+
end
|
19
|
+
|
14
20
|
pass "Error: target directory already exists." if File.directory?(target)
|
15
21
|
|
16
22
|
puts "Creating files in #{target}:"
|
@@ -36,6 +42,7 @@ class CLI < Shake
|
|
36
42
|
|
37
43
|
task.description = "Starts a new Hyde project"
|
38
44
|
task.usage = "create NAME"
|
45
|
+
task.category = :create
|
39
46
|
|
40
47
|
task(:build) do
|
41
48
|
pre = project.config.output_path
|
@@ -56,6 +63,7 @@ class CLI < Shake
|
|
56
63
|
end
|
57
64
|
|
58
65
|
task.description = "Builds the current project"
|
66
|
+
task.category = :project
|
59
67
|
|
60
68
|
task(:start) do
|
61
69
|
project
|
@@ -69,12 +77,58 @@ class CLI < Shake
|
|
69
77
|
end
|
70
78
|
|
71
79
|
task.description = "Starts the server"
|
80
|
+
task.category = :project
|
72
81
|
|
73
82
|
task(:version) do
|
74
83
|
puts "Hyde #{Hyde::VERSION}"
|
75
84
|
end
|
76
85
|
|
77
86
|
task.description = "Shows the current version"
|
87
|
+
task.category = :misc
|
88
|
+
|
89
|
+
task(:help) do
|
90
|
+
show_help_for(params.first) and pass if params.any?
|
91
|
+
|
92
|
+
show_task = Proc.new { |name, t| err " %-20s %s" % [ t.usage || name, t.description ] }
|
93
|
+
|
94
|
+
err "Usage: #{executable} <command>"
|
95
|
+
|
96
|
+
err "\nCommands:"
|
97
|
+
tasks_for(:create).each &show_task
|
98
|
+
err "\nProject commands:"
|
99
|
+
tasks_for(:project).each &show_task
|
100
|
+
if other_tasks.any?
|
101
|
+
err "\nOthers:"
|
102
|
+
other_tasks.each &show_task
|
103
|
+
end
|
104
|
+
err "\nMisc commands:"
|
105
|
+
tasks_for(:misc).each &show_task
|
106
|
+
|
107
|
+
unless project?
|
108
|
+
err
|
109
|
+
err "Get started by typing:"
|
110
|
+
err " $ #{executable} create my_project"
|
111
|
+
err
|
112
|
+
err "Type `#{executable} help COMMAND` for additional help on a command."
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
task.description = "Shows help for a given command"
|
117
|
+
task.usage = "help [COMMAND]"
|
118
|
+
task.category = :misc
|
119
|
+
|
120
|
+
invalid do
|
121
|
+
task = task(command)
|
122
|
+
if task
|
123
|
+
err "Invalid usage."
|
124
|
+
err "Try: #{executable} #{task.usage}"
|
125
|
+
err
|
126
|
+
err "Type `#{executable} help` for more info."
|
127
|
+
else
|
128
|
+
err "Invalid command: #{command}"
|
129
|
+
err "Type `#{executable} help` for more info."
|
130
|
+
end
|
131
|
+
end
|
78
132
|
|
79
133
|
def self.run!(options={})
|
80
134
|
@hydefile = options[:file]
|
data/lib/hyde/config.rb
CHANGED
data/lib/hyde/helpers.rb
CHANGED
data/lib/hyde/page.rb
CHANGED
@@ -205,9 +205,15 @@ class Page
|
|
205
205
|
end
|
206
206
|
|
207
207
|
def parent
|
208
|
-
parts = path.split('/')
|
209
|
-
|
210
|
-
self.class[
|
208
|
+
parts = path.split('/') # ['', 'about', 'index.html']
|
209
|
+
|
210
|
+
try = lambda { |newpath| p = self.class[newpath, project]; p if p && p.path != path }
|
211
|
+
|
212
|
+
# Absolute root
|
213
|
+
return nil if index? and parts.size <= 2
|
214
|
+
|
215
|
+
parent = try[parts[0...-1].join('/')] # ['','about'] => '/about'
|
216
|
+
parent ||= try['/'] # Home
|
211
217
|
end
|
212
218
|
|
213
219
|
def children
|
@@ -243,6 +249,10 @@ class Page
|
|
243
249
|
parent.nil?
|
244
250
|
end
|
245
251
|
|
252
|
+
def depth
|
253
|
+
breadcrumbs.size
|
254
|
+
end
|
255
|
+
|
246
256
|
protected
|
247
257
|
def default_layout
|
248
258
|
'default' if html?
|
data/lib/hyde/server.rb
CHANGED
@@ -32,10 +32,12 @@ class Hyde
|
|
32
32
|
on default do
|
33
33
|
begin
|
34
34
|
page = Hyde::Page[env['PATH_INFO']] or break not_found
|
35
|
-
|
35
|
+
type = page.mime_type
|
36
|
+
res['Content-Type'] = type if type
|
36
37
|
res.write page.to_html
|
37
38
|
show_status page
|
38
39
|
rescue => e
|
40
|
+
res['Content-Type'] = 'text/html'
|
39
41
|
res.write "<h1>#{e.class}: #{e.message}</h1><ul>#{e.backtrace.map{|l|"<li>#{l}</li>"}.join('')}</ul>"
|
40
42
|
end
|
41
43
|
end
|
data/lib/hyde.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
<h1>hi</h1>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
2
|
+
|
3
|
+
class PageTest < TestCase
|
4
|
+
setup do
|
5
|
+
@path = fixture('one')
|
6
|
+
@project = Project.new(@path)
|
7
|
+
Dir.chdir @path
|
8
|
+
end
|
9
|
+
|
10
|
+
test "root" do
|
11
|
+
@page = Page['/']
|
12
|
+
assert @page.index?
|
13
|
+
assert @page.root?
|
14
|
+
end
|
15
|
+
|
16
|
+
test "breadcrumbs" do
|
17
|
+
assert_equal %w(/index.html /about/index.css), Page['/about/index.css'].breadcrumbs.map(&:path)
|
18
|
+
assert_equal %w(/index.html /about/index.css /about/us.html), Page['/about/us.html'].breadcrumbs.map(&:path)
|
19
|
+
assert_equal %w(/index.html /css/style.css), Page['/css/style.css'].breadcrumbs.map(&:path)
|
20
|
+
assert_equal %w(/index.html), Page['/'].breadcrumbs.map(&:path)
|
21
|
+
end
|
22
|
+
|
23
|
+
test "parent" do
|
24
|
+
assert Page['/'].parent.nil?
|
25
|
+
assert Page['/css/style.css'].parent.path == '/index.html'
|
26
|
+
end
|
27
|
+
end
|
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.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rico Sta. Cruz
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- test/fixture/nested_layout/layouts/post.haml
|
107
107
|
- test/fixture/nested_layout/site/index.haml
|
108
108
|
- test/fixture/one/control/about/index.css
|
109
|
+
- test/fixture/one/control/about/us.html
|
109
110
|
- test/fixture/one/control/cheers.html
|
110
111
|
- test/fixture/one/control/css/style.css
|
111
112
|
- test/fixture/one/control/hello.html
|
@@ -115,6 +116,7 @@ files:
|
|
115
116
|
- test/fixture/one/layouts/default.haml
|
116
117
|
- test/fixture/one/partials/menu.haml
|
117
118
|
- test/fixture/one/site/about/index.scss
|
119
|
+
- test/fixture/one/site/about/us.haml
|
118
120
|
- test/fixture/one/site/cheers.html.haml
|
119
121
|
- test/fixture/one/site/css/style.scss
|
120
122
|
- test/fixture/one/site/hello.haml
|
@@ -141,7 +143,9 @@ files:
|
|
141
143
|
- test/unit/extensions_test.rb
|
142
144
|
- test/unit/fixture_test.rb
|
143
145
|
- test/unit/hyde_test.rb
|
146
|
+
- test/unit/page_test.rb
|
144
147
|
- data/new_site/_layouts/default.haml
|
148
|
+
- data/new_site/config.ru
|
145
149
|
- data/new_site/hyde.conf
|
146
150
|
- data/new_site/index.haml
|
147
151
|
- data/new_site/README.md
|