smartgen 0.1.0
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/ChangeLog.md +4 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +61 -0
- data/README.md +119 -0
- data/Rakefile +8 -0
- data/bin/smartgen +25 -0
- data/lib/smartgen.rb +21 -0
- data/lib/smartgen/configuration.rb +17 -0
- data/lib/smartgen/engines.rb +3 -0
- data/lib/smartgen/engines/base.rb +45 -0
- data/lib/smartgen/engines/markdown.rb +16 -0
- data/lib/smartgen/engines/textile.rb +16 -0
- data/lib/smartgen/generator.rb +104 -0
- data/lib/smartgen/markup_file.rb +47 -0
- data/lib/smartgen/object_hash.rb +41 -0
- data/lib/smartgen/renderers.rb +1 -0
- data/lib/smartgen/renderers/erb.rb +12 -0
- data/lib/smartgen/resource.rb +32 -0
- data/lib/smartgen/version.rb +4 -0
- data/spec/fixtures/expectations/common/another_index.html +13 -0
- data/spec/fixtures/expectations/common/index.html +8 -0
- data/spec/fixtures/expectations/common/other_index.html +13 -0
- data/spec/fixtures/expectations/with_layout/index.html +12 -0
- data/spec/fixtures/expectations/with_layout/index_with_metadata.html +43 -0
- data/spec/fixtures/expectations/with_layout/index_with_specific_metadata.html +44 -0
- data/spec/fixtures/src/assets/images/image.gif +0 -0
- data/spec/fixtures/src/assets/javascripts/somelib.js +2 -0
- data/spec/fixtures/src/assets/stylesheets/style.css +2 -0
- data/spec/fixtures/src/common/another_index.md +12 -0
- data/spec/fixtures/src/common/index.textile +10 -0
- data/spec/fixtures/src/common/other_index.markdown +12 -0
- data/spec/fixtures/src/layout.html.erb +5 -0
- data/spec/fixtures/src/layout_with_metadata.html.erb +22 -0
- data/spec/fixtures/src/layout_with_specific_metadata.html.erb +23 -0
- data/spec/fixtures/src/metadata.yml +43 -0
- data/spec/fixtures/src/with_layout/index.textile +10 -0
- data/spec/fixtures/src/with_layout/index_with_specific_metadata.textile +10 -0
- data/spec/lib/smartgen/configuration_spec.rb +30 -0
- data/spec/lib/smartgen/engines/base_spec.rb +71 -0
- data/spec/lib/smartgen/engines/markdown_spec.rb +23 -0
- data/spec/lib/smartgen/engines/textile_spec.rb +19 -0
- data/spec/lib/smartgen/generator_spec.rb +166 -0
- data/spec/lib/smartgen/markup_file_spec.rb +128 -0
- data/spec/lib/smartgen/object_hash_spec.rb +54 -0
- data/spec/lib/smartgen/renderers/erb_spec.rb +32 -0
- data/spec/lib/smartgen/resource_spec.rb +60 -0
- data/spec/lib/smartgen_spec.rb +18 -0
- data/spec/sandbox/.gitkeep +0 -0
- data/spec/spec_helper.rb +37 -0
- metadata +240 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
require "active_support/inflector"
|
2
|
+
require 'active_support/core_ext/object/blank'
|
3
|
+
|
4
|
+
module Smartgen
|
5
|
+
class MarkupFile
|
6
|
+
attr_accessor :path, :filename, :extension, :engine
|
7
|
+
|
8
|
+
def initialize(path)
|
9
|
+
@path = path
|
10
|
+
@extension = File.extname(path)
|
11
|
+
@filename = File.basename(path, @extension)
|
12
|
+
@engine = engine_for(@extension) || self.class.engines.first
|
13
|
+
end
|
14
|
+
|
15
|
+
def raw_contents
|
16
|
+
File.read(path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def contents
|
20
|
+
engine.process(raw_contents)
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
def engines
|
25
|
+
if @engines.blank?
|
26
|
+
@engines = [Smartgen::Engine::Textile.new, Smartgen::Engine::Markdown.new]
|
27
|
+
end
|
28
|
+
|
29
|
+
@engines
|
30
|
+
end
|
31
|
+
|
32
|
+
def register(engine)
|
33
|
+
engines.unshift engine.new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def engine_for(extension)
|
40
|
+
self.class.engines.each do |engine|
|
41
|
+
return engine if engine.supported?(extension)
|
42
|
+
end
|
43
|
+
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'active_support/core_ext/hash'
|
2
|
+
|
3
|
+
module Smartgen
|
4
|
+
class ObjectHash < HashWithIndifferentAccess
|
5
|
+
def dup
|
6
|
+
Smartgen::ObjectHash.new(self)
|
7
|
+
end
|
8
|
+
|
9
|
+
def respond_to?(method)
|
10
|
+
has_key?(method) or super
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def method_missing(name, *args)
|
15
|
+
if has_key?(name)
|
16
|
+
self[name]
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def convert_value(value)
|
23
|
+
case value
|
24
|
+
when Hash
|
25
|
+
value.with_object_hash
|
26
|
+
when Array
|
27
|
+
value.collect { |e| e.is_a?(Hash) ? e.with_object_hash : e }
|
28
|
+
else
|
29
|
+
value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Hash
|
36
|
+
def with_object_hash
|
37
|
+
hash = Smartgen::ObjectHash.new(self)
|
38
|
+
hash.default = self.default
|
39
|
+
hash
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path('renderers/erb', File.dirname(__FILE__))
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Smartgen
|
2
|
+
class Resource
|
3
|
+
def configure
|
4
|
+
yield config
|
5
|
+
end
|
6
|
+
|
7
|
+
def config
|
8
|
+
@config ||= Smartgen::Configuration.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate!
|
12
|
+
generator.invoke_all
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def generator
|
17
|
+
Smartgen::Generator.new(arguments, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def arguments
|
21
|
+
[config.src_files, config.output_folder]
|
22
|
+
end
|
23
|
+
|
24
|
+
def options
|
25
|
+
{
|
26
|
+
:metadata_file => config.metadata_file,
|
27
|
+
:layout => config.layout,
|
28
|
+
:assets => config.assets
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<html>
|
2
|
+
<body>
|
3
|
+
<h1>Here is some header</h1>
|
4
|
+
<p>And here is a paragraph</p>
|
5
|
+
<ul>
|
6
|
+
<li>some bullet lists with <strong>style</strong></li>
|
7
|
+
<li>some bullet lists with <em>style</em></li>
|
8
|
+
</ul>
|
9
|
+
<h2>Another header</h2>
|
10
|
+
<p>With some text</p>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Common title</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<section id="menu">
|
7
|
+
<dl>
|
8
|
+
|
9
|
+
<dt>Common pages</dt>
|
10
|
+
|
11
|
+
<dd><a href="http://link.com" title="Some description of page">Some page</a></dd>
|
12
|
+
|
13
|
+
<dd><a href="http://index.com" title="Description for index page">Index Page</a></dd>
|
14
|
+
|
15
|
+
<dd><a href="http://other_link.com" title="Some description of other page">Some other page</a></dd>
|
16
|
+
|
17
|
+
<dd><a href="http://another_link.com" title="Some description of another page">Another page</a></dd>
|
18
|
+
|
19
|
+
<hr/>
|
20
|
+
|
21
|
+
<dt>Sample pages</dt>
|
22
|
+
|
23
|
+
<dd><a href="http://sample.com" title="Some description of sample page">Sample page</a></dd>
|
24
|
+
|
25
|
+
<dd><a href="http://sample_link.com" title="Some description of some sample page">Some sample page</a></dd>
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
</dl>
|
30
|
+
</section>
|
31
|
+
|
32
|
+
<section id="contents">
|
33
|
+
<h1>Here is some header</h1>
|
34
|
+
<p>And here is a paragraph</p>
|
35
|
+
<ul>
|
36
|
+
<li>some bullet lists with <strong>style</strong></li>
|
37
|
+
<li>some bullet lists with <em>style</em></li>
|
38
|
+
</ul>
|
39
|
+
<h2>Another header</h2>
|
40
|
+
<p>With some text</p>
|
41
|
+
</section>
|
42
|
+
</body>
|
43
|
+
</html>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Index Page :: Common title</title>
|
4
|
+
<meta name="description" content="Description for index page"/>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<section id="menu">
|
8
|
+
<dl>
|
9
|
+
|
10
|
+
<dt>Common pages</dt>
|
11
|
+
|
12
|
+
<dd><a href="http://link.com" title="Some description of page">Some page</a></dd>
|
13
|
+
|
14
|
+
<dd><a href="http://index.com" title="Description for index page">Index Page</a></dd>
|
15
|
+
|
16
|
+
<dd><a href="http://other_link.com" title="Some description of other page">Some other page</a></dd>
|
17
|
+
|
18
|
+
<dd><a href="http://another_link.com" title="Some description of another page">Another page</a></dd>
|
19
|
+
|
20
|
+
<hr/>
|
21
|
+
|
22
|
+
<dt>Sample pages</dt>
|
23
|
+
|
24
|
+
<dd><a href="http://sample.com" title="Some description of sample page">Sample page</a></dd>
|
25
|
+
|
26
|
+
<dd><a href="http://sample_link.com" title="Some description of some sample page">Some sample page</a></dd>
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
</dl>
|
31
|
+
</section>
|
32
|
+
|
33
|
+
<section id="contents">
|
34
|
+
<h1>Here is some header</h1>
|
35
|
+
<p>And here is a paragraph</p>
|
36
|
+
<ul>
|
37
|
+
<li>some bullet lists with <strong>style</strong></li>
|
38
|
+
<li>some bullet lists with <em>style</em></li>
|
39
|
+
</ul>
|
40
|
+
<h2>Another header</h2>
|
41
|
+
<p>With some text</p>
|
42
|
+
</section>
|
43
|
+
</body>
|
44
|
+
</html>
|
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= metadata.title %></title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
<section id="menu">
|
7
|
+
<dl>
|
8
|
+
<% metadata.menu.each do |entry| %>
|
9
|
+
<dt><%= entry.category %></dt>
|
10
|
+
<% entry.pages.each do |page| %>
|
11
|
+
<dd><a href="<%= page.link %>" title="<%= page.description %>"><%= page.title %></a></dd>
|
12
|
+
<% end %>
|
13
|
+
<% unless metadata.menu.last == entry %><hr/><% end %>
|
14
|
+
<% end %>
|
15
|
+
</dl>
|
16
|
+
</section>
|
17
|
+
|
18
|
+
<section id="contents">
|
19
|
+
<%= markup_file.contents %>
|
20
|
+
</section>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title><%= metadata.current_page.title %> :: <%= metadata.title %></title>
|
4
|
+
<meta name="description" content="<%= metadata.current_page.description %>"/>
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<section id="menu">
|
8
|
+
<dl>
|
9
|
+
<% metadata.menu.each do |entry| %>
|
10
|
+
<dt><%= entry.category %></dt>
|
11
|
+
<% entry.pages.each do |page| %>
|
12
|
+
<dd><a href="<%= page.link %>" title="<%= page.description %>"><%= page.title %></a></dd>
|
13
|
+
<% end %>
|
14
|
+
<% unless metadata.menu.last == entry %><hr/><% end %>
|
15
|
+
<% end %>
|
16
|
+
</dl>
|
17
|
+
</section>
|
18
|
+
|
19
|
+
<section id="contents">
|
20
|
+
<%= markup_file.contents %>
|
21
|
+
</section>
|
22
|
+
</body>
|
23
|
+
</html>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
title: Common title
|
2
|
+
pages:
|
3
|
+
- &index
|
4
|
+
file: index_with_specific_metadata
|
5
|
+
title: Index Page
|
6
|
+
description: Description for index page
|
7
|
+
link: http://index.com
|
8
|
+
menu:
|
9
|
+
- {
|
10
|
+
category: Common pages,
|
11
|
+
pages:
|
12
|
+
[{
|
13
|
+
title: Some page,
|
14
|
+
description: Some description of page,
|
15
|
+
link: http://link.com
|
16
|
+
},
|
17
|
+
*index,
|
18
|
+
{
|
19
|
+
title: Some other page,
|
20
|
+
description: Some description of other page,
|
21
|
+
link: http://other_link.com
|
22
|
+
},
|
23
|
+
{
|
24
|
+
title: Another page,
|
25
|
+
description: Some description of another page,
|
26
|
+
link: http://another_link.com
|
27
|
+
}]
|
28
|
+
}
|
29
|
+
- {
|
30
|
+
category: Sample pages,
|
31
|
+
pages:
|
32
|
+
[{
|
33
|
+
title: Sample page,
|
34
|
+
description: Some description of sample page,
|
35
|
+
link: http://sample.com
|
36
|
+
},
|
37
|
+
{
|
38
|
+
title: Some sample page,
|
39
|
+
description: Some description of some sample page,
|
40
|
+
link: http://sample_link.com
|
41
|
+
}]
|
42
|
+
}
|
43
|
+
|