genit 0.1 → 0.2

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/NEWS CHANGED
@@ -1,3 +1,10 @@
1
+ v0.2 2011-07-02
2
+
3
+ * Globally styling your site
4
+
5
+ * Manage a main menu
6
+
7
+
1
8
  v0.1 2011-06-25
2
9
 
3
10
  * Create a project
@@ -54,8 +54,9 @@ for more information.
54
54
  Dependencies
55
55
  --------------------------
56
56
 
57
+ ### Users dependencies
58
+
57
59
  * ruby >= 1.9.2
58
-
59
60
  * nokogiri (xml parser)
60
61
  * bluecloth (markdown parser)
61
62
 
@@ -65,6 +66,11 @@ Dependencies
65
66
  * [coco](https://github.com/lkdjiin/coco) (code coverage must be 90% minimum)
66
67
  * [tomdoc](http://tomdoc.org/) to document your code
67
68
 
69
+ _recommended_
70
+
71
+ * reek, to check for code smells
72
+ * flay, to check for duplicated code
73
+
68
74
 
69
75
  License
70
76
  --------------------------
data/Rakefile CHANGED
@@ -3,6 +3,11 @@
3
3
  require 'rake'
4
4
  require 'rspec/core/rake_task'
5
5
 
6
+ def ruby_files_for_shell
7
+ files = Dir.glob 'lib/**/*.rb'
8
+ files.join(' ')
9
+ end
10
+
6
11
  desc 'Test genit'
7
12
  task :default => :spec
8
13
 
@@ -14,10 +19,13 @@ end
14
19
  desc 'Check for code smells'
15
20
  task :reek do
16
21
  puts 'Checking for code smells...'
17
- files = Dir.glob 'lib/**/*.rb'
18
- # files.delete FILE_TO_EXCLUDE
19
- args = files.join(' ')
20
- sh "reek --quiet #{args} | ./reek.sed"
22
+ sh "reek --quiet #{ruby_files_for_shell} | ./reek.sed"
23
+ end
24
+
25
+ desc 'Check for duplicate code'
26
+ task :flay do
27
+ puts 'Check for duplicate code...'
28
+ exec "flay #{ruby_files_for_shell}"
21
29
  end
22
30
 
23
31
  desc 'Build genit & install it'
data/TODO CHANGED
@@ -1,8 +1,17 @@
1
- push gem
1
+ v0.2
2
+ ====
2
3
 
3
- essayer quickl
4
+ release
5
+
6
+
7
+ web site for genit
8
+
9
+ announce
10
+
11
+ news
12
+
13
+ release
4
14
 
5
- freshmeat: v0.1
6
15
  ------------------
7
16
  i18n
8
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1
1
+ 0.2
@@ -0,0 +1,130 @@
1
+ /* --- STYLES DE BASE ---
2
+ *
3
+ * from alsacréations:
4
+ * http://www.alsacreations.com/astuce/lire/654-feuille-de-styles-de-base.html
5
+ */
6
+
7
+ /* Page */
8
+ html {
9
+ font-size: 100%; /* Évite un bug d'IE 6-7. (1) */
10
+ }
11
+ body {
12
+ margin: 0;
13
+ padding: 1em; /* Remettre à zéro si nécessaire. */
14
+ /* Pensez à utiliser une collection de polices (2), par ex:
15
+ font-family: Arial, Helvetica, FreeSans, sans-serif; */
16
+ font-size: .8em; /* À adapter pour la police choisie. (3) */
17
+ line-height: 1.4; /* À adapter au design. (4) */
18
+ color: black;
19
+ background: white;
20
+ }
21
+
22
+ /* Titres */
23
+ h1, h2, h3, h4, h5, h6 {
24
+ margin: 1em 0 .5em 0; /* Rapproche le titre du texte. (5) */
25
+ line-height: 1.2;
26
+ font-weight: bold; /* Valeur par défaut. (6) */
27
+ font-style: normal;
28
+ }
29
+ h1 {
30
+ font-size: 1.75em;
31
+ }
32
+ h2 {
33
+ font-size: 1.5em;
34
+ }
35
+ h3 {
36
+ font-size: 1.25em;
37
+ }
38
+ h4 {
39
+ font-size: 1em;
40
+ }
41
+
42
+ /* Listes */
43
+ ul, ol {
44
+ margin: .75em 0 .75em 32px;
45
+ padding: 0;
46
+ }
47
+
48
+ /* Paragraphes */
49
+ p {
50
+ margin: .75em 0; /* Marges plus faibles que par défaut. (7) */
51
+ }
52
+ address {
53
+ margin: .75em 0;
54
+ font-style: normal;
55
+ }
56
+
57
+ /* Liens */
58
+ a {
59
+ text-decoration: underline;
60
+ }
61
+ a:link {
62
+ color: #11C;
63
+ }
64
+ a:visited {
65
+ color: #339;
66
+ }
67
+ a:hover, a:focus, a:active {
68
+ color: #00F;
69
+ }
70
+
71
+ /* Pas de bordure autour des images dans les liens */
72
+ a img {
73
+ border: none;
74
+ }
75
+
76
+ /* Divers éléments de type en-ligne (8) */
77
+ em {
78
+ font-style: italic;
79
+ }
80
+ strong {
81
+ font-weight: bold;
82
+ }
83
+
84
+ /* Formulaires */
85
+ form, fieldset {
86
+ margin: 0;
87
+ padding: 0;
88
+ border: none;
89
+ }
90
+ input, button, select {
91
+ vertical-align: middle; /* Solution pb. d'alignement. (9) */
92
+ }
93
+
94
+ /*
95
+ * 1. Bug décrit sur la page suivante: Bug avec l’unité relative em et Internet Explorer.
96
+ *
97
+ * 2. Pour un choix de collections de polices (font-family, voir Quelles polices de caractères
98
+ * (fontes) utiliser sur le Web?.
99
+ *
100
+ * 3. Ici, on utilise les styles de l'élément body pour définir la taille du texte globale pour le
101
+ * site. Une police Arial ou Helvetica à .8em, soit 80% de la taille du texte par défaut du
102
+ * navigateur, fournit une bonne lisibilité. Il faudra adapter cette valeur suivant la police
103
+ * choisie, les besoins du design, etc.
104
+ *
105
+ * 4. Les valeurs 1.1 et 1.2 conviennent marchent bien pour les titres, voire pour le texte dans des
106
+ * colonnes étroites. Pour des lignes de texte plus longues, on utilisera plutôt des valeurs
107
+ * entre 1.2 (120%) et 1.8 (180%).
108
+ *
109
+ * 5. Avec les styles par défaut des navigateurs, les titres ont souvent une marge supérieure et une
110
+ * marge inférieure égales. Du coup, on ne reconnait pas au premier coup d'œil que le titre se
111
+ * rapporte au texte qui le suit. Le style proposé corrige ce défaut. Pour retrouver le style par
112
+ * défaut des navigateurs, utilisez un margin: 1em 0;.
113
+ *
114
+ * 6. Dans les styles par défaut des navigateurs, les titres sont en gras. Si vous souhaitez une
115
+ * graisse normale pour la plupart de vos titres, utilisez plutôt font-weight: normal.
116
+ *
117
+ * 7. On utilise des em afin que les marges des paragraphes soient proportionnelles à la taille du
118
+ * texte, ce que ne font pas tous les navigateurs (notamment IE). On utilise une valeur de .75em,
119
+ * soit des retraits entre les paragraphes un peu plus faibles que ceux utilisés par défaut par
120
+ * les navigateurs. À modifier selon vos besoins.
121
+ *
122
+ * 8. Ces styles correspondent aux valeurs par défaut des navigateurs, mais vous voudrez peut-être
123
+ * les modifier pour votre projet.
124
+ *
125
+ * 9. Les éléments de formulaires sont assez difficiles à mettre en forme et à positionner. De plus,
126
+ * l'alignement vertical des boutons, cases à cocher et autres listes déroulantes est parfois
127
+ * difficile à gérer. Vu les différences de comportement entre navigateurs, il n'y a pas de
128
+ * solution parfaite, mais utiliser un alignement vertical centré dans la hauteur de ligne permet
129
+ * d'avoir un rendu décent avec tous les navigateurs.
130
+ */
@@ -0,0 +1 @@
1
+ /* Write your rules */
@@ -0,0 +1 @@
1
+ /* Write your rules */
@@ -0,0 +1 @@
1
+ /* Write your rules */
@@ -0,0 +1,3 @@
1
+ @import "reset.css";
2
+ @import "base.css";
3
+ @import "fonts.css";
@@ -0,0 +1,80 @@
1
+ /*
2
+ Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.com/yui/license.html
5
+ version: 3.3.0
6
+ build: 3167
7
+ */
8
+ /* base.css, part of YUI's CSS Foundation */
9
+ h1 {
10
+ /*18px via YUI Fonts CSS foundation*/
11
+ font-size:138.5%;
12
+ }
13
+ h2 {
14
+ /*16px via YUI Fonts CSS foundation*/
15
+ font-size:123.1%;
16
+ }
17
+ h3 {
18
+ /*14px via YUI Fonts CSS foundation*/
19
+ font-size:108%;
20
+ }
21
+ h1,h2,h3 {
22
+ /* top & bottom margin based on font size */
23
+ margin:1em 0;
24
+ }
25
+ h1,h2,h3,h4,h5,h6,strong {
26
+ /*bringing boldness back to headers and the strong element*/
27
+ font-weight:bold;
28
+ }
29
+ abbr,acronym {
30
+ /*indicating to users that more info is available */
31
+ border-bottom:1px dotted #000;
32
+ cursor:help;
33
+ }
34
+ em {
35
+ /*bringing italics back to the em element*/
36
+ font-style:italic;
37
+ }
38
+ blockquote,ul,ol,dl {
39
+ /*giving blockquotes and lists room to breath*/
40
+ margin:1em;
41
+ }
42
+ ol,ul,dl {
43
+ /*bringing lists on to the page with breathing room */
44
+ margin-left:2em;
45
+ }
46
+ ol li {
47
+ /*giving OL's LIs generated numbers*/
48
+ list-style: decimal outside;
49
+ }
50
+ ul li {
51
+ /*giving UL's LIs generated disc markers*/
52
+ list-style: disc outside;
53
+ }
54
+ dl dd {
55
+ /*providing spacing for definition terms*/
56
+ margin-left:1em;
57
+ }
58
+ th,td {
59
+ /*borders and padding to make the table readable*/
60
+ border:1px solid #000;
61
+ padding:.5em;
62
+ }
63
+ th {
64
+ /*distinguishing table headers from data cells*/
65
+ font-weight:bold;
66
+ text-align:center;
67
+ }
68
+ caption {
69
+ /*coordinated margin to match cell's padding*/
70
+ margin-bottom:.5em;
71
+ /*centered so it doesn't blend in to other content*/
72
+ text-align:center;
73
+ }
74
+ p,fieldset,table,pre {
75
+ /*so things don't run into each other*/
76
+ margin-bottom:1em;
77
+ }
78
+ /* setting a consistent width, 160px;
79
+ control of type=file still not possible */
80
+ input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
@@ -0,0 +1,47 @@
1
+ /*
2
+ Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.com/yui/license.html
5
+ version: 3.3.0
6
+ build: 3167
7
+ */
8
+ /**
9
+ * Percents could work for IE, but for backCompat purposes, we are using keywords.
10
+ * x-small is for IE6/7 quirks mode.
11
+ */
12
+ body {
13
+ font:13px/1.231 arial,helvetica,clean,sans-serif;
14
+ *font-size:small; /* for IE */
15
+ *font:x-small; /* for IE in quirks mode */
16
+ }
17
+
18
+ /**
19
+ * Nudge down to get to 13px equivalent for these form elements
20
+ */
21
+ select,
22
+ input,
23
+ button,
24
+ textarea {
25
+ font:99% arial,helvetica,clean,sans-serif;
26
+ }
27
+
28
+ /**
29
+ * To help tables remember to inherit
30
+ */
31
+ table {
32
+ font-size:inherit;
33
+ font:100%;
34
+ }
35
+
36
+ /**
37
+ * Bump up IE to get to 13px equivalent for these fixed-width elements
38
+ */
39
+ pre,
40
+ code,
41
+ kbd,
42
+ samp,
43
+ tt {
44
+ font-family:monospace;
45
+ *font-size:108%;
46
+ line-height:100%;
47
+ }
@@ -0,0 +1,126 @@
1
+ /*
2
+ Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.com/yui/license.html
5
+ version: 3.3.0
6
+ build: 3167
7
+ */
8
+ /*
9
+ TODO will need to remove settings on HTML since we can't namespace it.
10
+ TODO with the prefix, should I group by selector or property for weight savings?
11
+ */
12
+ html{
13
+ color:#000;
14
+ background:#FFF;
15
+ }
16
+ /*
17
+ TODO remove settings on BODY since we can't namespace it.
18
+ */
19
+ /*
20
+ TODO test putting a class on HEAD.
21
+ - Fails on FF.
22
+ */
23
+ body,
24
+ div,
25
+ dl,
26
+ dt,
27
+ dd,
28
+ ul,
29
+ ol,
30
+ li,
31
+ h1,
32
+ h2,
33
+ h3,
34
+ h4,
35
+ h5,
36
+ h6,
37
+ pre,
38
+ code,
39
+ form,
40
+ fieldset,
41
+ legend,
42
+ input,
43
+ textarea,
44
+ p,
45
+ blockquote,
46
+ th,
47
+ td {
48
+ margin:0;
49
+ padding:0;
50
+ }
51
+ table {
52
+ border-collapse:collapse;
53
+ border-spacing:0;
54
+ }
55
+ fieldset,
56
+ img {
57
+ border:0;
58
+ }
59
+ /*
60
+ TODO think about hanlding inheritence differently, maybe letting IE6 fail a bit...
61
+ */
62
+ address,
63
+ caption,
64
+ cite,
65
+ code,
66
+ dfn,
67
+ em,
68
+ strong,
69
+ th,
70
+ var {
71
+ font-style:normal;
72
+ font-weight:normal;
73
+ }
74
+ /*
75
+ TODO Figure out where this list-style rule is best set. Hedger has a request to investigate.
76
+ */
77
+ li {
78
+ list-style:none;
79
+ }
80
+
81
+ caption,
82
+ th {
83
+ text-align:left;
84
+ }
85
+ h1,
86
+ h2,
87
+ h3,
88
+ h4,
89
+ h5,
90
+ h6 {
91
+ font-size:100%;
92
+ font-weight:normal;
93
+ }
94
+ q:before,
95
+ q:after {
96
+ content:'';
97
+ }
98
+ abbr,
99
+ acronym {
100
+ border:0;
101
+ font-variant:normal;
102
+ }
103
+ /* to preserve line-height and selector appearance */
104
+ sup {
105
+ vertical-align:text-top;
106
+ }
107
+ sub {
108
+ vertical-align:text-bottom;
109
+ }
110
+ input,
111
+ textarea,
112
+ select {
113
+ font-family:inherit;
114
+ font-size:inherit;
115
+ font-weight:inherit;
116
+ }
117
+ /*to enable resizing for IE*/
118
+ input,
119
+ textarea,
120
+ select {
121
+ *font-size:100%;
122
+ }
123
+ /*because legend doesn't inherit in IE */
124
+ legend {
125
+ color:#000;
126
+ }
@@ -5,8 +5,12 @@
5
5
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
6
  <head>
7
7
  <title>Genit - Static web site framework</title>
8
+ <link rel="stylesheet" type="text/css" media="all" href="styles/alsa/all.css" />
9
+ <link rel="stylesheet" type="text/css" media="screen" href="styles/screen.css" />
10
+ <link rel="stylesheet" type="text/css" media="print" href="styles/print.css" />
8
11
  </head>
9
12
  <body>
13
+ <genit class="menu" />
10
14
  <genit class="pages" />
11
15
  </body>
12
16
  </html>
@@ -0,0 +1,5 @@
1
+ <ul id="menu">
2
+ <li><a href="index.html">home</a></li>
3
+ <li><a href="help.html">help</a></li>
4
+ </ul>
5
+
@@ -3,7 +3,10 @@
3
3
  require 'genit/project_creator'
4
4
 
5
5
  require 'genit/html_document'
6
+ require 'genit/xml_document'
7
+ require 'genit/document_writer'
6
8
  require 'genit/compiler'
9
+ require 'genit/page_compiler'
7
10
  require 'genit/builder'
8
11
 
9
12
  module Genit
@@ -9,7 +9,7 @@ module Genit
9
9
 
10
10
  # Public: Constructor.
11
11
  #
12
- # document - A Nokogiri::HTML document
12
+ # document - A Nokogiri::XML::Document
13
13
  def initialize document
14
14
  @document = document
15
15
  end
@@ -24,13 +24,36 @@ module Genit
24
24
  #
25
25
  # doc = builder.replace('genit.pages', "<working />")
26
26
  #
27
- # Return the changed Nokogiri::HTML document.
27
+ # Return the updated Nokogiri::XML::Document document.
28
28
  def replace css_rule, replacement
29
29
  tag = @document.at_css(css_rule)
30
30
  tag.replace replacement
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
+
34
57
  end
35
58
 
36
59
  end
@@ -1,8 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require 'fileutils'
4
+
3
5
  module Genit
4
6
 
5
- # Build the web site.
7
+ # Web site "compiler".
6
8
  class Compiler
7
9
 
8
10
  # Public: Constructor.
@@ -12,37 +14,31 @@ module Genit
12
14
  @working_dir = working_dir
13
15
  end
14
16
 
15
- # Public: Build the web site.
17
+ # Public: Compile the web site.
16
18
  def compile
17
- Dir.foreach(File.join(@working_dir, 'pages')) do |file|
18
- next if (file == ".") or (file == "..")
19
- process file
20
- end
19
+ compile_pages
20
+ FileUtils.cp_r File.join(@working_dir, 'styles'), File.join(@working_dir, 'www')
21
21
  end
22
22
 
23
23
  private
24
24
 
25
- def process file
26
- load_files file
27
- build_file
28
- write_file file
29
- end
30
-
31
- def load_files file
32
- @template = HtmlDocument.open(File.join(@working_dir, 'templates/main.html'))
33
- @page_content = HtmlDocument.open_as_string(File.join(@working_dir, 'pages', file))
25
+ def compile_pages
26
+ Dir.foreach(File.join(@working_dir, 'pages')) do |file|
27
+ next if (file == ".") or (file == "..")
28
+ @filename = file
29
+ compile_page
30
+ end
34
31
  end
35
32
 
36
- def build_file
37
- builder = Builder.new(@template)
38
- @template = builder.replace('genit.pages', @page_content)
33
+ def compile_page
34
+ pc = PageCompiler.new @working_dir, @filename
35
+ @template = pc.compile
36
+ save_file_as_html
39
37
  end
40
38
 
41
- def write_file file
42
- file.gsub! /\.markdown$/, '.html'
43
- File.open(File.join(@working_dir, 'www', file), "w") do |out|
44
- out.puts @template.to_html
45
- end
39
+ def save_file_as_html
40
+ doc_writer = DocumentWriter.new @working_dir
41
+ doc_writer.save_as_html @template, @filename
46
42
  end
47
43
 
48
44
  end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'fileutils'
4
+
5
+ module Genit
6
+
7
+ # Write an html or xml document.
8
+ class DocumentWriter
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
+ # Save the document as an html file.
18
+ #
19
+ # document - A Nokogiri::HTML or Nokogiri::XML document
20
+ # filename - The String name of the future saved document
21
+ def save_as_html document, filename
22
+ filename.gsub! /\.markdown$/, '.html'
23
+ File.open(File.join(@working_dir, 'www', filename), "w") do |out|
24
+ out.puts document.to_html
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -10,9 +10,9 @@ module Genit
10
10
 
11
11
  # Public: Open a html document.
12
12
  #
13
- # file - Full path String filename
13
+ # file - Full path String filename.
14
14
  #
15
- # Returns a Nokogiri::HTML document
15
+ # Returns a Nokogiri::HTML document.
16
16
  def self.open file
17
17
  Nokogiri::HTML(File.open(file))
18
18
  end
@@ -21,13 +21,22 @@ module Genit
21
21
  #
22
22
  # file - Full path String name of a html or markdown file.
23
23
  #
24
- # Returns a String
24
+ # Returns a String.
25
25
  def self.open_as_string file
26
26
  string = IO.read file
27
27
  string = BlueCloth.new(string).to_html if file.end_with? '.markdown'
28
28
  string
29
29
  end
30
30
 
31
+ # Public: Get the list of <genit> tag in a document.
32
+ #
33
+ # file - Nokogiri::HTML document.
34
+ #
35
+ # Returns a list of Nokogiri::XML::NodeSet.
36
+ def self.genit_tags_from file
37
+ file.css "genit"
38
+ end
39
+
31
40
  end
32
41
 
33
42
  end
@@ -0,0 +1,63 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'fileutils'
4
+
5
+ module Genit
6
+
7
+ # Compile a single page.
8
+ class PageCompiler
9
+
10
+ # Public: Constructor.
11
+ #
12
+ # working_dir - The String working directory, where live the project.
13
+ # filename - The String name of the page
14
+ def initialize working_dir, filename
15
+ @working_dir = working_dir
16
+ @filename = filename
17
+ @template = HtmlDocument.open(File.join(@working_dir, 'templates/main.html'))
18
+ end
19
+
20
+ # Public: Compile the page.
21
+ #
22
+ # Returns a Nokogiri::HTML document.
23
+ def compile
24
+ genit_tags = HtmlDocument.genit_tags_from @template
25
+ genit_tags.each {|tag| process_tag tag }
26
+ @template
27
+ end
28
+
29
+ private
30
+
31
+ def process_tag tag
32
+ case tag['class']
33
+ when 'pages' then tag_pages
34
+ when 'menu' then tag_menu
35
+ end
36
+ end
37
+
38
+ # Remplace la page au sein du template
39
+ def tag_pages
40
+ @page_content = HtmlDocument.open_as_string(File.join(@working_dir, 'pages', @filename))
41
+ builder = Builder.new(@template)
42
+ @template = builder.replace('genit.pages', @page_content)
43
+ end
44
+
45
+ def tag_menu
46
+ build_menu
47
+ replace_menu_into_template
48
+ end
49
+
50
+ def build_menu
51
+ menu = XmlDocument.open(File.join(@working_dir, "templates/menu.html"))
52
+ builder = Builder.new(menu)
53
+ @menu = builder.select_menu(@filename)
54
+ end
55
+
56
+ def replace_menu_into_template
57
+ builder = Builder.new(@template)
58
+ @template = builder.replace('genit.menu', @menu.to_html)
59
+ end
60
+
61
+ end
62
+
63
+ end
@@ -22,8 +22,11 @@ module Genit
22
22
  begin
23
23
  FileUtils.makedirs @name
24
24
  create_dirs ['news', 'pages', 'scripts', 'styles', 'templates', 'www']
25
- create_dirs ['styles/css', 'styles/css/alsa', 'styles/css/yui', 'styles/images']
26
- copy_files ['templates/main.html', 'pages/index.html']
25
+ create_dirs ['styles/alsa', 'styles/yui', 'styles/images']
26
+ copy_files ['templates/main.html', 'templates/menu.html',
27
+ 'pages/index.html', 'styles/handheld.css', 'styles/print.css',
28
+ 'styles/screen.css', 'styles/alsa/all.css', 'styles/yui/all.css', 'styles/yui/base.css',
29
+ 'styles/yui/fonts.css', 'styles/yui/reset.css']
27
30
  rescue SystemCallError
28
31
  puts "Cannot create project..."
29
32
  end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'nokogiri'
4
+ require 'bluecloth'
5
+
6
+ module Genit
7
+
8
+ # Open an xml file.
9
+ class XmlDocument
10
+
11
+ # Public: Open an xml document.
12
+ #
13
+ # file - Full path String filename.
14
+ #
15
+ # Returns a Nokogiri::XML document.
16
+ def self.open file
17
+ Nokogiri::XML(File.open(file))
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -14,4 +14,12 @@ describe Builder do
14
14
  doc.css("body working").size.should == 1
15
15
  end
16
16
 
17
+ it "should set the menu" do
18
+ menu = Nokogiri::XML(File.open("data/templates/menu.html"))
19
+ builder = Builder.new(menu)
20
+ menu = builder.select_menu('index.html')
21
+ menu.css("ul#menu a#selected").size.should == 1
22
+ menu.css("ul#menu a#selected").first['href'].should == 'index.html'
23
+ end
24
+
17
25
  end
@@ -32,4 +32,14 @@ describe Compiler do
32
32
  File.exist?('spec/project-name/www/doc.html').should == true
33
33
  end
34
34
 
35
+ it "should copy the styles/ into www/" do
36
+ File.exist?('spec/project-name/www/styles/screen.css').should be_true
37
+ end
38
+
39
+ it "should set the menu in index page" do
40
+ @compiler.compile
41
+ doc = Nokogiri::HTML(File.open("spec/project-name/www/index.html"))
42
+ doc.at_css("ul#menu a#selected")['href'].should == 'index.html'
43
+ end
44
+
35
45
  end
@@ -20,4 +20,10 @@ describe HtmlDocument do
20
20
  content.should == '<h1>title</h1>'
21
21
  end
22
22
 
23
+ it "should extract the list of genit tags" do
24
+ doc = HtmlDocument.open("data/templates/main.html")
25
+ tags = HtmlDocument.genit_tags_from doc
26
+ tags.size.should == 2
27
+ end
28
+
23
29
  end
@@ -12,15 +12,18 @@ describe "Nokogiri library" do
12
12
  end
13
13
 
14
14
  it "should retrieve all genit tag" do
15
- @doc.css("body genit").size.should == 1
15
+ @doc.css("body genit").size.should == 2
16
16
  end
17
17
 
18
- it "should retrieve a tag" do
19
- @doc.at_css("body genit").to_s.should == '<genit class="pages"></genit>'
18
+ it "should retrieve class of tag" do
19
+ tags = @doc.css("body genit")
20
+ tags[0]['class'].should == "menu"
21
+ tags[1]['class'].should == "pages"
20
22
  end
21
23
 
22
- it "should retrieve class of tag" do
23
- @doc.at_css("body genit")['class'].should == "pages"
24
+ it "should add an attribute" do
25
+ @doc.at_css("body")['class'] = "main"
26
+ @doc.at_css("body")['class'].should == 'main'
24
27
  end
25
28
 
26
29
  end
@@ -49,16 +49,12 @@ describe ProjectCreator do
49
49
  File.exist?('spec/project-name/www').should == true
50
50
  end
51
51
 
52
- it "should create a css folder inside the styles" do
53
- File.exist?('spec/project-name/styles/css').should == true
52
+ it "should create a alsa folder inside the styles" do
53
+ File.exist?('spec/project-name/styles/alsa').should == true
54
54
  end
55
55
 
56
- it "should create a css/alsa folder inside the styles" do
57
- File.exist?('spec/project-name/styles/css/alsa').should == true
58
- end
59
-
60
- it "should create a css/yui folder inside the styles" do
61
- File.exist?('spec/project-name/styles/css/yui').should == true
56
+ it "should create a yui folder inside the styles" do
57
+ File.exist?('spec/project-name/styles/yui').should == true
62
58
  end
63
59
 
64
60
  it "should create a images folder inside the styles" do
@@ -67,16 +63,28 @@ describe ProjectCreator do
67
63
 
68
64
  end # "Folder structure"
69
65
 
70
- describe "The files" do
66
+
71
67
 
68
+ describe "The templates folder" do
72
69
  it "should have got templates/main.html" do
73
70
  File.exist?('data/templates/main.html').should be_true
74
71
  end
75
-
72
+
76
73
  it "should copy templates/main.html" do
77
74
  File.exist?('spec/project-name/templates/main.html').should be_true
78
75
  end
76
+
77
+ it "should have got templates/menu.html" do
78
+ File.exist?('data/templates/menu.html').should be_true
79
+ end
79
80
 
81
+ it "should copy templates/menu.html" do
82
+ File.exist?('spec/project-name/templates/menu.html').should be_true
83
+ end
84
+
85
+ end # "The templates folder"
86
+
87
+ describe "The pages folder" do
80
88
  it "should have got pages/index.html" do
81
89
  File.exist?('data/pages/index.html').should be_true
82
90
  end
@@ -84,7 +92,75 @@ describe ProjectCreator do
84
92
  it "should copy pages/index.html" do
85
93
  File.exist?('spec/project-name/pages/index.html').should be_true
86
94
  end
95
+ end # "The pages folder"
96
+
97
+ describe "The styles folder" do
98
+ it "should have got styles/handheld.css" do
99
+ File.exist?('data/styles/handheld.css').should be_true
100
+ end
101
+
102
+ it "should copy styles/handheld.css" do
103
+ File.exist?('spec/project-name/styles/handheld.css').should be_true
104
+ end
105
+
106
+ it "should have got styles/print.css" do
107
+ File.exist?('data/styles/print.css').should be_true
108
+ end
109
+
110
+ it "should copy styles/print.css" do
111
+ File.exist?('spec/project-name/styles/print.css').should be_true
112
+ end
113
+
114
+ it "should have got styles/screen.css" do
115
+ File.exist?('data/styles/screen.css').should be_true
116
+ end
117
+
118
+ it "should copy styles/screen.css" do
119
+ File.exist?('spec/project-name/styles/screen.css').should be_true
120
+ end
87
121
 
88
- end # "The files"
122
+ it "should have got styles/alsa/all.css" do
123
+ File.exist?('data/styles/alsa/all.css').should be_true
124
+ end
125
+
126
+ it "should copy styles/alsa/all.css" do
127
+ File.exist?('spec/project-name/styles/alsa/all.css').should be_true
128
+ end
129
+
130
+ it "should have got styles/yui/all.css" do
131
+ File.exist?('data/styles/yui/all.css').should be_true
132
+ end
133
+
134
+ it "should copy styles/yui/all.css" do
135
+ File.exist?('spec/project-name/styles/yui/all.css').should be_true
136
+ end
137
+
138
+ it "should have got styles/yui/base.css" do
139
+ File.exist?('data/styles/yui/base.css').should be_true
140
+ end
141
+
142
+ it "should copy styles/yui/base.css" do
143
+ File.exist?('spec/project-name/styles/yui/base.css').should be_true
144
+ end
145
+
146
+ it "should have got styles/yui/fonts.css" do
147
+ File.exist?('data/styles/yui/fonts.css').should be_true
148
+ end
149
+
150
+ it "should copy styles/yui/fonts.css" do
151
+ File.exist?('spec/project-name/styles/yui/fonts.css').should be_true
152
+ end
153
+
154
+ it "should have got styles/yui/reset.css" do
155
+ File.exist?('data/styles/yui/reset.css').should be_true
156
+ end
157
+
158
+ it "should copy styles/yui/reset.css" do
159
+ File.exist?('spec/project-name/styles/yui/reset.css').should be_true
160
+ end
161
+
162
+ end # "The styles folder"
163
+
164
+
89
165
 
90
166
  end
@@ -0,0 +1,12 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require './spec/helper'
4
+
5
+ describe XmlDocument do
6
+
7
+ it "should load as a document" do
8
+ doc = XmlDocument.open("data/templates/menu.html")
9
+ doc.css("ul#menu li").size.should >= 1
10
+ end
11
+
12
+ 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.1'
4
+ version: '0.2'
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-06-25 00:00:00.000000000 +02:00
12
+ date: 2011-07-02 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: &82179570 !ruby/object:Gem::Requirement
17
+ requirement: &82395440 !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: *82179570
25
+ version_requirements: *82395440
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &82179260 !ruby/object:Gem::Requirement
28
+ requirement: &82395100 !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: *82179260
36
+ version_requirements: *82395100
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bluecloth
39
- requirement: &82178960 !ruby/object:Gem::Requirement
39
+ requirement: &82394760 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: 2.1.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *82178960
47
+ version_requirements: *82394760
48
48
  description: ! "Genit builds a **static web site**, that is a web site without server
49
49
  side \nprograming language and database. The site consists only of xhtml code (+
50
50
  css and medias) and \neventually of javascript. It is a command line framework,
@@ -60,10 +60,22 @@ files:
60
60
  - lib/genit/project_creator.rb
61
61
  - lib/genit/html_document.rb
62
62
  - lib/genit/builder.rb
63
+ - lib/genit/xml_document.rb
64
+ - lib/genit/page_compiler.rb
63
65
  - lib/genit/compiler.rb
66
+ - lib/genit/document_writer.rb
64
67
  - lib/genit.rb
65
68
  - bin/genit
69
+ - data/templates/menu.html
66
70
  - data/templates/main.html
71
+ - data/styles/handheld.css
72
+ - data/styles/print.css
73
+ - data/styles/alsa/all.css
74
+ - data/styles/screen.css
75
+ - data/styles/yui/reset.css
76
+ - data/styles/yui/all.css
77
+ - data/styles/yui/base.css
78
+ - data/styles/yui/fonts.css
67
79
  - data/pages/index.html
68
80
  - spec/compiler_spec.rb
69
81
  - spec/builder_spec.rb
@@ -73,6 +85,7 @@ files:
73
85
  - spec/project_creator_spec.rb
74
86
  - spec/bluecloth_spec.rb
75
87
  - spec/test-files/test.markdown
88
+ - spec/xml_document_spec.rb
76
89
  - VERSION
77
90
  - NEWS
78
91
  - README.markdown