tdreyno-staticmatic 2.1.0 → 2.1.1
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/bin/staticmatic +2 -14
 - data/lib/staticmatic/actionpack_support/remove_controller_caching.rb +7 -0
 - data/lib/staticmatic/autoload.rb +16 -14
 - data/lib/staticmatic/base.rb +97 -126
 - data/lib/staticmatic/builder.rb +64 -86
 - data/lib/staticmatic/config.rb +31 -37
 - data/lib/staticmatic/previewer.rb +16 -28
 - data/lib/staticmatic/template_handlers/haml.rb +6 -10
 - data/lib/staticmatic/template_handlers/liquid.rb +3 -7
 - data/lib/staticmatic/template_handlers/markdown.rb +3 -7
 - data/lib/staticmatic/template_handlers/sass.rb +3 -7
 - data/lib/staticmatic/template_handlers/textile.rb +3 -7
 - data/lib/staticmatic.rb +16 -12
 - data/lib/templates/script/builder +6 -0
 - data/lib/templates/script/server +4 -0
 - data/spec/action_view_helpers_spec.rb +12 -0
 - data/spec/asset_helpers_spec.rb +22 -0
 - data/spec/base_spec.rb +42 -0
 - data/spec/builder_spec.rb +44 -0
 - data/spec/config_spec.rb +31 -0
 - data/spec/deprecation_spec.rb +18 -0
 - data/spec/fixtures/sample/Rakefile +4 -0
 - data/spec/fixtures/sample/build/haml_test.html +11 -0
 - data/spec/fixtures/sample/build/hello_world.html +9 -0
 - data/spec/fixtures/sample/build/index.html +9 -0
 - data/spec/fixtures/sample/build/page_with_error.html +61 -0
 - data/spec/fixtures/sample/build/services/index.html +9 -0
 - data/spec/fixtures/sample/build/services/web_development.html +9 -0
 - data/spec/fixtures/sample/build/stylesheets/site.css +3 -0
 - data/spec/fixtures/sample/config.rb +3 -0
 - data/spec/fixtures/sample/src/helpers/speech_helper.rb +5 -0
 - data/spec/fixtures/sample/src/layouts/site.html.erb +9 -0
 - data/spec/fixtures/sample/src/layouts/specified_layout.html.erb +3 -0
 - data/spec/fixtures/sample/src/pages/_form.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/haml_test.html.haml +3 -0
 - data/spec/fixtures/sample/src/pages/hello_world.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/index.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/liquid_test.html.liquid +3 -0
 - data/spec/fixtures/sample/src/pages/markdown_test.html.markdown +3 -0
 - data/spec/fixtures/sample/src/pages/page_with_error.html.haml +3 -0
 - data/spec/fixtures/sample/src/pages/services/index.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/services/web_development.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/specify_layout.html.erb +1 -0
 - data/spec/fixtures/sample/src/pages/textile_test.html.textile +3 -0
 - data/spec/fixtures/sample/src/stylesheets/site.css.sass +3 -0
 - data/spec/layouts_spec.rb +29 -0
 - data/spec/rendering_spec.rb +83 -0
 - metadata +78 -22
 - data/Rakefile +0 -12
 - data/app_generators/staticmatic/staticmatic_generator.rb +0 -74
 - data/app_generators/staticmatic/templates/Rakefile +0 -3
 - data/lib/staticmatic/rescue.rb +0 -14
 - data/lib/tasks/staticmatic.rb +0 -9
 - data/staticmatic.gemspec +0 -52
 - data/vendor/html-scanner/html/document.rb +0 -68
 - data/vendor/html-scanner/html/node.rb +0 -530
 - data/vendor/html-scanner/html/sanitizer.rb +0 -173
 - data/vendor/html-scanner/html/selector.rb +0 -828
 - data/vendor/html-scanner/html/tokenizer.rb +0 -105
 - data/vendor/html-scanner/html/version.rb +0 -11
 - /data/{app_generators/staticmatic → lib}/templates/src/helpers/site_helper.rb +0 -0
 - /data/{app_generators/staticmatic → lib}/templates/src/layouts/site.html.haml +0 -0
 - /data/{app_generators/staticmatic → lib}/templates/src/pages/index.html.haml +0 -0
 - /data/{app_generators/staticmatic → lib}/templates/src/stylesheets/site.css.sass +0 -0
 
    
        data/bin/staticmatic
    CHANGED
    
    | 
         @@ -1,17 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env ruby
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'rubygems'
         
     | 
| 
       4 
     | 
    
         
            -
            require ' 
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            if %w(-v --version).include? ARGV.first
         
     | 
| 
       7 
     | 
    
         
            -
              require 'staticmatic/version'
         
     | 
| 
       8 
     | 
    
         
            -
              puts "#{File.basename($0)} #{Staticmatic::VERSION::STRING}"
         
     | 
| 
       9 
     | 
    
         
            -
              exit(0)
         
     | 
| 
       10 
     | 
    
         
            -
            end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            require 'rubigen/scripts/generate'
         
     | 
| 
       13 
     | 
    
         
            -
            source = RubiGen::PathSource.new(:application, 
         
     | 
| 
       14 
     | 
    
         
            -
              File.join(File.dirname(__FILE__), "../app_generators"))
         
     | 
| 
       15 
     | 
    
         
            -
            RubiGen::Base.reset_sources
         
     | 
| 
       16 
     | 
    
         
            -
            RubiGen::Base.append_sources source
         
     | 
| 
       17 
     | 
    
         
            -
            RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'staticmatic')
         
     | 
| 
      
 4 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', 'lib', 'staticmatic', 'generator')
         
     | 
| 
      
 5 
     | 
    
         
            +
            StaticMatic::Generator.run_cli(Dir.pwd, 'staticmatic', 1, ["setup"].concat(ARGV))
         
     | 
    
        data/lib/staticmatic/autoload.rb
    CHANGED
    
    | 
         @@ -1,18 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module StaticMatic
         
     | 
| 
       2 
     | 
    
         
            -
              autoload : 
     | 
| 
       3 
     | 
    
         
            -
              autoload :Config,      ' 
     | 
| 
       4 
     | 
    
         
            -
              autoload : 
     | 
| 
       5 
     | 
    
         
            -
              autoload : 
     | 
| 
       6 
     | 
    
         
            -
              autoload : 
     | 
| 
      
 2 
     | 
    
         
            +
              autoload :Base,        File.join(File.dirname(__FILE__), 'base')
         
     | 
| 
      
 3 
     | 
    
         
            +
              autoload :Config,      File.join(File.dirname(__FILE__), 'config')
         
     | 
| 
      
 4 
     | 
    
         
            +
              autoload :Generator,   File.join(File.dirname(__FILE__), 'generator')
         
     | 
| 
      
 5 
     | 
    
         
            +
              autoload :Deprecation, File.join(File.dirname(__FILE__), 'deprecation')
         
     | 
| 
      
 6 
     | 
    
         
            +
              autoload :Previewer,   File.join(File.dirname(__FILE__), 'previewer')
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              module Helpers
         
     | 
| 
       9 
     | 
    
         
            -
                autoload :AssetTagHelper, 
     | 
| 
       10 
     | 
    
         
            -
                autoload : 
     | 
| 
       11 
     | 
    
         
            -
                autoload : 
     | 
| 
       12 
     | 
    
         
            -
                autoload :UrlHelper,         'staticmatic/helpers/url_helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
                autoload :AssetTagHelper, File.join(File.dirname(__FILE__), 'helpers', 'asset_tag_helper')
         
     | 
| 
      
 10 
     | 
    
         
            +
                autoload :PageHelper,     File.join(File.dirname(__FILE__), 'helpers', 'page_helper')
         
     | 
| 
      
 11 
     | 
    
         
            +
                autoload :UrlHelper,      File.join(File.dirname(__FILE__), 'helpers', 'url_helper')
         
     | 
| 
       13 
12 
     | 
    
         
             
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              module TemplateHandlers
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
              
         
     | 
| 
      
 17 
     | 
    
         
            +
              module Generator
         
     | 
| 
      
 18 
     | 
    
         
            +
                autoload :BuilderGenerator, File.join(File.dirname(__FILE__), 'builder')
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/staticmatic/base.rb
    CHANGED
    
    | 
         @@ -1,160 +1,131 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module StaticMatic
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Base
         
     | 
| 
       3 
     | 
    
         
            -
                include StaticMatic::Rescue
         
     | 
| 
       4 
3 
     | 
    
         
             
                include StaticMatic::Deprecation
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                attr_accessor :logger
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                attr_accessor :build_dir
         
     | 
| 
       9 
     | 
    
         
            -
                attr_accessor :src_dir
         
     | 
| 
       10 
     | 
    
         
            -
                attr_accessor :template
         
     | 
| 
       11 
     | 
    
         
            -
                attr_accessor :request
         
     | 
| 
       12 
     | 
    
         
            -
                
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :logger, :root_dir, :src_dir, :build_dir
         
     | 
| 
      
 6 
     | 
    
         
            +
              
         
     | 
| 
       13 
7 
     | 
    
         
             
                def initialize(root_dir)
         
     | 
| 
       14 
     | 
    
         
            -
                  @root_dir 
     | 
| 
       15 
     | 
    
         
            -
                  @src_dir 
     | 
| 
       16 
     | 
    
         
            -
                  @build_dir =  
     | 
| 
       17 
     | 
    
         
            -
                  load_helpers
         
     | 
| 
       18 
     | 
    
         
            -
                  initialize_config
         
     | 
| 
       19 
     | 
    
         
            -
                  initialize_logger
         
     | 
| 
       20 
     | 
    
         
            -
                  initialize_template
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @root_dir  = root_dir
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @src_dir   = File.join(@root_dir, "src")
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @build_dir = File.join(@root_dir, "build")
         
     | 
| 
       22 
11 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                  # Setup logger
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @logger = Logger.new(STDERR)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @logger.level = Logger::INFO
         
     | 
| 
      
 15 
     | 
    
         
            +
                
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # User config
         
     | 
| 
       24 
17 
     | 
    
         
             
                  StaticMatic::Config.setup
         
     | 
| 
       25 
18 
     | 
    
         
             
                  config_file = File.join(@root_dir, "config.rb")
         
     | 
| 
       26 
19 
     | 
    
         
             
                  require config_file if File.exists? config_file
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
                # Checks to see if a template exists within a given path 
         
     | 
| 
      
 23 
     | 
    
         
            +
                #
         
     | 
| 
      
 24 
     | 
    
         
            +
                # Current only used by the previewer as ActionView handles the actual checking
         
     | 
| 
      
 25 
     | 
    
         
            +
                def can_render?(filename)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  relative_path = full_template_path(filename)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  view.template_format = determine_format_for(relative_path)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  view.finder.class.reload!
         
     | 
| 
      
 29 
     | 
    
         
            +
                  view.finder.file_exists?(strip_extension(relative_path))
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              
         
     | 
| 
      
 32 
     | 
    
         
            +
                def rendered_ext(filename)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  regex = Regexp.new('\.(' + ActionView::Template.template_handler_extensions.join('|') + ')')
         
     | 
| 
      
 34 
     | 
    
         
            +
                  filename.gsub(regex, '')
         
     | 
| 
       29 
35 
     | 
    
         
             
                end
         
     | 
| 
       30 
36 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                # Return the format for a given template path 
         
     | 
| 
      
 38 
     | 
    
         
            +
                #
         
     | 
| 
      
 39 
     | 
    
         
            +
                # For example: application.css.sass -> :css
         
     | 
| 
      
 40 
     | 
    
         
            +
                def determine_format_for(filename)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  extension = File.extname(filename)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # For templates that have only handler extensions, default for backwards compatibility
         
     | 
| 
      
 44 
     | 
    
         
            +
                  extension = ".html" if extension.empty? || extension == ".haml"
         
     | 
| 
      
 45 
     | 
    
         
            +
                  extension = ".css"  if extension == ".sass"
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  extension[1,extension.length-1].to_sym
         
     | 
| 
       35 
48 
     | 
    
         
             
                end
         
     | 
| 
       36 
49 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                def  
     | 
| 
       38 
     | 
    
         
            -
                   
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
       41 
     | 
    
         
            -
                   
     | 
| 
      
 50 
     | 
    
         
            +
                def calculate_relative_path_to_root(template)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  return '' if template.match(/^((\.\.?)?\/|\#|.+?\:)/)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  current_page_depth = template.split('/').length - 2;
         
     | 
| 
      
 54 
     | 
    
         
            +
                  (current_page_depth > 0) ? ([ '..' ] * current_page_depth).join('/') + '/' : ''
         
     | 
| 
       42 
55 
     | 
    
         
             
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              
         
     | 
| 
      
 57 
     | 
    
         
            +
                def render(filename)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  load_helpers
         
     | 
| 
      
 59 
     | 
    
         
            +
                  output = do_render(filename)
         
     | 
| 
       43 
60 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                   
     | 
| 
       46 
     | 
    
         
            -
                   
     | 
| 
       47 
     | 
    
         
            -
                  
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
                  return output if determine_format_for(filename) == :css
         
     | 
| 
      
 62 
     | 
    
         
            +
                  layout = view.instance_variable_get("@layout")
         
     | 
| 
      
 63 
     | 
    
         
            +
                  layout = "site" if layout.nil?
         
     | 
| 
      
 64 
     | 
    
         
            +
                  return output unless layout
         
     | 
| 
      
 65 
     | 
    
         
            +
                
         
     | 
| 
      
 66 
     | 
    
         
            +
                  view.instance_variable_set("@content_for_layout", output)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  view.instance_variable_set("@layout", nil) # Clean @layout variable for next request
         
     | 
| 
      
 68 
     | 
    
         
            +
                  do_render("layouts/#{layout}")
         
     | 
| 
      
 69 
     | 
    
         
            +
                rescue Exception => e
         
     | 
| 
      
 70 
     | 
    
         
            +
                  rescue_from_error(e)
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
              
         
     | 
| 
      
 73 
     | 
    
         
            +
                def view
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @view ||= begin
         
     | 
| 
      
 75 
     | 
    
         
            +
                    # Initialize View
         
     | 
| 
      
 76 
     | 
    
         
            +
                    view = ActionView::Base.new([], {}, self)
         
     | 
| 
      
 77 
     | 
    
         
            +
                    view.template_format = :html
         
     | 
| 
      
 78 
     | 
    
         
            +
                    view.finder.view_paths = [ @src_dir ]
         
     | 
| 
      
 79 
     | 
    
         
            +
                    view.instance_variable_set("@staticmatic", self)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    view
         
     | 
| 
       52 
81 
     | 
    
         
             
                  end
         
     | 
| 
       53 
82 
     | 
    
         
             
                end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                 
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                   
     | 
| 
       58 
     | 
    
         
            -
                   
     | 
| 
       59 
     | 
    
         
            -
                  
         
     | 
| 
       60 
     | 
    
         
            -
                  @template.instance_variable_set("@current_page", template)
         
     | 
| 
       61 
     | 
    
         
            -
                  @template.instance_variable_set("@content_for_layout", content_for_layout)
         
     | 
| 
       62 
     | 
    
         
            -
                  
         
     | 
| 
       63 
     | 
    
         
            -
                  layout = @template.instance_variable_get("@layout")
         
     | 
| 
       64 
     | 
    
         
            -
                  
         
     | 
| 
       65 
     | 
    
         
            -
                  # Clean @layout variable for next request
         
     | 
| 
       66 
     | 
    
         
            -
                  @template.instance_variable_set("@layout", nil)
         
     | 
| 
       67 
     | 
    
         
            -
                  
         
     | 
| 
       68 
     | 
    
         
            -
                  layout ||= "site"
         
     | 
| 
       69 
     | 
    
         
            -
                  
         
     | 
| 
       70 
     | 
    
         
            -
                  render("layouts/#{layout}")
         
     | 
| 
      
 83 
     | 
    
         
            +
              
         
     | 
| 
      
 84 
     | 
    
         
            +
                def do_render(filename)
         
     | 
| 
      
 85 
     | 
    
         
            +
                  filename = full_template_path(filename)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  view.instance_variable_set("@current_page", filename)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  view.template_format = determine_format_for(filename)
         
     | 
| 
      
 88 
     | 
    
         
            +
                  view.render_file(strip_extension(filename), true)
         
     | 
| 
       71 
89 
     | 
    
         
             
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
              
         
     | 
| 
      
 91 
     | 
    
         
            +
                def rescue_from_error(exception)
         
     | 
| 
      
 92 
     | 
    
         
            +
                  rescue_template     = (exception == ActionView::TemplateError) ? "template_error" : "default_error"
         
     | 
| 
      
 93 
     | 
    
         
            +
                  error_template_path = File.expand_path(File.dirname(__FILE__) + "/templates/rescues/#{rescue_template}.html.erb")
         
     | 
| 
       72 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                  view.instance_variable_set("@exception", exception)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  view.render_file(error_template_path, false)
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
              
         
     | 
| 
       73 
99 
     | 
    
         
             
                # Load all helpers from src/helpers/
         
     | 
| 
       74 
100 
     | 
    
         
             
                def load_helpers
         
     | 
| 
       75 
     | 
    
         
            -
                  Dir[ 
     | 
| 
       76 
     | 
    
         
            -
                    load 
     | 
| 
      
 101 
     | 
    
         
            +
                  Dir[File.join(@src_dir, 'helpers', '**', '*_helper.rb')].each do |helper|
         
     | 
| 
      
 102 
     | 
    
         
            +
                    load(helper)
         
     | 
| 
       77 
103 
     | 
    
         
             
                    module_name = File.basename(helper, '.rb').gsub(/(^|\_)./) { |c| c.upcase }.gsub(/\_/, '')
         
     | 
| 
       78 
104 
     | 
    
         
             
                    ActionView::Base.class_eval("include #{module_name}")
         
     | 
| 
       79 
105 
     | 
    
         
             
                  end
         
     | 
| 
       80 
106 
     | 
    
         
             
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
              
         
     | 
| 
      
 108 
     | 
    
         
            +
                # Full path to a template, relative to src/
         
     | 
| 
      
 109 
     | 
    
         
            +
                def full_template_path(template)
         
     | 
| 
      
 110 
     | 
    
         
            +
                  template  = template.gsub("#{@src_dir}/", '')
         
     | 
| 
      
 111 
     | 
    
         
            +
                  directory = template_directory_for(template)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  template  = File.join(directory, template) unless directory.empty?
         
     | 
| 
      
 113 
     | 
    
         
            +
                
         
     | 
| 
      
 114 
     | 
    
         
            +
                  path     = File.join(File.expand_path(src_dir), template)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  template = File.join(template, "index") if File.directory? path
         
     | 
| 
       81 
116 
     | 
    
         | 
| 
      
 117 
     | 
    
         
            +
                  template
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
              
         
     | 
| 
       82 
120 
     | 
    
         
             
                # Return the source directory for a given template
         
     | 
| 
       83 
     | 
    
         
            -
                #
         
     | 
| 
       84 
121 
     | 
    
         
             
                # Default is pages/
         
     | 
| 
       85 
     | 
    
         
            -
                #
         
     | 
| 
       86 
122 
     | 
    
         
             
                def template_directory_for(template)
         
     | 
| 
       87 
     | 
    
         
            -
                   
     | 
| 
       88 
     | 
    
         
            -
                  
         
     | 
| 
       89 
     | 
    
         
            -
                  %w(stylesheets layouts).each do |directory|
         
     | 
| 
       90 
     | 
    
         
            -
                    template_directory = "" if template.match(/^(\/)?#{directory}/)
         
     | 
| 
       91 
     | 
    
         
            -
                  end
         
     | 
| 
       92 
     | 
    
         
            -
                  
         
     | 
| 
       93 
     | 
    
         
            -
                  template_directory
         
     | 
| 
       94 
     | 
    
         
            -
                end
         
     | 
| 
       95 
     | 
    
         
            -
                
         
     | 
| 
       96 
     | 
    
         
            -
                # Return the format for a given template path 
         
     | 
| 
       97 
     | 
    
         
            -
                #
         
     | 
| 
       98 
     | 
    
         
            -
                # For example: application.css.sass -> :css
         
     | 
| 
       99 
     | 
    
         
            -
                #
         
     | 
| 
       100 
     | 
    
         
            -
                def determine_format_for(template)
         
     | 
| 
       101 
     | 
    
         
            -
                  ext_matches = template.match /\.([a-z0-9]+)/
         
     | 
| 
       102 
     | 
    
         
            -
                  
         
     | 
| 
       103 
     | 
    
         
            -
                  # For templates that have only handler extensions, default for backwards compatibility
         
     | 
| 
       104 
     | 
    
         
            -
                  if ext_matches
         
     | 
| 
       105 
     | 
    
         
            -
                    unless template.match(/\.([a-z0-9]+)\./)
         
     | 
| 
       106 
     | 
    
         
            -
                      case ext_matches[1]
         
     | 
| 
       107 
     | 
    
         
            -
                      when "sass"
         
     | 
| 
       108 
     | 
    
         
            -
                        extension = :css
         
     | 
| 
       109 
     | 
    
         
            -
                      when "haml"
         
     | 
| 
       110 
     | 
    
         
            -
                        extension = :html
         
     | 
| 
       111 
     | 
    
         
            -
                      end
         
     | 
| 
       112 
     | 
    
         
            -
                    end
         
     | 
| 
       113 
     | 
    
         
            -
                    
         
     | 
| 
       114 
     | 
    
         
            -
                    extension = ext_matches[1].to_sym unless extension
         
     | 
| 
       115 
     | 
    
         
            -
                  else
         
     | 
| 
       116 
     | 
    
         
            -
                    extension = :html
         
     | 
| 
       117 
     | 
    
         
            -
                  end
         
     | 
| 
       118 
     | 
    
         
            -
                  
         
     | 
| 
       119 
     | 
    
         
            -
                  extension
         
     | 
| 
      
 123 
     | 
    
         
            +
                  template.match(/^(\/)?(layouts|stylesheets|pages)/) ? "" : "pages"
         
     | 
| 
       120 
124 
     | 
    
         
             
                end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
      
 125 
     | 
    
         
            +
              
         
     | 
| 
       122 
126 
     | 
    
         
             
                # Remove the extension from a given template path
         
     | 
| 
       123 
127 
     | 
    
         
             
                def strip_extension(template)
         
     | 
| 
       124 
     | 
    
         
            -
                  template. 
     | 
| 
       125 
     | 
    
         
            -
                end
         
     | 
| 
       126 
     | 
    
         
            -
                
         
     | 
| 
       127 
     | 
    
         
            -
                # Checks to see if a template exists within a given path 
         
     | 
| 
       128 
     | 
    
         
            -
                #
         
     | 
| 
       129 
     | 
    
         
            -
                # Current only used by the previewer as ActionView handles the actual checking
         
     | 
| 
       130 
     | 
    
         
            -
                def can_render?(template)
         
     | 
| 
       131 
     | 
    
         
            -
                  @template.template_format = determine_format_for(template)
         
     | 
| 
       132 
     | 
    
         
            -
                  template = strip_extension(template)
         
     | 
| 
       133 
     | 
    
         
            -
                  @template.finder.class.reload!
         
     | 
| 
       134 
     | 
    
         
            -
                  @template.finder.file_exists?(full_template_path(template))
         
     | 
| 
       135 
     | 
    
         
            -
                end
         
     | 
| 
       136 
     | 
    
         
            -
                
         
     | 
| 
       137 
     | 
    
         
            -
                # Adds 'index' to a given template path if the path is a directory
         
     | 
| 
       138 
     | 
    
         
            -
                # Will render as path/index.html
         
     | 
| 
       139 
     | 
    
         
            -
                #
         
     | 
| 
       140 
     | 
    
         
            -
                def add_index_if_needed(template)
         
     | 
| 
       141 
     | 
    
         
            -
                  File.directory?(File.join(File.expand_path(@src_dir), template)) ?
         
     | 
| 
       142 
     | 
    
         
            -
                    File.join(template, "index") :
         
     | 
| 
       143 
     | 
    
         
            -
                    template
         
     | 
| 
      
 128 
     | 
    
         
            +
                  template.split('.').first
         
     | 
| 
       144 
129 
     | 
    
         
             
                end
         
     | 
| 
       145 
     | 
    
         
            -
                
         
     | 
| 
       146 
     | 
    
         
            -
                # Full path to a template, relative to src/
         
     | 
| 
       147 
     | 
    
         
            -
                def full_template_path(template)
         
     | 
| 
       148 
     | 
    
         
            -
                  add_index_if_needed(File.join(template_directory_for(template), template))
         
     | 
| 
       149 
     | 
    
         
            -
                end
         
     | 
| 
       150 
     | 
    
         
            -
                
         
     | 
| 
       151 
     | 
    
         
            -
                def calculate_relative_path_to_root(template)
         
     | 
| 
       152 
     | 
    
         
            -
                  if template.match(/^((\.\.?)?\/|\#|.+?\:)/) == nil
         
     | 
| 
       153 
     | 
    
         
            -
                    current_page_depth = template.split('/').length - 2;
         
     | 
| 
       154 
     | 
    
         
            -
                    (current_page_depth > 0) ? ([ '..' ] * current_page_depth).join('/') + '/' : ''
         
     | 
| 
       155 
     | 
    
         
            -
                  else
         
     | 
| 
       156 
     | 
    
         
            -
                    ''
         
     | 
| 
       157 
     | 
    
         
            -
                  end
         
     | 
| 
       158 
     | 
    
         
            -
                end    
         
     | 
| 
       159 
130 
     | 
    
         
             
              end
         
     | 
| 
       160 
131 
     | 
    
         
             
            end
         
     | 
    
        data/lib/staticmatic/builder.rb
    CHANGED
    
    | 
         @@ -1,102 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'templater'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module StaticMatic
         
     | 
| 
       2 
     | 
    
         
            -
               
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       4 
     | 
    
         
            -
                
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
                   
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
                  @last_build   = File.read(versions_file).split(/\n/)[0] if File.exists?(versions_file)
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
                
         
     | 
| 
       17 
     | 
    
         
            -
                def log_version
         
     | 
| 
       18 
     | 
    
         
            -
                  return unless StaticMatic::Config[:use_build_tracking]
         
     | 
| 
       19 
     | 
    
         
            -
                  timestamp = Time.now.strftime("%Y%m%d%H%M%S")
         
     | 
| 
       20 
     | 
    
         
            -
                  versions_file = @staticmatic.root_dir + "/builds"
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Generator
         
     | 
| 
      
 5 
     | 
    
         
            +
                extend Templater::Manifold
         
     | 
| 
      
 6 
     | 
    
         
            +
                desc "Multiple ways to build a staticmatic site"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                class BuilderGenerator < Templater::Generator
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # Setup StaticMatic site
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def self.site; @@site ||= ::StaticMatic::Base.new(Dir.pwd); end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  def site;      self.class.site; end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  # Define source and desintation
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def self.source_root; site.src_dir; end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  def destination_root; site.build_dir; end
         
     | 
| 
       21 
16 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                     
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                  # Override the base template to handle haml/sass/layouts
         
     | 
| 
      
 18 
     | 
    
         
            +
                  option :format, :default => :html, :desc => "Which format to export as (html, rails, dotnet)"
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def self.template(name, *args, &block)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    # template = case format
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #   when :rails
         
     | 
| 
      
 22 
     | 
    
         
            +
                    #     RailsTemplate
         
     | 
| 
      
 23 
     | 
    
         
            +
                    #   when :dotnet
         
     | 
| 
      
 24 
     | 
    
         
            +
                    #     DotNetTemplate
         
     | 
| 
      
 25 
     | 
    
         
            +
                    #   else
         
     | 
| 
      
 26 
     | 
    
         
            +
                    #     HTMLTemplate
         
     | 
| 
      
 27 
     | 
    
         
            +
                    # end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    options = args.last.is_a?(Hash) ? args.pop : {}
         
     | 
| 
      
 30 
     | 
    
         
            +
                    source, destination = args
         
     | 
| 
      
 31 
     | 
    
         
            +
                    destination ||= source
         
     | 
| 
      
 32 
     | 
    
         
            +
                    templates << Templater::ActionDescription.new(name, options) do |generator|
         
     | 
| 
      
 33 
     | 
    
         
            +
                      HTMLTemplate.new(generator, name, source, destination, options)
         
     | 
| 
       32 
34 
     | 
    
         
             
                    end
         
     | 
| 
       33 
35 
     | 
    
         
             
                  end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                       
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
                  
         
     | 
| 
      
 37 
     | 
    
         
            +
                  %w(images javascripts stylesheets pages).each do |dir|
         
     | 
| 
      
 38 
     | 
    
         
            +
                    base_path = File.join(source_root, dir)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    Dir[File.join(base_path, "**", "*")].each do |path|
         
     | 
| 
      
 40 
     | 
    
         
            +
                      next if File.directory?(path)
         
     | 
| 
      
 41 
     | 
    
         
            +
                      relative_path = path.gsub("#{source_root}/", "")
         
     | 
| 
      
 42 
     | 
    
         
            +
                      
         
     | 
| 
      
 43 
     | 
    
         
            +
                      if !%w(images javascripts).include?(dir) && site.can_render?(relative_path)
         
     | 
| 
      
 44 
     | 
    
         
            +
                        destination_path = site.rendered_ext(relative_path)
         
     | 
| 
      
 45 
     | 
    
         
            +
                      
         
     | 
| 
      
 46 
     | 
    
         
            +
                        if dir == 'pages'
         
     | 
| 
      
 47 
     | 
    
         
            +
                          destination_path.gsub!("pages/", "")
         
     | 
| 
      
 48 
     | 
    
         
            +
                          next if destination_path =~ /^_/
         
     | 
| 
       43 
49 
     | 
    
         
             
                        end
         
     | 
| 
      
 50 
     | 
    
         
            +
                        
         
     | 
| 
      
 51 
     | 
    
         
            +
                        template :rendered_file, relative_path,  destination_path
         
     | 
| 
       44 
52 
     | 
    
         
             
                      else
         
     | 
| 
       45 
     | 
    
         
            -
                         
     | 
| 
       46 
     | 
    
         
            -
                        base_template_name = base_template_name_for(path)
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                        @staticmatic.template.template_format = format
         
     | 
| 
       49 
     | 
    
         
            -
                        build_file_path = "#{build_path_for(path)}"
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                        if !StaticMatic::Config[:use_build_tracking] || should_overwrite?(path, build_file_path)
         
     | 
| 
       52 
     | 
    
         
            -
                          output = (format == "html") ? 
         
     | 
| 
       53 
     | 
    
         
            -
                            @staticmatic.render_with_layout(base_template_name) : 
         
     | 
| 
       54 
     | 
    
         
            -
                            @staticmatic.render(base_template_name)
         
     | 
| 
       55 
     | 
    
         
            -
                                      
         
     | 
| 
       56 
     | 
    
         
            -
                          output_prefix = "#{template_path}/" if template_path != "pages"
         
     | 
| 
       57 
     | 
    
         
            -
                          save_built_file(build_file_path, output)
         
     | 
| 
       58 
     | 
    
         
            -
                        end
         
     | 
| 
      
 53 
     | 
    
         
            +
                        file :static_file, relative_path
         
     | 
| 
       59 
54 
     | 
    
         
             
                      end
         
     | 
| 
       60 
55 
     | 
    
         
             
                    end
         
     | 
| 
       61 
56 
     | 
    
         
             
                  end
         
     | 
| 
       62 
57 
     | 
    
         
             
                end
         
     | 
| 
       63 
58 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                 
     | 
| 
       65 
     | 
    
         
            -
                   
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
                
         
     | 
| 
       69 
     | 
    
         
            -
                def file_changed?(src_file)
         
     | 
| 
       70 
     | 
    
         
            -
                  template_modification_time = File.stat(src_file).mtime.strftime("%Y%m%d%H%M%S")
         
     | 
| 
       71 
     | 
    
         
            -
                  template_modification_time.to_i > @last_build.to_i
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
                
         
     | 
| 
       74 
     | 
    
         
            -
                # Strip off src file path and extension
         
     | 
| 
       75 
     | 
    
         
            -
                def base_template_name_for(path)
         
     | 
| 
       76 
     | 
    
         
            -
                  path.gsub("#{@staticmatic.root_dir}/", "").
         
     | 
| 
       77 
     | 
    
         
            -
                       gsub(/^src\//, '').
         
     | 
| 
       78 
     | 
    
         
            -
                       gsub(/^pages\//, '').
         
     | 
| 
       79 
     | 
    
         
            -
                       gsub(/\.[a-z]+$/, '')
         
     | 
| 
       80 
     | 
    
         
            -
                end
         
     | 
| 
       81 
     | 
    
         
            -
                
         
     | 
| 
       82 
     | 
    
         
            -
                # Return an output filename
         
     | 
| 
       83 
     | 
    
         
            -
                def build_path_for(path)
         
     | 
| 
       84 
     | 
    
         
            -
                  File.join(@staticmatic.build_dir, base_template_name_for(path))
         
     | 
| 
       85 
     | 
    
         
            -
                end
         
     | 
| 
       86 
     | 
    
         
            -
                
         
     | 
| 
       87 
     | 
    
         
            -
                # Save contents to the specified file with the given extension to the build directory
         
     | 
| 
       88 
     | 
    
         
            -
                def save_built_file(path, contents)
         
     | 
| 
       89 
     | 
    
         
            -
                  @staticmatic.logger.info("Generating #{path}")
         
     | 
| 
       90 
     | 
    
         
            -
                  File.open(path, 'w+') do |f|
         
     | 
| 
       91 
     | 
    
         
            -
                    f << contents
         
     | 
| 
      
 59 
     | 
    
         
            +
                class HTMLTemplate < Templater::Actions::Template
         
     | 
| 
      
 60 
     | 
    
         
            +
                  def render
         
     | 
| 
      
 61 
     | 
    
         
            +
                    generator.site.render(source)
         
     | 
| 
       92 
62 
     | 
    
         
             
                  end
         
     | 
| 
       93 
63 
     | 
    
         
             
                end
         
     | 
| 
       94 
64 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
                class  
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                 
     | 
| 
      
 65 
     | 
    
         
            +
                # class RailsTemplate < Templater::Actions::Template
         
     | 
| 
      
 66 
     | 
    
         
            +
                #   def render
         
     | 
| 
      
 67 
     | 
    
         
            +
                #     # No render, just copy it
         
     | 
| 
      
 68 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 69 
     | 
    
         
            +
                # end
         
     | 
| 
      
 70 
     | 
    
         
            +
                #
         
     | 
| 
      
 71 
     | 
    
         
            +
                # class DotNetTemplate < Templater::Actions::Template
         
     | 
| 
      
 72 
     | 
    
         
            +
                #   def render
         
     | 
| 
      
 73 
     | 
    
         
            +
                #     # Wrap with MasterPage tags
         
     | 
| 
      
 74 
     | 
    
         
            +
                #     @staticmatic.render(file_name) # no layout
         
     | 
| 
      
 75 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 76 
     | 
    
         
            +
                # end
         
     | 
| 
      
 77 
     | 
    
         
            +
                
         
     | 
| 
      
 78 
     | 
    
         
            +
                add :build, BuilderGenerator
         
     | 
| 
       101 
79 
     | 
    
         
             
              end
         
     | 
| 
       102 
80 
     | 
    
         
             
            end
         
     | 
    
        data/lib/staticmatic/config.rb
    CHANGED
    
    | 
         @@ -1,47 +1,41 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
              class  
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       4 
     | 
    
         
            -
                   
     | 
| 
       5 
     | 
    
         
            -
                     
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
      
 1 
     | 
    
         
            +
            class StaticMatic::Config
         
     | 
| 
      
 2 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 3 
     | 
    
         
            +
                def defaults
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @defaults ||= {
         
     | 
| 
      
 5 
     | 
    
         
            +
                    :host               => "0.0.0.0",
         
     | 
| 
      
 6 
     | 
    
         
            +
                    :port               => "3000",
         
     | 
| 
      
 7 
     | 
    
         
            +
                    :sass_options       => {},
         
     | 
| 
      
 8 
     | 
    
         
            +
                    :haml_options       => {},
         
     | 
| 
      
 9 
     | 
    
         
            +
                    :use_build_tracking => true
         
     | 
| 
      
 10 
     | 
    
         
            +
                  }
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  
         
     | 
| 
       18 
     | 
    
         
            -
                  def use
         
     | 
| 
       19 
     | 
    
         
            -
                    yield @configuration
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                def setup(settings = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @configuration = defaults.merge(settings)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
       21 
16 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                def key?(key)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @configuration.key?(key)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
       25 
20 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                def [](key)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  (@configuration||={})[key]
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
       29 
24 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                def []=(key,val)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @configuration[key] = val
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
       33 
28 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
                def delete(key)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @configuration.delete(key)
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
       37 
32 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
                def fetch(key, default)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @configuration.fetch(key, default)
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
       41 
36 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                def to_hash
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @configuration
         
     | 
| 
       45 
39 
     | 
    
         
             
                end
         
     | 
| 
       46 
40 
     | 
    
         
             
              end
         
     | 
| 
       47 
41 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,37 +2,27 @@ require 'mongrel' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module StaticMatic
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Previewer < Mongrel::HttpHandler
         
     | 
| 
       5 
     | 
    
         
            -
                @@file_only_methods = %w(GET HEAD)
         
     | 
| 
       6 
     | 
    
         
            -
             
         
     | 
| 
       7 
5 
     | 
    
         
             
                def initialize(staticmatic)
         
     | 
| 
       8 
     | 
    
         
            -
                  @files 
     | 
| 
      
 6 
     | 
    
         
            +
                  @files       = Mongrel::DirHandler.new(staticmatic.src_dir, false)
         
     | 
| 
       9 
7 
     | 
    
         
             
                  @staticmatic = staticmatic
         
     | 
| 
       10 
8 
     | 
    
         
             
                end
         
     | 
| 
       11 
9 
     | 
    
         | 
| 
       12 
10 
     | 
    
         
             
                def process(request, response)
         
     | 
| 
       13 
     | 
    
         
            -
                  path_info 
     | 
| 
       14 
     | 
    
         
            -
                  get_or_head =  
     | 
| 
      
 11 
     | 
    
         
            +
                  path_info   = request.params[Mongrel::Const::PATH_INFO].chomp("/")
         
     | 
| 
      
 12 
     | 
    
         
            +
                  get_or_head = %w(GET HEAD).include? request.params[Mongrel::Const::REQUEST_METHOD]
         
     | 
| 
       15 
13 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                  if  
     | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                     
     | 
| 
       20 
     | 
    
         
            -
                      file_ext = File.extname(path_info).gsub(/^\./, '') 
         
     | 
| 
       21 
     | 
    
         
            -
                      file_ext = "html" if file_ext.blank?
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                      file_name = path_info.chomp(".#{file_ext}")
         
     | 
| 
       24 
     | 
    
         
            -
                      file_name = CGI::unescape(file_name)
         
     | 
| 
       25 
     | 
    
         
            -
                      file_name.gsub!(/^\//, '')
         
     | 
| 
       26 
     | 
    
         
            -
                    
         
     | 
| 
       27 
     | 
    
         
            -
                      head["Content-Type"] = "text/#{file_ext}"
         
     | 
| 
       28 
     | 
    
         
            -
                      output = ""
         
     | 
| 
      
 14 
     | 
    
         
            +
                  if StaticMatic::Base.can_render? path_info  
         
     | 
| 
      
 15 
     | 
    
         
            +
                    file_ext  = File.extname(path_info).gsub(/^\./, '')
         
     | 
| 
      
 16 
     | 
    
         
            +
                    file_ext  = "html" if file_ext.blank?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    file_name = CGI::unescape(path_info.chomp(".#{file_ext}")).gsub!(/^\//, '')
         
     | 
| 
       29 
18 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                      output = ( 
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
                    response.start(200) do |head, out|
         
     | 
| 
      
 20 
     | 
    
         
            +
                      output = Template.new(file_name).render
         
     | 
| 
      
 21 
     | 
    
         
            +
                      head[Mongrel::Const::CONTENT_TYPE] = Mongrel::DirHandler::MIME_TYPES[".#{file_ext}"] || "application/octet-stream"
         
     | 
| 
      
 22 
     | 
    
         
            +
                      out.write(output || "")
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end  
         
     | 
| 
      
 24 
     | 
    
         
            +
                  elsif get_or_head and @files.can_serve(path_info)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @files.process(request, response) # try to serve static file from site dir
         
     | 
| 
       36 
26 
     | 
    
         
             
                  end
         
     | 
| 
       37 
27 
     | 
    
         
             
                end
         
     | 
| 
       38 
28 
     | 
    
         | 
| 
         @@ -40,8 +30,7 @@ module StaticMatic 
     | 
|
| 
       40 
30 
     | 
    
         
             
                  # Starts the StaticMatic preview server
         
     | 
| 
       41 
31 
     | 
    
         
             
                  def start(staticmatic)
         
     | 
| 
       42 
32 
     | 
    
         
             
                    staticmatic = StaticMatic::Base.new(staticmatic) if staticmatic.is_a? String
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                    config = Mongrel::Configurator.new :host => StaticMatic::Config[:host] do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    Mongrel::Configurator.new :host => StaticMatic::Config[:host] do
         
     | 
| 
       45 
34 
     | 
    
         
             
                      puts "Running Preview of #{staticmatic.root_dir} on port #{StaticMatic::Config[:port]}"
         
     | 
| 
       46 
35 
     | 
    
         
             
                      listener :port => StaticMatic::Config[:port] do
         
     | 
| 
       47 
36 
     | 
    
         
             
                        uri "/", :handler => Previewer.new(staticmatic)
         
     | 
| 
         @@ -49,8 +38,7 @@ module StaticMatic 
     | 
|
| 
       49 
38 
     | 
    
         
             
                      end
         
     | 
| 
       50 
39 
     | 
    
         
             
                      trap("INT") { stop }
         
     | 
| 
       51 
40 
     | 
    
         
             
                      run
         
     | 
| 
       52 
     | 
    
         
            -
                    end
         
     | 
| 
       53 
     | 
    
         
            -
                    config.join
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end.join
         
     | 
| 
       54 
42 
     | 
    
         
             
                  end
         
     | 
| 
       55 
43 
     | 
    
         
             
                end
         
     | 
| 
       56 
44 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1,18 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'haml'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'haml/engine'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
       6 
     | 
    
         
            -
                class Haml < ActionView::TemplateHandler
         
     | 
| 
       7 
     | 
    
         
            -
                  include ActionView::TemplateHandlers::Compilable
         
     | 
| 
      
 4 
     | 
    
         
            +
            class StaticMatic::TemplateHandlers::Haml < ActionView::TemplateHandler
         
     | 
| 
      
 5 
     | 
    
         
            +
              include ActionView::TemplateHandlers::Compilable
         
     | 
| 
       8 
6 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
              def compile(template, local_assigns = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                options = StaticMatic::Config[:haml_options].dup
         
     | 
| 
      
 9 
     | 
    
         
            +
                options[:filename] = template.filename
         
     | 
| 
       12 
10 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                ::Haml::Engine.new(template.source, options).send(:precompiled_with_ambles, [])
         
     | 
| 
       16 
12 
     | 
    
         
             
              end
         
     | 
| 
       17 
13 
     | 
    
         
             
            end
         
     | 
| 
       18 
14 
     | 
    
         |