hydeweb 0.0.1.pre4 → 0.0.1.pre5
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/VERSION +1 -1
- data/bin/hyde +7 -61
- data/lib/hyde/clicommand.rb +42 -0
- data/lib/hyde/clicommands.rb +87 -0
- data/lib/hyde/init.rb +20 -7
- data/lib/hyde/project.rb +29 -8
- data/lib/hyde/renderers.rb +6 -2
- data/lib/hyde.rb +7 -8
- metadata +4 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.1.
|
1
|
+
0.0.1.pre5
|
data/bin/hyde
CHANGED
@@ -6,66 +6,12 @@ require 'optparse'
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'hyde'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
opts = OptionParser.new do |o|
|
13
|
-
o.banner = "usage: hyde <action> [<options>]"
|
14
|
-
o.separator ""
|
15
|
-
|
16
|
-
#o.on("-w", "--watch", "watch for changes") do
|
17
|
-
# options[:watch] = true
|
18
|
-
#end
|
19
|
-
|
20
|
-
o.separator "Actions:"
|
21
|
-
o.separator " start - Starts a server"
|
22
|
-
o.separator " build - Creates HTML files"
|
23
|
-
o.separator " create <name> - Starts a project"
|
24
|
-
o.separator ""
|
25
|
-
o.separator "Options:"
|
26
|
-
|
27
|
-
# Help
|
28
|
-
o.on_tail("-h", "--help", "show this message") do
|
29
|
-
puts opts
|
30
|
-
exit
|
31
|
-
end
|
9
|
+
if ARGV.size == 0
|
10
|
+
Hyde::CLICommands::Help.run
|
11
|
+
exit
|
32
12
|
end
|
33
13
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
(
|
38
|
-
|
39
|
-
ostream = STDERR
|
40
|
-
|
41
|
-
if options[:action] == 'start'
|
42
|
-
system "ruby #{lib_path}/hyde/init.rb"
|
43
|
-
|
44
|
-
elsif options[:action] == 'build'
|
45
|
-
Hyde::Project.new.build ostream
|
46
|
-
|
47
|
-
elsif options[:action] == 'create'
|
48
|
-
unless options[:params].size == 1
|
49
|
-
puts opts
|
50
|
-
|
51
|
-
else
|
52
|
-
site_name = options[:params][0]
|
53
|
-
if File.directory? site_name
|
54
|
-
ostream << "This directory already exists!\n"
|
55
|
-
exit
|
56
|
-
end
|
57
|
-
|
58
|
-
from = File.join(File.dirname(__FILE__), '..', 'data', 'new_site')
|
59
|
-
to = File.expand_path(File.join(Dir.pwd, site_name))
|
60
|
-
|
61
|
-
require 'fileutils'
|
62
|
-
FileUtils.cp_r from, to
|
63
|
-
|
64
|
-
Dir[File.join(to, '**/*')].each do |file|
|
65
|
-
ostream << " * " << file.gsub(Dir.pwd, '') << "\n"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
else
|
70
|
-
puts opts
|
71
|
-
end
|
14
|
+
# Can error
|
15
|
+
controller = Hyde::CLICommands.get_controller ARGV[0]
|
16
|
+
params = ARGV[1..-1]
|
17
|
+
controller.run(*params)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Hyde
|
2
|
+
class CLICommand
|
3
|
+
@@description = nil
|
4
|
+
|
5
|
+
def self.ostream
|
6
|
+
STDERR
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.log(str)
|
10
|
+
ostream << str << "\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.help
|
14
|
+
log "No help for this command."
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.lib_path
|
18
|
+
@@lib_path ||= File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.project
|
22
|
+
begin
|
23
|
+
Hyde::Project.new
|
24
|
+
rescue NoRootError
|
25
|
+
ostream << "No Hyde config file found. (looking for: hyde.conf, _config.yml)\n"
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.desc(str)
|
31
|
+
class_eval %{
|
32
|
+
def self.description
|
33
|
+
"#{str.gsub('\"','\\\"')}"
|
34
|
+
end
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.description
|
39
|
+
""
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Hyde
|
2
|
+
module CLICommands
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def get_controller(str)
|
6
|
+
begin
|
7
|
+
class_name = str.downcase.capitalize.to_sym
|
8
|
+
controller = Hyde::CLICommands.const_get(class_name)
|
9
|
+
rescue NameError
|
10
|
+
STDERR << "Unknown command: #{str}\n"
|
11
|
+
STDERR << "Type `hyde` for a list of commands.\n"
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
controller
|
15
|
+
end
|
16
|
+
|
17
|
+
class Help < CLICommand
|
18
|
+
desc "Shows help"
|
19
|
+
|
20
|
+
def self.run(*a)
|
21
|
+
if a.size == 0
|
22
|
+
general_help
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
26
|
+
controller = CLICommands::get_controller a[0]
|
27
|
+
controller.help
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.general_help
|
31
|
+
log "Usage: hyde <command> [arguments]"
|
32
|
+
log ""
|
33
|
+
log "Commands:"
|
34
|
+
CLICommands.constants.each do |class_name|
|
35
|
+
klass = CLICommands.const_get(class_name)
|
36
|
+
name = class_name.to_s.downcase
|
37
|
+
puts " #{name}%s#{klass.description}" % [' ' * (20-name.size)]
|
38
|
+
end
|
39
|
+
|
40
|
+
log ""
|
41
|
+
log "For more info on a command, type `hyde help <command>`."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Build < CLICommand
|
46
|
+
desc "Builds the HTML files"
|
47
|
+
def self.run(*a)
|
48
|
+
project.build ostream
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Start < CLICommand
|
53
|
+
desc "Starts the server"
|
54
|
+
def self.run(*a)
|
55
|
+
project
|
56
|
+
system "ruby \"%s\"" % [File.join(lib_path, 'hyde', 'init.rb')]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class Create < CLICommand
|
61
|
+
desc "Starts a new Hyde project"
|
62
|
+
def self.run(*a)
|
63
|
+
unless a.size == 1
|
64
|
+
log "Usage: hyde create <sitename>"
|
65
|
+
exit
|
66
|
+
|
67
|
+
else
|
68
|
+
site_name = a[0]
|
69
|
+
if File.directory? site_name
|
70
|
+
log "Directory `#{site_name}` already exists!"
|
71
|
+
exit
|
72
|
+
end
|
73
|
+
|
74
|
+
from = File.join(lib_path, '..', 'data', 'new_site')
|
75
|
+
to = File.expand_path(File.join(Dir.pwd, site_name))
|
76
|
+
|
77
|
+
require 'fileutils'
|
78
|
+
FileUtils.cp_r from, to
|
79
|
+
|
80
|
+
Dir[File.join(to, '**/*')].each do |file|
|
81
|
+
log " * %s" % [file.gsub(/^#{Regexp.escape(Dir.pwd)}\/?/, '')]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/hyde/init.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
3
|
-
require
|
2
|
+
begin
|
3
|
+
require 'sinatra/base'
|
4
|
+
rescue LoadError
|
5
|
+
STDERR << "You need the sinatra gem to use `hyde start`. Type: `gem install sinatra`\n"
|
6
|
+
exit
|
7
|
+
end
|
4
8
|
|
5
9
|
$:.unshift File.dirname(__FILE__) + "/.."
|
6
10
|
require 'hyde'
|
7
11
|
|
8
|
-
|
9
|
-
puts " http://127.0.0.1:4567 Homepage"
|
10
|
-
puts " http://127.0.0.1:4567/- File list"
|
11
|
-
puts ""
|
12
|
+
$project = Hyde::Project.new
|
12
13
|
|
13
14
|
class Main < Sinatra::Base
|
14
|
-
@@project ||=
|
15
|
+
@@project ||= $project
|
16
|
+
|
17
|
+
def self.show_start
|
18
|
+
puts "Starting server..."
|
19
|
+
puts " http://127.0.0.1:4567 Homepage"
|
20
|
+
puts " http://127.0.0.1:4567/- File list"
|
21
|
+
puts ""
|
22
|
+
end
|
15
23
|
|
16
24
|
get '/-' do
|
17
25
|
@@project.files.inject("") do |a, path|
|
@@ -26,10 +34,15 @@ class Main < Sinatra::Base
|
|
26
34
|
type = File.extname(path)[1..-1]
|
27
35
|
content_type type.to_sym if type.is_a? String
|
28
36
|
@@project.render path
|
37
|
+
rescue Hyde::RenderError => e
|
38
|
+
puts " * `#{path}` error"
|
39
|
+
puts " *** #{e.message}".gsub("\n","\n *** ")
|
40
|
+
e.message
|
29
41
|
rescue Hyde::NotFound
|
30
42
|
raise Sinatra::NotFound
|
31
43
|
end
|
32
44
|
end
|
33
45
|
end
|
34
46
|
|
47
|
+
Main.show_start
|
35
48
|
Main.run!
|
data/lib/hyde/project.rb
CHANGED
@@ -19,14 +19,29 @@ module Hyde
|
|
19
19
|
# The configuration k/v storage (Hash)
|
20
20
|
attr_accessor :config
|
21
21
|
|
22
|
+
# Can raise a NoRootError
|
22
23
|
def initialize( root = Dir.pwd )
|
23
24
|
@config = OStruct.new defaults
|
25
|
+
@root, @config_file = find_root_from root
|
26
|
+
@config.merge! YAML::load_file(@config_file) if File.exists? @config_file
|
27
|
+
end
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
def find_root_from(start)
|
30
|
+
root = File.expand_path(start)
|
31
|
+
ret = nil
|
32
|
+
while ret.nil?
|
33
|
+
# See if any of these files exist
|
34
|
+
['_config.yml', 'hyde.conf'].each do |config_name|
|
35
|
+
config_file = File.join(root, config_name)
|
36
|
+
ret ||= [root, config_file] if File.exists? config_file
|
37
|
+
end
|
28
38
|
|
29
|
-
|
39
|
+
# Traverse back (die if we reach the root)
|
40
|
+
old_root = root
|
41
|
+
root = File.expand_path(File.join(root, '..'))
|
42
|
+
raise NoRootError if root == old_root
|
43
|
+
end
|
44
|
+
ret
|
30
45
|
end
|
31
46
|
|
32
47
|
def method_missing(meth, *args, &blk)
|
@@ -58,11 +73,17 @@ module Hyde
|
|
58
73
|
Dir.mkdir root(:output) unless File.directory? root(:output)
|
59
74
|
|
60
75
|
begin
|
76
|
+
continue = true
|
61
77
|
files.each do |path|
|
62
78
|
ostream << " * #{output_path}/#{path}\n" if ostream
|
63
|
-
|
64
|
-
|
65
|
-
|
79
|
+
begin
|
80
|
+
rendered = render(path)
|
81
|
+
mfile = force_file_open(root(:output, path))
|
82
|
+
mfile << rendered
|
83
|
+
mfile.close
|
84
|
+
rescue RenderError => e
|
85
|
+
ostream << " *** Error: #{e.message}".gsub("\n", "\n *** ") << "\n"
|
86
|
+
end
|
66
87
|
end
|
67
88
|
rescue NoGemError => e
|
68
89
|
ostream << "Error: #{e.message}\n"
|
@@ -71,7 +92,7 @@ module Hyde
|
|
71
92
|
|
72
93
|
# Returns a list of all URL paths
|
73
94
|
def files
|
74
|
-
@file_list
|
95
|
+
@file_list = Dir[File.join(root(:site), '**', '*')].inject([]) do |a, match|
|
75
96
|
# Make sure its the canonical name
|
76
97
|
path = File.expand_path(match)
|
77
98
|
file = path.gsub /^#{Regexp.escape root(:site)}\/?/, ''
|
data/lib/hyde/renderers.rb
CHANGED
@@ -20,8 +20,12 @@ module Hyde
|
|
20
20
|
class Less < Renderer::Base
|
21
21
|
def evaluate(scope, data={}, &block)
|
22
22
|
require_lib 'less'
|
23
|
-
|
24
|
-
|
23
|
+
begin
|
24
|
+
@engine = ::Less::Engine.new(File.open(filename))
|
25
|
+
@engine.to_css
|
26
|
+
rescue ::Less::SyntaxError => e
|
27
|
+
raise Hyde::RenderError, e.message
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
data/lib/hyde.rb
CHANGED
@@ -10,14 +10,13 @@ module Hyde
|
|
10
10
|
autoload :Renderers, "#{prefix}/hyde/renderers"
|
11
11
|
autoload :Utils, "#{prefix}/hyde/utils"
|
12
12
|
autoload :Scope, "#{prefix}/hyde/scope"
|
13
|
+
autoload :CLICommand, "#{prefix}/hyde/clicommand"
|
14
|
+
autoload :CLICommands,"#{prefix}/hyde/clicommands"
|
13
15
|
autoload :TemplateHelpers,"#{prefix}/hyde/template_helpers"
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
class NoGemError < Exception
|
22
|
-
end
|
17
|
+
Error = Class.new(::StandardError)
|
18
|
+
RenderError = Class.new(Error)
|
19
|
+
NoGemError = Class.new(Error)
|
20
|
+
NotFound = Class.new(Error)
|
21
|
+
NoRootError = Class.new(Error)
|
23
22
|
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.0.1.
|
9
|
+
- pre5
|
10
|
+
version: 0.0.1.pre5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rico Sta. Cruz
|
@@ -84,6 +84,8 @@ files:
|
|
84
84
|
- data/new_site/layouts/default.haml
|
85
85
|
- data/new_site/site/index.html.haml
|
86
86
|
- lib/hyde.rb
|
87
|
+
- lib/hyde/clicommand.rb
|
88
|
+
- lib/hyde/clicommands.rb
|
87
89
|
- lib/hyde/init.rb
|
88
90
|
- lib/hyde/layout.rb
|
89
91
|
- lib/hyde/ostruct.rb
|