genit 0.9 → 0.99
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +5 -0
- data/TODO +0 -42
- data/VERSION +1 -1
- data/lib/genit/project.rb +1 -0
- data/lib/genit/project/compiler.rb +16 -3
- data/lib/genit/project/page_compiler.rb +6 -6
- data/lib/genit/project/project_creator.rb +36 -12
- data/lib/genit/project/rss_feed.rb +97 -0
- data/lib/genit/tags/class_news_tag.rb +10 -13
- data/lib/genit/utils.rb +1 -0
- data/lib/genit/utils/news_utils.rb +14 -0
- data/spec/compiler_spec.rb +38 -26
- data/spec/project_creator_spec.rb +28 -0
- metadata +12 -10
data/NEWS
CHANGED
data/TODO
CHANGED
@@ -1,45 +1,3 @@
|
|
1
1
|
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
BUG
|
6
|
-
==================
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
LES NEWS
|
12
|
-
====================
|
13
|
-
|
14
|
-
D'abord simple, en html et en markdown:
|
15
|
-
|
16
|
-
<genit class="news" number="4" />
|
17
|
-
<genit class="news" />
|
18
|
-
|
19
|
-
|
20
|
-
Puis avec un wrapper:
|
21
|
-
|
22
|
-
<genit class="news" number="4" wrapper="a_news" />
|
23
|
-
<genit class="news" wrapper="a_news" />
|
24
|
-
|
25
|
-
|
26
|
-
TAG HERE & WHAT remplacent var
|
27
|
-
===============================
|
28
|
-
|
29
|
-
DOSSIER PUBLIC
|
30
|
-
================================
|
31
|
-
|
32
|
-
SCRIPTS
|
33
|
-
=============================
|
34
|
-
|
35
|
-
Les liens <img src> doivent être relativisés (comme les <a>)
|
36
|
-
============================================================
|
37
|
-
|
38
|
-
les scripts doivent être relativisés
|
39
|
-
==========================================================
|
40
|
-
|
41
|
-
switch --empty pour commande create
|
42
|
-
======================================
|
43
|
-
|
44
|
-
supprimer le contenu de www/ avant compilation
|
45
|
-
==================================================
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.99
|
data/lib/genit/project.rb
CHANGED
@@ -41,9 +41,8 @@ module Genit
|
|
41
41
|
|
42
42
|
def compile_site
|
43
43
|
compile_pages
|
44
|
-
|
45
|
-
|
46
|
-
FileUtils.cp_r File.join(@working_dir, 'scripts'), File.join(@working_dir, 'www')
|
44
|
+
copy_static_content
|
45
|
+
create_rss_feed
|
47
46
|
end
|
48
47
|
|
49
48
|
def compile_pages
|
@@ -65,6 +64,20 @@ module Genit
|
|
65
64
|
doc_writer.save_as_xhtml @page, @filename
|
66
65
|
end
|
67
66
|
|
67
|
+
def copy_static_content
|
68
|
+
destination = File.join(@working_dir, 'www')
|
69
|
+
FileUtils.cp_r File.join(@working_dir, 'styles'), destination
|
70
|
+
FileUtils.cp_r File.join(@working_dir, 'public'), destination
|
71
|
+
FileUtils.cp_r File.join(@working_dir, 'scripts'), destination
|
72
|
+
end
|
73
|
+
|
74
|
+
def create_rss_feed
|
75
|
+
all_news_files = Dir.glob(File.join(@working_dir, 'news', '*')).sort.reverse
|
76
|
+
config_file = YAML.load_file(File.join(@working_dir, '.config'))
|
77
|
+
return unless config_file[:rss]
|
78
|
+
RssFeed.new(@working_dir, all_news_files, config_file).generate_rss
|
79
|
+
end
|
80
|
+
|
68
81
|
end
|
69
82
|
|
70
83
|
end
|
@@ -37,12 +37,12 @@ module Genit
|
|
37
37
|
# ai un jour besoin de faire une boucle du genre :
|
38
38
|
# "Tant qu'il reste des tags"
|
39
39
|
2.times { replace_all_genit_tags }
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
@template =
|
40
|
+
build BodyLinkBuilder
|
41
|
+
build ImgBuilder
|
42
|
+
end
|
43
|
+
|
44
|
+
def build a_class
|
45
|
+
@template = a_class.new(@template).build_for_page(@filename)
|
46
46
|
end
|
47
47
|
|
48
48
|
def replace_all_genit_tags
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
require "fileutils"
|
4
|
+
require "yaml"
|
4
5
|
|
5
6
|
module Genit
|
6
7
|
|
@@ -13,7 +14,7 @@ module Genit
|
|
13
14
|
# doctype - The String document type definition.
|
14
15
|
# empty - A Boolean telling if we produce a smoke test or not.
|
15
16
|
def initialize name, doctype, empty
|
16
|
-
@
|
17
|
+
@project_name = name
|
17
18
|
@doctype = doctype
|
18
19
|
@empty = empty
|
19
20
|
end
|
@@ -33,16 +34,34 @@ module Genit
|
|
33
34
|
private
|
34
35
|
|
35
36
|
def create_the_project
|
36
|
-
|
37
|
-
|
37
|
+
create_the_project_folders
|
38
|
+
copy_the_project_files
|
39
|
+
create_the_project_config
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_the_project_folders
|
43
|
+
FileUtils.makedirs @project_name
|
44
|
+
create_subfolders ['fragments', 'news', 'pages', 'scripts', 'styles', 'templates', 'www',
|
38
45
|
'styles/alsa', 'styles/yui', 'styles/images', 'public']
|
46
|
+
end
|
47
|
+
|
48
|
+
def copy_the_project_files
|
39
49
|
copy_main_template
|
40
50
|
copy_files ['templates/menu.html', 'styles/handheld.css', 'styles/print.css',
|
41
51
|
'styles/alsa/all.css', 'styles/yui/all.css', 'styles/yui/base.css',
|
42
52
|
'styles/yui/fonts.css', 'styles/yui/reset.css']
|
43
53
|
copy_index
|
44
54
|
copy_screen_css
|
45
|
-
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_the_project_config
|
58
|
+
FileUtils.touch "#{@project_name}/.genit"
|
59
|
+
config_file = { :address => 'http://www.example.com',
|
60
|
+
:rss => true,
|
61
|
+
:rss_title => 'RSS TITLE',
|
62
|
+
:rss_description => 'RSS DESCRIPTION'}.to_yaml
|
63
|
+
dest = File.join @project_name, '.config'
|
64
|
+
File.open(dest, "w") {|out| out.puts config_file }
|
46
65
|
end
|
47
66
|
|
48
67
|
# Create some subfolders inside the project folder.
|
@@ -51,13 +70,13 @@ module Genit
|
|
51
70
|
#
|
52
71
|
# Examples
|
53
72
|
#
|
54
|
-
#
|
73
|
+
# create_subfolders ['styles', 'scripts']
|
55
74
|
#
|
56
|
-
#
|
75
|
+
# create_subfolders ['styles/css/alsa', 'styles/css/yui', 'styles/css/images']
|
57
76
|
#
|
58
77
|
# Returns nothing.
|
59
|
-
def
|
60
|
-
a_array.each {|dir| FileUtils.makedirs File.join(@
|
78
|
+
def create_subfolders a_array
|
79
|
+
a_array.each {|dir| FileUtils.makedirs File.join(@project_name, dir) }
|
61
80
|
end
|
62
81
|
|
63
82
|
# Copy files to project.
|
@@ -72,13 +91,14 @@ module Genit
|
|
72
91
|
def copy_files a_array
|
73
92
|
a_array.each do |file|
|
74
93
|
src = File.join $GENIT_PATH, 'data', file
|
75
|
-
dest = File.join @
|
94
|
+
dest = File.join @project_name, file
|
76
95
|
FileUtils.cp src, dest
|
77
96
|
end
|
78
97
|
end
|
79
98
|
|
99
|
+
# @TODO document
|
80
100
|
def copy_index
|
81
|
-
dest = File.join @
|
101
|
+
dest = File.join @project_name, 'pages/index.html'
|
82
102
|
if @empty
|
83
103
|
src = File.join $GENIT_PATH, 'data/pages/index2.html'
|
84
104
|
else
|
@@ -87,8 +107,9 @@ module Genit
|
|
87
107
|
FileUtils.cp src, dest
|
88
108
|
end
|
89
109
|
|
110
|
+
# @TODO document
|
90
111
|
def copy_screen_css
|
91
|
-
dest = File.join @
|
112
|
+
dest = File.join @project_name, 'styles/screen.css'
|
92
113
|
if @empty
|
93
114
|
FileUtils.touch dest
|
94
115
|
else
|
@@ -97,17 +118,20 @@ module Genit
|
|
97
118
|
end
|
98
119
|
end
|
99
120
|
|
121
|
+
# @TODO document
|
100
122
|
def copy_main_template
|
101
|
-
dest = File.join @
|
123
|
+
dest = File.join @project_name, 'templates', 'main.html'
|
102
124
|
copy_first_part dest
|
103
125
|
ProjectCreator.append_last_part dest
|
104
126
|
end
|
105
127
|
|
128
|
+
# @TODO document
|
106
129
|
def copy_first_part dest
|
107
130
|
src = File.join $GENIT_PATH, 'data', 'templates', @doctype
|
108
131
|
FileUtils.cp src, dest
|
109
132
|
end
|
110
133
|
|
134
|
+
# @TODO document
|
111
135
|
def self.append_last_part dest
|
112
136
|
src = File.join $GENIT_PATH, 'data', 'templates', 'main.html'
|
113
137
|
content = File.open(src, "r").read
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'rss/maker'
|
4
|
+
|
5
|
+
module Genit
|
6
|
+
|
7
|
+
# RssFeed could generate the RSS (version 2.0) file of the project.
|
8
|
+
# To generate the RSS file, we need data from the project config
|
9
|
+
# file (.config) and the list of the news.
|
10
|
+
class RssFeed
|
11
|
+
|
12
|
+
# Public: Constructor.
|
13
|
+
#
|
14
|
+
# working_dir - The String working directory, where live the project.
|
15
|
+
# news_files - An Array filled with the full path name
|
16
|
+
# of the news files
|
17
|
+
# config - A Hash representing the project config file (.config)
|
18
|
+
def initialize working_dir, news_files, config
|
19
|
+
@working_dir = working_dir
|
20
|
+
@news_files = news_files
|
21
|
+
@config = config
|
22
|
+
@destination = File.join(@working_dir, 'www', 'rss.xml')
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: Generate the RSS file (named rss.xml) at the web site
|
26
|
+
# root (www/).
|
27
|
+
def generate_rss
|
28
|
+
content = RSS::Maker.make("2.0") do |feed|
|
29
|
+
RssFeedMeta.fill feed, @config
|
30
|
+
RssFeedItems.new(feed, @news_files, @config).fill
|
31
|
+
end
|
32
|
+
File.open(@destination, "w") { |file| file.write(content) }
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# Meta data of an RSS Field
|
38
|
+
class RssFeedMeta
|
39
|
+
def self.fill feed, config
|
40
|
+
channel = feed.channel
|
41
|
+
channel.title = config[:rss_title]
|
42
|
+
channel.link = config[:address]
|
43
|
+
channel.description = config[:rss_description]
|
44
|
+
feed.items.do_sort = true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Items of an RSS Field
|
49
|
+
class RssFeedItems
|
50
|
+
|
51
|
+
def initialize feed, news_files, config
|
52
|
+
@feed = feed
|
53
|
+
@news_files = news_files
|
54
|
+
@config = config
|
55
|
+
end
|
56
|
+
|
57
|
+
def fill
|
58
|
+
@news_files.each do |news|
|
59
|
+
item = @feed.items.new_item
|
60
|
+
item.title = RssFeedItemTitle.new(news).title
|
61
|
+
item.link = @config[:address]
|
62
|
+
item.date = Time.parse(NewsUtils.get_date_from_filename(news))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
# Retrieve the title element of an item element of an RSS feed
|
69
|
+
# from a news article.
|
70
|
+
class RssFeedItemTitle
|
71
|
+
|
72
|
+
# Public: Get the first title content from a news article.
|
73
|
+
#
|
74
|
+
# We first search for <h1> header level, then <h2>, etc to <h6>.
|
75
|
+
# If the news article doesn't contains any <h*> element, the
|
76
|
+
# title() method returns the ISO date string (yyyy-mm-dd) found
|
77
|
+
# in the news article pathname.
|
78
|
+
#
|
79
|
+
# Returns the String title of the news article.
|
80
|
+
attr_reader :title
|
81
|
+
|
82
|
+
def initialize news_pathname
|
83
|
+
@news_pathname = news_pathname
|
84
|
+
@title = NewsUtils.get_date_from_filename @news_pathname
|
85
|
+
doc = HtmlDocument.open_fragment(@news_pathname)
|
86
|
+
('h1'..'h6').each do |header|
|
87
|
+
tag = doc.at_css(header)
|
88
|
+
if tag
|
89
|
+
@title = tag.inner_html
|
90
|
+
break
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -26,25 +26,22 @@ module Genit
|
|
26
26
|
|
27
27
|
def news_content
|
28
28
|
news_string = ''
|
29
|
-
news_files.each
|
30
|
-
doc = HtmlDocument.open_as_string file
|
31
|
-
if @tag['wrapper']
|
32
|
-
news_string += "<div class='#{@tag['wrapper']}'>" + doc.to_s + '</div>'
|
33
|
-
else
|
34
|
-
news_string += doc.to_s
|
35
|
-
end
|
36
|
-
end
|
29
|
+
news_files.each { |file| news_string += process_the_news(file) }
|
37
30
|
news_string
|
38
31
|
end
|
39
32
|
|
40
33
|
def news_files
|
41
34
|
files = Dir.glob(File.join(@working_dir, 'news', '*')).sort.reverse
|
42
35
|
number = @tag['number']
|
43
|
-
if number
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
36
|
+
return files[0...(number).to_i] if number
|
37
|
+
files
|
38
|
+
end
|
39
|
+
|
40
|
+
def process_the_news file
|
41
|
+
doc_as_string = HtmlDocument.open_as_string(file).to_s
|
42
|
+
wrapper = @tag['wrapper']
|
43
|
+
return "<div class='#{wrapper}'>" + doc_as_string + '</div>' if wrapper
|
44
|
+
doc_as_string
|
48
45
|
end
|
49
46
|
|
50
47
|
end
|
data/lib/genit/utils.rb
CHANGED
data/spec/compiler_spec.rb
CHANGED
@@ -22,14 +22,14 @@ describe Compiler do
|
|
22
22
|
|
23
23
|
it "should build an index.html page in www" do
|
24
24
|
@compiler.compile
|
25
|
-
File.exist?('spec/project-name/www/index.html').should
|
25
|
+
File.exist?('spec/project-name/www/index.html').should be_true
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should build two pages" do
|
29
29
|
write_file 'pages/doc.html', '<h1>documentation</h1>'
|
30
30
|
@compiler.compile
|
31
|
-
File.exist?('spec/project-name/www/index.html').should
|
32
|
-
File.exist?('spec/project-name/www/doc.html').should
|
31
|
+
File.exist?('spec/project-name/www/index.html').should be_true
|
32
|
+
File.exist?('spec/project-name/www/doc.html').should be_true
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should copy the styles/ into www/" do
|
@@ -48,29 +48,41 @@ describe Compiler do
|
|
48
48
|
compiler.compile
|
49
49
|
end
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
51
|
+
describe "RSS feed" do
|
52
|
+
|
53
|
+
it "should build the rss.xml file" do
|
54
|
+
File.exist?('spec/project-name/www/rss.xml').should be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "BUGS" do
|
60
|
+
|
61
|
+
it "should allow template to include a fragment (Bug#37)" do
|
62
|
+
# add a fragment
|
63
|
+
File.open('spec/project-name/fragments/footer.html', "w") {|out| out.puts '<p>footer</p>' }
|
64
|
+
# replace main.html
|
65
|
+
main = %q{
|
66
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
67
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
68
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
69
|
+
<head>
|
70
|
+
<title>Genit - Static web site framework</title>
|
71
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
72
|
+
<link rel="stylesheet" type="text/css" media="all" href="styles/alsa/all.css" />
|
73
|
+
<link rel="stylesheet" type="text/css" media="screen" href="styles/screen.css" />
|
74
|
+
<link rel="stylesheet" type="text/css" media="print" href="styles/print.css" />
|
75
|
+
</head>
|
76
|
+
<body>
|
77
|
+
<genit class="menu" />
|
78
|
+
<genit class="pages" />
|
79
|
+
<genit class="fragment" file="footer.html"/>
|
80
|
+
</body>
|
81
|
+
</html>}
|
82
|
+
File.open('spec/project-name/templates/main.html', "w") {|out| out.puts main }
|
83
|
+
lambda {@compiler.compile}.should_not raise_error
|
84
|
+
end
|
85
|
+
|
74
86
|
end
|
75
87
|
|
76
88
|
end
|
@@ -29,6 +29,34 @@ describe ProjectCreator do
|
|
29
29
|
File.exist?('spec/project-name/.genit').should == true
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should create a config file" do
|
33
|
+
File.exist?('spec/project-name/.config').should == true
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "Config file" do
|
39
|
+
|
40
|
+
before :each do
|
41
|
+
@config_file = YAML.load_file('spec/project-name/.config')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should have an address value of 'http://www.example.com'" do
|
45
|
+
@config_file[:address].should == 'http://www.example.com'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have an rss value at true" do
|
49
|
+
@config_file[:rss].should be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have an rss_title value of 'RSS TITLE'" do
|
53
|
+
@config_file[:rss_title].should == 'RSS TITLE'
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should have an rss_description value of 'RSS DESCRIPTION'" do
|
57
|
+
@config_file[:rss_description].should == 'RSS DESCRIPTION'
|
58
|
+
end
|
59
|
+
|
32
60
|
end
|
33
61
|
|
34
62
|
describe "Folder structure" do
|
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
|
+
version: '0.99'
|
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-09-
|
12
|
+
date: 2011-09-25 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: &
|
17
|
+
requirement: &68826960 !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: *
|
25
|
+
version_requirements: *68826960
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: nokogiri
|
28
|
-
requirement: &
|
28
|
+
requirement: &68826590 !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: *
|
36
|
+
version_requirements: *68826590
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bluecloth
|
39
|
-
requirement: &
|
39
|
+
requirement: &68826230 !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: *
|
47
|
+
version_requirements: *68826230
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: clamp
|
50
|
-
requirement: &
|
50
|
+
requirement: &68825890 !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: *
|
58
|
+
version_requirements: *68825890
|
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,6 +68,7 @@ executables:
|
|
68
68
|
extensions: []
|
69
69
|
extra_rdoc_files: []
|
70
70
|
files:
|
71
|
+
- lib/genit/project/rss_feed.rb
|
71
72
|
- lib/genit/project/project_creator.rb
|
72
73
|
- lib/genit/project/page_compiler.rb
|
73
74
|
- lib/genit/project/compiler.rb
|
@@ -85,6 +86,7 @@ files:
|
|
85
86
|
- lib/genit/documents/fragment.rb
|
86
87
|
- lib/genit/documents/document_writer.rb
|
87
88
|
- lib/genit/utils/file_writer.rb
|
89
|
+
- lib/genit/utils/news_utils.rb
|
88
90
|
- lib/genit/builders.rb
|
89
91
|
- lib/genit/utils.rb
|
90
92
|
- lib/genit/tags/class_menu_tag.rb
|