genit 0.4.1 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/NEWS CHANGED
@@ -1,3 +1,12 @@
1
+ v0.5 2011-08-06
2
+
3
+ * You can pass string variables from page to template
4
+
5
+ * Pages can be organized into subfolders
6
+
7
+ * fix a bug where the cli option -v crashed
8
+
9
+
1
10
  v0.4.1 2011-07-30
2
11
 
3
12
  * Fix a bug where the closing part of auto-closing tags were forgotten.
data/TODO CHANGED
@@ -1,34 +1,9 @@
1
+ dans la doc : tous les liens internes doivent être relatifs au dossier de base (fichier index.html)
1
2
 
2
- BUGS
3
- ================
4
- #35
5
- Les fermetures des balise <meta/> et <link/> sont "oubliées" ?
6
- Aïe !!! Il semblerait que ce soit le cas de TOUTES les balises auto-fermantes !
7
3
 
8
4
 
9
- ================
10
-
11
-
12
- web site for genit
13
- announce site (freshmeat, twitter, et blog)
14
-
15
-
16
- passer des variables d'une page au template
17
-
18
- pages subfolder (par ex. pour la doc)
19
-
5
+ -------------
20
6
  news
21
7
 
22
8
 
23
- idées
24
- ============
25
- Trouver / penser à / un framework de test xhtml/css
26
-
27
- plusieurs templates
28
-
29
- pouvoir changer le title(head) de la page
30
-
31
- fichiers publiques: tout ce qui n'a pas à être 'processer', comme
32
- des fichiers texte, pdf, image, vidéo, etc.
33
-
34
- Recommended list of Doctype declarations : http://www.w3.org/QA/2002/04/valid-dtd-list.html
9
+ -------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5
data/bin/genit CHANGED
@@ -34,7 +34,7 @@ module Genit
34
34
  class AbstractCommand < Clamp::Command
35
35
 
36
36
  option ['-v', '--version'], :flag, "print version" do
37
- puts "genit #{File.read('VERSION').strip}"
37
+ puts "genit #{File.read(File.join($GENIT_PATH, 'VERSION')).strip}"
38
38
  exit 0
39
39
  end
40
40
 
data/lib/genit.rb CHANGED
@@ -9,7 +9,15 @@ require 'genit/document_writer'
9
9
  require 'genit/compiler'
10
10
  require 'genit/page_compiler'
11
11
  require 'genit/builder'
12
+ require 'genit/builder_base'
13
+ require 'genit/menu_builder'
14
+ require 'genit/head_link_builder'
15
+ require 'genit/body_link_builder'
12
16
  require 'genit/fragment'
17
+ require 'genit/tag_processor'
18
+ require 'genit/tag'
19
+ require 'genit/var_tag'
20
+ require 'genit/class_tag'
13
21
 
14
22
  module Genit
15
23
  end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'uri'
4
+
5
+ module Genit
6
+
7
+ # Modify links.
8
+ class BodyLinkBuilder < BuilderBase
9
+
10
+ # Public: Build the menu of a particular page.
11
+ #
12
+ # page_name - The string filename of the page to build menu for.
13
+ #
14
+ # Returns the modified Nokogiri::XML::Document
15
+ def build_for_page page_name
16
+ build page_name, get_links
17
+ end
18
+
19
+ private
20
+
21
+ def get_links
22
+ @document.css("body a")
23
+ end
24
+
25
+ def update link
26
+ @path = link['href']
27
+ return if @path =~ URI::regexp
28
+ nb = BuilderBase::get_number_of_base_dirs @page_name
29
+ make_relative nb
30
+ link['href'] = @path
31
+ end
32
+
33
+ end
34
+
35
+ end
data/lib/genit/builder.rb CHANGED
@@ -4,7 +4,7 @@ require 'nokogiri'
4
4
 
5
5
  module Genit
6
6
 
7
- # Build a document from various sources.
7
+ # Build a document, that may be a fragment, from various sources.
8
8
  class Builder
9
9
 
10
10
  # Public: Constructor.
@@ -31,29 +31,6 @@ module Genit
31
31
  @document
32
32
  end
33
33
 
34
- # Public: Mark the <a> element of the menu that is selected (the displayed
35
- # page).
36
- #
37
- # page_name - The String filename of the page
38
- #
39
- # Examples
40
- #
41
- # menu = Nokogiri::XML(File.open('menu.html'))
42
- # builder = Builder.new(menu)
43
- # menu = builder.select_menu('index.html')
44
- #
45
- # Return the updated Nokogiri::XML::Document document.
46
- def select_menu page_name
47
- tags = @document.css("ul#menu a")
48
- tags.each {|tag|
49
- if tag['href'] == page_name.gsub(/\.markdown$/, '.html')
50
- tag['id'] = 'selected'
51
- break
52
- end
53
- }
54
- @document
55
- end
56
-
57
34
  end
58
35
 
59
36
  end
@@ -0,0 +1,46 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'uri'
4
+
5
+ module Genit
6
+
7
+ # A base class for all builders.
8
+ class BuilderBase
9
+
10
+ # Public: Constructor.
11
+ #
12
+ # doc - A Nokogiri::XML::Document
13
+ def initialize doc
14
+ raise RuntimeError if doc.nil?
15
+ @document = doc
16
+ end
17
+
18
+ # Define me in child
19
+ def build_for_page page_name
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def build page_name, elements
24
+ @page_name = page_name
25
+ elements.each {|elem| update elem }
26
+ @document
27
+ end
28
+
29
+ def BuilderBase.get_number_of_base_dirs filename
30
+ return 0 if filename =~ URI::regexp
31
+
32
+ dirs = File.dirname filename
33
+ return 0 if dirs == '.'
34
+
35
+ return dirs.split('/').size
36
+ end
37
+
38
+ private
39
+
40
+ def make_relative nb
41
+ nb.times { @path = '../' + @path }
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,66 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # A Genit general tag.
6
+ # Currently we have three tags:
7
+ # * <genit class="pages"/>
8
+ # * <genit class="menu"/>
9
+ # * <genit class="fragment" file="foo.html"/>
10
+ class ClassTag < Tag
11
+
12
+ # Public: Constructor.
13
+ #
14
+ # working_dir - The String working directory, where live the project.
15
+ # template - The Nokogiri::XML::Document into which we process the tag.
16
+ # filename - The String name of the page
17
+ # tag - The tag to process as a Nokogiri::XML::Element
18
+ def initialize working_dir, template, filename, tag
19
+ super working_dir, template, filename, tag
20
+ end
21
+
22
+ # Public: Replace something in the template.
23
+ #
24
+ # Returns the template as a Nokogiri::XML::Document
25
+ def process
26
+ case @tag['class']
27
+ when 'pages' then process_tag_pages
28
+ when 'menu' then process_tag_menu
29
+ when 'fragment' then process_fragment
30
+ else
31
+ raise RuntimeError
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def process_tag_pages
38
+ replace_tag_into_template! 'genit.pages', page_content
39
+ end
40
+
41
+ def page_content
42
+ filename = File.join(@working_dir, 'pages', @filename)
43
+ HtmlDocument.build_page_content filename, @working_dir
44
+ end
45
+
46
+ def process_tag_menu
47
+ build_menu
48
+ replace_tag_into_template! 'genit.menu', @menu.to_html
49
+ end
50
+
51
+ def build_menu
52
+ menu = XmlDocument.open(File.join(@working_dir, "templates/menu.html"))
53
+ builder = MenuBuilder.new(menu)
54
+ @menu = builder.build_for_page(@filename)
55
+ end
56
+
57
+ def process_fragment
58
+ file = @tag['file']
59
+ fragment = HtmlDocument.build_page_content(File.join(@working_dir, 'fragments', file), @working_dir)
60
+ css_rule = "genit.fragment[file='#{file}']"
61
+ replace_tag_into_template! css_rule, fragment.to_s
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -35,9 +35,9 @@ module Genit
35
35
  end
36
36
 
37
37
  def compile_pages
38
- Dir.foreach(File.join(@working_dir, 'pages')) do |file|
39
- next if (file == ".") or (file == "..")
40
- @filename = file
38
+ Dir.glob(File.join(@working_dir, 'pages', '**/*')) do |file|
39
+ next if File.directory?(file)
40
+ @filename = file.gsub(File.join(@working_dir, 'pages') + '/', '')
41
41
  compile_page
42
42
  end
43
43
  end
@@ -19,11 +19,18 @@ module Genit
19
19
  # document - A Nokogiri::HTML or Nokogiri::XML document
20
20
  # filename - The String name of the future saved document
21
21
  def save_as_xhtml document, filename
22
+ @document = document
23
+ remove_remaining_tags
22
24
  FileWriter.write document.to_xhtml, get_full_path(filename.force_html_extension)
23
25
  end
24
26
 
25
27
  private
26
28
 
29
+ def remove_remaining_tags
30
+ tags = @document.css 'genit'
31
+ tags.each {|tag| tag.remove}
32
+ end
33
+
27
34
  def get_full_path filename
28
35
  File.join(@working_dir, 'www', filename)
29
36
  end
@@ -15,3 +15,31 @@ class String
15
15
  end
16
16
 
17
17
  end
18
+
19
+ module Nokogiri
20
+ module XML
21
+
22
+ # I think it's a bad idea to extend the Nokogiri library cause it makes a
23
+ # too big dependency on Genit.
24
+ # It will be much better to do a little wrapper over Nokogiri::XML::Node.
25
+ class Node
26
+
27
+ def genit_class?
28
+ if self['class']
29
+ true
30
+ else
31
+ false
32
+ end
33
+ end
34
+
35
+ def genit_var?
36
+ if self['var']
37
+ true
38
+ else
39
+ false
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -8,9 +8,17 @@ module Genit
8
8
  class FileWriter
9
9
 
10
10
  def self.write content, full_path
11
+ create_dirs full_path
11
12
  File.open(full_path, "w") {|out| out.puts content }
12
13
  end
13
14
 
15
+ private
16
+
17
+ def self.create_dirs full_path
18
+ dir = File.dirname full_path
19
+ FileUtils.makedirs(dir) unless File.directory?(dir)
20
+ end
21
+
14
22
  end
15
23
 
16
24
  end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # Modify head link tags.
6
+ class HeadLinkBuilder < BuilderBase
7
+
8
+ # Public: Build the document head link tags of a particular page.
9
+ #
10
+ # page_name - The string filename of the page.
11
+ #
12
+ # Returns the modified Nokogiri::XML::Document
13
+ def build_for_page page_name
14
+ build page_name, head_links
15
+ end
16
+
17
+ private
18
+
19
+ def head_links
20
+ @document.css("head link")
21
+ end
22
+
23
+ def update link
24
+ @path = link['href']
25
+ nb = BuilderBase::get_number_of_base_dirs @page_name
26
+ make_relative nb
27
+ link['href'] = @path
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -62,7 +62,7 @@ module Genit
62
62
  #
63
63
  # file - Nokogiri::HTML or Nokogiri::XML document.
64
64
  #
65
- # Returns a list of Nokogiri::XML::NodeSet.
65
+ # Returns Nokogiri::XML::NodeSet.
66
66
  def self.genit_tags_from file
67
67
  file.css "genit"
68
68
  end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # Modify menu links.
6
+ class MenuBuilder < BuilderBase
7
+
8
+ # Public: Build the menu of a particular page.
9
+ #
10
+ # page_name - The string filename of the page to build menu for.
11
+ #
12
+ # Returns the modified Nokogiri::XML::Document
13
+ def build_for_page page_name
14
+ build page_name, menu_links
15
+ end
16
+
17
+ private
18
+
19
+ def menu_links
20
+ @document.css("ul#menu a")
21
+ end
22
+
23
+ def update link
24
+ @path = link['href']
25
+ link['id'] = 'selected' if @path == @page_name.force_html_extension
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -1,7 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- require 'fileutils'
4
-
5
3
  module Genit
6
4
 
7
5
  # Compile a single page.
@@ -19,47 +17,31 @@ module Genit
19
17
 
20
18
  # Public: Compile the page.
21
19
  #
22
- # Returns a Nokogiri::HTML document.
20
+ # Returns a Nokogiri::XML document.
23
21
  def compile
24
- genit_tags = HtmlDocument.genit_tags_from @template
25
- genit_tags.each {|tag| process_tag tag }
26
- @template
22
+ compile_body
23
+ compile_head
27
24
  end
28
25
 
29
26
  private
30
27
 
31
- def process_tag tag
32
- case tag['class']
33
- when 'pages' then tag_pages
34
- when 'menu' then tag_menu
28
+ def compile_body
29
+ genit_tags_in_template.each do |tag|
30
+ tp = TagProcessor.new(@working_dir, @template, @filename, tag)
31
+ @template = tp.process
35
32
  end
33
+ builder = BodyLinkBuilder.new @template
34
+ @template = builder.build_for_page @filename
36
35
  end
37
36
 
38
- # Remplace la page au sein du template
39
- def tag_pages
40
- builder = Builder.new(@template)
41
- @template = builder.replace('genit.pages', page_content)
42
- end
43
-
44
- def page_content
45
- filename = File.join(@working_dir, 'pages', @filename)
46
- HtmlDocument.build_page_content filename, @working_dir
47
- end
48
-
49
- def tag_menu
50
- build_menu
51
- replace_menu_into_template
52
- end
53
-
54
- def build_menu
55
- menu = XmlDocument.open(File.join(@working_dir, "templates/menu.html"))
56
- builder = Builder.new(menu)
57
- @menu = builder.select_menu(@filename)
37
+ def compile_head
38
+ builder = HeadLinkBuilder.new @template
39
+ builder.build_for_page @filename
58
40
  end
59
41
 
60
- def replace_menu_into_template
61
- builder = Builder.new(@template)
62
- @template = builder.replace('genit.menu', @menu.to_html)
42
+ # Returns all <genit> tags found in the template.
43
+ def genit_tags_in_template
44
+ HtmlDocument.genit_tags_from @template
63
45
  end
64
46
 
65
47
  end
data/lib/genit/tag.rb ADDED
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # Base class for all Tags.
6
+ class Tag
7
+
8
+ # Public: Constructor.
9
+ #
10
+ # working_dir - The String working directory, where live the project.
11
+ # template - The Nokogiri::XML::Document into which we process the tag.
12
+ # filename - The String name of the page
13
+ # tag - The tag to process as a Nokogiri::XML::Element
14
+ def initialize working_dir, template, filename, tag
15
+ @working_dir = working_dir
16
+ @filename = filename
17
+ @template = template
18
+ @tag = tag
19
+ end
20
+
21
+ # Public: Replace a tag by a string content into the template.
22
+ # This method not only returns the modified template, it also really replace
23
+ # the template in place.
24
+ #
25
+ # css_rule - The String css rule to identify the tag to replace.
26
+ # string - The String replacement.
27
+ #
28
+ # Returns the template as a Nokogiri::XML::Document
29
+ def replace_tag_into_template! css_rule, string
30
+ builder = Builder.new(@template)
31
+ @template = builder.replace(css_rule, string)
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # Replace a tag in a template.
6
+ class TagProcessor
7
+
8
+ # Public: Constructor.
9
+ #
10
+ # working_dir - The String working directory, where live the project.
11
+ # template - The Nokogiri::XML::Document into which we process the tag.
12
+ # filename - The String name of the page
13
+ # tag - The tag to process as a Nokogiri::XML::Element
14
+ def initialize working_dir, template, filename, tag
15
+ @working_dir = working_dir
16
+ @filename = filename
17
+ @template = template
18
+ if tag.genit_class?
19
+ @tag = ClassTag.new(@working_dir, @template, @filename, tag)
20
+ elsif tag.genit_var?
21
+ @tag = VarTag.new(@working_dir, @template, @filename, tag)
22
+ else
23
+ raise RuntimeError
24
+ end
25
+ end
26
+
27
+ # Returns the modified template as a Nokogiri::XML::Document
28
+ def process
29
+ @tag.process
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,44 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Genit
4
+
5
+ # A Genit tag that represents a variable.
6
+ # For example, in the template you have: <genit var="page_title"/>,
7
+ # and in the page you have: <genit var="page_title">My Title</genit>.
8
+ class VarTag < Tag
9
+
10
+ # Public: Constructor.
11
+ #
12
+ # working_dir - The String working directory, where live the project.
13
+ # template - The Nokogiri::XML::Document into which we process the tag.
14
+ # filename - The String name of the page
15
+ # tag - The tag to process as a Nokogiri::XML::Element
16
+ def initialize working_dir, template, filename, tag
17
+ super working_dir, template, filename, tag
18
+ end
19
+
20
+ # Public: Replace a variable in the template. The variable content is found
21
+ # in the tag in the page.
22
+ #
23
+ # Returns the template as a Nokogiri::XML::Document
24
+ def process
25
+ replace_tag_into_template! get_css_rule, get_variable_value
26
+ @template
27
+ end
28
+
29
+ private
30
+
31
+ def get_css_rule
32
+ var_name = @tag['var']
33
+ "genit[var='#{var_name}']"
34
+ end
35
+
36
+ def get_variable_value
37
+ filename = File.join(@working_dir, 'pages', @filename)
38
+ doc = HtmlDocument.open filename
39
+ doc.at_css("genit[var='#{@tag['var']}']").inner_html
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -17,6 +17,16 @@ module Genit
17
17
  Nokogiri::XML(File.open(file))
18
18
  end
19
19
 
20
+ # Public: Open a fragment of xml document.
21
+ #
22
+ # file - Full path String filename.
23
+ #
24
+ # Returns a Nokogiri::XML document.
25
+ def self.open_fragment file
26
+ string = IO.read file
27
+ Nokogiri::XML.fragment string
28
+ end
29
+
20
30
  end
21
31
 
22
32
  end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe BuilderBase do
6
+
7
+ before :each do
8
+ test_file = %q{<body></body>}
9
+ @doc = Nokogiri::XML.fragment test_file
10
+ end
11
+
12
+ it "should not be instanciated" do
13
+ builder = BuilderBase.new(@doc)
14
+ lambda {builder.build_for_page('index.html')}.should raise_error(NotImplementedError)
15
+ end
16
+
17
+ end
data/spec/builder_spec.rb CHANGED
@@ -16,8 +16,8 @@ describe Builder do
16
16
 
17
17
  it "should set the menu" do
18
18
  menu = Nokogiri::XML(File.open("data/templates/menu.html"))
19
- builder = Builder.new(menu)
20
- menu = builder.select_menu('index.html')
19
+ builder = MenuBuilder.new(menu)
20
+ menu = builder.build_for_page('index.html')
21
21
  menu.css("ul#menu a#selected").size.should == 1
22
22
  menu.css("ul#menu a#selected").first['href'].should == 'index.html'
23
23
  end
@@ -48,4 +48,29 @@ describe Compiler do
48
48
  compiler.compile
49
49
  end
50
50
 
51
+ it "should allow template to include a fragment (Bug#37)" do
52
+ # add a fragment
53
+ File.open('spec/project-name/fragments/footer.html', "w") {|out| out.puts '<p>footer</p>' }
54
+ # replace main.html
55
+ main = %q{
56
+ <?xml version="1.0" encoding="UTF-8"?>
57
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
58
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
59
+ <head>
60
+ <title>Genit - Static web site framework</title>
61
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
62
+ <link rel="stylesheet" type="text/css" media="all" href="styles/alsa/all.css" />
63
+ <link rel="stylesheet" type="text/css" media="screen" href="styles/screen.css" />
64
+ <link rel="stylesheet" type="text/css" media="print" href="styles/print.css" />
65
+ </head>
66
+ <body>
67
+ <genit class="menu" />
68
+ <genit class="pages" />
69
+ <genit class="fragment" file="footer.html"/>
70
+ </body>
71
+ </html>}
72
+ File.open('spec/project-name/templates/main.html', "w") {|out| out.puts main }
73
+ lambda {@compiler.compile}.should_not raise_error
74
+ end
75
+
51
76
  end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe FileWriter do
6
+
7
+ after :all do
8
+ clean_test_repository
9
+ end
10
+
11
+ it "should create dirs if they doesn't exist" do
12
+ test_file = 'spec/project-name/dir1/dir2/test.file'
13
+ FileWriter.write 'content', test_file
14
+ File.exists?(test_file).should == true
15
+ end
16
+
17
+ end
@@ -0,0 +1,65 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe MenuBuilder do
6
+
7
+ before :each do
8
+ menu_test = %q{
9
+ <ul id="menu">
10
+ <li><a href="index.html">home</a></li>
11
+ <li><a href="about.html">about</a></li>
12
+ <li><a href="doc/index.html">doc</a></li>
13
+ <li><a href="doc/a.html">doca</a></li>
14
+ <li><a href="doc/b.html">docb</a></li>
15
+ <li><a href="a/b/c1.html">abc1</a></li>
16
+ <li><a href="a/b/c2.html">abc2</a></li>
17
+ <li><a href="/absolute.html">absolute</a></li>
18
+ <li><a href="http://www.truc.com/file.html">file</a></li>
19
+ </ul>}
20
+ @menu_doc = Nokogiri::XML.fragment menu_test
21
+ end
22
+
23
+ it "should set the menu for index.html page" do
24
+ builder = MenuBuilder.new(@menu_doc)
25
+ new_menu = builder.build_for_page('index.html')
26
+ new_menu.css("ul#menu a#selected").size.should == 1
27
+ new_menu.css("ul#menu a#selected").first['href'].should == 'index.html'
28
+ end
29
+
30
+ it "should set the menu for about.html page" do
31
+ builder = MenuBuilder.new(@menu_doc)
32
+ new_menu = builder.build_for_page('about.html')
33
+ new_menu.css("ul#menu a#selected").size.should == 1
34
+ new_menu.css("ul#menu a#selected").first['href'].should == 'about.html'
35
+ end
36
+
37
+ #~ it "should set the menu for doc/index.html page" do
38
+ #~ builder = MenuBuilder.new(@menu_doc)
39
+ #~ new_menu = builder.build_for_page('doc/index.html')
40
+ #~ new_menu.css("ul#menu a#selected").size.should == 1
41
+ #~ new_menu.css("ul#menu a#selected").first['href'].should == '../doc/index.html'
42
+ #~ end
43
+ #~
44
+ #~ it "should set the menu for a/b/c2.html page" do
45
+ #~ builder = MenuBuilder.new(@menu_doc)
46
+ #~ new_menu = builder.build_for_page('a/b/c2.html')
47
+ #~ new_menu.css("ul#menu a#selected").size.should == 1
48
+ #~ new_menu.css("ul#menu a#selected").first['href'].should == '../../a/b/c2.html'
49
+ #~ end
50
+
51
+ it "should set the menu for /absolute.html page" do
52
+ builder = MenuBuilder.new(@menu_doc)
53
+ new_menu = builder.build_for_page('/absolute.html')
54
+ new_menu.css("ul#menu a#selected").size.should == 1
55
+ new_menu.css("ul#menu a#selected").first['href'].should == '/absolute.html'
56
+ end
57
+
58
+ it "should set the menu for http://www.truc.com/file.html page" do
59
+ builder = MenuBuilder.new(@menu_doc)
60
+ new_menu = builder.build_for_page('http://www.truc.com/file.html')
61
+ new_menu.css("ul#menu a#selected").size.should == 1
62
+ new_menu.css("ul#menu a#selected").first['href'].should == 'http://www.truc.com/file.html'
63
+ end
64
+
65
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe PageCompiler do
6
+
7
+ after :all do
8
+ clean_test_repository
9
+ end
10
+
11
+ def create_sample_project
12
+ FileUtils.makedirs('spec/project-name/templates')
13
+ FileUtils.makedirs('spec/project-name/pages')
14
+ File.open('spec/project-name/templates/main.html', "w") {|out| out.puts '<h1><genit var="title"/></h1>' }
15
+ File.open('spec/project-name/pages/index.html', "w") {|out| out.puts '<genit var="title">My Title</genit>' }
16
+ end
17
+
18
+ it "should substitute a variable" do
19
+ create_sample_project
20
+ pc = PageCompiler.new 'spec/project-name/', 'index.html'
21
+ doc = pc.compile
22
+
23
+ doc.at_css('h1').inner_html.should == 'My Title'
24
+ end
25
+
26
+ it "should not delete the tag from page when a var is subsituted" do
27
+ create_sample_project
28
+ pc = PageCompiler.new 'spec/project-name/', 'index.html'
29
+ doc = pc.compile
30
+
31
+ page = IO.read 'spec/project-name/pages/index.html'
32
+ page.match('<genit var="title">My Title</genit>').should_not == nil
33
+ end
34
+
35
+ end
@@ -0,0 +1,8 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe TagProcessor do
6
+
7
+
8
+ end
@@ -8,5 +8,10 @@ describe XmlDocument do
8
8
  doc = XmlDocument.open("data/templates/menu.html")
9
9
  doc.css("ul#menu li").size.should >= 1
10
10
  end
11
+
12
+ it "should load as a fragment" do
13
+ doc = XmlDocument.open_fragment("data/templates/menu.html")
14
+ doc.css("ul#menu li").size.should >= 1
15
+ end
11
16
 
12
17
  end
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: 0.4.1
4
+ version: '0.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-30 00:00:00.000000000 +02:00
12
+ date: 2011-08-06 00:00:00.000000000 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coco
17
- requirement: &78327550 !ruby/object:Gem::Requirement
17
+ requirement: &72437520 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.4.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *78327550
25
+ version_requirements: *72437520
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &78327180 !ruby/object:Gem::Requirement
28
+ requirement: &72437120 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.4.6
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *78327180
36
+ version_requirements: *72437120
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bluecloth
39
- requirement: &78326630 !ruby/object:Gem::Requirement
39
+ requirement: &72436670 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.1.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *78326630
47
+ version_requirements: *72436670
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: clamp
50
- requirement: &78326190 !ruby/object:Gem::Requirement
50
+ requirement: &72436180 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: 0.2.2
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *78326190
58
+ version_requirements: *72436180
59
59
  description: ! "Genit builds a **static web site**, that is a web site without server
60
60
  side \nprograming language and database. The site consists only of xhtml code (+
61
61
  css and medias) and \neventually of javascript. It is a command line framework,
@@ -68,13 +68,21 @@ executables:
68
68
  extensions: []
69
69
  extra_rdoc_files: []
70
70
  files:
71
+ - lib/genit/head_link_builder.rb
71
72
  - lib/genit/project_creator.rb
73
+ - lib/genit/var_tag.rb
72
74
  - lib/genit/html_document.rb
73
75
  - lib/genit/builder.rb
74
76
  - lib/genit/file_writer.rb
75
77
  - lib/genit/xml_document.rb
78
+ - lib/genit/menu_builder.rb
79
+ - lib/genit/tag_processor.rb
80
+ - lib/genit/builder_base.rb
76
81
  - lib/genit/page_compiler.rb
77
82
  - lib/genit/fragment.rb
83
+ - lib/genit/tag.rb
84
+ - lib/genit/body_link_builder.rb
85
+ - lib/genit/class_tag.rb
78
86
  - lib/genit/compiler.rb
79
87
  - lib/genit/extensions.rb
80
88
  - lib/genit/document_writer.rb
@@ -91,11 +99,15 @@ files:
91
99
  - data/styles/yui/base.css
92
100
  - data/styles/yui/fonts.css
93
101
  - data/pages/index.html
102
+ - spec/file_writer_spec.rb
94
103
  - spec/compiler_spec.rb
104
+ - spec/tag_processor_spec.rb
95
105
  - spec/builder_spec.rb
96
106
  - spec/fragment_spec.rb
107
+ - spec/menu_builder_spec.rb
97
108
  - spec/helper.rb
98
109
  - spec/html_document_spec.rb
110
+ - spec/builder_base_spec.rb
99
111
  - spec/nokogiri_spec.rb
100
112
  - spec/project_creator_spec.rb
101
113
  - spec/extensions_spec.rb
@@ -111,6 +123,7 @@ files:
111
123
  - spec/test-files/fragments/title.markdown
112
124
  - spec/test-files/fragments/d.html
113
125
  - spec/test-files/nothing.html
126
+ - spec/page_compiler_spec.rb
114
127
  - spec/xml_document_spec.rb
115
128
  - VERSION
116
129
  - NEWS