ace 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +14 -0
- data/bin/ace-gen +7 -2
- data/example/Gemfile +7 -0
- data/example/Gemfile.lock +26 -0
- data/example/README.textile +3 -0
- data/example/app/posts.rb +1 -1
- data/example/app/tags.rb +4 -4
- data/example/boot.rb +3 -1
- data/example/content/posts/{ruby.html → 2010-09-14-ruby.html} +0 -1
- data/example/content/posts/{node-js.html → 2010-09-16-node-js.html} +0 -1
- data/example/output/posts/2010-09-14-ruby.html +24 -0
- data/example/output/posts/2010-09-16-node-js.html +32 -0
- data/example/output/tags/development.html +1 -1
- data/example/output/tags/node.html +10 -0
- data/example/output/tags/node.js +10 -0
- data/example/rules.rb +1 -1
- data/example/tasks.rb +10 -0
- data/lib/ace.rb +8 -2
- data/lib/ace/filters/image_thumbnailer.rb +39 -0
- data/lib/ace/filters/template.rb +23 -4
- data/lib/ace/version.rb +1 -1
- metadata +12 -4
data/README.textile
CHANGED
@@ -5,3 +5,17 @@ Ace is a static page generator like "Nanoc":http://nanoc.stoneship.org, "Jekyll"
|
|
5
5
|
Also, last but not least, Ace has a real template inheritance. Layouts are for kids, real men use template inheritance! What's the advantage? It's incredibly flexible.
|
6
6
|
|
7
7
|
Check "Ace: Static Sites Generator":http://blog.101ideas.cz/posts/ace-static-site-generator.html for more information or you can take a look at "sources":https://github.com/botanicus/blog.101ideas.cz of "my blog":http://blog.101ideas.cz to have something to play with!
|
8
|
+
|
9
|
+
h1. Installation
|
10
|
+
|
11
|
+
If you want to use @ace-gen@:
|
12
|
+
|
13
|
+
<pre>
|
14
|
+
gem install ace --development
|
15
|
+
</pre>
|
16
|
+
|
17
|
+
Without @ace-gen@:
|
18
|
+
|
19
|
+
<pre>
|
20
|
+
gem install ace
|
21
|
+
</pre>
|
data/bin/ace-gen
CHANGED
@@ -19,9 +19,14 @@ rescue LoadError
|
|
19
19
|
abort "You have to install simple-templater first!"
|
20
20
|
end
|
21
21
|
|
22
|
+
templater = SimpleTemplater.new(:ace)
|
23
|
+
generator = templater.find(:project)
|
24
|
+
|
25
|
+
if generator.nil?
|
26
|
+
abort "Generator not found!"
|
27
|
+
end
|
28
|
+
|
22
29
|
begin
|
23
|
-
templater = SimpleTemplater.new(:ace)
|
24
|
-
generator = templater.find(:project)
|
25
30
|
generator.run(ARGV)
|
26
31
|
rescue SimpleTemplater::TargetAlreadyExist => exception
|
27
32
|
abort exception.message
|
data/example/Gemfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
ace (0.3.2)
|
5
|
+
template-inheritance
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
haml (3.1.1)
|
11
|
+
nake (0.0.8)
|
12
|
+
term-ansicolor
|
13
|
+
nokogiri (1.4.4)
|
14
|
+
template-inheritance (0.3)
|
15
|
+
haml
|
16
|
+
tilt
|
17
|
+
term-ansicolor (1.0.5)
|
18
|
+
tilt (1.3.1)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
ace!
|
25
|
+
nake
|
26
|
+
nokogiri
|
data/example/app/posts.rb
CHANGED
data/example/app/tags.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
# The class represents all the tags, whereas
|
4
|
+
# the instance represents each single tag.
|
3
5
|
class Tag < Ace::Item
|
4
6
|
before Ace::TemplateFilter, layout: "tag.html"
|
5
|
-
end
|
6
7
|
|
7
|
-
|
8
|
-
def tags
|
8
|
+
def self.tags
|
9
9
|
Post.instances.inject(Hash.new) do |buffer, post|
|
10
10
|
if tags = post.metadata[:tags]
|
11
11
|
tags.each do |tag|
|
@@ -17,7 +17,7 @@ class TagPagesGenerator
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def self.generate
|
21
21
|
self.tags.each do |tag_title, items|
|
22
22
|
tag_name = tag_title.downcase.gsub(" ", "-")
|
23
23
|
metadata = {title: tag_title, timestamp: Time.now}
|
data/example/boot.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head></head>
|
4
|
+
<body>
|
5
|
+
<div id='main'>
|
6
|
+
<h1>My Coooooool Bloogiiiiseeeeek!</h1>
|
7
|
+
<p class="excerpt">
|
8
|
+
Ruby is a dynamic, reflective, general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Ruby originated in Japan during the mid-1990s and was first developed and designed by Yukihiro "Matz" Matsumoto. It was influenced primarily by Perl, Smalltalk, Eiffel, and Lisp.
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management; it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU.
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<p>
|
16
|
+
The standard 1.8.7 implementation is written in C, as a single-pass interpreted language. There is currently no specification of the Ruby language, so the original implementation is considered to be the de facto reference. As of 2010[update], there are a number of complete or upcoming alternative implementations of the Ruby language, including YARV, JRuby, Rubinius, IronRuby, MacRuby, and HotRuby, each of which takes a different approach, with IronRuby, JRuby and MacRuby providing just-in-time compilation and MacRuby also providing ahead-of-time compilation. The official 1.9 branch uses YARV, as will 2.0 (development), and will eventually supersede the slower Ruby MRI.
|
17
|
+
</p>
|
18
|
+
|
19
|
+
<p>
|
20
|
+
<em>From <a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29">Wikipedia.org</em>.
|
21
|
+
</p>
|
22
|
+
</div>
|
23
|
+
</body>
|
24
|
+
</html>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head></head>
|
4
|
+
<body>
|
5
|
+
<div id='main'>
|
6
|
+
<h1>My Coooooool Bloogiiiiseeeeek!</h1>
|
7
|
+
<p class="excerpt">
|
8
|
+
Node.js is an evented I/O framework for the V8 JavaScript engine. It is intended for writing scalable network programs such as web servers.
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
Node.js is similar in purpose to Twisted for Python, Perl Object Environment for Perl, and EventMachine for Ruby. Unlike most JavaScript, it is not executed in a web browser, but it is rather related to server-side JavaScript. Node.js implements some CommonJS specifications[1]. Node.js includes a REPL environment for interactive testing.
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<pre>
|
16
|
+
var sys = require('sys'),
|
17
|
+
http = require('http');
|
18
|
+
|
19
|
+
http.createServer(function (request, response) {
|
20
|
+
response.writeHead(200, {'Content-Type': 'text/plain'});
|
21
|
+
response.end('Hello World\n');
|
22
|
+
}).listen(8000);
|
23
|
+
|
24
|
+
sys.puts('Server running at http://127.0.0.1:8000/');
|
25
|
+
</pre>
|
26
|
+
|
27
|
+
<p>
|
28
|
+
<em>From <a href="http://en.wikipedia.org/wiki/Node.js">Wikipedia.org</em>.
|
29
|
+
</p>
|
30
|
+
</div>
|
31
|
+
</body>
|
32
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head></head>
|
4
|
+
<body>
|
5
|
+
<div id='main'>
|
6
|
+
<h1>My Coooooool Bloogiiiiseeeeek!</h1>
|
7
|
+
Node.js Asynchronous JavaScript Framework
|
8
|
+
</div>
|
9
|
+
</body>
|
10
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html>
|
3
|
+
<head></head>
|
4
|
+
<body>
|
5
|
+
<div id='main'>
|
6
|
+
<h1>My Coooooool Bloogiiiiseeeeek!</h1>
|
7
|
+
Node.js Asynchronous JavaScript Framework
|
8
|
+
</div>
|
9
|
+
</body>
|
10
|
+
</html>
|
data/example/rules.rb
CHANGED
data/example/tasks.rb
CHANGED
data/lib/ace.rb
CHANGED
@@ -51,8 +51,14 @@ module Ace
|
|
51
51
|
class Item
|
52
52
|
def self.inherited(subclass)
|
53
53
|
self.subclasses << subclass
|
54
|
-
|
55
|
-
|
54
|
+
|
55
|
+
self.before_filters.each do |instance|
|
56
|
+
subclass.before_filters << instance.dup
|
57
|
+
end
|
58
|
+
|
59
|
+
self.after_filters.each do |instance|
|
60
|
+
subclass.after_filters << instance.dup
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
def self.subclasses
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "ace/filters"
|
4
|
+
require "nokogiri"
|
5
|
+
|
6
|
+
module Ace
|
7
|
+
class ImageThumbnailerFilter < Filter
|
8
|
+
def thumb_name(filename)
|
9
|
+
filename.gsub(/\.([^\.]*)$/, '_thumb.\1')
|
10
|
+
end
|
11
|
+
|
12
|
+
def thumbnail_nodeset(filename, doc)
|
13
|
+
a = Nokogiri::XML::Node.new 'a', doc
|
14
|
+
img = Nokogiri::XML::Node.new 'img', doc
|
15
|
+
a.set_attribute('href', filename)
|
16
|
+
img.set_attribute('src', thumb_name(filename))
|
17
|
+
img.parent = a
|
18
|
+
a
|
19
|
+
end
|
20
|
+
|
21
|
+
def make_thumbnail_image(filename, size)
|
22
|
+
size ||= 20 # default size
|
23
|
+
cmd = "convert content#{filename} -resize #{size} content#{thumb_name(filename)}"
|
24
|
+
warn "~ make thumbnail with '#{cmd}'"
|
25
|
+
system(cmd)
|
26
|
+
raise "Error when converting image 'content#{filename}'" if $?.to_i != 0
|
27
|
+
end
|
28
|
+
|
29
|
+
def call(item, content)
|
30
|
+
puts item.inspect
|
31
|
+
doc = Nokogiri::HTML(content)
|
32
|
+
doc.css("thumbnail").each do |thumb|
|
33
|
+
make_thumbnail_image thumb[:src], thumb[:size]
|
34
|
+
thumb.replace thumbnail_nodeset(thumb[:src], doc)
|
35
|
+
end
|
36
|
+
doc.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/ace/filters/template.rb
CHANGED
@@ -16,12 +16,31 @@ module Ace
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def initialize(options = Hash.new)
|
19
|
-
@
|
19
|
+
@layout = options[:layout] if options.has_key?(:layout)
|
20
20
|
end
|
21
21
|
|
22
22
|
def call(item, content)
|
23
|
-
|
24
|
-
|
23
|
+
path = @layout || item.original_path.sub(/content\//, "") # We remove content/, because content is in TI paths.
|
24
|
+
if path.nil?
|
25
|
+
raise <<-EOF.gsub(/ {10}/m, "")
|
26
|
+
You have to specify output_path of #{self.inspect}
|
27
|
+
|
28
|
+
Usage:
|
29
|
+
|
30
|
+
class Post < Ace::Item
|
31
|
+
before Ace::TemplateFilter, layout: "posts.html"
|
32
|
+
end
|
33
|
+
|
34
|
+
# OR:
|
35
|
+
|
36
|
+
class Post < Ace::Item
|
37
|
+
before Ace::TemplateFilter
|
38
|
+
|
39
|
+
# And have #original_path set up (Ace does it by default,
|
40
|
+
# but if you are using some custom code it might not work
|
41
|
+
# out of the box).
|
42
|
+
end
|
43
|
+
EOF
|
25
44
|
end
|
26
45
|
|
27
46
|
parts = item.output_path.split(".")
|
@@ -33,7 +52,7 @@ module Ace
|
|
33
52
|
raise "Template can be named either with one suffix as template.haml or with two of them as template.html.haml resp. template.xml.haml."
|
34
53
|
end
|
35
54
|
|
36
|
-
template = TemplateInheritance::Template.new(
|
55
|
+
template = TemplateInheritance::Template.new(path, Scope.new)
|
37
56
|
return template.render(item: item)
|
38
57
|
end
|
39
58
|
end
|
data/lib/ace/version.rb
CHANGED
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: ace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
|
-
date: 2011-05
|
12
|
+
date: 2011-06-05 00:00:00 +02:00
|
13
13
|
default_executable: ace
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -53,6 +53,9 @@ files:
|
|
53
53
|
- ace.pre.gemspec
|
54
54
|
- bin/ace
|
55
55
|
- bin/ace-gen
|
56
|
+
- example/Gemfile
|
57
|
+
- example/Gemfile.lock
|
58
|
+
- example/README.textile
|
56
59
|
- example/app/posts.rb
|
57
60
|
- example/app/tags.rb
|
58
61
|
- example/boot.rb
|
@@ -61,19 +64,23 @@ files:
|
|
61
64
|
- example/content/assets/js/application.js
|
62
65
|
- example/content/index.html.haml
|
63
66
|
- example/content/posts.json.rb
|
64
|
-
- example/content/posts/
|
65
|
-
- example/content/posts/
|
67
|
+
- example/content/posts/2010-09-14-ruby.html
|
68
|
+
- example/content/posts/2010-09-16-node-js.html
|
66
69
|
- example/layouts/base.html.haml
|
67
70
|
- example/layouts/post.html.haml
|
68
71
|
- example/layouts/tag.html.haml
|
69
72
|
- example/lib/initializer.rb
|
70
73
|
- example/output/assets/css/style.css
|
71
74
|
- example/output/assets/js/application.js
|
75
|
+
- example/output/posts/2010-09-14-ruby.html
|
76
|
+
- example/output/posts/2010-09-16-node-js.html
|
72
77
|
- example/output/posts/node-js.html
|
73
78
|
- example/output/posts/ruby.html
|
74
79
|
- example/output/posts/test.html
|
75
80
|
- example/output/tags/development.html
|
76
81
|
- example/output/tags/javascript.html
|
82
|
+
- example/output/tags/node.html
|
83
|
+
- example/output/tags/node.js
|
77
84
|
- example/output/tags/node.js.html
|
78
85
|
- example/output/tags/ruby.html
|
79
86
|
- example/rules.rb
|
@@ -82,6 +89,7 @@ files:
|
|
82
89
|
- lib/ace/dsl.rb
|
83
90
|
- lib/ace/filters.rb
|
84
91
|
- lib/ace/filters/haml.rb
|
92
|
+
- lib/ace/filters/image_thumbnailer.rb
|
85
93
|
- lib/ace/filters/layout.rb
|
86
94
|
- lib/ace/filters/pygments.rb
|
87
95
|
- lib/ace/filters/sass.rb
|