hydeweb 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +14 -0
- data/Rakefile +2 -2
- data/bin/hyde +2 -1
- data/bin/hyde01 +2 -1
- data/data/new_site/hyde.conf +1 -1
- data/lib/hyde.rb +8 -1
- data/lib/hyde/cli.rb +26 -5
- data/lib/hyde/cli/helpers.rb +4 -4
- data/lib/hyde/meta.rb +4 -0
- data/lib/hyde/page.rb +25 -3
- data/lib/hyde/server.rb +2 -0
- data/lib/hyde/set.rb +23 -0
- data/test/fixture/extensions/control/index.html +1 -0
- data/test/fixture/html/control/index.html +2 -0
- data/test/fixture/html/hyde.conf +8 -0
- data/test/fixture/html/site/index.html +2 -0
- data/test/fixture/one/control/css/bar.css +0 -0
- data/test/fixture/one/site/css/bar.scss +0 -0
- data/test/fixture/one/site/hello.haml +2 -0
- data/test/fixture/one/site/hi.html +2 -0
- data/test/fixture/sort/control/about.html +6 -0
- data/test/fixture/sort/control/about/hardy.html +1 -0
- data/test/fixture/sort/control/about/intrepid.html +1 -0
- data/test/helper.rb +4 -4
- data/test/unit/hyde_test.rb +1 -4
- data/test/unit/page_test.rb +31 -0
- data/test/unit/set_test.rb +26 -0
- metadata +13 -2
data/HISTORY.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
v0.1.3
|
2
|
+
------
|
3
|
+
|
4
|
+
- .html files are now being treated as .erb.
|
5
|
+
- Implement `page.children.find`.
|
6
|
+
- Implement `page.children.except`.
|
7
|
+
- Fix #children and sorting giving errors.
|
8
|
+
- Fix #siblings.
|
9
|
+
- Revise the 'no config file found' error message.
|
10
|
+
- Allow `.hyderc` as a filename.
|
11
|
+
- Add help for `hyde help start`.
|
12
|
+
- Support `hyde start -D` which is a very hackish solution to have
|
13
|
+
Hyde start as a daemon.
|
14
|
+
|
1
15
|
v0.1.2
|
2
16
|
------
|
3
17
|
|
data/Rakefile
CHANGED
@@ -4,8 +4,8 @@ end
|
|
4
4
|
|
5
5
|
task :default => :test
|
6
6
|
|
7
|
-
task :
|
7
|
+
task :gemrelease do
|
8
8
|
require './lib/hyde'
|
9
9
|
v = Hyde.version
|
10
|
-
system "joe build && git commit -a -m \"Update to version #{v}.\" && git tag v#{v}"
|
10
|
+
system "joe build && git commit -a -m \"Update to version #{v}.\" && git tag v#{v} && git push && joe release"
|
11
11
|
end
|
data/bin/hyde
CHANGED
data/bin/hyde01
CHANGED
data/data/new_site/hyde.conf
CHANGED
data/lib/hyde.rb
CHANGED
@@ -8,8 +8,11 @@ require 'yaml'
|
|
8
8
|
require 'tilt'
|
9
9
|
require 'shake'
|
10
10
|
|
11
|
+
# HTML files as ERB
|
12
|
+
Tilt.mappings['html'] = Tilt.mappings['erb']
|
13
|
+
|
11
14
|
class Hyde
|
12
|
-
VERSION = "0.1.
|
15
|
+
VERSION = "0.1.3"
|
13
16
|
PREFIX = File.expand_path('../', __FILE__)
|
14
17
|
|
15
18
|
Error = Class.new(StandardError)
|
@@ -17,11 +20,15 @@ class Hyde
|
|
17
20
|
VersionError = Class.new(Error)
|
18
21
|
NoGemError = Class.new(Error)
|
19
22
|
|
23
|
+
# Allowed config filenames
|
24
|
+
CONFIG_FILES = ['hyde.conf', '.hyderc']
|
25
|
+
|
20
26
|
autoload :Project, "#{PREFIX}/hyde/project"
|
21
27
|
autoload :Page, "#{PREFIX}/hyde/page"
|
22
28
|
autoload :Meta, "#{PREFIX}/hyde/meta"
|
23
29
|
autoload :Config, "#{PREFIX}/hyde/config"
|
24
30
|
autoload :CLI, "#{PREFIX}/hyde/cli"
|
31
|
+
autoload :Set, "#{PREFIX}/hyde/set"
|
25
32
|
autoload :Layout, "#{PREFIX}/hyde/layout"
|
26
33
|
autoload :Partial, "#{PREFIX}/hyde/partial"
|
27
34
|
autoload :Helpers, "#{PREFIX}/hyde/helpers"
|
data/lib/hyde/cli.rb
CHANGED
@@ -68,16 +68,37 @@ class CLI < Shake
|
|
68
68
|
task(:start) do
|
69
69
|
project
|
70
70
|
|
71
|
-
port
|
72
|
-
host
|
71
|
+
port = (params.extract('-p') || 4833).to_i
|
72
|
+
host = (params.extract('-o') || '0.0.0.0')
|
73
|
+
daemon = (!! params.delete('-D'))
|
73
74
|
|
74
75
|
require 'hyde/server'
|
75
76
|
|
76
|
-
|
77
|
+
if daemon
|
78
|
+
pid = fork { Hyde::Server.run! :Host => host, :Port => port, :quiet => true }
|
79
|
+
sleep 2
|
80
|
+
puts
|
81
|
+
puts "Listening on #{host}:#{port} on pid #{pid}."
|
82
|
+
puts "To stop: kill #{pid}"
|
83
|
+
else
|
84
|
+
Hyde::Server.run! :Host => host, :Port => port
|
85
|
+
end
|
77
86
|
end
|
78
87
|
|
79
88
|
task.description = "Starts the server"
|
80
89
|
task.category = :project
|
90
|
+
task.help = %{
|
91
|
+
Usage:
|
92
|
+
|
93
|
+
#{executable} start [-p PORT] [-o HOST] [-D]
|
94
|
+
|
95
|
+
Starts an HTTP server so you may rapidly test your project locally.
|
96
|
+
|
97
|
+
If the -p and/or -o is specified, it will listen on the specified HOST:PORT.
|
98
|
+
Otherwise, the default is 0.0.0.0:4833.
|
99
|
+
|
100
|
+
If -D is specified, it goes into daemon mode.
|
101
|
+
}.gsub(/^ {4}/, '').strip.split("\n")
|
81
102
|
|
82
103
|
task(:version) do
|
83
104
|
puts "Hyde #{Hyde::VERSION}"
|
@@ -108,9 +129,9 @@ class CLI < Shake
|
|
108
129
|
err
|
109
130
|
err "Get started by typing:"
|
110
131
|
err " $ #{executable} create my_project"
|
111
|
-
err
|
112
|
-
err "Type `#{executable} help COMMAND` for additional help on a command."
|
113
132
|
end
|
133
|
+
err
|
134
|
+
err "Type `#{executable} help COMMAND` for additional help on a command."
|
114
135
|
end
|
115
136
|
|
116
137
|
task.description = "Shows help for a given command"
|
data/lib/hyde/cli/helpers.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
class Hyde
|
2
2
|
class CLI
|
3
3
|
module Helpers
|
4
|
-
def show_help_for(
|
5
|
-
name = params.first
|
4
|
+
def show_help_for(name)
|
6
5
|
task = task(name)
|
7
6
|
pass "No such command. Try: #{executable} help" unless task
|
8
7
|
|
@@ -35,8 +34,9 @@ module Helpers
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def no_project
|
38
|
-
"Error:
|
39
|
-
"
|
37
|
+
"Error: no Hyde config file found.\n" +
|
38
|
+
"(Looked for #{Hyde::CONFIG_FILES.join(', ')})\n\n" +
|
39
|
+
"You start by creating a config file for this project:\n" +
|
40
40
|
" $ #{executable} create .\n\n" +
|
41
41
|
"You may also create an empty project in a new directory:\n" +
|
42
42
|
" $ #{executable} create NAME\n"
|
data/lib/hyde/meta.rb
CHANGED
data/lib/hyde/page.rb
CHANGED
@@ -65,6 +65,10 @@ class Page
|
|
65
65
|
|
66
66
|
alias to_s title
|
67
67
|
|
68
|
+
def position
|
69
|
+
meta[:position] || title
|
70
|
+
end
|
71
|
+
|
68
72
|
def <=>(other)
|
69
73
|
result = self.position <=> other.position
|
70
74
|
result ||= self.position.to_s <=> other.position.to_s
|
@@ -226,15 +230,18 @@ class Page
|
|
226
230
|
File.expand_path("../#{base}/*", @file)
|
227
231
|
end
|
228
232
|
|
229
|
-
Dir[files].reject { |f| f == @file }.map { |f| self.class[f, project] }.compact.sort
|
233
|
+
Set.new Dir[files].reject { |f| f == @file }.map { |f| self.class[f, project] }.compact.sort
|
230
234
|
end
|
231
235
|
|
232
236
|
def siblings
|
233
|
-
p = parent and p.children
|
237
|
+
pages = (p = parent and p.children)
|
238
|
+
return Set.new unless pages
|
239
|
+
return Set.new unless pages.include?(self)
|
240
|
+
Set.new(pages)
|
234
241
|
end
|
235
242
|
|
236
243
|
def breadcrumbs
|
237
|
-
parent? ? (parent.breadcrumbs + [self]) : [self]
|
244
|
+
Set.new (parent? ? (parent.breadcrumbs + [self]) : [self])
|
238
245
|
end
|
239
246
|
|
240
247
|
def index?
|
@@ -253,6 +260,21 @@ class Page
|
|
253
260
|
breadcrumbs.size
|
254
261
|
end
|
255
262
|
|
263
|
+
def next
|
264
|
+
page = self
|
265
|
+
while true do
|
266
|
+
page.siblings.index(self)
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def ==(other)
|
271
|
+
self.path == other.path
|
272
|
+
end
|
273
|
+
|
274
|
+
def inspect
|
275
|
+
"<##{self.class.name} #{path.inspect}>"
|
276
|
+
end
|
277
|
+
|
256
278
|
protected
|
257
279
|
def default_layout
|
258
280
|
'default' if html?
|
data/lib/hyde/server.rb
CHANGED
@@ -15,6 +15,7 @@ class Hyde
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def show_status(page)
|
18
|
+
return if @options[:quiet]
|
18
19
|
path = env['PATH_INFO']
|
19
20
|
return if path == '/favicon.ico'
|
20
21
|
|
@@ -48,6 +49,7 @@ end
|
|
48
49
|
module Hyde::Server
|
49
50
|
# :Host, :Port
|
50
51
|
def self.run!(options={})
|
52
|
+
@options = options
|
51
53
|
handler = rack_handler or return false
|
52
54
|
handler.run self, options
|
53
55
|
end
|
data/lib/hyde/set.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class Hyde
|
2
|
+
class Set < Array
|
3
|
+
# Filters a set by given metadata criteria.
|
4
|
+
#
|
5
|
+
# @example
|
6
|
+
# Page['/'].children.find(layout: 'default')
|
7
|
+
#
|
8
|
+
def find(by={})
|
9
|
+
self.class.new(select do |page|
|
10
|
+
by.inject(true) { |b, (field, value)| b &&= (page.meta.send(field) == value) }
|
11
|
+
end)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Filters a set by removing items matching the given metadata criteria.
|
15
|
+
# This is the opposite of #find.
|
16
|
+
#
|
17
|
+
def except(by={})
|
18
|
+
self.class.new(reject do |page|
|
19
|
+
by.inject(true) { |b, (field, value)| b &&= (page.meta.send(field) == value) }
|
20
|
+
end)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>hey</h1>
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
...
|
@@ -0,0 +1 @@
|
|
1
|
+
...
|
data/test/helper.rb
CHANGED
@@ -3,11 +3,11 @@ $:.push File.expand_path('../../lib', __FILE__)
|
|
3
3
|
require 'hyde'
|
4
4
|
require 'contest'
|
5
5
|
|
6
|
-
# Unpack
|
7
|
-
Page = Hyde::Page
|
8
|
-
Project = Hyde::Project
|
9
|
-
|
10
6
|
class TestCase < Test::Unit::TestCase
|
7
|
+
# Shorthand
|
8
|
+
Page = Hyde::Page
|
9
|
+
Project = Hyde::Project
|
10
|
+
|
11
11
|
def fixture(*a)
|
12
12
|
path = File.expand_path('../fixture', __FILE__)
|
13
13
|
File.join path, *a
|
data/test/unit/hyde_test.rb
CHANGED
@@ -7,10 +7,6 @@ class HydeTest < TestCase
|
|
7
7
|
Dir.chdir @path
|
8
8
|
end
|
9
9
|
|
10
|
-
test "hi" do
|
11
|
-
#y @project.pages.map { |page| y html: page.to_html, path: page.path, file: page.file }
|
12
|
-
end
|
13
|
-
|
14
10
|
test "build" do
|
15
11
|
@project.pages.each { |page| page.write }
|
16
12
|
end
|
@@ -22,6 +18,7 @@ class HydeTest < TestCase
|
|
22
18
|
assert_equal Page['/cheers.html'].file, site['cheers.html.haml']
|
23
19
|
assert_equal Page['/hi.html'].file, site['hi.html']
|
24
20
|
assert_equal Page['/hi.yo'].file, site['hi.html']
|
21
|
+
assert_equal Page['/hi'].file, site['hi.html']
|
25
22
|
assert_equal Page['/css/style.css'].file, site['css/style.scss']
|
26
23
|
assert_equal Page['/css/style.css'].file, site['css/style.scss']
|
27
24
|
assert_equal Page['/about'].file, site['about/index.scss']
|
data/test/unit/page_test.rb
CHANGED
@@ -24,4 +24,35 @@ class PageTest < TestCase
|
|
24
24
|
assert Page['/'].parent.nil?
|
25
25
|
assert Page['/css/style.css'].parent.path == '/index.html'
|
26
26
|
end
|
27
|
+
|
28
|
+
test "siblings" do
|
29
|
+
# Because it has no parent, technically
|
30
|
+
page = Page['/about/index.css']
|
31
|
+
assert page.siblings.empty?
|
32
|
+
|
33
|
+
page = Page['/hello.html']
|
34
|
+
assert_equal %w(/cheers.html /hello.html /hi.html), page.siblings.map(&:path)
|
35
|
+
end
|
36
|
+
|
37
|
+
test "mimes" do
|
38
|
+
assert !Page['/css/style.css'].html?
|
39
|
+
assert Page['/'].html?
|
40
|
+
assert_equal 'text/css', Page['/css/style.css'].mime_type
|
41
|
+
assert_equal 'text/html', Page['/about/us.html'].mime_type
|
42
|
+
assert_equal 'html', Page['/about/us.html'].default_ext
|
43
|
+
assert_equal 'css', Page['/css/style.css'].default_ext
|
44
|
+
end
|
45
|
+
|
46
|
+
test "no layout" do
|
47
|
+
page = Page['/hi.html']
|
48
|
+
assert_equal false, page.meta.layout
|
49
|
+
assert_equal nil, page.layout
|
50
|
+
assert_equal false, page.layout?
|
51
|
+
assert_equal page.to_html, page.content
|
52
|
+
end
|
53
|
+
|
54
|
+
test "html pages should be intact" do
|
55
|
+
page = Page['/hi']
|
56
|
+
assert_equal page.markup, page.content
|
57
|
+
end
|
27
58
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
2
|
+
|
3
|
+
class SetTest < TestCase
|
4
|
+
setup do
|
5
|
+
@path = fixture('one')
|
6
|
+
@project = Project.new(@path)
|
7
|
+
Dir.chdir @path
|
8
|
+
end
|
9
|
+
|
10
|
+
test "breadcrumbs" do
|
11
|
+
assert Page['/about/index.css'].breadcrumbs.is_a?(Hyde::Set)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "children" do
|
15
|
+
assert Page['/'].children.is_a?(Hyde::Set)
|
16
|
+
end
|
17
|
+
|
18
|
+
test "siblings" do
|
19
|
+
assert Page['/about'].siblings.is_a?(Hyde::Set)
|
20
|
+
end
|
21
|
+
|
22
|
+
test "children" do
|
23
|
+
set = Page['/'].children.find(:hello => 'world')
|
24
|
+
assert set.map(&:path) == ['/hello.html']
|
25
|
+
end
|
26
|
+
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.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rico Sta. Cruz
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-22 00:00:00 +08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -91,7 +91,9 @@ files:
|
|
91
91
|
- lib/hyde/partial.rb
|
92
92
|
- lib/hyde/project.rb
|
93
93
|
- lib/hyde/server.rb
|
94
|
+
- lib/hyde/set.rb
|
94
95
|
- lib/hyde.rb
|
96
|
+
- test/fixture/extensions/control/index.html
|
95
97
|
- test/fixture/extensions/extensions/a/a.rb
|
96
98
|
- test/fixture/extensions/hyde.conf
|
97
99
|
- test/fixture/extensions/site/index.haml
|
@@ -100,6 +102,9 @@ files:
|
|
100
102
|
- test/fixture/fail_type/control/index.html
|
101
103
|
- test/fixture/fail_type/hyde.conf
|
102
104
|
- test/fixture/fail_type/site/index.haml
|
105
|
+
- test/fixture/html/control/index.html
|
106
|
+
- test/fixture/html/hyde.conf
|
107
|
+
- test/fixture/html/site/index.html
|
103
108
|
- test/fixture/nested_layout/control/index.html
|
104
109
|
- test/fixture/nested_layout/hyde.conf
|
105
110
|
- test/fixture/nested_layout/layouts/default.haml
|
@@ -108,6 +113,7 @@ files:
|
|
108
113
|
- test/fixture/one/control/about/index.css
|
109
114
|
- test/fixture/one/control/about/us.html
|
110
115
|
- test/fixture/one/control/cheers.html
|
116
|
+
- test/fixture/one/control/css/bar.css
|
111
117
|
- test/fixture/one/control/css/style.css
|
112
118
|
- test/fixture/one/control/hello.html
|
113
119
|
- test/fixture/one/control/hi.html
|
@@ -118,6 +124,7 @@ files:
|
|
118
124
|
- test/fixture/one/site/about/index.scss
|
119
125
|
- test/fixture/one/site/about/us.haml
|
120
126
|
- test/fixture/one/site/cheers.html.haml
|
127
|
+
- test/fixture/one/site/css/bar.scss
|
121
128
|
- test/fixture/one/site/css/style.scss
|
122
129
|
- test/fixture/one/site/hello.haml
|
123
130
|
- test/fixture/one/site/hi.html
|
@@ -129,6 +136,9 @@ files:
|
|
129
136
|
- test/fixture/parent/site/about/index.haml
|
130
137
|
- test/fixture/parent/site/about/us.haml
|
131
138
|
- test/fixture/parent/site/index.haml
|
139
|
+
- test/fixture/sort/control/about/hardy.html
|
140
|
+
- test/fixture/sort/control/about/intrepid.html
|
141
|
+
- test/fixture/sort/control/about.html
|
132
142
|
- test/fixture/sort/hyde.conf
|
133
143
|
- test/fixture/sort/site/about/hardy.haml
|
134
144
|
- test/fixture/sort/site/about/intrepid.haml
|
@@ -144,6 +154,7 @@ files:
|
|
144
154
|
- test/unit/fixture_test.rb
|
145
155
|
- test/unit/hyde_test.rb
|
146
156
|
- test/unit/page_test.rb
|
157
|
+
- test/unit/set_test.rb
|
147
158
|
- data/new_site/_layouts/default.haml
|
148
159
|
- data/new_site/config.ru
|
149
160
|
- data/new_site/hyde.conf
|