staticmatic2 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +6 -3
  2. data/Gemfile.lock +10 -6
  3. data/{README.markdown → README.md} +24 -5
  4. data/Rakefile +4 -4
  5. data/VERSION.yml +2 -2
  6. data/bin/staticmatic +6 -4
  7. data/lib/staticmatic/ambiguous_template_error.rb +19 -0
  8. data/lib/staticmatic/base.rb +77 -52
  9. data/lib/staticmatic/configuration.rb +32 -9
  10. data/lib/staticmatic/helpers/assets_helper.rb +6 -5
  11. data/lib/staticmatic/helpers/current_path_helper.rb +4 -4
  12. data/lib/staticmatic/helpers/render_helper.rb +1 -12
  13. data/lib/staticmatic/helpers/tag_helper.rb +1 -1
  14. data/lib/staticmatic/mixins/build.rb +25 -61
  15. data/lib/staticmatic/mixins/render.rb +61 -103
  16. data/lib/staticmatic/mixins/rescue.rb +1 -1
  17. data/lib/staticmatic/server.rb +10 -29
  18. data/lib/staticmatic/templates/rescues/default.haml +1 -1
  19. data/lib/staticmatic.rb +2 -5
  20. data/spec/base_spec.rb +2 -2
  21. data/spec/compass_integration_spec.rb +3 -2
  22. data/spec/helpers/asset_helper_spec.rb +1 -3
  23. data/spec/helpers/custom_helper_spec.rb +1 -2
  24. data/spec/render_spec.rb +4 -4
  25. data/spec/rescue_spec.rb +3 -3
  26. data/spec/sandbox/test_site/site/sub_folder/another_sub_folder/index.html +1 -0
  27. data/spec/sandbox/test_site/site/sub_folder/another_sub_folder/index.html.html +1 -0
  28. data/spec/sandbox/test_site/site/sub_folder/index.html +1 -0
  29. data/spec/sandbox/test_site/src/{helpers → _helpers}/application_helper.rb +0 -0
  30. data/spec/sandbox/test_site/src/{layouts → _layouts}/alternate_layout.haml +0 -0
  31. data/spec/sandbox/test_site/src/{layouts → _layouts}/default.haml +0 -0
  32. data/spec/sandbox/test_site/src/{layouts → _layouts}/projects.haml +0 -0
  33. data/spec/sandbox/test_site/src/{partials → _partials}/menu.haml +0 -0
  34. data/spec/sandbox/test_site/src/{partials → _partials}/partial_with_error.haml +0 -0
  35. data/spec/sandbox/test_site/src/{pages/hello_world.erb → hello_world.erb} +0 -0
  36. data/spec/sandbox/test_site/src/{pages/index.haml → index.haml} +0 -0
  37. data/spec/sandbox/test_site/src/{pages/layout_test.haml → layout_test.haml} +0 -0
  38. data/spec/sandbox/test_site/src/{pages/page_one.haml → page_one.haml} +0 -0
  39. data/spec/sandbox/test_site/src/{pages/page_two.haml → page_two.haml} +0 -0
  40. data/spec/sandbox/test_site/src/{pages/page_with_error.haml → page_with_error.haml} +0 -0
  41. data/spec/sandbox/test_site/src/{pages/page_with_partial_error.haml → page_with_partial_error.haml} +0 -0
  42. data/spec/server_spec.rb +1 -1
  43. data/spec/spec_helper.rb +1 -1
  44. data/spec/template_error_spec.rb +3 -3
  45. data/staticmatic2.gemspec +43 -54
  46. metadata +72 -62
  47. data/spec/setup_spec.rb +0 -22
data/Gemfile CHANGED
@@ -1,13 +1,16 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "haml", ">= 2.0.0"
3
+ gem "haml", "~> 3"
4
+ gem "sass", "~> 3"
5
+ gem "tilt", ">= 1.3"
4
6
  gem "compass"
7
+
5
8
  gem "rack", ">= 1.0"
6
9
  gem "thor", ">=0.14.6"
7
10
  gem "aws-s3"
8
11
 
9
12
  group :development do
10
- gem "bundler", ">= 1.0.10"
11
- gem "jeweler", ">= 1.5.2"
13
+ gem "bundler", "~> 1.0"
14
+ gem "jeweler", "~> 1.6"
12
15
  gem "rspec", "~> 1.3.1"
13
16
  end
data/Gemfile.lock CHANGED
@@ -10,15 +10,17 @@ GEM
10
10
  haml (>= 3.0.4)
11
11
  git (1.2.5)
12
12
  haml (3.0.25)
13
- jeweler (1.5.2)
14
- bundler (~> 1.0.0)
13
+ jeweler (1.6.4)
14
+ bundler (~> 1.0)
15
15
  git (>= 1.2.5)
16
16
  rake
17
17
  mime-types (1.16)
18
18
  rack (1.2.1)
19
- rake (0.8.7)
19
+ rake (0.9.2)
20
20
  rspec (1.3.1)
21
+ sass (3.1.7)
21
22
  thor (0.14.6)
23
+ tilt (1.3.3)
22
24
  xml-simple (1.0.14)
23
25
 
24
26
  PLATFORMS
@@ -26,10 +28,12 @@ PLATFORMS
26
28
 
27
29
  DEPENDENCIES
28
30
  aws-s3
29
- bundler (>= 1.0.10)
31
+ bundler (~> 1.0)
30
32
  compass
31
- haml (>= 2.0.0)
32
- jeweler (>= 1.5.2)
33
+ haml (~> 3)
34
+ jeweler (~> 1.6)
33
35
  rack (>= 1.0)
34
36
  rspec (~> 1.3.1)
37
+ sass (~> 3)
35
38
  thor (>= 0.14.6)
39
+ tilt (>= 1.3)
@@ -7,7 +7,7 @@
7
7
  - [Coffeescript](http://jashkenas.github.com/coffee-script/)
8
8
  - [Compass](compass-style.org)
9
9
  - [Amazon S3 Websites](http://aws.typepad.com/aws/2011/02/host-your-static-website-on-amazon-s3.html)
10
- - And more to come
10
+ - [And many, many more!](https://github.com/rtomayko/tilt#readme)
11
11
 
12
12
  2: Deploy to Amazon S3:
13
13
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  ## Quick Start
34
34
 
35
- Instantly setup a new project:
35
+ Setup a new project:
36
36
 
37
37
  $ staticmatic init my-project
38
38
 
@@ -63,13 +63,24 @@ To build & convert your haml/sass/whatever files into plain html, css, and javas
63
63
 
64
64
  This will convert everything into a freshly generated `build/` folder, 100% static.
65
65
 
66
- If you have an Amazon S3 account and want to deploy to your bucket, run the following command:
66
+ If you have an [Amazon S3 account](http://aws.amazon.com/s3/) and want to deploy to your bucket, run the following command:
67
67
 
68
68
  # NOTE: You must be in the root folder of your project
69
69
  $ staticmatic s3_deploy
70
70
 
71
71
  If you haven't deployed your current project to Amazon yet, it will prompt you to create a config file. Edit this file to include your credentials, run the command again, and you're set.
72
72
 
73
+ ## Super Special Awesome Quick Start Booster
74
+
75
+ Want to use a [Javascript App Starter](https://github.com/mindeavor/staticmatic-js-app-starter) or a skeleton of your own? Check this out!
76
+
77
+ $ staticmatic add js-app git://github.com/mindeavor/staticmatic-js-app-starter.git
78
+ $ staticmatic init my-new-project --skeleton=js-app
79
+
80
+ The first line stores a named reference to a repository of your choosing. You only need to do this once.
81
+
82
+ The second line clones the referenced repository into a freshly created `my-new-project` folder, as well as removes the `.git/` folder so you can do your own `git init`. Convenient!
83
+
73
84
  ## Special Folders
74
85
 
75
86
  <my-project>/
@@ -95,7 +106,7 @@ Partials are searched for in the following order:
95
106
 
96
107
  Examples:
97
108
 
98
- # Searches for the default rendering engine file type
109
+ # Searches for the default rendering engine file type (by default, it is haml)
99
110
  = partial 'sidebar'
100
111
 
101
112
  # Equivalent to the above statement
@@ -105,7 +116,7 @@ Examples:
105
116
  = partial 'help-content.html'
106
117
 
107
118
  # Use your own directory structure
108
- = partial 'blog-content/2011/vacation.html'
119
+ = partial 'blog-content/2011/vacation.markdown'
109
120
 
110
121
  ## Anti-Cache
111
122
 
@@ -122,3 +133,11 @@ Force the browser to ignore its cache whenever you damn well feel like it:
122
133
  javascripts :app, :qstring => '2.0.6'
123
134
 
124
135
  <script language="javascript" src="js/app.js?_=2.0.6" type="text/javascript"></script>
136
+
137
+ # Roadmap / TODO list
138
+
139
+ - Fix slowness of executable (built on [Thor](https://github.com/wycats/thor); maybe reconsider?)
140
+ - Create a cache that monitors what files have changed in between Amazon S3 uploads to reduce unnecessary uploads
141
+ - Integrate sprockets both for building and for previewing (probably as an option flag)
142
+ - Change rendering and yielding syntax to rails syntax
143
+ - Create a command that converts a staticmatic project to a rails project
data/Rakefile CHANGED
@@ -18,13 +18,13 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.name = "staticmatic2"
19
19
  gem.email = "gilbertbgarza@gmail.com"
20
20
  gem.license = "MIT"
21
- gem.summary = "Build static websites using modern dynamic tools"
22
- gem.homepage = "http://github.com/mindeavor/staticmatic"
21
+ gem.summary = "Build Amazon S3 static websites using modern dynamic tools"
22
+ gem.homepage = "http://github.com/mindeavor/staticmatic2"
23
23
  gem.executables = "staticmatic"
24
24
  gem.authors = ["Stephen Bartholomew", "Gilbert B Garza"]
25
25
 
26
26
  gem.description = <<-EOF
27
- StaticMatic helps you quickly create maintainable static websites using
27
+ StaticMatic helps you quickly create maintainable Amazon S3 static websites using
28
28
  tools such as Haml and Sass.
29
29
 
30
30
  Quickly deploy to services such as Amazon S3 in a single command.
@@ -36,7 +36,7 @@ Jeweler::Tasks.new do |gem|
36
36
  gem.files.exclude "spec/sandbox/tmp", "spec/sandbox/test_site/site/*"
37
37
  end
38
38
 
39
- # Jeweler::RubygemsDotOrgTasks.new
39
+ Jeweler::RubygemsDotOrgTasks.new
40
40
 
41
41
  Spec::Rake::SpecTask.new(:spec) do |spec|
42
42
  spec.libs << 'lib' << 'spec'
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 2
3
- :minor: 0
4
- :patch: 2
3
+ :minor: 1
4
+ :patch: 0
5
5
  :build: !!null
data/bin/staticmatic CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
+ require 'pathname'
3
4
  require 'thor'
4
5
 
5
- lib_dir = File.dirname(__FILE__) + '/../lib/staticmatic'
6
+ $lib_dir = Pathname.new(__FILE__).realpath.dirname.join('../lib/staticmatic').to_s
6
7
 
7
- require lib_dir
8
- Dir[File.join lib_dir,'deployers','*.rb'].each do |deployer|
8
+ Dir[File.join $lib_dir,'deployers','*.rb'].each do |deployer|
9
9
  require deployer
10
10
  end
11
11
 
@@ -56,6 +56,7 @@ class StaticExe < Thor
56
56
  desc "preview DIRECTORY", "Start a web server to preview your project"
57
57
  def preview(directory = '.')
58
58
  say 'Launching preview server...', :cyan
59
+ require $lib_dir
59
60
  staticmatic = StaticMatic::Base.new(directory)
60
61
  $:.push File.join(directory, "lib")
61
62
  staticmatic.run('preview')
@@ -64,7 +65,8 @@ class StaticExe < Thor
64
65
  desc "build DIRECTORY", "Build your project into a freshly generated build/ folder"
65
66
  def build(directory = '.')
66
67
  say 'Building website...', :cyan
67
- staticmatic = StaticMatic::Base.new(directory)
68
+ require $lib_dir
69
+ staticmatic = StaticMatic::Base.new(directory, :build)
68
70
  $:.push File.join(directory, "lib")
69
71
  staticmatic.run('build')
70
72
  end
@@ -0,0 +1,19 @@
1
+ class StaticMatic::AmbiguousTemplateError < StandardError
2
+ attr_reader :template_name
3
+
4
+ def initialize(template_name, ambiguous_templates)
5
+ @template_name = template_name
6
+ @ambiguous_templates = ambiguous_templates
7
+ end
8
+
9
+ def message
10
+ <<-MESSAGE
11
+ Ambiguous request when searching for a template for filename `#{@template_name}`:
12
+ There is more than one type of template available for rendering.
13
+
14
+ Templates causing the ambiguity:
15
+ #{@ambiguous_templates.join "\n"}
16
+ MESSAGE
17
+ end
18
+
19
+ end
@@ -8,62 +8,65 @@ module StaticMatic
8
8
  include StaticMatic::ServerMixin
9
9
  include StaticMatic::RescueMixin
10
10
 
11
- attr_accessor :configuration
12
- attr_reader :current_page, :src_dir, :site_dir
11
+ attr_accessor :configuration, :mode
12
+ attr_reader :src_dir, :site_dir
13
13
 
14
14
  def current_file
15
15
  @current_file_stack[0] || ""
16
16
  end
17
-
18
- def initialize(base_dir, configuration = Configuration.new)
19
- @configuration = configuration
20
- @current_page = nil
17
+
18
+ def self.extensions
19
+ @extensions ||= (Tilt.mappings.map { |k,v| k } << "slim")
20
+ end
21
+
22
+ def extensions
23
+ self.class.extensions
24
+ end
25
+
26
+ def ensure_extension(filename)
27
+ ext = File.extname(filename)
28
+ ext.length > 0 ? filename : "#{filename}.#{configuration.default_template_engine}"
29
+ end
30
+
31
+ def initialize(base_dir, mode = :preview)
32
+ @configuration = Configuration.new
21
33
  @current_file_stack = []
34
+ @mode = mode
35
+
22
36
  @base_dir = base_dir
23
37
  @src_dir = File.join(@base_dir, "src")
24
38
  @site_dir = File.join(@base_dir, "build")
25
-
26
- if File.exists?(File.join(@src_dir, "_layouts", "application.haml"))
27
- puts "DEPRECATION: _layouts/application.haml will be renamed to _layouts/default.haml in 0.12.0"
28
- @default_layout = "application"
29
- else
30
- @default_layout = "default"
31
- end
32
-
39
+
40
+ @default_layout_name = "default"
41
+
33
42
  @scope = Object.new
34
43
  @scope.instance_variable_set("@staticmatic", self)
44
+ @scope.instance_eval do
45
+ extend StaticMatic::Helpers
46
+ end
35
47
 
36
48
  load_configuration
37
49
  configure_compass
38
50
 
39
51
  load_helpers
40
52
  end
41
-
53
+
42
54
  def load_configuration
43
55
  configuration = StaticMatic::Configuration.new
44
56
  config_file = File.join(@base_dir, "config", "site.rb")
45
-
46
- if !File.exists?(config_file)
47
- config_file = File.join(@base_dir, "src", "configuration.rb")
48
-
49
- if File.exists?(config_file)
50
- puts "DEPRECATION: #{@base_dir}/src/configuration.rb will be moved to #{@base_dir}/config/site.rb in 0.12.0"
51
- end
52
- end
53
57
 
54
58
  if File.exists?(config_file)
55
59
  config = File.read(config_file)
56
60
  eval(config)
57
61
  end
58
62
 
59
- # Compass.sass_engine_options.merge!(configuration.sass_options)
60
63
  @configuration = configuration
61
64
  end
62
-
65
+
63
66
  def base_dir
64
67
  @base_dir
65
68
  end
66
-
69
+
67
70
  def run(command)
68
71
  puts "Site root is: #{@base_dir}"
69
72
 
@@ -73,39 +76,65 @@ module StaticMatic
73
76
  puts "#{command} is not a valid StaticMatic command"
74
77
  end
75
78
  end
76
-
77
- # TODO: DRY this _exists? section up
78
- def template_exists?(name, ext, dir = '')
79
- if ext == 'html'
80
- src_file_names('haml').include? "#{name}.haml"
81
- elsif ext == 'css'
82
- (src_file_names('sass').include? "#{name}.sass") ||
83
- (src_file_names('scss').include? "#{name}.scss")
84
- elsif ext == 'js'
85
- src_file_names('coffee').include? "#{name}.coffee"
79
+
80
+ def determine_template_path(name, ext, dir = '')
81
+ # remove src path if present
82
+ dir.gsub! /^#{@src_dir}\//, ''
83
+
84
+ default_template_name = "#{name}.#{configuration.default_template_engine}"
85
+ default_template = File.join(@src_dir, dir, default_template_name)
86
+
87
+ if File.exists? default_template
88
+ default_template
89
+ else
90
+ context = File.join(@src_dir, dir, name)
91
+ possible_templates = Dir[context + '.*'].select do |fname|
92
+ extensions.include? File.extname(fname).sub(/^\./, '')
93
+ end
94
+
95
+ if possible_templates.count > 1
96
+ raise StaticMatic::AmbiguousTemplateError.new("#{name}#{ext}", possible_templates)
97
+ end
98
+
99
+ possible_templates.first
86
100
  end
87
101
  end
88
-
89
- def layout_exists?(name)
90
- File.exists? full_layout_path(name)
91
- end
92
-
93
- def full_layout_path(name)
94
- File.join(@src_dir, "_layouts", "#{name}.haml")
102
+
103
+ def expand_path(path_info)
104
+ dirname, basename = File.split(path_info)
105
+
106
+ extname = File.extname(path_info).sub(/^\./, '')
107
+ filename = basename.chomp(".#{extname}")
108
+
109
+ if extname.empty?
110
+ dir = File.join(dirname, filename)
111
+ is_dir = path_info[-1, 1] == '/'
112
+ if is_dir
113
+ dirname = dir
114
+ filename = 'index'
115
+ end
116
+ extname = 'html'
117
+ end
118
+
119
+ [ dirname, filename, extname ]
95
120
  end
96
-
121
+
97
122
  def configure_compass
98
123
  Compass.configuration.project_path = @base_dir
99
124
 
100
125
  compass_config_path = File.join(@base_dir, "config", "compass.rb")
101
126
 
102
127
  if File.exists?(compass_config_path)
103
- Compass.add_configuration(compass_config_path)
128
+ Compass.add_configuration(compass_config_path)
104
129
  end
105
130
 
106
- configuration.sass_options.merge!(Compass.configuration.to_sass_engine_options)
131
+ options = configuration.engine_options
132
+ compass_options = Compass.configuration.to_sass_engine_options
133
+
134
+ options['sass'] = compass_options.merge(options['sass'] || {})
135
+ options['scss'] = compass_options.merge(options['scss'] || {})
107
136
  end
108
-
137
+
109
138
  # TODO OPTIMIZE: caching, maybe?
110
139
  def src_file_paths(*exts)
111
140
  Dir["#{@src_dir}/**/*.{#{ exts.join(',') }}"].reject do |path|
@@ -114,10 +143,6 @@ module StaticMatic
114
143
  path.split('/').map {|x| x.match('^\_')}.any?
115
144
  end
116
145
  end
117
-
118
- def src_file_names(*exts)
119
- src_file_paths(*exts).map {|p| File.split(p)[1]}
120
- end
121
-
146
+
122
147
  end
123
148
  end
@@ -1,20 +1,43 @@
1
1
  module StaticMatic
2
2
  class Configuration
3
- attr_accessor :preview_server_port
4
-
5
3
  attr_accessor :preview_server_host
4
+ attr_accessor :preview_server_port
6
5
 
7
6
  attr_accessor :use_extensions_for_page_links
8
- attr_accessor :sass_options
9
- attr_accessor :haml_options
10
- attr_accessor :coffee_options
7
+ attr_accessor :default_template_engine
8
+
9
+ attr_accessor :engine_options, :preview_engine_options
10
+ attr_accessor :reverse_ext_mappings
11
11
 
12
12
  def initialize
13
+ self.preview_server_host = "localhost"
13
14
  self.preview_server_port = 3000
15
+
14
16
  self.use_extensions_for_page_links = true
15
- self.sass_options = {}
16
- self.haml_options = {}
17
- self.coffee_options = ''
17
+ self.default_template_engine = 'haml'
18
+
19
+ self.preview_engine_options = self.engine_options = {
20
+ 'haml' => {}, 'sass' => {}, 'scss' => {},
21
+ }
22
+ # TODO: discover a way of auto-detecting these. one can hope.
23
+ self.reverse_ext_mappings = {
24
+ 'sass' => 'css',
25
+ 'scss' => 'css',
26
+ 'less' => 'css',
27
+
28
+ 'coffee' => 'js',
29
+
30
+ 'builder' => 'xml',
31
+ 'yajl' => 'json'
32
+ }
33
+
34
+ %w{
35
+ creole erb haml liquid radius mab markdown md
36
+ mediawiki mkd mw nokogiri rdoc rhtml slim textile wiki
37
+ }.each do |ext|
38
+ @reverse_ext_mappings[ext] = 'html'
39
+ end
18
40
  end
41
+
19
42
  end
20
- end
43
+ end
@@ -39,7 +39,7 @@ module StaticMatic
39
39
 
40
40
  # Generate javascript source tags for the specified files
41
41
  #
42
- # javascripts('test') -> <script language="javascript" src="javascripts/test.js"></script>
42
+ # javascripts('test') -> <script language="javascript" src="path/to/test.js"></script>
43
43
  #
44
44
  def javascripts(*files)
45
45
  options = (files.last.is_a? Hash) ? files.pop : {}
@@ -83,10 +83,11 @@ module StaticMatic
83
83
  filename_without_extension = File.basename(path).chomp(File.extname(path))
84
84
 
85
85
  path = path.gsub(/^#{@staticmatic.src_dir}/, "").
86
- gsub(/^#{@staticmatic.site_dir}/, "").
87
- gsub(/#{filename_without_extension}\.(sass|scss|css|js|coffee)/, "")
88
-
89
- src = File.join(current_page_relative_path, path, "#{filename_without_extension}")
86
+ gsub(/^#{@staticmatic.site_dir}/, "").
87
+ gsub(/#{filename_without_extension}\.(sass|scss|css|js|coffee)/, "").
88
+ gsub(/^\//, "")
89
+ paths = [current_page_relative_path, path, "#{filename_without_extension}"].compact
90
+ src = File.join(*paths)
90
91
  end
91
92
 
92
93
  if tag_type == :link
@@ -4,17 +4,17 @@ module StaticMatic
4
4
  self.extend self
5
5
 
6
6
  def current_page
7
- @staticmatic.current_page
7
+ @staticmatic.current_file
8
8
  end
9
9
 
10
10
  private
11
11
 
12
12
  def current_page_relative_path(current_path = nil)
13
13
  if current_path.nil? || current_path.match(/^((\.\.?)?\/|\#|.+?\:)/) == nil
14
- current_page_depth = current_page.split('/').length - 2;
15
- (current_page_depth > 0) ? ([ '..' ] * current_page_depth).join('/') + '/' : ''
14
+ current_page_depth = current_page.split('/').length - 3;
15
+ (current_page_depth > 0) ? ([ '..' ] * current_page_depth).join('/') + '/' : nil
16
16
  else
17
- ''
17
+ nil
18
18
  end
19
19
  end
20
20
  end
@@ -4,20 +4,9 @@ module StaticMatic
4
4
  module RenderHelper
5
5
  self.extend self
6
6
 
7
- def content_hash
8
- @content_hash ||= {}
9
- end
10
-
11
- def yield_for(index)
12
- self.content_hash[index.to_sym] || ""
13
- end
14
-
15
- def content_for(index,&block)
16
- content_hash[:sidebar] = capture_haml &block
17
- end
18
-
19
7
  # Include a partial template
20
8
  def partial(name, options = {})
9
+ name = @staticmatic.ensure_extension(name)
21
10
  @staticmatic.generate_partial(name, options)
22
11
  end
23
12
  end
@@ -20,7 +20,7 @@ module StaticMatic
20
20
  output << yield
21
21
  output << "</#{name}>"
22
22
  else
23
- format = @staticmatic.configuration.haml_options[:format]
23
+ format = @staticmatic.configuration.engine_options['haml'][:format]
24
24
 
25
25
  if format.nil? || format == :xhtml
26
26
  output << "/>"
@@ -1,77 +1,41 @@
1
1
  module StaticMatic::BuildMixin
2
2
 
3
3
  def build
4
- build_css
5
- build_js
6
- build_html
7
- copy_images
8
- end
9
-
10
- # Build HTML from the source files
11
- def build_html
12
- src_file_paths('haml').each do |path|
13
- file_dir, template = source_template_from_path(path.sub(/^#{@src_dir}/, ''))
14
- save_page(File.join(file_dir, template), generate_html_with_layout(template, file_dir))
15
- end
16
- end
4
+ src_file_paths('*').each do |src_path|
5
+ ext = File.extname(src_path).sub(/^\./, '')
17
6
 
18
- # Build CSS from the source files
19
- def build_css
20
- src_file_paths('sass','scss').each do |path|
21
- file_dir, template = source_template_from_path(path.sub(/^#{@src_dir}/, ''))
22
-
23
- if !template.match(/(^|\/)\_/)
24
- save_stylesheet(File.join(file_dir, template), generate_css(template, file_dir))
7
+ if Tilt.mappings[ext].length > 0
8
+ generate_site_file(src_path)
9
+ else
10
+ copy_file_from_src_to_site(src_path)
25
11
  end
26
12
  end
27
13
  end
28
-
29
- def build_js
30
- coffee_found = ENV['PATH'].split(':').inject(false) { |found, folder| found |= File.exists?("#{folder}/coffee") }
31
- if coffee_found
32
- src_file_paths('coffee').each do |path|
33
- file_dir, template = source_template_from_path(path.sub(/^#{@src_dir}/, ''))
34
- save_javascript(File.join(file_dir, template), generate_js(template, file_dir))
35
- end
36
- end
37
- # copy normal javascript files over
38
- src_file_paths('js').each do |path|
39
- file_dir, template = source_template_from_path(path.sub(/^#{@src_dir}/, ''))
40
- copy_file(path, File.join(@site_dir, file_dir, "#{template}.js"))
41
- end
42
- end
43
-
44
- def copy_images
45
- src_file_paths(*%w{gif jpg jpef png tiff}).each do |path|
46
- file_dir, file_name = File.split(path.sub(/^#{@src_dir}/, ''))
47
- copy_file(path, File.join(@site_dir, file_dir, file_name))
48
- end
49
- end
50
14
 
51
- def copy_file(from, to)
52
- FileUtils.mkdir_p(File.dirname(to))
53
- FileUtils.cp(from, to)
54
- end
15
+ private
55
16
 
56
- def save_page(filename, content)
57
- generate_site_file(filename, 'html', content)
58
- end
17
+ def copy_file_from_src_to_site(src_path)
18
+ site_path = src_path.gsub /^#{@src_dir}/, @site_dir
59
19
 
60
- def save_stylesheet(filename, content)
61
- generate_site_file(filename, 'css', content)
20
+ FileUtils.mkdir_p(File.dirname site_path)
21
+ FileUtils.cp src_path, site_path
62
22
  end
63
23
 
64
- def save_javascript(filename, content)
65
- generate_site_file(filename, 'js', content)
66
- end
24
+ def generate_site_file(src_path)
25
+ dir, name, ext = expand_path(src_path.gsub /^#{@src_dir}/, @site_dir)
26
+ target_ext = configuration.reverse_ext_mappings[ext]
27
+ site_path = File.join(dir, "#{name}.#{target_ext}")
67
28
 
68
- def generate_site_file(filename, extension, content)
69
- path = File.join(@site_dir,"#{filename}.#{extension}")
70
- FileUtils.mkdir_p(File.dirname(path))
71
- File.open(path, 'w+') do |f|
72
- f << content
29
+ puts " Rendered #{src_path} => #{site_path}"
30
+
31
+ FileUtils.mkdir_p(File.dirname site_path)
32
+ File.open(site_path, 'w+') do |f|
33
+ if target_ext == 'html'
34
+ f << render_template_with_layout(src_path)
35
+ else
36
+ f << render_template(src_path)
37
+ end
73
38
  end
74
-
75
- puts "created #{path}"
76
39
  end
40
+
77
41
  end