staticmatic 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,60 @@
1
+ = StaticMatic
2
+
3
+ Managing static sites with [Haml & Sass](http://haml.hamptoncatlin.com).
4
+
5
+ **Please Note:** StaticMatic is fresh out the oven. It has a limited feature set and
6
+ is only really covering my immediate requirements.
7
+
8
+ _However_, I am interested in getting feedback on the idea and code contributions are always welcome.
9
+
10
+ == Introduction
11
+
12
+ CMS is overrated. A lot of the time, clients want us to do what we do
13
+ best - well designed pages with structured, accessible and maintainable markup & styling.
14
+
15
+ CMSs are often perfect for this, but sometimes they can be restrictive and more cumbersome
16
+ than just working with good ol' source code. At the same time we want our code to be
17
+ structured, DRY and flexible.
18
+
19
+ Enter **StaticMatic**.
20
+
21
+ == Usage
22
+
23
+ StaticMatic will set up a basic site structure for you with this command:
24
+
25
+ staticmatic setup <directory>
26
+
27
+ After this command you'll have the following files:
28
+
29
+ <directory>/
30
+ site/
31
+ images/
32
+ stylesheets/
33
+ javascripts/
34
+ src/
35
+ pages/
36
+ index.haml
37
+ layouts/
38
+ application.haml
39
+ stylesheets/
40
+ application.sass
41
+
42
+ StaticMatic sets you up with a sample layout, stylesheet and page file. Once you've
43
+ edited the pages and stylesheets, you can generate the static site:
44
+
45
+ staticmatic build <directory>
46
+
47
+ All of the pages are parsed and wrapped up in application.haml and put into the site directory.
48
+
49
+ == Templates
50
+
51
+ StaticMatic adds a few helpers to the core Haml helpers:
52
+
53
+ = link 'Title', 'url'
54
+ = img 'my_image.jpg'
55
+
56
+ == What's Next?
57
+
58
+ * Multiple directories of content
59
+ * Layouts based on directory of page template
60
+ * Additional Helpers
data/RakeFile ADDED
File without changes
data/bin/staticmatic ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/local/bin/ruby
2
+ require File.dirname(__FILE__) + '/../lib/staticmatic'
3
+
4
+ command = ARGV[0]
5
+ directory = ARGV[1]
6
+
7
+ if !command || !directory
8
+ puts 'Usage: staticmatic <build|setup> <directory>'
9
+ exit
10
+ end
11
+
12
+ staticmatic = StaticMatic.new(directory)
13
+
14
+ case command
15
+ when 'build'
16
+ staticmatic.build
17
+ when 'setup'
18
+ staticmatic.setup
19
+ end
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Welcome to my site</title>
5
+ </head>
6
+ <body>
7
+ <div id='menu'>
8
+ <ul>
9
+ <li>Test</li>
10
+ </ul>
11
+ </div>
12
+ <h1>Contact Us</h1>
13
+ <p>Use the form below</p>
14
+ </body>
15
+ </html>
16
+ </body>
17
+ </html>
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Welcome to my site</title>
5
+ </head>
6
+ <body>
7
+ <div id='menu'>
8
+ <ul>
9
+ <li>Test</li>
10
+ </ul>
11
+ </div>
12
+ <h1>This is a test - with a change</h1>
13
+ <a href="index"><img src="images/image_path.jpg"/></a>
14
+ <img src="images/test"/>
15
+ </body>
16
+ </html>
@@ -0,0 +1,2 @@
1
+ body {
2
+ color: #ff0000; }
@@ -0,0 +1,9 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title Welcome to my site
5
+ %body
6
+ #menu
7
+ %ul
8
+ %li Test
9
+ = yield
@@ -0,0 +1,3 @@
1
+ %h1 Contact Us
2
+
3
+ %p Use the form below
@@ -0,0 +1,5 @@
1
+ %h1 This is a test - with a change
2
+
3
+ = link img('image_path.jpg'), 'index'
4
+
5
+ = img 'test'
@@ -0,0 +1,2 @@
1
+ body
2
+ :color = #ff0000
@@ -0,0 +1,110 @@
1
+ require 'rubygems'
2
+ require 'haml'
3
+ require File.dirname(__FILE__) + '/staticmatic/helpers'
4
+
5
+ class StaticMatic
6
+ VERSION = '0.0.1'
7
+
8
+ cattr_reader :base_dirs
9
+
10
+ @@base_dirs = %w{
11
+ site/
12
+ site/stylesheets
13
+ site/images
14
+ site/javascripts
15
+ src/
16
+ src/pages/
17
+ src/layouts
18
+ src/stylesheets
19
+ }
20
+
21
+ @@templates = {
22
+ 'application.haml' => 'layouts',
23
+ 'application.sass' => 'stylesheets',
24
+ 'index.haml' => 'pages'
25
+ }
26
+
27
+ def initialize(base_dir)
28
+ @base_dir = base_dir
29
+ @src_dir = "#{@base_dir}/src"
30
+ @site_dir = "#{@base_dir}/site"
31
+ @templates_dir = File.dirname(__FILE__) + '/staticmatic/templates'
32
+ end
33
+
34
+ def build
35
+ build_css
36
+ build_html
37
+ end
38
+
39
+ def setup
40
+ if !File.exists?(@base_dir)
41
+ Dir.mkdir(@base_dir)
42
+ end
43
+
44
+ @@base_dirs.each do |directory|
45
+ directory = "#{@base_dir}/#{directory}"
46
+ if !File.exists?(directory)
47
+ Dir.mkdir(directory)
48
+ puts "created #{directory}"
49
+ end
50
+ end
51
+
52
+ @@templates.each do |template, destination|
53
+ `cp #{@templates_dir}/#{template} #{@src_dir}/#{destination}`
54
+ end
55
+
56
+ puts "Done"
57
+ end
58
+
59
+ private
60
+
61
+ def copy_file(from, to)
62
+ end
63
+
64
+ def save_page(filename, content)
65
+ filename = "#{filename}"
66
+ generate_site_file(filename, 'html', content)
67
+ end
68
+
69
+ def save_stylesheet(filename, content)
70
+ filename = "stylesheets/#{filename}"
71
+ generate_site_file(filename, 'css', content)
72
+ end
73
+
74
+ def generate_site_file(filename, extension, content)
75
+ site_file = File.new("#{@site_dir}/#{filename}.#{extension}", 'w+')
76
+ site_file << content
77
+ site_file.close
78
+ puts "created #{@site_dir}/#{filename}.#{extension}"
79
+ end
80
+
81
+ def build_html
82
+ layout_content = File.read("#{@src_dir}/layouts/application.haml")
83
+
84
+ Dir.entries("#{@src_dir}/pages").each do |file|
85
+ if matches = file.match(/([a-z0-9_-]+)\.haml$/)
86
+
87
+ filename_without_extension = matches[1]
88
+
89
+ page = Haml::Engine.new(File.read("#{@src_dir}/pages/#{file}"))
90
+ page_content = page.render
91
+
92
+ content_with_layout = Haml::Engine.new(layout_content, :locals => {:base_dir => @base_dir}).render { page_content }
93
+
94
+ save_page(filename_without_extension, content_with_layout)
95
+ end
96
+ end
97
+ end
98
+
99
+ def build_css
100
+ Dir.entries("#{@src_dir}/stylesheets").each do |file|
101
+ if matches = file.match(/([a-z0-9_-]+)\.sass$/)
102
+ filename_without_extension = matches[1]
103
+
104
+ stylesheet = Sass::Engine.new(File.read("#{@src_dir}/stylesheets/#{file}"))
105
+
106
+ save_stylesheet(filename_without_extension, stylesheet.render)
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,49 @@
1
+ module Haml
2
+ module Helpers
3
+
4
+ def stylesheets
5
+ stylesheet_dir = "#{base_dir}/site/stylesheets/"
6
+ output = ""
7
+ Dir.entries(stylesheet_dir).each do |file|
8
+ if file.match(/([a-z0-9_-]+)\.css$/)
9
+ output << tag(:link, :href => "stylesheets/#{file}", :rel => 'stylesheet', :media => 'all')
10
+ end
11
+ end
12
+
13
+ output
14
+ end
15
+
16
+ def javascripts(*files)
17
+ end
18
+
19
+ def text_field(name)
20
+ end
21
+
22
+ def submit(title)
23
+ end
24
+
25
+ def link(title, page = "")
26
+ tag(:a, :href => page) { title }
27
+ end
28
+
29
+ def img(name, options = {})
30
+ tag :img, options.merge!({:src => "images/#{name}"})
31
+ end
32
+
33
+ def tag(name, options = {}, &block)
34
+ output = "<#{name}"
35
+ options.each do |attribute, value|
36
+ output << " #{attribute}=\"#{value}\""
37
+ end
38
+
39
+ if block_given?
40
+ output << ">"
41
+ output << yield
42
+ output << "</#{name}>\n"
43
+ else
44
+ output << "/>\n"
45
+ end
46
+ output
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title StaticMatic
5
+ = stylesheets
6
+ %body
7
+ = yield
@@ -0,0 +1,2 @@
1
+ body
2
+ :font-family = "Verdana, Helvetica, sans-serif"
@@ -0,0 +1 @@
1
+ %h1 StaticMatic!
@@ -0,0 +1,21 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/staticmatic'
3
+
4
+ class StaticMaticTest < Test::Unit::TestCase
5
+ def setup
6
+ @base_dir = File.dirname(__FILE__) + '/sandbox'
7
+
8
+ StaticMatic.base_dirs.reverse.each do |dir|
9
+ Dir.delete("#{@base_dir}/#{dir}") if File.exists?("#{@base_dir}/#{dir}")
10
+ end
11
+ end
12
+
13
+ def test_should_setup_directories
14
+ staticmatic = StaticMatic.new(@base_dir)
15
+ staticmatic.setup
16
+
17
+ StaticMatic.base_dirs.each do |dir|
18
+ assert File.exists?("#{@base_dir}/#{dir}"), "Should create #{dir}"
19
+ end
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: staticmatic
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2007-05-22 00:00:00 +01:00
8
+ summary: Manage static sites using Haml & Sass
9
+ require_paths:
10
+ - lib
11
+ email: steve@curve21.com
12
+ homepage: http//www.curve21.com
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Stephen Bartholomew
31
+ files:
32
+ - bin
33
+ - example
34
+ - lib
35
+ - RakeFile
36
+ - README
37
+ - test
38
+ - bin/staticmatic
39
+ - example/site
40
+ - example/src
41
+ - example/site/contact.html
42
+ - example/site/images
43
+ - example/site/index.html
44
+ - example/site/javascripts
45
+ - example/site/stylesheets
46
+ - example/site/stylesheets/application.css
47
+ - example/src/layouts
48
+ - example/src/pages
49
+ - example/src/stylesheets
50
+ - example/src/layouts/application.haml
51
+ - example/src/pages/contact.haml
52
+ - example/src/pages/index.haml
53
+ - example/src/stylesheets/application.sass
54
+ - lib/staticmatic
55
+ - lib/staticmatic.rb
56
+ - lib/staticmatic/helpers.rb
57
+ - lib/staticmatic/templates
58
+ - lib/staticmatic/templates/application.haml
59
+ - lib/staticmatic/templates/application.sass
60
+ - lib/staticmatic/templates/index.haml
61
+ - test/sandbox
62
+ - test/staticmatic_test.rb
63
+ test_files:
64
+ - test/staticmatic_test.rb
65
+ rdoc_options: []
66
+
67
+ extra_rdoc_files: []
68
+
69
+ executables:
70
+ - staticmatic
71
+ extensions: []
72
+
73
+ requirements: []
74
+
75
+ dependencies:
76
+ - !ruby/object:Gem::Dependency
77
+ name: haml
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Version::Requirement
80
+ requirements:
81
+ - - ">"
82
+ - !ruby/object:Gem::Version
83
+ version: 0.0.0
84
+ version: