charleston 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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Bryce Kerley
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,17 @@
1
+ = charleston
2
+
3
+ static HTML generator with HAML, SASS, and CoffeeScript
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
+ * Send me a pull request. Bonus points for topic branches.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2010 Bryce Kerley. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,66 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "charleston"
8
+ gem.summary = %Q{Static HTML site framework}
9
+ gem.description = <<-EOD.lines.map{|l|l.strip}.join(' ')
10
+ Charleston is a framework to build static HTML/CSS/JavaScript sites with
11
+ any combination of HTML, HAML, CSS, SASS, JavaScript, and CoffeeScript,
12
+ that's easy to put together and maintain.
13
+ EOD
14
+ gem.email = "bkerley@brycekerley.net"
15
+ gem.homepage = "http://github.com/bkerley/charleston"
16
+ gem.authors = ["Bryce Kerley"]
17
+ gem.executables = %w{ charleston }
18
+
19
+ gem.add_runtime_dependency "rake", "~> 0.8"
20
+ gem.add_runtime_dependency 'haml', '~> 3.0'
21
+ # uncomment this for sass 3.1 when it comes out
22
+ # gem.add_runtime_dependency 'sass', '~> 3.1'
23
+
24
+ gem.add_development_dependency "shoulda", "~> 2.11"
25
+ gem.add_development_dependency "yard", "~> 0.6"
26
+ gem.add_development_dependency "mocha", "~> 0.9"
27
+ gem.add_development_dependency "fakefs", "~> 0.2"
28
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
29
+ end
30
+ Jeweler::GemcutterTasks.new
31
+ rescue LoadError
32
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
33
+ end
34
+
35
+ require 'rake/testtask'
36
+ Rake::TestTask.new(:test) do |test|
37
+ test.libs << 'lib' << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ end
41
+
42
+ begin
43
+ require 'rcov/rcovtask'
44
+ Rcov::RcovTask.new do |test|
45
+ test.libs << 'test'
46
+ test.pattern = 'test/**/test_*.rb'
47
+ test.verbose = true
48
+ end
49
+ rescue LoadError
50
+ task :rcov do
51
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
52
+ end
53
+ end
54
+
55
+ task :test => :check_dependencies
56
+
57
+ task :default => :test
58
+
59
+ begin
60
+ require 'yard'
61
+ YARD::Rake::YardocTask.new
62
+ rescue LoadError
63
+ task :yardoc do
64
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
65
+ end
66
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bin/charleston ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ first_arg = ARGV.first
4
+
5
+ if first_arg == "--help"
6
+ $stderr.puts "Usage: charleston project_name"
7
+ $stderr.puts
8
+ $stderr.puts "Creates a project called project_name in the project_name directory."
9
+ else
10
+ require File.join(File.dirname(__FILE__), %w{ .. lib charleston})
11
+ Charleston.create_project first_arg
12
+ end
@@ -0,0 +1,93 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{charleston}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Bryce Kerley"]
12
+ s.date = %q{2010-10-11}
13
+ s.default_executable = %q{charleston}
14
+ s.description = %q{Charleston is a framework to build static HTML/CSS/JavaScript sites with any combination of HTML, HAML, CSS, SASS, JavaScript, and CoffeeScript, that's easy to put together and maintain.}
15
+ s.email = %q{bkerley@brycekerley.net}
16
+ s.executables = ["charleston"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/charleston",
29
+ "charleston.gemspec",
30
+ "lib/charleston.rb",
31
+ "lib/charleston/checks.rb",
32
+ "lib/charleston/generator.rb",
33
+ "lib/charleston/tasks.rb",
34
+ "lib/charleston/tasks/css.rake",
35
+ "lib/charleston/tasks/directories.rake",
36
+ "lib/charleston/tasks/html.rake",
37
+ "lib/charleston/tasks/image.rake",
38
+ "lib/charleston/tasks/js.rake",
39
+ "lib/charleston/template/Rakefile",
40
+ "lib/charleston/template/javascripts/example.coffee",
41
+ "lib/charleston/template/pages/index.haml",
42
+ "lib/charleston/template/stylesheets/screen.sass",
43
+ "lib/charleston/transform.rb",
44
+ "test/fixture/pages/about.haml",
45
+ "test/fixture/pages/contact.html",
46
+ "test/fixture/pages/dev.html",
47
+ "test/fixture/pages/index.haml",
48
+ "test/helper.rb",
49
+ "test/test_charleston.rb",
50
+ "test/test_checks.rb",
51
+ "test/test_transform.rb"
52
+ ]
53
+ s.homepage = %q{http://github.com/bkerley/charleston}
54
+ s.rdoc_options = ["--charset=UTF-8"]
55
+ s.require_paths = ["lib"]
56
+ s.rubygems_version = %q{1.3.7}
57
+ s.summary = %q{Static HTML site framework}
58
+ s.test_files = [
59
+ "test/helper.rb",
60
+ "test/test_charleston.rb",
61
+ "test/test_checks.rb",
62
+ "test/test_transform.rb"
63
+ ]
64
+
65
+ if s.respond_to? :specification_version then
66
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
67
+ s.specification_version = 3
68
+
69
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
70
+ s.add_runtime_dependency(%q<rake>, ["~> 0.8"])
71
+ s.add_runtime_dependency(%q<haml>, ["~> 3.0"])
72
+ s.add_development_dependency(%q<shoulda>, ["~> 2.11"])
73
+ s.add_development_dependency(%q<yard>, ["~> 0.6"])
74
+ s.add_development_dependency(%q<mocha>, ["~> 0.9"])
75
+ s.add_development_dependency(%q<fakefs>, ["~> 0.2"])
76
+ else
77
+ s.add_dependency(%q<rake>, ["~> 0.8"])
78
+ s.add_dependency(%q<haml>, ["~> 3.0"])
79
+ s.add_dependency(%q<shoulda>, ["~> 2.11"])
80
+ s.add_dependency(%q<yard>, ["~> 0.6"])
81
+ s.add_dependency(%q<mocha>, ["~> 0.9"])
82
+ s.add_dependency(%q<fakefs>, ["~> 0.2"])
83
+ end
84
+ else
85
+ s.add_dependency(%q<rake>, ["~> 0.8"])
86
+ s.add_dependency(%q<haml>, ["~> 3.0"])
87
+ s.add_dependency(%q<shoulda>, ["~> 2.11"])
88
+ s.add_dependency(%q<yard>, ["~> 0.6"])
89
+ s.add_dependency(%q<mocha>, ["~> 0.9"])
90
+ s.add_dependency(%q<fakefs>, ["~> 0.2"])
91
+ end
92
+ end
93
+
@@ -0,0 +1,17 @@
1
+ module Charleston
2
+ module Checks
3
+ def self.haml_available?
4
+ available? 'haml'
5
+ end
6
+
7
+ def self.available?(executable)
8
+ path_entries.detect do |e|
9
+ FileTest.executable? File.join(e, 'haml')
10
+ end
11
+ end
12
+
13
+ def self.path_entries
14
+ ENV['PATH'].split(':')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module Charleston
2
+ class Generator
3
+ def initialize(directory_name)
4
+ @target_directory = directory_name
5
+
6
+ enumerate_and_populate_directory
7
+ end
8
+
9
+ private
10
+ def enumerate_and_populate_directory
11
+ FileUtils::cp_r File.join(File.dirname(__FILE__), 'template'), @target_directory
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ @css_transform = Charleston::Transform.new 'stylesheets', '*.css', 'stylesheets', '*.css' do |input, output|
2
+ FileUtils.cp input, output
3
+ end
4
+ @css_transform.generates 'css'
5
+
6
+ @sass_transform = Charleston::Transform.new 'stylesheets', '*.sass', 'stylesheets', '*.css' do |input, output|
7
+ sh 'sass', input, output
8
+ end
9
+ @sass_transform.generates 'sass'
@@ -0,0 +1,8 @@
1
+ desc 'Generate output directories'
2
+ task 'generate:directories' => ['output', 'output/stylesheets', 'output/javascripts', 'output/images']
3
+
4
+ directory 'output'
5
+ directory 'output/stylesheets'
6
+ directory 'output/javascripts'
7
+ directory 'output/images'
8
+
@@ -0,0 +1,9 @@
1
+ @html_transform = Charleston::Transform.new 'pages', '*.html', '', '*.html' do |input, output|
2
+ FileUtils.cp input, output
3
+ end
4
+ @html_transform.generates 'html'
5
+
6
+ @haml_transform = Charleston::Transform.new 'pages', '*.haml', '', '*.html' do |input, output|
7
+ sh 'haml', input, output
8
+ end
9
+ @haml_transform.generates 'haml'
@@ -0,0 +1,12 @@
1
+ @images = Rake::FileList['images/*']
2
+ @image_output = @images.map{ |i| "output/#{i}" }
3
+
4
+ @images.zip(@image_output) do |a|
5
+ input, output = a
6
+ file output => [input, 'output/images'] do
7
+ cp input, output
8
+ end
9
+ end
10
+
11
+ desc 'Copy over images'
12
+ task 'generate:images' => %w{ output/images } + @image_output
@@ -0,0 +1,9 @@
1
+ @js_transform = Charleston::Transform.new 'javascripts', '*.js', 'javascripts', '*.js' do |input, output|
2
+ FileUtils.cp input, output
3
+ end
4
+ @js_transform.generates 'javascript'
5
+
6
+ @cs_transform = Charleston::Transform.new 'javascripts', '*.coffee', 'javascripts', '*.js' do |input, output|
7
+ sh "coffee -cp #{input} > #{output}"
8
+ end
9
+ @cs_transform.generates 'coffeescript'
@@ -0,0 +1,8 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'charleston')
2
+
3
+ %w{ directories html css js image }.each do |f|
4
+ load File.join(File.dirname(__FILE__), 'tasks', "#{f}.rake")
5
+ end
6
+
7
+ desc 'Runs all the Charleston generators'
8
+ task 'generate:all'
@@ -0,0 +1,5 @@
1
+ require 'rake'
2
+ require 'charleston/tasks'
3
+
4
+ task 'default' => 'generate:all'
5
+ # add custom rakefile tasks here
@@ -0,0 +1,3 @@
1
+ document.observe 'dom:loaded', ->
2
+ $('where_to_put').on 'click', 'td', (e, td) =>
3
+ td.toggleClassName('gigantic')
@@ -0,0 +1,84 @@
1
+ !!! 5
2
+ %head
3
+ %title Welcome to Charleston
4
+ %link(rel='stylesheet' type='text/css' href='stylesheets/screen.css')
5
+ %body
6
+ .gutter
7
+ .welcome
8
+ %h1 Welcome to Charleston
9
+ :markdown
10
+ Charleston is a framework to build static HTML/CSS/JavaScript sites with
11
+ any combination of HTML, HAML, CSS, SASS, JavaScript, and CoffeeScript,
12
+ that's easy to put together and maintain.
13
+ %h2 Let's get started!
14
+ :markdown
15
+ 1. I'm assuming you've run `charleston my_project` and are now looking
16
+ at a sample page.
17
+ 2. Edit `pages/index.haml`, and create new HTML or HAML files in the `pages`
18
+ directory to make new pages.
19
+ 2. Edit `stylesheets/screen.sass`, and create new CSS or SASS files in
20
+ the `stylesheets` directory to make new stylesheets.
21
+ 3. Edit and create JavaScript or CoffeeScript files in the `javascripts`
22
+ directory to make new script files.
23
+ 4. Add images to the `images` directory if you want.
24
+ 3. When you want to build the site, run `rake` and it will be created
25
+ in the `output` directory.
26
+ %h2 Where to Put Files
27
+ %table#where_to_put
28
+ %thead
29
+ %tr
30
+ %th Class
31
+ %th Format
32
+ %th Inputs
33
+ %th Outputs
34
+ %tbody
35
+ %tr
36
+ %td Page
37
+ %td HTML
38
+ %td.in pages/*.html
39
+ %td.out output/*.html
40
+ %tr
41
+ %td Page
42
+ %td HAML
43
+ %td.in pages/*.haml
44
+ %td.out output/*.html
45
+ %tr
46
+ %td Stylesheet
47
+ %td CSS
48
+ %td.in stylesheets/*.css
49
+ %td.out output/stylesheets/*.css
50
+ %tr
51
+ %td Stylesheet
52
+ %td SASS
53
+ %td.in stylesheets/*.sass
54
+ %td.out output/stylesheets/*.css
55
+ %tr
56
+ %td Script
57
+ %td JavaScript
58
+ %td.in javascripts/*.js
59
+ %td.out output/javascripts/*.js
60
+ %tr
61
+ %td Script
62
+ %td CoffeeScript
63
+ %td.in javascripts/*.coffee
64
+ %td.out output/javascripts/*.js
65
+ %tr
66
+ %td Image
67
+ %td Any format
68
+ %td.in images/*
69
+ %td.out output/images/*
70
+ %h2 What Not To Do
71
+ :markdown
72
+ * Don't make any direct edits to the "output" directory. These files
73
+ get clobbered when you update the source files.
74
+ %h2 More information
75
+ :markdown
76
+ Source code is available and forkable on the
77
+ [Charleston Github repository](http://github.com/bkerley/charleston).
78
+ Thanks in advance for your contributions and well-tested patches.
79
+
80
+ Charleston is Copyright &copy; 2010 by Bryce Kerley. Please see the
81
+ license included with this software, or in the [Charleston Github
82
+ repository](http://github.com/bkerley/charleston/blob/master/LICENSE).
83
+ %script(type='text/javascript' src='http://prototypejs.org/assets/2010/5/13/prototype.js')
84
+ %script(type='text/javascript' src='javascripts/example.js')
@@ -0,0 +1,50 @@
1
+ $accent_color: #b1dd8f
2
+ $welcome_color: #222
3
+ $background_color: #111
4
+ $foreground_color: white
5
+ $dark_accent_color: darken($accent_color, 50%)
6
+
7
+ $body_font: "Avenir LT Std", Avenir, "Helvetica Neue", Helvetica, sans-serif, Arial
8
+ $code_font: Inconsolata, Menlo, "Droid Sans Mono", Consolas, "Bitstream Vera Sans Mono", "Lucida Sans Typewriter", "Lucida Console", mono, Courier, "Courier New"
9
+
10
+ body
11
+ background-color: $background_color
12
+ color: $foreground_color
13
+ font-family: $body_font
14
+ font-size: 1.2em
15
+ h1, h2, h3, h4, h5, h6
16
+ color: $accent_color
17
+ font-weight: 900
18
+ code
19
+ font-family: $code_font
20
+ background-color: $dark_accent_color
21
+ padding: 0 4px
22
+ table
23
+ thead
24
+ tr
25
+ background-color: $accent_color
26
+ color: $background_color
27
+ th
28
+ padding-top: 4px
29
+ font-weight: 100
30
+ tbody
31
+ td
32
+ padding: 2px 4px
33
+ &.in, &.out
34
+ font-family: $code_font
35
+ &.gigantic
36
+ font-size: 4em
37
+
38
+ a:link, a:visited
39
+ color: $accent_color
40
+ a:hover
41
+ text-decoration: none
42
+
43
+ div.gutter
44
+ width: 800px
45
+ margin: 0px auto
46
+ padding: 10px
47
+ div.welcome
48
+ background-color: $welcome_color
49
+ padding: 10px
50
+ margin: -10px
@@ -0,0 +1,51 @@
1
+ module Charleston
2
+ class Transform
3
+ def initialize(source_directory, source_pattern,
4
+ destination_directory, destination_pattern,
5
+ &transformation)
6
+ @source_dir = source_directory
7
+ @source_pat = source_pattern
8
+ @dest_dir = destination_directory
9
+ @dest_pat = destination_pattern
10
+ @transformation = transformation
11
+
12
+ find_sources
13
+ target_destinations
14
+ write_rules
15
+ end
16
+
17
+ def generates(rule_name)
18
+ desc "Transform #{@source_dir}/#{@source_pat} into output/#{@dest_dir}/#{@dest_pat}"
19
+ task "generate:#{rule_name}" => @destinations
20
+ task 'generate:all' => "generate:#{rule_name}"
21
+ end
22
+
23
+ private
24
+ def find_sources
25
+ @sources = ::Rake::FileList[File.join(@source_dir, @source_pat)]
26
+ end
27
+
28
+ def target_destinations
29
+ src_extension = find_extension_in_pattern(@source_pat)
30
+ dest_extension = find_extension_in_pattern(@dest_pat)
31
+ @destinations = @sources.map do |s|
32
+ File.expand_path(
33
+ s.sub(@source_dir, File.join('output', @dest_dir)).
34
+ sub(src_extension, dest_extension))
35
+ end
36
+ end
37
+
38
+ def write_rules
39
+ @sources.zip(@destinations) do |p|
40
+ input, output = p
41
+ file output => [input, 'output', File.join('output', @dest_dir)] do
42
+ @transformation.call input, output
43
+ end
44
+ end
45
+ end
46
+
47
+ def find_extension_in_pattern(pattern)
48
+ pattern.sub(/\*\./, '')
49
+ end
50
+ end
51
+ end
data/lib/charleston.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake'
2
+ %w{ generator checks transform }.each do |m|
3
+ require File.join(File.dirname(__FILE__), 'charleston', m)
4
+ end
5
+
6
+ module Charleston
7
+ def self.create_project(project_name)
8
+ Charleston::Generator.new project_name
9
+ end
10
+ end
File without changes
File without changes
File without changes
File without changes
data/test/helper.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ require 'charleston'
9
+
10
+ class Test::Unit::TestCase
11
+ end
12
+
13
+ # do this last
14
+ require 'fakefs'
@@ -0,0 +1,38 @@
1
+ require 'helper'
2
+
3
+ class TestCharleston < Test::Unit::TestCase
4
+ context 'the Charleston module' do
5
+ subject { Charleston }
6
+ context 'create_project module method' do
7
+ subject { Charleston.method(:create_project) }
8
+ should 'take one argument' do
9
+ assert_equal 1, subject.arity
10
+ end
11
+
12
+ context 'when called with a directory name' do
13
+ setup do
14
+ @directory_name = "directory name"
15
+ @template_directory = File.expand_path(File.join(File.dirname(__FILE__), *%w{ .. lib charleston template}))
16
+ FakeFS::FileSystem.clone @template_directory
17
+ subject.call(@directory_name)
18
+ end
19
+
20
+ should 'create the directory' do
21
+ assert File.directory?(@directory_name)
22
+ end
23
+
24
+ before_should 'create a generator with the directory name' do
25
+ Charleston::Generator.expects(:new).once.with("directory name")
26
+ end
27
+
28
+ before_should 'copy the template' do
29
+ FileUtils.expects(:cp_r).once.with do |from, to|
30
+ from_right = File.expand_path(from) == @template_directory
31
+ to_right = to == @directory_name
32
+ from_right && to_right
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ class TestChecks < Test::Unit::TestCase
4
+ context 'the Charleston::Checks module' do
5
+ subject { Charleston::Checks }
6
+ context 'haml_available? module method' do
7
+ subject { Charleston::Checks.method(:haml_available?) }
8
+ should 'take no arguments' do
9
+ assert subject.arity < 1
10
+ end
11
+
12
+ context 'when invoked' do
13
+ setup do
14
+ subject.call
15
+ end
16
+
17
+ before_should 'check a haml' do
18
+ fake_path = stub
19
+ fake_path.expects(:split).with(':').returns ['/tmp/test/bin']
20
+ ENV.expects(:[]).with('PATH').returns fake_path
21
+ FileTest.expects(:executable?).with('/tmp/test/bin/haml').returns true
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,57 @@
1
+ require 'helper'
2
+
3
+ class TestTransform < Test::Unit::TestCase
4
+ context 'the Charleston::Transform class' do
5
+ subject { Charleston::Transform }
6
+ context 'new method' do
7
+ subject { Charleston::Transform.method(:new)}
8
+ should 'work with four arguments' do
9
+ assert_nothing_raised do
10
+ Charleston::Transform.new('pages', '*.haml', '', '*.html'){ }
11
+ end
12
+ end
13
+
14
+ context 'called with a directory full of hamls' do
15
+ setup do
16
+ @fixture_directory = File.expand_path(File.join(File.dirname(__FILE__), 'fixture'))
17
+ FakeFS::FileSystem.clone @fixture_directory
18
+ FakeFS::FileSystem.chdir @fixture_directory
19
+ @transform = Charleston::Transform.new(File.join(@fixture_directory, 'pages'), '*.haml', '', '*.html'){ }
20
+ end
21
+
22
+ before_should 'make file rules for index and about' do
23
+ %w{ index about }.each do |f|
24
+ Charleston::Transform.any_instance.expects(:file).at_least_once.with do |args|
25
+ output = args.keys.first
26
+ input = args[output]
27
+ next false if args.length > 1
28
+ next false unless output =~ Regexp.new("output/#{f}\\\.html$")
29
+ next false unless input.include? 'output' #directory
30
+ next false unless input.detect{ |v| v =~ Regexp.new("pages/#{f}\\\.haml$")}
31
+ true
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'when asked to register rules' do
37
+ setup do
38
+ @transform.generates 'haml'
39
+ end
40
+
41
+ before_should 'make a "generate:haml" rule and add it to the generate:all rule' do
42
+ @transform.expects(:task).with do |args|
43
+ task = args.keys.first
44
+ depends = args[task]
45
+ next false unless args.length == 1
46
+ next false unless task == 'generate:haml'
47
+ next false unless depends.detect{ |v| v =~ /output\/index\.html$/ }
48
+ next false unless depends.detect{ |v| v =~ /output\/about\.html$/ }
49
+ true
50
+ end
51
+ @transform.expects(:task).with('generate:all'=>'generate:haml')
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: charleston
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Bryce Kerley
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-11 00:00:00 -04:00
19
+ default_executable: charleston
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rake
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 27
30
+ segments:
31
+ - 0
32
+ - 8
33
+ version: "0.8"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: haml
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 7
45
+ segments:
46
+ - 3
47
+ - 0
48
+ version: "3.0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: shoulda
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 21
60
+ segments:
61
+ - 2
62
+ - 11
63
+ version: "2.11"
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: yard
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 7
75
+ segments:
76
+ - 0
77
+ - 6
78
+ version: "0.6"
79
+ type: :development
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: mocha
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ hash: 25
90
+ segments:
91
+ - 0
92
+ - 9
93
+ version: "0.9"
94
+ type: :development
95
+ version_requirements: *id005
96
+ - !ruby/object:Gem::Dependency
97
+ name: fakefs
98
+ prerelease: false
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ hash: 15
105
+ segments:
106
+ - 0
107
+ - 2
108
+ version: "0.2"
109
+ type: :development
110
+ version_requirements: *id006
111
+ description: Charleston is a framework to build static HTML/CSS/JavaScript sites with any combination of HTML, HAML, CSS, SASS, JavaScript, and CoffeeScript, that's easy to put together and maintain.
112
+ email: bkerley@brycekerley.net
113
+ executables:
114
+ - charleston
115
+ extensions: []
116
+
117
+ extra_rdoc_files:
118
+ - LICENSE
119
+ - README.rdoc
120
+ files:
121
+ - .document
122
+ - .gitignore
123
+ - LICENSE
124
+ - README.rdoc
125
+ - Rakefile
126
+ - VERSION
127
+ - bin/charleston
128
+ - charleston.gemspec
129
+ - lib/charleston.rb
130
+ - lib/charleston/checks.rb
131
+ - lib/charleston/generator.rb
132
+ - lib/charleston/tasks.rb
133
+ - lib/charleston/tasks/css.rake
134
+ - lib/charleston/tasks/directories.rake
135
+ - lib/charleston/tasks/html.rake
136
+ - lib/charleston/tasks/image.rake
137
+ - lib/charleston/tasks/js.rake
138
+ - lib/charleston/template/Rakefile
139
+ - lib/charleston/template/javascripts/example.coffee
140
+ - lib/charleston/template/pages/index.haml
141
+ - lib/charleston/template/stylesheets/screen.sass
142
+ - lib/charleston/transform.rb
143
+ - test/fixture/pages/about.haml
144
+ - test/fixture/pages/contact.html
145
+ - test/fixture/pages/dev.html
146
+ - test/fixture/pages/index.haml
147
+ - test/helper.rb
148
+ - test/test_charleston.rb
149
+ - test/test_checks.rb
150
+ - test/test_transform.rb
151
+ has_rdoc: true
152
+ homepage: http://github.com/bkerley/charleston
153
+ licenses: []
154
+
155
+ post_install_message:
156
+ rdoc_options:
157
+ - --charset=UTF-8
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ hash: 3
166
+ segments:
167
+ - 0
168
+ version: "0"
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ hash: 3
175
+ segments:
176
+ - 0
177
+ version: "0"
178
+ requirements: []
179
+
180
+ rubyforge_project:
181
+ rubygems_version: 1.3.7
182
+ signing_key:
183
+ specification_version: 3
184
+ summary: Static HTML site framework
185
+ test_files:
186
+ - test/helper.rb
187
+ - test/test_charleston.rb
188
+ - test/test_checks.rb
189
+ - test/test_transform.rb