fnando-glue 0.0.2 → 0.0.3
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/README.markdown +3 -1
- data/Rakefile +2 -1
- data/glue.gemspec +7 -2
- data/lib/glue/generator.rb +33 -8
- data/lib/glue/rake.rb +41 -0
- data/lib/glue/template/helper.rb +1 -1
- data/lib/glue/template/meta.rb +3 -3
- data/lib/glue/template/parser.rb +47 -12
- data/lib/glue/template/sitemap.rb +36 -0
- data/lib/glue.rb +6 -3
- data/templates/404.haml +16 -0
- data/templates/glue.yml +10 -0
- data/templates/htaccess +20 -0
- data/templates/main.haml +2 -1
- data/templates/robots.txt +4 -0
- metadata +16 -2
- data/lib/glue/capistrano.rb +0 -5
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -19,6 +19,7 @@ spec = Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency "RedCloth"
|
20
20
|
s.add_dependency "rdiscount"
|
21
21
|
s.add_dependency "haml"
|
22
|
+
s.add_dependency "builder"
|
22
23
|
end
|
23
24
|
|
24
25
|
namespace :gem do
|
@@ -72,4 +73,4 @@ namespace :gem do
|
|
72
73
|
system "sudo gem install #{spec.instance_variable_get('@name')}"
|
73
74
|
system "rm *.gem"
|
74
75
|
end
|
75
|
-
end
|
76
|
+
end
|
data/glue.gemspec
CHANGED
@@ -14,14 +14,14 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.add_dependency "RedCloth", ">= 0"
|
15
15
|
s.add_dependency "rdiscount", ">= 0"
|
16
16
|
s.add_dependency "haml", ">= 0"
|
17
|
-
s.
|
17
|
+
s.add_dependency "builder", ">= 0"
|
18
|
+
s.version = "0.0.3"
|
18
19
|
s.require_paths = ["lib"]
|
19
20
|
s.files = ["Rakefile",
|
20
21
|
"glue.gemspec",
|
21
22
|
"README.markdown",
|
22
23
|
"bin/glue",
|
23
24
|
"lib/glue",
|
24
|
-
"lib/glue/capistrano.rb",
|
25
25
|
"lib/glue/generator.rb",
|
26
26
|
"lib/glue/helper.rb",
|
27
27
|
"lib/glue/rake.rb",
|
@@ -29,16 +29,21 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/glue/template/helper.rb",
|
30
30
|
"lib/glue/template/meta.rb",
|
31
31
|
"lib/glue/template/parser.rb",
|
32
|
+
"lib/glue/template/sitemap.rb",
|
32
33
|
"lib/glue/template.rb",
|
33
34
|
"lib/glue.rb",
|
34
35
|
"lib/vendor",
|
35
36
|
"lib/vendor/colorize-0.0.1",
|
36
37
|
"lib/vendor/colorize-0.0.1/colorize.rb",
|
38
|
+
"templates/404.haml",
|
37
39
|
"templates/_footer.haml",
|
40
|
+
"templates/glue.yml",
|
38
41
|
"templates/helper.rb",
|
42
|
+
"templates/htaccess",
|
39
43
|
"templates/index.haml",
|
40
44
|
"templates/main.haml",
|
41
45
|
"templates/Rakefile",
|
46
|
+
"templates/robots.txt",
|
42
47
|
"templates/style.sass"]
|
43
48
|
s.authors = ["Nando Vieira"]
|
44
49
|
end
|
data/lib/glue/generator.rb
CHANGED
@@ -12,9 +12,9 @@ module Glue
|
|
12
12
|
FileUtils.mkdir_p(output)
|
13
13
|
end
|
14
14
|
|
15
|
-
# create
|
16
|
-
run %(creating #{Colorize.yellow("
|
17
|
-
FileUtils.mkdir_p File.join(output, "
|
15
|
+
# create public directory
|
16
|
+
run %(creating #{Colorize.yellow("public")} directory) do
|
17
|
+
# FileUtils.mkdir_p File.join(output, "public")
|
18
18
|
end
|
19
19
|
|
20
20
|
# create javascripts directory
|
@@ -22,22 +22,32 @@ module Glue
|
|
22
22
|
FileUtils.mkdir_p File.join(output, "public/javascripts")
|
23
23
|
end
|
24
24
|
|
25
|
+
# create images directory
|
26
|
+
run %(creating #{Colorize.yellow("public/images")} directory) do
|
27
|
+
FileUtils.mkdir_p File.join(output, "public/images")
|
28
|
+
end
|
29
|
+
|
30
|
+
# create views directory
|
31
|
+
run %(creating #{Colorize.yellow("views/layouts")} directory) do
|
32
|
+
FileUtils.mkdir_p File.join(output, "views/layouts")
|
33
|
+
end
|
34
|
+
|
25
35
|
# create config directory
|
26
36
|
run %(creating #{Colorize.yellow("config")} directory) do
|
27
37
|
FileUtils.mkdir_p File.join(output, "config")
|
28
38
|
end
|
29
39
|
|
40
|
+
# copy rake file
|
41
|
+
run %( copying #{Colorize.yellow("config/glue.yml")}) do
|
42
|
+
FileUtils.cp File.join(templates, "glue.yml"), File.join(output, "config/glue.yml")
|
43
|
+
end
|
44
|
+
|
30
45
|
# copy stylesheet file
|
31
46
|
run %( copying #{Colorize.yellow("views/stylesheets/style.sass")}) do
|
32
47
|
FileUtils.mkdir_p File.join(output, "views/stylesheets")
|
33
48
|
FileUtils.cp File.join(templates, "style.sass"), File.join(output, "views/stylesheets/style.sass")
|
34
49
|
end
|
35
50
|
|
36
|
-
# create images directory
|
37
|
-
run %(creating #{Colorize.yellow("public/images")} directory) do
|
38
|
-
FileUtils.mkdir_p File.join(output, "public/images")
|
39
|
-
end
|
40
|
-
|
41
51
|
# copy rake file
|
42
52
|
run %( copying #{Colorize.yellow("Rakefile")}) do
|
43
53
|
FileUtils.cp File.join(templates, "Rakefile"), File.join(output, "Rakefile")
|
@@ -58,10 +68,25 @@ module Glue
|
|
58
68
|
FileUtils.cp File.join(templates, "index.haml"), File.join(output, "views/index.haml")
|
59
69
|
end
|
60
70
|
|
71
|
+
# copy 404.haml
|
72
|
+
run %( copying #{Colorize.yellow("views/404.haml")}) do
|
73
|
+
FileUtils.cp File.join(templates, "404.haml"), File.join(output, "views/404.haml")
|
74
|
+
end
|
75
|
+
|
61
76
|
# copy _footer.haml
|
62
77
|
run %( copying #{Colorize.yellow("views/_footer.haml")}) do
|
63
78
|
FileUtils.cp File.join(templates, "_footer.haml"), File.join(output, "views/_footer.haml")
|
64
79
|
end
|
80
|
+
|
81
|
+
# copy .htaccess
|
82
|
+
run %( copying #{Colorize.yellow("public/.htaccess")}) do
|
83
|
+
FileUtils.cp File.join(templates, "htaccess"), File.join(output, "public/.htaccess")
|
84
|
+
end
|
85
|
+
|
86
|
+
# copy robots.txt
|
87
|
+
run %( copying #{Colorize.yellow("public/robots.txt")}) do
|
88
|
+
FileUtils.cp File.join(templates, "robots.txt"), File.join(output, "public/robots.txt")
|
89
|
+
end
|
65
90
|
end
|
66
91
|
end
|
67
92
|
end
|
data/lib/glue/rake.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/../glue"
|
2
2
|
|
3
|
+
task :default => "glue:auto"
|
4
|
+
|
3
5
|
namespace :glue do
|
4
6
|
task :default => :generate
|
5
7
|
|
@@ -7,4 +9,43 @@ namespace :glue do
|
|
7
9
|
task :generate do
|
8
10
|
Glue::Template.generate!
|
9
11
|
end
|
12
|
+
|
13
|
+
desc "Auto-generate pages"
|
14
|
+
task :auto do
|
15
|
+
thread = Thread.new do
|
16
|
+
latest_mtime = 0
|
17
|
+
|
18
|
+
trap 'INT' do
|
19
|
+
puts
|
20
|
+
thread.exit
|
21
|
+
end
|
22
|
+
|
23
|
+
loop do
|
24
|
+
files = Dir["views/**/*.*"] + Dir["config/**/*.*"]
|
25
|
+
changes = []
|
26
|
+
|
27
|
+
mtime = files.collect do |file|
|
28
|
+
mt = File.mtime(file).to_i
|
29
|
+
changes << file if latest_mtime > 0 && mt > latest_mtime
|
30
|
+
mt
|
31
|
+
end.max
|
32
|
+
|
33
|
+
if latest_mtime < mtime
|
34
|
+
if changes.size > 0
|
35
|
+
puts Colorize.yellow("\n\n#{changes.size} file(s) changed") + " - #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
|
36
|
+
changes.each do |file|
|
37
|
+
puts " - #{Colorize.blue(file, :options => :highlight)}"
|
38
|
+
end unless latest_mtime == 0
|
39
|
+
end
|
40
|
+
latest_mtime = mtime
|
41
|
+
Glue::Template.generate!
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
|
45
|
+
sleep ENV["WAIT"] || 2
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
thread.join
|
50
|
+
end
|
10
51
|
end
|
data/lib/glue/template/helper.rb
CHANGED
data/lib/glue/template/meta.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
module Glue
|
2
2
|
module Template
|
3
3
|
class Meta
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :data
|
5
5
|
attr_accessor :body
|
6
6
|
attr_accessor :content
|
7
7
|
|
8
8
|
def initialize(path)
|
9
|
-
self.
|
9
|
+
self.data = {}
|
10
10
|
self.body = File.read(path)
|
11
11
|
process!
|
12
12
|
end
|
13
13
|
|
14
14
|
def process!
|
15
15
|
self.content = body.gsub /^\/ *(.*?): *(.*?) *$/sm do |m|
|
16
|
-
|
16
|
+
data[$1.to_sym] = $2
|
17
17
|
""
|
18
18
|
end
|
19
19
|
end
|
data/lib/glue/template/parser.rb
CHANGED
@@ -2,17 +2,23 @@ module Glue
|
|
2
2
|
module Template
|
3
3
|
class Parser
|
4
4
|
attr_accessor :root
|
5
|
+
attr_accessor :sitemap
|
6
|
+
attr_accessor :config
|
5
7
|
|
6
8
|
include Glue::Helper
|
7
9
|
|
8
10
|
def initialize(root)
|
9
11
|
@root = root
|
12
|
+
@config = YAML.load_file("#{root}/config/glue.yml")
|
13
|
+
|
14
|
+
@sitemap = Glue::Template::Sitemap.new
|
15
|
+
@sitemap.base_url = config["base_url"]
|
10
16
|
end
|
11
17
|
|
12
18
|
def run!
|
13
19
|
# load user helper file if exist
|
14
|
-
if File.exists?("#{root}/helper.rb")
|
15
|
-
require "#{root}/helper.rb"
|
20
|
+
if File.exists?("#{root}/config/helper.rb")
|
21
|
+
require "#{root}/config/helper.rb"
|
16
22
|
Glue::Template::Helper.__send__ :include, ::Helper
|
17
23
|
end
|
18
24
|
|
@@ -29,36 +35,65 @@ module Glue
|
|
29
35
|
next if path =~ /#{Regexp.escape("#{root}/views/layouts/")}/
|
30
36
|
|
31
37
|
# partial files should be skipped
|
32
|
-
next if path =~ /_.*?\.haml$/
|
38
|
+
next if File.basename(path) =~ /_.*?\.haml$/
|
33
39
|
|
34
40
|
run "processing #{Colorize.yellow(path)}" do
|
35
41
|
render_haml(path)
|
36
42
|
end
|
37
43
|
end
|
44
|
+
|
45
|
+
# save sitemap
|
46
|
+
run "generating #{Colorize.yellow("public/sitemap.xml")}..." do
|
47
|
+
sitemap.save File.join(root, "public", "sitemap.xml")
|
48
|
+
end
|
38
49
|
end
|
39
50
|
|
40
51
|
def render_haml(path)
|
41
52
|
# extract metadata from file
|
42
|
-
meta = Glue::Template::Meta.new(path)
|
53
|
+
$meta = Glue::Template::Meta.new(path)
|
43
54
|
|
44
55
|
# instantiate template helper
|
45
56
|
helper = Glue::Template::Helper.new
|
46
57
|
|
47
58
|
# instantiate and process haml for page
|
48
|
-
haml = Haml::Engine.new(meta.content)
|
49
|
-
content_for_layout = haml.to_html(helper)
|
59
|
+
haml = Haml::Engine.new($meta.content)
|
60
|
+
content_for_layout = haml.to_html(helper, $meta.data)
|
50
61
|
|
51
62
|
# instantiate haml for layout
|
52
|
-
layout = File.read("#{root}/views/layouts/#{meta.
|
63
|
+
layout = File.read("#{root}/views/layouts/#{$meta.data[:layout]}.haml")
|
53
64
|
haml = Haml::Engine.new(layout)
|
54
|
-
|
65
|
+
|
66
|
+
# set haml variables
|
67
|
+
vars = {}
|
68
|
+
vars.merge!($meta.data)
|
69
|
+
vars.merge!({
|
55
70
|
:content_for_layout => content_for_layout,
|
56
|
-
:
|
71
|
+
:generator => Glue::VERSION,
|
72
|
+
:last_update => File.mtime(path).xmlschema
|
57
73
|
})
|
58
74
|
|
59
75
|
# retrieve relative file path and set target
|
60
|
-
relative_path = path.sub("#{root}/views/", "").gsub(/\.haml$/, "
|
61
|
-
target = File.join(root, "public", relative_path)
|
76
|
+
relative_path = path.sub("#{root}/views/", "").gsub(/\.haml$/, "")
|
77
|
+
target = File.join(root, "public", relative_path + ".html")
|
78
|
+
|
79
|
+
# sitemap data
|
80
|
+
if config["use_extension"]
|
81
|
+
path_for_sitemap = relative_path + ".html"
|
82
|
+
else
|
83
|
+
path_for_sitemap = relative_path.gsub(/\/?index$/, "")
|
84
|
+
end
|
85
|
+
|
86
|
+
mapping = {
|
87
|
+
:path => path_for_sitemap,
|
88
|
+
:changed_at => File.mtime(path),
|
89
|
+
:priority => $meta.data[:priority] || "0.5",
|
90
|
+
:frequency => $meta.data[:frequency] || "daily"
|
91
|
+
}
|
92
|
+
|
93
|
+
unless $meta.data[:sitemap] == "no"
|
94
|
+
self.sitemap << mapping
|
95
|
+
self.sitemap << mapping.merge(:path => "/") if $meta.data[:index] == "yes"
|
96
|
+
end
|
62
97
|
|
63
98
|
# create directories if necessary
|
64
99
|
FileUtils.mkdir_p File.dirname(target)
|
@@ -72,7 +107,7 @@ module Glue
|
|
72
107
|
end
|
73
108
|
|
74
109
|
# save as index page
|
75
|
-
if meta.
|
110
|
+
if $meta.data[:index] == "yes"
|
76
111
|
index_path = File.join(root, "public", "index.html")
|
77
112
|
|
78
113
|
File.open(index_path, "w+") do |f|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Glue
|
2
|
+
module Template
|
3
|
+
class Sitemap
|
4
|
+
attr_accessor :urls
|
5
|
+
attr_accessor :base_url
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
self.urls = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def <<(options)
|
12
|
+
self.urls << options
|
13
|
+
end
|
14
|
+
|
15
|
+
def save(path)
|
16
|
+
file = File.open(path, "w+")
|
17
|
+
xml = Builder::XmlMarkup.new(:target => file, :indent => 2)
|
18
|
+
xml.instruct! :xml, :version => "1.1", :encoding => "UTF-8"
|
19
|
+
xml.comment! "Generated at #{Time.now.inspect}"
|
20
|
+
|
21
|
+
xml.urlset :xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9" do
|
22
|
+
urls.each do |options|
|
23
|
+
xml.url do
|
24
|
+
xml.loc File.join(base_url, options[:path])
|
25
|
+
xml.lastmod options[:changed_at].xmlschema if options[:changed_at]
|
26
|
+
xml.changefreq options[:frequency] if options[:frequency]
|
27
|
+
xml.priority options[:priority] if options[:priority]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
file.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/glue.rb
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
module Glue
|
2
|
-
VERSION = "0.0.
|
2
|
+
VERSION = "0.0.3"
|
3
3
|
end
|
4
4
|
|
5
5
|
# add glue lib to load path
|
6
6
|
$LOAD_PATH.unshift File.dirname(__FILE__)
|
7
7
|
|
8
8
|
require "FileUtils" unless defined?(FileUtils)
|
9
|
-
require "ostruct"
|
10
9
|
require "open-uri"
|
11
10
|
require "RedCloth"
|
12
11
|
require "rdiscount"
|
13
12
|
require "haml"
|
14
13
|
require "sass"
|
15
14
|
require "vendor/colorize-0.0.1/colorize"
|
15
|
+
require "builder"
|
16
|
+
require "uri"
|
17
|
+
require "yaml"
|
16
18
|
|
17
19
|
require "glue/helper"
|
18
20
|
require "glue/generator"
|
19
21
|
require "glue/template"
|
20
22
|
require "glue/template/parser"
|
21
23
|
require "glue/template/meta"
|
22
|
-
require "glue/template/helper"
|
24
|
+
require "glue/template/helper"
|
25
|
+
require "glue/template/sitemap"
|
data/templates/404.haml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
/ title: Page not found
|
2
|
+
/ description: The page you're looking for could not be found
|
3
|
+
/ keywords:
|
4
|
+
/ layout: main
|
5
|
+
/ id: not-found
|
6
|
+
/ sitemap: no
|
7
|
+
|
8
|
+
%h2 Page not found
|
9
|
+
|
10
|
+
%p
|
11
|
+
%strong Sorry!
|
12
|
+
The page you're looking for could not be found.
|
13
|
+
|
14
|
+
%p
|
15
|
+
Go back to the
|
16
|
+
%a{"href" => "/"} home page
|
data/templates/glue.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Set your base url.
|
2
|
+
# Include domain and path (if needed).
|
3
|
+
# Domain is required for sitemap generation.
|
4
|
+
base_url: http://example.com/some/path
|
5
|
+
|
6
|
+
# Use extension when generating sitemap.
|
7
|
+
# If you're using Apache you can enable `MultiViews`
|
8
|
+
# and access your URL like http://example.com/about
|
9
|
+
# instead of http://example.com/about.html
|
10
|
+
use_extension: false
|
data/templates/htaccess
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# DEFLATE compresses files
|
2
|
+
<IfModule mod_deflate.c>
|
3
|
+
<FilesMatch "\.(js|css)$">
|
4
|
+
SetOutputFilter DEFLATE
|
5
|
+
</FilesMatch>
|
6
|
+
</IfModule>
|
7
|
+
|
8
|
+
# Multiviews allows to access URLs like http://example.com/some/page.html
|
9
|
+
# without the extension; so http://example.com/some/page will be valid as
|
10
|
+
# well.
|
11
|
+
Options +MultiViews
|
12
|
+
|
13
|
+
# Set 404 page
|
14
|
+
ErrorDocument 404 /404.html
|
15
|
+
|
16
|
+
# Force PDF/ZIP download
|
17
|
+
<FilesMatch "\.(?i:pdf|zip)$">
|
18
|
+
ForceType application/octet-stream
|
19
|
+
Header set Content-Disposition attachment
|
20
|
+
</FilesMatch>
|
data/templates/main.haml
CHANGED
@@ -5,8 +5,9 @@
|
|
5
5
|
%title= title
|
6
6
|
%meta{"name" => "description", "content" => description}
|
7
7
|
%meta{"name" => "keywords", "content" => keywords}
|
8
|
-
%meta{"name" => "generator", "content" => "Glue #{
|
8
|
+
%meta{"name" => "generator", "content" => "Glue #{generator}"}
|
9
9
|
%meta{"http-equiv" => "content-type", "content" => "text/html; charset=UTF-8"}
|
10
|
+
%meta{"http-equiv" => "last-update", "content" => last_update}
|
10
11
|
%link{"rel" => "shortcut icon", "href" => "/favicon.ico", "type" => "image/x-icon"}
|
11
12
|
%link{"rel" => "stylesheet", "href" => "/stylesheets/style.css", "type" => "text/css"}
|
12
13
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fnando-glue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
@@ -52,6 +52,16 @@ dependencies:
|
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: "0"
|
54
54
|
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: builder
|
57
|
+
type: :runtime
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
55
65
|
description:
|
56
66
|
email:
|
57
67
|
- fnando.vieira@gmail.com
|
@@ -67,7 +77,6 @@ files:
|
|
67
77
|
- README.markdown
|
68
78
|
- bin/glue
|
69
79
|
- lib/glue
|
70
|
-
- lib/glue/capistrano.rb
|
71
80
|
- lib/glue/generator.rb
|
72
81
|
- lib/glue/helper.rb
|
73
82
|
- lib/glue/rake.rb
|
@@ -75,16 +84,21 @@ files:
|
|
75
84
|
- lib/glue/template/helper.rb
|
76
85
|
- lib/glue/template/meta.rb
|
77
86
|
- lib/glue/template/parser.rb
|
87
|
+
- lib/glue/template/sitemap.rb
|
78
88
|
- lib/glue/template.rb
|
79
89
|
- lib/glue.rb
|
80
90
|
- lib/vendor
|
81
91
|
- lib/vendor/colorize-0.0.1
|
82
92
|
- lib/vendor/colorize-0.0.1/colorize.rb
|
93
|
+
- templates/404.haml
|
83
94
|
- templates/_footer.haml
|
95
|
+
- templates/glue.yml
|
84
96
|
- templates/helper.rb
|
97
|
+
- templates/htaccess
|
85
98
|
- templates/index.haml
|
86
99
|
- templates/main.haml
|
87
100
|
- templates/Rakefile
|
101
|
+
- templates/robots.txt
|
88
102
|
- templates/style.sass
|
89
103
|
has_rdoc: true
|
90
104
|
homepage: http://github.com/fnando/glue
|