staticmatic 0.0.1 → 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/README CHANGED
@@ -1,13 +1,13 @@
1
- = StaticMatic
1
+ # StaticMatic
2
2
 
3
- Managing static sites with [Haml & Sass](http://haml.hamptoncatlin.com).
3
+ *For information on Haml & Sass please see [haml.hamptoncatlin.com](http://haml.hamptoncatlin.com)*.
4
4
 
5
5
  **Please Note:** StaticMatic is fresh out the oven. It has a limited feature set and
6
6
  is only really covering my immediate requirements.
7
7
 
8
- _However_, I am interested in getting feedback on the idea and code contributions are always welcome.
8
+ _However_, I am interested in getting feedback on the idea and code contributions & ideas are always welcome.
9
9
 
10
- == Introduction
10
+ ## What's it all about?
11
11
 
12
12
  CMS is overrated. A lot of the time, clients want us to do what we do
13
13
  best - well designed pages with structured, accessible and maintainable markup & styling.
@@ -18,7 +18,7 @@ structured, DRY and flexible.
18
18
 
19
19
  Enter **StaticMatic**.
20
20
 
21
- == Usage
21
+ ## Usage
22
22
 
23
23
  StaticMatic will set up a basic site structure for you with this command:
24
24
 
@@ -46,15 +46,33 @@ edited the pages and stylesheets, you can generate the static site:
46
46
 
47
47
  All of the pages are parsed and wrapped up in application.haml and put into the site directory.
48
48
 
49
- == Templates
49
+ ## Templates
50
50
 
51
51
  StaticMatic adds a few helpers to the core Haml helpers:
52
52
 
53
53
  = link 'Title', 'url'
54
54
  = img 'my_image.jpg'
55
55
 
56
- == What's Next?
56
+
57
+ **_Coming soon:_**
58
+
59
+ I'm already extending these to include some neat conventions to speed up coding. For example, in the next version:
60
+
61
+ = link 'Contact Us'
62
+
63
+ will produce
64
+
65
+ <a href="contact_us.html">Contact Us</a>
66
+
67
+ Or with the Rewriting enabled:
68
+
69
+ <a href="contact_us">Contact Us</a>
70
+
71
+ ## What's Next?
57
72
 
58
73
  * Multiple directories of content
59
74
  * Layouts based on directory of page template
60
- * Additional Helpers
75
+ * Additional Helpers
76
+ * Tests, tests, tests!
77
+ * Configuration
78
+ * Default Rewriting for HTML pages (drop the .html)
@@ -1,6 +1,7 @@
1
1
  module Haml
2
2
  module Helpers
3
3
 
4
+ # Generates links to all stylesheets in the site's directory
4
5
  def stylesheets
5
6
  stylesheet_dir = "#{base_dir}/site/stylesheets/"
6
7
  output = ""
@@ -13,23 +14,51 @@ module Haml
13
14
  output
14
15
  end
15
16
 
17
+ # Generate javascript source tags for the specified files
18
+ #
19
+ # javascripts('test') -> <script language="javascript" src="javascripts/test.js"></script>
20
+ #
16
21
  def javascripts(*files)
22
+ output = ""
23
+ files.each do |file|
24
+ if !file.match(/^http\:\/\//)
25
+ output << tag(:script, :language => 'javascript', :src => "javascripts/#{file}.js") { "" }
26
+ end
27
+ end
28
+ output
17
29
  end
18
-
19
- def text_field(name)
30
+
31
+ # Generates a form text field
32
+ #
33
+ def text_field(name, value)
34
+ tag(:input, :type => "text", :name => name, :value => value)
20
35
  end
21
36
 
22
- def submit(title)
23
- end
24
-
25
- def link(title, page = "")
37
+ # Generate an HTML link
38
+ #
39
+ # If only the title is passed, it will automatically
40
+ # create a link from this value:
41
+ #
42
+ # link('Test') -> <a href="test.html">Test</a>
43
+ #
44
+ def link(title, page = "", options = {})
45
+ if page.blank?
46
+ page = urlify(title) + ".html"
47
+ end
48
+
26
49
  tag(:a, :href => page) { title }
27
50
  end
28
51
 
52
+ # Generates an image tag
29
53
  def img(name, options = {})
30
54
  tag :img, options.merge!({:src => "images/#{name}"})
31
55
  end
32
56
 
57
+ # Generates HTML tags:
58
+ #
59
+ # tag(:br) -> <br/>
60
+ # tag(:a, :href => 'test.html') { "Test" } -> <a href="test.html">Test</a>
61
+ #
33
62
  def tag(name, options = {}, &block)
34
63
  output = "<#{name}"
35
64
  options.each do |attribute, value|
@@ -45,5 +74,20 @@ module Haml
45
74
  end
46
75
  output
47
76
  end
77
+
78
+ # Generates a URL friendly string from the value passed:
79
+ #
80
+ # "We love Haml" -> "we_love_haml"
81
+ # "Elf & Ham" -> "elf_and_ham"
82
+ # "Stephen's gem" -> "stephens_gem"
83
+ #
84
+ def urlify(string)
85
+ string.tr(" ", "_").
86
+ sub("&", "and").
87
+ sub("@", "at").
88
+ tr("^A-Za-z0-9_", "").
89
+ sub(/_{2,}/, "_").
90
+ downcase
91
+ end
48
92
  end
49
93
  end
data/lib/staticmatic.rb CHANGED
@@ -3,10 +3,10 @@ require 'haml'
3
3
  require File.dirname(__FILE__) + '/staticmatic/helpers'
4
4
 
5
5
  class StaticMatic
6
- VERSION = '0.0.1'
7
-
6
+ VERSION = '0.1.0'
7
+
8
+ # Directories generated for a new site setup
8
9
  cattr_reader :base_dirs
9
-
10
10
  @@base_dirs = %w{
11
11
  site/
12
12
  site/stylesheets
@@ -18,6 +18,7 @@ class StaticMatic
18
18
  src/stylesheets
19
19
  }
20
20
 
21
+ # Templates for setup and their location
21
22
  @@templates = {
22
23
  'application.haml' => 'layouts',
23
24
  'application.sass' => 'stylesheets',
@@ -50,7 +51,7 @@ class StaticMatic
50
51
  end
51
52
 
52
53
  @@templates.each do |template, destination|
53
- `cp #{@templates_dir}/#{template} #{@src_dir}/#{destination}`
54
+ copy_file("#{@templates_dir}/#{template}", "#{@src_dir}/#{destination}")
54
55
  end
55
56
 
56
57
  puts "Done"
@@ -59,6 +60,7 @@ class StaticMatic
59
60
  private
60
61
 
61
62
  def copy_file(from, to)
63
+ `cp #{from} #{to}`
62
64
  end
63
65
 
64
66
  def save_page(filename, content)
@@ -86,7 +88,7 @@ class StaticMatic
86
88
 
87
89
  filename_without_extension = matches[1]
88
90
 
89
- page = Haml::Engine.new(File.read("#{@src_dir}/pages/#{file}"))
91
+ page = Haml::Engine.new(File.read("#{@src_dir}/pages/#{file}", :locals => {:base_dir => @base_dir}))
90
92
  page_content = page.render
91
93
 
92
94
  content_with_layout = Haml::Engine.new(layout_content, :locals => {:base_dir => @base_dir}).render { page_content }
@@ -0,0 +1,44 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/staticmatic'
3
+
4
+ class HelpersTest < Test::Unit::TestCase
5
+ include Haml::Helpers
6
+
7
+ # Provide method in place of local variable for the helpers - don'tcha just love ruby?
8
+ def base_dir
9
+ File.dirname(__FILE__) + '/sandbox/test_site'
10
+ end
11
+
12
+ def test_should_generate_stylesheet_links
13
+ assert_match "href=\"stylesheets\/application.css\"", stylesheets
14
+ end
15
+
16
+ def test_should_autolink_page
17
+ expected_output = %q{<a href="test.html">Test</a>}
18
+ assert_match expected_output, link("Test")
19
+ end
20
+
21
+ def test_should_generate_tag_with_block
22
+ expected_output = %q{<a href="test.html" title="My Test Link">Test</a>}
23
+ assert_match expected_output, tag(:a, :href => "test.html", :title => 'My Test Link') { "Test" }
24
+ end
25
+
26
+ def test_should_generate_tag
27
+ expected_output = %q{<br/>}
28
+ assert_match expected_output, tag(:br)
29
+ end
30
+
31
+ def test_should_urlify_string
32
+ assert_equal "stephens_haml_and_sass_project", urlify("Stephen's Haml & Sass Project")
33
+ end
34
+
35
+ def test_should_generate_input
36
+ expected_output = %q{<input type="text" value="blah" name="test"/>}
37
+ assert_match expected_output, text_field("test", "blah")
38
+ end
39
+
40
+ def test_should_generate_js_links
41
+ expected_output = %q{<script src="javascripts/test.js" language="javascript"></script>}
42
+ assert_match expected_output, javascripts('test')
43
+ end
44
+ end
File without changes
@@ -0,0 +1,10 @@
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>StaticMatic</title>
5
+ <link rel="stylesheet" href="stylesheets/application.css" media="all"/>
6
+ </head>
7
+ <body>
8
+ <h1>StaticMatic!</h1>
9
+ </body>
10
+ </html>
@@ -0,0 +1,2 @@
1
+ body {
2
+ font-family: Verdana, Helvetica, sans-serif; }
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title StaticMatic
5
+ = stylesheets
6
+ %body
7
+ = yield
@@ -0,0 +1 @@
1
+ %h1 StaticMatic!
@@ -0,0 +1,2 @@
1
+ body
2
+ :font-family = "Verdana, Helvetica, sans-serif"
@@ -3,11 +3,7 @@ require File.dirname(__FILE__) + '/../lib/staticmatic'
3
3
 
4
4
  class StaticMaticTest < Test::Unit::TestCase
5
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
6
+ @base_dir = File.dirname(__FILE__) + '/sandbox/tmp'
11
7
  end
12
8
 
13
9
  def test_should_setup_directories
@@ -18,4 +14,14 @@ class StaticMaticTest < Test::Unit::TestCase
18
14
  assert File.exists?("#{@base_dir}/#{dir}"), "Should create #{dir}"
19
15
  end
20
16
  end
17
+
18
+ def teardown
19
+ StaticMatic.base_dirs.reverse.each do |dir|
20
+ Dir.entries("#{@base_dir}/#{dir}").each do |file|
21
+ next if file.match(/^\./)
22
+ File.delete("#{@base_dir}/#{dir}/#{file}")
23
+ end
24
+ Dir.delete("#{@base_dir}/#{dir}") if File.exists?("#{@base_dir}/#{dir}")
25
+ end
26
+ end
21
27
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: staticmatic
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-05-22 00:00:00 +01:00
6
+ version: 0.1.0
7
+ date: 2007-05-24 00:00:00 +01:00
8
8
  summary: Manage static sites using Haml & Sass
9
9
  require_paths:
10
10
  - lib
@@ -58,9 +58,27 @@ files:
58
58
  - lib/staticmatic/templates/application.haml
59
59
  - lib/staticmatic/templates/application.sass
60
60
  - lib/staticmatic/templates/index.haml
61
+ - test/helpers_test.rb
61
62
  - test/sandbox
62
63
  - test/staticmatic_test.rb
64
+ - test/sandbox/test_site
65
+ - test/sandbox/tmp
66
+ - test/sandbox/test_site/config.rb
67
+ - test/sandbox/test_site/site
68
+ - test/sandbox/test_site/src
69
+ - test/sandbox/test_site/site/images
70
+ - test/sandbox/test_site/site/index.html
71
+ - test/sandbox/test_site/site/javascripts
72
+ - test/sandbox/test_site/site/stylesheets
73
+ - test/sandbox/test_site/site/stylesheets/application.css
74
+ - test/sandbox/test_site/src/layouts
75
+ - test/sandbox/test_site/src/pages
76
+ - test/sandbox/test_site/src/stylesheets
77
+ - test/sandbox/test_site/src/layouts/application.haml
78
+ - test/sandbox/test_site/src/pages/index.haml
79
+ - test/sandbox/test_site/src/stylesheets/application.sass
63
80
  test_files:
81
+ - test/helpers_test.rb
64
82
  - test/staticmatic_test.rb
65
83
  rdoc_options: []
66
84