genit 2.0 → 2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +5 -0
- data/README.markdown +7 -10
- data/TODO +37 -17
- data/VERSION +1 -1
- data/bin/genit +4 -1
- data/data/pages/index.haml +29 -0
- data/data/pages/index2.haml +1 -0
- data/data/templates/html_5.haml +10 -0
- data/data/templates/menu.haml +3 -0
- data/lib/genit.rb +3 -0
- data/lib/genit/documents/html_document.rb +14 -8
- data/lib/genit/documents/xml_document.rb +13 -2
- data/lib/genit/extensions/string_extension.rb +5 -2
- data/lib/genit/project.rb +1 -0
- data/lib/genit/project/compiler.rb +1 -0
- data/lib/genit/project/css.rb +50 -0
- data/lib/genit/project/page_compiler.rb +12 -2
- data/lib/genit/project/project_creator.rb +46 -7
- data/lib/genit/tags/class_menu_tag.rb +12 -3
- data/lib/genit/tags/class_tag.rb +3 -3
- data/spec/compiler_spec.rb +71 -20
- data/spec/extensions_spec.rb +29 -11
- data/spec/fragment_spec.rb +19 -19
- data/spec/haml_spec.rb +15 -0
- data/spec/html_document_spec.rb +14 -5
- data/spec/pages_finder_spec.rb +1 -1
- data/spec/project_creator_spec.rb +2 -2
- data/spec/sass_spec.rb +11 -0
- data/spec/test-files/src/fragments/b.html +1 -0
- data/spec/test-files/src/fragments/d.html +1 -0
- data/spec/test-files/src/fragments/footer.html +1 -0
- data/spec/test-files/src/fragments/title.html +1 -0
- data/spec/test-files/src/fragments/title.markdown +2 -0
- data/spec/test-files/test.haml +1 -0
- metadata +47 -2
data/NEWS
CHANGED
data/README.markdown
CHANGED
@@ -6,13 +6,6 @@ and database. A genit site consists only of xhtml code (+ css, medias and eventu
|
|
6
6
|
|
7
7
|
Genit is written in Ruby but there is no needs to know the Ruby language.
|
8
8
|
|
9
|
-
**------------------------------------------------------------------------**
|
10
|
-
|
11
|
-
**This readme file and all the documentation refers to version 1.0 of genit.
|
12
|
-
I'm currently writing the doc for genit version 2.0**
|
13
|
-
|
14
|
-
**------------------------------------------------------------------------**
|
15
|
-
|
16
9
|
Description
|
17
10
|
-----------
|
18
11
|
|
@@ -50,9 +43,8 @@ Usage
|
|
50
43
|
|
51
44
|
genit create my-site
|
52
45
|
cd my-site
|
53
|
-
(*edit some pages*)
|
54
|
-
|
55
46
|
genit compile
|
47
|
+
genit server
|
56
48
|
|
57
49
|
See the wiki for user documentation and a tutorial.
|
58
50
|
|
@@ -66,6 +58,11 @@ Dependencies
|
|
66
58
|
* nokogiri (xml parser)
|
67
59
|
* bluecloth (markdown parser)
|
68
60
|
* clamp (command line utility)
|
61
|
+
* haml (clean markup language)
|
62
|
+
* sass (CSS extension)
|
63
|
+
|
64
|
+
See [installing nokogiri](http://nokogiri.org/tutorials/installing_nokogiri.html)
|
65
|
+
for possible dependencies depending of your operating system.
|
69
66
|
|
70
67
|
### Contributors dependencies
|
71
68
|
|
@@ -78,7 +75,7 @@ License
|
|
78
75
|
|
79
76
|
Expat License (also known as MIT)
|
80
77
|
|
81
|
-
Copyright (c) 2011 Xavier Nayrac
|
78
|
+
Copyright (c) 2011-2013 Xavier Nayrac
|
82
79
|
|
83
80
|
Permission is hereby granted, free of charge, to any person obtaining
|
84
81
|
a copy of this software and associated documentation files (the
|
data/TODO
CHANGED
@@ -1,28 +1,50 @@
|
|
1
|
-
version 2
|
1
|
+
version 2.1
|
2
2
|
=============================================================
|
3
3
|
|
4
|
-
[
|
5
|
-
[
|
6
|
-
[
|
7
|
-
[
|
8
|
-
[
|
9
|
-
[
|
4
|
+
[ok] use haml
|
5
|
+
[ok] utiliser haml dans pages
|
6
|
+
[ok] utiliser haml dans fragments
|
7
|
+
[ok] utiliser haml dans news
|
8
|
+
[ok] utiliser haml dans templates
|
9
|
+
[ok] genit create --haml
|
10
|
+
|
11
|
+
[ok] use sass/scss
|
12
|
+
[ok] doit marcher avec sous-dossiers
|
13
|
+
|
10
14
|
|
11
15
|
|
12
16
|
version 2.x
|
13
17
|
===============================================================
|
18
|
+
s'assurer que <genit class="footer"/> existe, sinon le readme ment.
|
19
|
+
|
20
|
+
tester avec la dernière version de clamp, et certainement arreter la version
|
21
|
+
dans le gemspec
|
22
|
+
|
23
|
+
Pouvoir utiliser les news avec markdown. Apparement c'est déjà possible,
|
24
|
+
il faut tester.
|
25
|
+
|
26
|
+
s'assurer qu'on puisse avoir des sous-dossiers dans fragments/.
|
27
|
+
|
14
28
|
menu: Pouvoir changer l'id "actif". Exemple li.active avec twitter bootstrap.
|
15
29
|
a custom class for the selected menu item
|
16
30
|
|
17
|
-
|
31
|
+
un tuto juste pour le menu
|
18
32
|
|
19
|
-
|
33
|
+
think about a pager for the news
|
20
34
|
|
21
|
-
|
35
|
+
how to: a blog in 5 minutes
|
22
36
|
|
23
|
-
|
37
|
+
less support
|
24
38
|
|
25
|
-
|
39
|
+
--minimize option for the compile command
|
40
|
+
|
41
|
+
|
42
|
+
En attente
|
43
|
+
=========================================
|
44
|
+
|
45
|
+
un template pour les news ?
|
46
|
+
|
47
|
+
think about a deamon to auto-compile
|
26
48
|
|
27
49
|
Think about i18n
|
28
50
|
|
@@ -30,8 +52,6 @@ per page script
|
|
30
52
|
|
31
53
|
per page style
|
32
54
|
|
33
|
-
--minimize option for the compile command
|
34
|
-
|
35
55
|
si j'écris <h1>news page (en oubliant le tag de fin) Genit ne dis
|
36
56
|
rien et ajoute silencieusement le </h1>. Voir si on peut lui faire
|
37
57
|
cracher une erreur.
|
@@ -42,15 +62,15 @@ d'avoir une erreur
|
|
42
62
|
si j'écris </br> (au lieu de <br/>) Genit ne dis rien, le tag est ignoré.
|
43
63
|
Voir si on peut lui faire cracher une erreur.
|
44
64
|
|
45
|
-
Pouvoir utiliser les news avec markdown.
|
46
|
-
|
47
65
|
dans le dossier page on accepte uniquement .html et .markdown (sinon erreur)
|
48
66
|
|
67
|
+
refaire toutes les copies d'écran du site
|
49
68
|
|
69
|
+
refactor ProjectCreator si j'ajoute un autre moteur de template.
|
50
70
|
|
51
71
|
|
52
72
|
Project guidelines
|
53
|
-
|
73
|
+
=====================================================================
|
54
74
|
|
55
75
|
Basic objectives
|
56
76
|
----------------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.1
|
data/bin/genit
CHANGED
@@ -45,9 +45,12 @@ module Genit
|
|
45
45
|
:attribute_name => :project_name
|
46
46
|
option ["-e", "--empty"], :flag, "Do not produce smoke test",
|
47
47
|
:default => false
|
48
|
+
option ["-H", "--haml"], :flag, "Create project files with haml",
|
49
|
+
:default => false
|
48
50
|
|
51
|
+
# TODO faire un hash d'option pour empty?, etc.
|
49
52
|
def execute
|
50
|
-
project = ProjectCreator.new project_name, empty?
|
53
|
+
project = ProjectCreator.new project_name, empty?, haml?
|
51
54
|
project.create
|
52
55
|
end
|
53
56
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
%h1 Welcome to Genit !
|
2
|
+
%p
|
3
|
+
Genit is a framework to build a
|
4
|
+
= succeed "," do
|
5
|
+
%strong static web site
|
6
|
+
that is a web site without server
|
7
|
+
side programing language and database. A genit site consists only of xhtml code (+ css, medias and
|
8
|
+
eventually javascript).
|
9
|
+
%br/
|
10
|
+
%br/
|
11
|
+
%em Genit is written in Ruby but there is no needs to know the Ruby language.
|
12
|
+
%br/
|
13
|
+
%br/
|
14
|
+
The Genit project is hosted on
|
15
|
+
%a{:href => "https://github.com/lkdjiin/genit", :title => "Source code of Genit"} GitHub
|
16
|
+
under the terms
|
17
|
+
of the MIT license. Feel free to fork it. Each new release will be announced on the
|
18
|
+
%a{:href => "http://freshmeat.net/projects/genit", :title => "Genit project on freshmeat"} freshmeat
|
19
|
+
site.
|
20
|
+
The development progress will be announced on
|
21
|
+
= succeed "." do
|
22
|
+
%a{:href => "http://twitter.com/lkdjiin"} Twitter
|
23
|
+
%h1 Get started
|
24
|
+
%p
|
25
|
+
Read the <a href="http://lkdjiin.github.com/genit/documentation/tutorial.html"
|
26
|
+
"A short get started tutorial for Genit">tutorial
|
27
|
+
first, then have a look at the
|
28
|
+
= succeed "." do
|
29
|
+
%a{:href => "http://lkdjiin.github.com/genit/documentation/index.html"} documentation
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 home page
|
@@ -0,0 +1,10 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html{:lang => "en"}
|
3
|
+
%head
|
4
|
+
%meta{:charset => "UTF-8"}/
|
5
|
+
%title Genit - Static web site framework
|
6
|
+
%link{:href => "styles/screen.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
|
7
|
+
%link{:href => "styles/print.css", :media => "print", :rel => "stylesheet", :type => "text/css"}/
|
8
|
+
%body
|
9
|
+
%genit.menu/
|
10
|
+
%genit.pages/
|
data/lib/genit.rb
CHANGED
@@ -7,6 +7,8 @@ require 'genit/builders'
|
|
7
7
|
require 'genit/tags'
|
8
8
|
require 'genit/server'
|
9
9
|
|
10
|
+
require 'sass'
|
11
|
+
|
10
12
|
module Errors
|
11
13
|
|
12
14
|
def error message
|
@@ -27,4 +29,5 @@ module Genit
|
|
27
29
|
TEMPLATES_DIR = "src/templates"
|
28
30
|
FRAGMENTS_DIR = "src/fragments"
|
29
31
|
NEWS_DIR = "src/news"
|
32
|
+
STYLES_DIR = "styles"
|
30
33
|
end
|
@@ -2,12 +2,13 @@
|
|
2
2
|
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'bluecloth'
|
5
|
+
require 'haml'
|
5
6
|
|
6
7
|
module Genit
|
7
8
|
|
8
9
|
# Open an html file in various format.
|
9
10
|
class HtmlDocument
|
10
|
-
|
11
|
+
|
11
12
|
# Public: Open an entire html document.
|
12
13
|
# If the file does not contain a <bogy> tag, a doctype, etc, they will be
|
13
14
|
# automatically added.
|
@@ -18,7 +19,7 @@ module Genit
|
|
18
19
|
def self.open file
|
19
20
|
Nokogiri::HTML(File.open(file))
|
20
21
|
end
|
21
|
-
|
22
|
+
|
22
23
|
# Public: Open a fragment of html document.
|
23
24
|
#
|
24
25
|
# file - Full path String filename.
|
@@ -28,7 +29,7 @@ module Genit
|
|
28
29
|
string = IO.read file
|
29
30
|
Nokogiri::HTML.fragment string
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
# Public: Open a file as a string.
|
33
34
|
#
|
34
35
|
# file - Full path String name of a html or markdown file.
|
@@ -38,26 +39,31 @@ module Genit
|
|
38
39
|
string = IO.read file
|
39
40
|
if file.markdown_ext?
|
40
41
|
BlueCloth.new(string).to_html
|
42
|
+
elsif file.haml_ext?
|
43
|
+
Haml::Engine.new(string, :format => :xhtml).render
|
41
44
|
else
|
42
45
|
string
|
43
46
|
end
|
44
47
|
end
|
45
|
-
|
48
|
+
|
46
49
|
# Public: Open a file as a string, taking care of fragment tags.
|
47
50
|
# All fragment tags are replaced by a new content.
|
48
51
|
#
|
49
|
-
# file - Full path String name of a html
|
52
|
+
# file - Full path String name of a (html|markdown|haml) file.
|
50
53
|
#
|
51
54
|
# Returns a String.
|
52
55
|
def self.build_page_content(file, working_dir)
|
53
56
|
# TODO éviter le working_dir
|
57
|
+
str = IO.read(file)
|
54
58
|
if file.markdown_ext?
|
55
|
-
BlueCloth.new(
|
59
|
+
BlueCloth.new(str).to_html
|
60
|
+
elsif file.haml_ext?
|
61
|
+
Haml::Engine.new(str, :format => :xhtml).render
|
56
62
|
else
|
57
63
|
Fragment.new(file, working_dir).to_html
|
58
64
|
end
|
59
65
|
end
|
60
|
-
|
66
|
+
|
61
67
|
# Public: Get the list of <genit> tag in a document.
|
62
68
|
#
|
63
69
|
# file - Nokogiri::HTML or Nokogiri::XML document.
|
@@ -66,7 +72,7 @@ module Genit
|
|
66
72
|
def self.genit_tags_from file
|
67
73
|
file.css "genit"
|
68
74
|
end
|
69
|
-
|
75
|
+
|
70
76
|
end
|
71
77
|
|
72
78
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'bluecloth'
|
5
|
+
require 'haml'
|
5
6
|
|
6
7
|
module Genit
|
7
8
|
|
@@ -16,10 +17,20 @@ module Genit
|
|
16
17
|
def self.open file
|
17
18
|
begin
|
18
19
|
Nokogiri::XML(File.open(file)){|config| config.strict}
|
19
|
-
rescue Nokogiri::XML::SyntaxError =>
|
20
|
-
error "Malformed xhtml in file #{file} : #{
|
20
|
+
rescue Nokogiri::XML::SyntaxError => ex
|
21
|
+
error "Malformed xhtml in file #{file} : #{ex}"
|
21
22
|
end
|
22
23
|
end
|
24
|
+
|
25
|
+
# Public: Open a (xml) document from a haml file.
|
26
|
+
#
|
27
|
+
# file - Full path String filename of haml file.
|
28
|
+
#
|
29
|
+
# Returns a Nokogiri::XML document.
|
30
|
+
def self.open_via_haml file
|
31
|
+
tmp = Haml::Engine.new(File.open(file).read, :format => :xhtml).render
|
32
|
+
Nokogiri::XML(tmp)
|
33
|
+
end
|
23
34
|
|
24
35
|
# Public: Open a fragment of xml document.
|
25
36
|
#
|
@@ -3,15 +3,18 @@
|
|
3
3
|
class String
|
4
4
|
|
5
5
|
def force_html_extension
|
6
|
-
self.gsub /markdown$/, 'html'
|
6
|
+
self.gsub /(markdown|haml)$/, 'html'
|
7
7
|
end
|
8
8
|
|
9
9
|
def force_html_extension!
|
10
|
-
self.gsub! /markdown$/, 'html'
|
10
|
+
self.gsub! /(markdown|haml)$/, 'html'
|
11
11
|
end
|
12
12
|
|
13
13
|
def markdown_ext?
|
14
14
|
self.end_with?('.markdown')
|
15
15
|
end
|
16
16
|
|
17
|
+
def haml_ext?
|
18
|
+
self.end_with?('.haml')
|
19
|
+
end
|
17
20
|
end
|
data/lib/genit/project.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'sass'
|
4
|
+
|
5
|
+
module Genit
|
6
|
+
|
7
|
+
# Deals with the styles directory.
|
8
|
+
class Css
|
9
|
+
|
10
|
+
# Public: Constructor.
|
11
|
+
#
|
12
|
+
# working_dir - The String working directory, where live the project.
|
13
|
+
def initialize working_dir
|
14
|
+
@working_dir = working_dir
|
15
|
+
end
|
16
|
+
|
17
|
+
# Public: Render css in the styles directory.
|
18
|
+
#
|
19
|
+
# Returns nothing.
|
20
|
+
def render
|
21
|
+
Dir.glob(File.join(@working_dir, STYLES_DIR, '**/*')) do |filename|
|
22
|
+
@filename = filename
|
23
|
+
if @filename.end_with?(".sass")
|
24
|
+
render_sass :sass
|
25
|
+
elsif @filename.end_with?(".scss")
|
26
|
+
render_sass :scss
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# Render css from sass in the styles directory.
|
34
|
+
#
|
35
|
+
# type - A Symbol for the sass syntax, either :sass or :scss.
|
36
|
+
#
|
37
|
+
# Returns nothing.
|
38
|
+
def render_sass type
|
39
|
+
template = File.open(@filename).read
|
40
|
+
begin
|
41
|
+
css = Sass::Engine.new(template, syntax: type).render
|
42
|
+
rescue Exception => ex
|
43
|
+
error "In #{@filename}\n #{ex}"
|
44
|
+
end
|
45
|
+
@filename.gsub!(/(sass|scss)$/, 'css')
|
46
|
+
File.open(@filename, "w") {|out| out.puts css }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -12,8 +12,18 @@ module Genit
|
|
12
12
|
def initialize working_dir, filename
|
13
13
|
@working_dir = working_dir
|
14
14
|
@filename = filename
|
15
|
-
file = File.join(@working_dir, 'src/templates/main.html')
|
16
|
-
@template = XmlDocument.open(file)
|
15
|
+
# file = File.join(@working_dir, 'src/templates/main.html')
|
16
|
+
# @template = XmlDocument.open(file)
|
17
|
+
file = File.join(@working_dir, 'src/templates/main')
|
18
|
+
if File.exists?("#{file}.html")
|
19
|
+
file = file + ".html"
|
20
|
+
@template = XmlDocument.open(file)
|
21
|
+
elsif File.exists?("#{file}.haml")
|
22
|
+
file = file + ".haml"
|
23
|
+
@template = XmlDocument.open_via_haml(file)
|
24
|
+
else
|
25
|
+
error "No template found"
|
26
|
+
end
|
17
27
|
end
|
18
28
|
|
19
29
|
# Public: Compile the page.
|
@@ -12,9 +12,12 @@ module Genit
|
|
12
12
|
#
|
13
13
|
# name - The String name of the future project folder.
|
14
14
|
# empty - A Boolean telling if we produce a smoke test or not.
|
15
|
-
|
15
|
+
# haml - A Boolean telling if we want project's files in haml or
|
16
|
+
# not.
|
17
|
+
def initialize name, empty, haml
|
16
18
|
@project_name = name
|
17
19
|
@empty = empty
|
20
|
+
@haml = haml
|
18
21
|
end
|
19
22
|
|
20
23
|
# Public: Create the structure of the project, that is many
|
@@ -103,13 +106,30 @@ module Genit
|
|
103
106
|
|
104
107
|
# TODO document
|
105
108
|
def copy_index
|
106
|
-
dest =
|
109
|
+
dest = index_destination
|
110
|
+
src = index_source
|
111
|
+
FileUtils.cp src, dest
|
112
|
+
end
|
113
|
+
|
114
|
+
def index_destination
|
115
|
+
if @haml
|
116
|
+
File.join @project_name, 'src/pages/index.haml'
|
117
|
+
else
|
118
|
+
File.join @project_name, 'src/pages/index.html'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def index_source
|
107
123
|
if @empty
|
108
|
-
src = File.join $GENIT_PATH, 'data/pages/index2.
|
124
|
+
src = File.join $GENIT_PATH, 'data/pages/index2.'
|
109
125
|
else
|
110
|
-
src = File.join $GENIT_PATH, 'data/pages/index.
|
126
|
+
src = File.join $GENIT_PATH, 'data/pages/index.'
|
127
|
+
end
|
128
|
+
if @haml
|
129
|
+
"#{src}haml"
|
130
|
+
else
|
131
|
+
"#{src}html"
|
111
132
|
end
|
112
|
-
FileUtils.cp src, dest
|
113
133
|
end
|
114
134
|
|
115
135
|
# TODO document
|
@@ -125,14 +145,33 @@ module Genit
|
|
125
145
|
|
126
146
|
# TODO document
|
127
147
|
def copy_main_template
|
148
|
+
if @haml
|
149
|
+
copy_main_template_haml
|
150
|
+
else
|
151
|
+
copy_main_template_html
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def copy_main_template_haml
|
156
|
+
dest = File.join @project_name, 'src/templates', 'main.haml'
|
157
|
+
src = File.join $GENIT_PATH, 'data', 'templates', "html_5.haml"
|
158
|
+
FileUtils.cp src, dest
|
159
|
+
end
|
160
|
+
|
161
|
+
def copy_main_template_html
|
128
162
|
dest = File.join @project_name, 'src/templates', 'main.html'
|
129
163
|
copy_first_part dest
|
130
164
|
ProjectCreator.append_last_part dest
|
131
165
|
end
|
132
166
|
|
133
167
|
def copy_menu_template
|
134
|
-
|
135
|
-
|
168
|
+
if @haml
|
169
|
+
dest = File.join @project_name, 'src/templates', 'menu.haml'
|
170
|
+
src = File.join $GENIT_PATH, 'data', 'templates', 'menu.haml'
|
171
|
+
else
|
172
|
+
dest = File.join @project_name, 'src/templates', 'menu.html'
|
173
|
+
src = File.join $GENIT_PATH, 'data', 'templates', 'menu.html'
|
174
|
+
end
|
136
175
|
FileUtils.cp src, dest
|
137
176
|
end
|
138
177
|
|
@@ -26,11 +26,20 @@ module Genit
|
|
26
26
|
private
|
27
27
|
|
28
28
|
def build_menu
|
29
|
-
|
30
|
-
menu = XmlDocument.open(file)
|
31
|
-
builder = MenuBuilder.new(menu)
|
29
|
+
builder = MenuBuilder.new(menu_document)
|
32
30
|
@menu = builder.build_for_page(@filename)
|
33
31
|
end
|
32
|
+
|
33
|
+
def menu_document
|
34
|
+
file = File.join(@working_dir, TEMPLATES_DIR, "menu.")
|
35
|
+
if File.exists?("#{file}html")
|
36
|
+
XmlDocument.open("#{file}html")
|
37
|
+
elsif File.exists?("#{file}haml")
|
38
|
+
XmlDocument.open_via_haml("#{file}haml")
|
39
|
+
else
|
40
|
+
error "No menu template"
|
41
|
+
end
|
42
|
+
end
|
34
43
|
|
35
44
|
end
|
36
45
|
|
data/lib/genit/tags/class_tag.rb
CHANGED
@@ -4,7 +4,7 @@ module Genit
|
|
4
4
|
|
5
5
|
# A Genit general tag.
|
6
6
|
class ClassTag < Tag
|
7
|
-
|
7
|
+
|
8
8
|
# Public: Constructor.
|
9
9
|
#
|
10
10
|
# working_dir - The String working directory, where live the project.
|
@@ -14,7 +14,7 @@ module Genit
|
|
14
14
|
def initialize working_dir, template, filename, tag
|
15
15
|
super working_dir, template, filename, tag
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
# Public: Replace something in the template.
|
19
19
|
#
|
20
20
|
# Returns the template as a Nokogiri::XML::Document
|
@@ -28,7 +28,7 @@ module Genit
|
|
28
28
|
error "Unknown tag #{@tag}"
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
end
|
33
33
|
|
34
34
|
end
|
data/spec/compiler_spec.rb
CHANGED
@@ -5,7 +5,7 @@ require './spec/helper'
|
|
5
5
|
describe Compiler do
|
6
6
|
|
7
7
|
before :each do
|
8
|
-
@project = ProjectCreator.new('spec/project-name', false)
|
8
|
+
@project = ProjectCreator.new('spec/project-name', false, false)
|
9
9
|
@project.create
|
10
10
|
@compiler = Compiler.new test_project_path
|
11
11
|
end
|
@@ -20,9 +20,26 @@ describe Compiler do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
context "after compilation" do
|
24
|
+
before :each do
|
25
|
+
@compiler.compile
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should build an index.html page" do
|
29
|
+
File.exist?('spec/project-name/index.html').should be_true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should set the menu in index page" do
|
33
|
+
doc = Nokogiri::HTML(File.open("spec/project-name/index.html"))
|
34
|
+
doc.at_css("ul#menu a#selected")['href'].should == 'index.html'
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "RSS feed" do
|
38
|
+
it "should build the rss.xml file" do
|
39
|
+
File.exist?('spec/project-name/rss.xml').should be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
26
43
|
end
|
27
44
|
|
28
45
|
it "should build two pages" do
|
@@ -32,19 +49,13 @@ describe Compiler do
|
|
32
49
|
File.exist?('spec/project-name/doc.html').should be_true
|
33
50
|
end
|
34
51
|
|
35
|
-
it "should set the menu in index page" do
|
36
|
-
@compiler.compile
|
37
|
-
doc = Nokogiri::HTML(File.open("spec/project-name/index.html"))
|
38
|
-
doc.at_css("ul#menu a#selected")['href'].should == 'index.html'
|
39
|
-
end
|
40
|
-
|
41
52
|
context "with no '.genit' file" do
|
42
53
|
it "should exit" do
|
43
54
|
$stdout.should_receive(:puts).with(/Not a genit project folder/i)
|
44
55
|
lambda{Compiler.new File.expand_path('.')}.should raise_error(SystemExit)
|
45
56
|
end
|
46
57
|
end
|
47
|
-
|
58
|
+
|
48
59
|
context "with no 'config' file" do
|
49
60
|
it "should exit" do
|
50
61
|
$stdout.should_receive(:puts).with(/Missing config file/i)
|
@@ -52,14 +63,7 @@ describe Compiler do
|
|
52
63
|
lambda{Compiler.new test_project_path}.should raise_error(SystemExit)
|
53
64
|
end
|
54
65
|
end
|
55
|
-
|
56
|
-
describe "RSS feed" do
|
57
|
-
it "should build the rss.xml file" do
|
58
|
-
@compiler.compile
|
59
|
-
File.exist?('spec/project-name/rss.xml').should be_true
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
66
|
+
|
63
67
|
describe "Sitemap XML" do
|
64
68
|
it "should build the 'sitemap.xml'" do
|
65
69
|
a_news = %q{<h1>title</h1>}
|
@@ -71,6 +75,54 @@ describe Compiler do
|
|
71
75
|
end
|
72
76
|
end
|
73
77
|
|
78
|
+
context "with sass as stylesheet" do
|
79
|
+
before :each do
|
80
|
+
# remove screen.css
|
81
|
+
FileUtils.rm "spec/project-name/styles/screen.css"
|
82
|
+
# create screen.sass
|
83
|
+
file = %q{
|
84
|
+
.content-navigation
|
85
|
+
border-color: blue
|
86
|
+
}
|
87
|
+
File.open('spec/project-name/styles/screen.sass', "w") do |out|
|
88
|
+
out.puts file
|
89
|
+
end
|
90
|
+
@compiler.compile
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should produce css file" do
|
94
|
+
File.exists?("spec/project-name/styles/screen.css").should be_true
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should not remove sass file" do
|
98
|
+
File.exists?("spec/project-name/styles/screen.sass").should be_true
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "with scss as stylesheet" do
|
103
|
+
before :each do
|
104
|
+
# remove screen.css
|
105
|
+
FileUtils.rm "spec/project-name/styles/screen.css"
|
106
|
+
# create screen.scss
|
107
|
+
file = "
|
108
|
+
.content-navigation {
|
109
|
+
border-color: blue;
|
110
|
+
color: darken(blue, 9%); }"
|
111
|
+
File.open('spec/project-name/styles/screen.scss', "w") do |out|
|
112
|
+
out.puts file
|
113
|
+
end
|
114
|
+
@compiler.compile
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should produce css file" do
|
118
|
+
File.exists?("spec/project-name/styles/screen.css").should be_true
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should not remove scss file" do
|
122
|
+
File.exists?("spec/project-name/styles/screen.scss").should be_true
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
74
126
|
context "with bad tag syntax" do
|
75
127
|
context "with unknown class into template" do
|
76
128
|
it "should exit" do
|
@@ -188,7 +240,6 @@ describe Compiler do
|
|
188
240
|
main = %q{
|
189
241
|
<html>
|
190
242
|
<body>
|
191
|
-
|
192
243
|
<genit class="pages"/>
|
193
244
|
<genit here="foo"/>
|
194
245
|
</body>
|
data/spec/extensions_spec.rb
CHANGED
@@ -5,31 +5,49 @@ require './spec/helper'
|
|
5
5
|
describe "Standard class String extensions" do
|
6
6
|
|
7
7
|
it "should replace a markdown file ext" do
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
"file.markdown".force_html_extension.should == "file.html"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should replace a haml file ext" do
|
12
|
+
"file.haml".force_html_extension.should == "file.html"
|
11
13
|
end
|
12
|
-
|
14
|
+
|
13
15
|
it "should replace a markdown file ext !" do
|
14
16
|
string = "file.markdown"
|
15
17
|
string.force_html_extension!
|
16
18
|
string.should == "file.html"
|
17
19
|
end
|
18
|
-
|
20
|
+
|
21
|
+
it "should replace a haml file ext !" do
|
22
|
+
string = "file.haml"
|
23
|
+
string.force_html_extension!
|
24
|
+
string.should == "file.html"
|
25
|
+
end
|
26
|
+
|
19
27
|
it "should not replace an other file ext" do
|
28
|
+
"file.txt".force_html_extension.should == "file.txt"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not replace an other file ext !" do
|
20
32
|
string = "file.txt"
|
21
33
|
string.force_html_extension!
|
22
34
|
string.should == "file.txt"
|
23
35
|
end
|
24
|
-
|
36
|
+
|
25
37
|
it "should say if it has a markdown file extension" do
|
26
|
-
|
27
|
-
string.markdown_ext?.should be_true
|
38
|
+
"file.markdown".markdown_ext?.should be_true
|
28
39
|
end
|
29
|
-
|
40
|
+
|
41
|
+
it "should say if it has a haml file extension" do
|
42
|
+
"file.haml".haml_ext?.should be_true
|
43
|
+
end
|
44
|
+
|
30
45
|
it "should say if it has not a markdown file extension" do
|
31
|
-
|
32
|
-
|
46
|
+
"file.other".markdown_ext?.should be_false
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should say if it has not a haml file extension" do
|
50
|
+
"file.other".haml_ext?.should be_false
|
33
51
|
end
|
34
52
|
|
35
53
|
end
|
data/spec/fragment_spec.rb
CHANGED
@@ -4,28 +4,28 @@ require './spec/helper'
|
|
4
4
|
|
5
5
|
describe Fragment do
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
it "should replace one fragment tag" do
|
8
|
+
fragment = Fragment.new("spec/test-files/fragment.html", 'spec/test-files')
|
9
|
+
fragment.to_html.start_with?('<h1>title</h1>').should be_true
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
it "should replace one fragment tag among other tags" do
|
13
|
+
fragment = Fragment.new("spec/test-files/fragment4.html", 'spec/test-files')
|
14
|
+
result = fragment.to_html
|
15
|
+
result.gsub!("\n", '')
|
16
|
+
result.should == '<h1>title</h1><p>para</p><p>footer</p>'
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
it "should replace one fragment tag in markdown" do
|
20
|
+
fragment = Fragment.new("spec/test-files/fragment3.html", 'spec/test-files')
|
21
|
+
fragment.to_html.start_with?('<h1>title</h1>').should be_true
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
it "should replace some fragment tags" do
|
25
|
+
fragment = Fragment.new("spec/test-files/fragment2.html", 'spec/test-files')
|
26
|
+
result = fragment.to_html.gsub("\n", '')
|
27
|
+
result.should == ("<p>abcde</p>")
|
28
|
+
end
|
29
29
|
|
30
30
|
it "should not change a file without fragment tag" do
|
31
31
|
fragment = Fragment.new("spec/test-files/nothing.html", 'spec/test-files')
|
data/spec/haml_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require './spec/helper'
|
4
|
+
|
5
|
+
describe "Haml expectations" do
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
Haml::Options.defaults[:format] = :xhtml
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should accept and close the genit tag" do
|
12
|
+
e = Haml::Engine.new("%genit")
|
13
|
+
e.render.should == "<genit></genit>\n"
|
14
|
+
end
|
15
|
+
end
|
data/spec/html_document_spec.rb
CHANGED
@@ -27,13 +27,22 @@ describe HtmlDocument do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should build a page content from markdown" do
|
30
|
-
content = HtmlDocument.build_page_content("spec/test-files/test.markdown",
|
30
|
+
content = HtmlDocument.build_page_content("spec/test-files/test.markdown",
|
31
|
+
'spec/test-files')
|
31
32
|
content.should == '<h1>title</h1>'
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
it "should build a page content from haml" do
|
36
|
+
content = HtmlDocument.build_page_content("spec/test-files/test.haml",
|
37
|
+
'spec/test-files')
|
38
|
+
content.should == "<h1>title</h1>\n"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should build page content from html" do
|
42
|
+
content = HtmlDocument.build_page_content(
|
43
|
+
"spec/test-files/fragment.html",
|
44
|
+
'spec/test-files')
|
45
|
+
content.start_with?('<h1>title</h1>').should be_true
|
46
|
+
end
|
38
47
|
|
39
48
|
end
|
data/spec/pages_finder_spec.rb
CHANGED
@@ -5,7 +5,7 @@ require './spec/helper'
|
|
5
5
|
describe PagesFinder do
|
6
6
|
|
7
7
|
before :each do
|
8
|
-
@project = ProjectCreator.new('spec/project-name', false)
|
8
|
+
@project = ProjectCreator.new('spec/project-name', false, false)
|
9
9
|
@project.create
|
10
10
|
@finder = PagesFinder.new 'spec/project-name'
|
11
11
|
end
|
@@ -5,7 +5,7 @@ require './spec/helper'
|
|
5
5
|
describe ProjectCreator do
|
6
6
|
|
7
7
|
before :all do
|
8
|
-
@project = ProjectCreator.new('spec/project-name', false)
|
8
|
+
@project = ProjectCreator.new('spec/project-name', false, false)
|
9
9
|
@project.create
|
10
10
|
end
|
11
11
|
|
@@ -26,7 +26,7 @@ describe ProjectCreator do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should say it if it cannot create a project" do
|
29
|
-
project = ProjectCreator.new('/root/project', false)
|
29
|
+
project = ProjectCreator.new('/root/project', false, false)
|
30
30
|
$stdout.should_receive(:puts).with("Cannot create project...")
|
31
31
|
project.create
|
32
32
|
end
|
data/spec/sass_spec.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
b
|
@@ -0,0 +1 @@
|
|
1
|
+
d
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>footer</p>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>title</h1>
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 title
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.1'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -59,6 +59,38 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.2.2
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: haml
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.0.1
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 4.0.1
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sass
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 3.2.7
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 3.2.7
|
62
94
|
description: ! "Genit builds a **static web site**, that is a web site without server
|
63
95
|
side \nprograming language and database. The site consists only of xhtml code (+
|
64
96
|
css and medias) and \neventually of javascript. It is a command line framework,
|
@@ -73,6 +105,7 @@ extra_rdoc_files: []
|
|
73
105
|
files:
|
74
106
|
- lib/genit/project/pages_finder.rb
|
75
107
|
- lib/genit/project/rss_feed.rb
|
108
|
+
- lib/genit/project/css.rb
|
76
109
|
- lib/genit/project/project_creator.rb
|
77
110
|
- lib/genit/project/page_compiler.rb
|
78
111
|
- lib/genit/project/root_cleaner.rb
|
@@ -113,11 +146,15 @@ files:
|
|
113
146
|
- lib/genit.rb
|
114
147
|
- bin/genit
|
115
148
|
- data/templates/html_5
|
149
|
+
- data/templates/menu.haml
|
150
|
+
- data/templates/html_5.haml
|
116
151
|
- data/templates/menu.html
|
117
152
|
- data/templates/main.html
|
118
153
|
- data/styles/handheld.css
|
119
154
|
- data/styles/print.css
|
120
155
|
- data/styles/screen.css
|
156
|
+
- data/pages/index.haml
|
157
|
+
- data/pages/index2.haml
|
121
158
|
- data/pages/index.html
|
122
159
|
- data/pages/index2.html
|
123
160
|
- spec/file_writer_spec.rb
|
@@ -126,6 +163,7 @@ files:
|
|
126
163
|
- spec/builder_spec.rb
|
127
164
|
- spec/fragment_spec.rb
|
128
165
|
- spec/menu_builder_spec.rb
|
166
|
+
- spec/haml_spec.rb
|
129
167
|
- spec/helper.rb
|
130
168
|
- spec/html_document_spec.rb
|
131
169
|
- spec/builder_base_spec.rb
|
@@ -138,9 +176,15 @@ files:
|
|
138
176
|
- spec/test-files/malformed.html
|
139
177
|
- spec/test-files/fragment4.html
|
140
178
|
- spec/test-files/fragment3.html
|
179
|
+
- spec/test-files/test.haml
|
141
180
|
- spec/test-files/test.markdown
|
142
181
|
- spec/test-files/fragment2.html
|
143
182
|
- spec/test-files/fragment.html
|
183
|
+
- spec/test-files/src/fragments/footer.html
|
184
|
+
- spec/test-files/src/fragments/b.html
|
185
|
+
- spec/test-files/src/fragments/title.html
|
186
|
+
- spec/test-files/src/fragments/title.markdown
|
187
|
+
- spec/test-files/src/fragments/d.html
|
144
188
|
- spec/test-files/fragments/footer.html
|
145
189
|
- spec/test-files/fragments/b.html
|
146
190
|
- spec/test-files/fragments/title.html
|
@@ -152,6 +196,7 @@ files:
|
|
152
196
|
- spec/class_tag_spec.rb
|
153
197
|
- spec/pages_finder_spec.rb
|
154
198
|
- spec/xml_document_spec.rb
|
199
|
+
- spec/sass_spec.rb
|
155
200
|
- VERSION
|
156
201
|
- NEWS
|
157
202
|
- README.markdown
|