beans-middleman 1.0.5

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.
Files changed (85) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +15 -0
  3. data/Rakefile +9 -0
  4. data/bin/mm-build +15 -0
  5. data/bin/mm-init +37 -0
  6. data/bin/mm-preview +12 -0
  7. data/bin/mm-server +67 -0
  8. data/features/builder.feature +16 -0
  9. data/features/coffee-script.feature +7 -0
  10. data/features/generator.feature +8 -0
  11. data/features/helpers_auto_stylesheet_link_tag.feature +17 -0
  12. data/features/helpers_page_classes.feature +17 -0
  13. data/features/less-css.feature +7 -0
  14. data/features/minify_css.feature +22 -0
  15. data/features/minify_javascript.feature +12 -0
  16. data/features/padrino_helpers.feature +10 -0
  17. data/features/page_alias_and_layouts.feature +12 -0
  18. data/features/scss-support.feature +7 -0
  19. data/features/step_definitions/asset_host_steps.rb +7 -0
  20. data/features/step_definitions/builder_steps.rb +23 -0
  21. data/features/step_definitions/env.rb +3 -0
  22. data/features/step_definitions/generator_steps.rb +30 -0
  23. data/features/step_definitions/middleman_steps.rb +29 -0
  24. data/features/step_definitions/page_layout_steps.rb +13 -0
  25. data/features/w_asset_host.feature +12 -0
  26. data/features/x_automatic_image_sizes.feature +14 -0
  27. data/features/y_cache_buster.feature +22 -0
  28. data/features/z_relative_assets.feature +12 -0
  29. data/fixtures/test-app/config.rb +28 -0
  30. data/fixtures/test-app/public/images/blank.gif +0 -0
  31. data/fixtures/test-app/public/static.html +1 -0
  32. data/fixtures/test-app/public/stylesheets/auto-css.css +0 -0
  33. data/fixtures/test-app/public/stylesheets/static.css +2 -0
  34. data/fixtures/test-app/public/stylesheets/sub1/auto-css.css +0 -0
  35. data/fixtures/test-app/public/stylesheets/sub1/sub2/auto-css.css +0 -0
  36. data/fixtures/test-app/views/_partial.haml +1 -0
  37. data/fixtures/test-app/views/asset_host.html.haml +1 -0
  38. data/fixtures/test-app/views/auto-css.html.haml +1 -0
  39. data/fixtures/test-app/views/auto-image-sizes.html.haml +1 -0
  40. data/fixtures/test-app/views/cache-buster.html.haml +2 -0
  41. data/fixtures/test-app/views/custom-layout.html.haml +1 -0
  42. data/fixtures/test-app/views/index.html.haml +1 -0
  43. data/fixtures/test-app/views/inline-css.html.haml +4 -0
  44. data/fixtures/test-app/views/inline-js.html.haml +7 -0
  45. data/fixtures/test-app/views/javascripts/coffee_test.js.coffee +3 -0
  46. data/fixtures/test-app/views/layout.haml +6 -0
  47. data/fixtures/test-app/views/layouts/custom.haml +5 -0
  48. data/fixtures/test-app/views/padrino_test.html.haml +5 -0
  49. data/fixtures/test-app/views/page-classes.html.haml +1 -0
  50. data/fixtures/test-app/views/services/index.html.haml +1 -0
  51. data/fixtures/test-app/views/stylesheets/asset_host.css.sass +3 -0
  52. data/fixtures/test-app/views/stylesheets/relative_assets.css.sass +3 -0
  53. data/fixtures/test-app/views/stylesheets/site.css.sass +1 -0
  54. data/fixtures/test-app/views/stylesheets/site_scss.css.scss +1 -0
  55. data/fixtures/test-app/views/stylesheets/test_less.css.less +5 -0
  56. data/lib/middleman/assets.rb +33 -0
  57. data/lib/middleman/builder.rb +60 -0
  58. data/lib/middleman/config.ru +2 -0
  59. data/lib/middleman/features/asset_host.rb +22 -0
  60. data/lib/middleman/features/automatic_image_sizes/fastimage.rb +287 -0
  61. data/lib/middleman/features/automatic_image_sizes.rb +33 -0
  62. data/lib/middleman/features/cache_buster.rb +44 -0
  63. data/lib/middleman/features/code_ray.rb +12 -0
  64. data/lib/middleman/features/default_helpers.rb +61 -0
  65. data/lib/middleman/features/live_reload.rb +21 -0
  66. data/lib/middleman/features/minify_css.rb +10 -0
  67. data/lib/middleman/features/minify_javascript/rack.rb +31 -0
  68. data/lib/middleman/features/minify_javascript.rb +21 -0
  69. data/lib/middleman/features/partials.rb +15 -0
  70. data/lib/middleman/features/relative_assets.rb +36 -0
  71. data/lib/middleman/features/slickmap/template.html.haml +27 -0
  72. data/lib/middleman/features/slickmap.rb +89 -0
  73. data/lib/middleman/features/smush_pngs.rb +38 -0
  74. data/lib/middleman/features/ugly_haml.rb +8 -0
  75. data/lib/middleman/features.rb +37 -0
  76. data/lib/middleman/renderers/haml.rb +42 -0
  77. data/lib/middleman/renderers/sass.rb +70 -0
  78. data/lib/middleman/server.rb +165 -0
  79. data/lib/middleman/template/config.rbt +64 -0
  80. data/lib/middleman/template/views/index.html.haml +4 -0
  81. data/lib/middleman/template/views/layout.haml +13 -0
  82. data/lib/middleman/template/views/stylesheets/site.css.sass +27 -0
  83. data/lib/middleman/templater+dynamic_renderer.rb +26 -0
  84. data/lib/middleman.rb +15 -0
  85. metadata +452 -0
@@ -0,0 +1,36 @@
1
+ module Middleman::Features::RelativeAssets
2
+ class << self
3
+ def registered(app)
4
+ ::Compass.configuration.relative_assets = true
5
+
6
+ Middleman::Assets.register :relative_assets do |path, prefix, request|
7
+ begin
8
+ prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path
9
+ rescue
10
+ end
11
+
12
+ if path.include?("://")
13
+ Middleman::Assets.before(:relative_assets, path, prefix, request)
14
+ elsif path[0,1] == "/"
15
+ path
16
+ else
17
+ path = File.join(prefix, path) if prefix.length > 0
18
+ request_path = request.path_info.dup
19
+ request_path << Middleman::Server.index_file if path.match(%r{/$})
20
+ request_path.gsub!(%r{^/}, '')
21
+ parts = request_path.split('/')
22
+
23
+ if parts.length > 1
24
+ arry = []
25
+ (parts.length - 1).times { arry << ".." }
26
+ arry << path
27
+ File.join(*arry)
28
+ else
29
+ path
30
+ end
31
+ end
32
+ end
33
+ end
34
+ alias :included :registered
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ !!!
2
+ %html{ :xmlns => "http://www.w3.org/1999/xhtml" }
3
+ %head
4
+ %meta{ :content => "text/html; charset=utf-8", "http-equiv" => "Content-type" }
5
+ %title Sitemap
6
+ %style{ :type => "text/css" }
7
+ :sass
8
+ @import "slickmap"
9
+ +slickmap
10
+ :javascript
11
+ window.onload = function() {
12
+ document.getElementById('primaryNav').className = "col" + document.querySelectorAll("#primaryNav > li:not(#home)").length;
13
+ };
14
+
15
+ %body
16
+ .logo
17
+ %h1= @project_name || "Sitemap"
18
+ - if @project_subtitle
19
+ %h2= @project_subtitle
20
+
21
+ - if @utility.length > 0
22
+ %ul#utilityNav
23
+ - @utility.each do |u|
24
+ %li= link_to u, u
25
+
26
+ %ul#primaryNav
27
+ - sitemap_node(@tree, true)
@@ -0,0 +1,89 @@
1
+ Entry = Struct.new(:dir, :children)
2
+
3
+ module Middleman::Features::Slickmap
4
+ class << self
5
+ def registered(app)
6
+ require 'slickmap'
7
+
8
+ @sitemap_url = config[:url] || "sitemap.html"
9
+
10
+ if Middleman::Server.environment == :build
11
+ Middleman::Builder.template :slickmap, @sitemap_url, @sitemap_url
12
+ end
13
+
14
+ Middleman::Server.helpers do
15
+ def sitemap_node(n, first=false)
16
+ if n.children.length < 1
17
+ if !first && File.extname(n.dir).length > 0
18
+ haml_tag :li do
19
+ path = n.dir.gsub(self.class.views, '')
20
+ haml_concat link_to(File.basename(path), path)
21
+ end
22
+ end
23
+ else
24
+ haml_tag(:li, :id => first ? "home" : nil) do
25
+ if first
26
+ haml_concat link_to("Homepage", "/" + self.class.index_file)
27
+ else
28
+ # we are a dir
29
+ index = n.children.find { |c| c.dir.include?(self.class.index_file) }
30
+ haml_concat link_to(index.dir.gsub(self.class.views + "/", '').gsub("/" + File.basename(index.dir), '').capitalize, index.dir.gsub(self.class.views, ''))
31
+ end
32
+
33
+ other_children = n.children.select { |c| !c.dir.include?(self.class.index_file) }
34
+ if other_children.length > 0
35
+ if first
36
+ other_children.each { |i| sitemap_node(i) }
37
+ else
38
+ haml_tag :ul do
39
+ other_children.each { |i| sitemap_node(i) }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ Middleman::Server.get "/#{@sitemap_url}" do
49
+ # Return :utility to put it util top menu. False to ignore
50
+ @tree, @utility = Middleman::Features::Slickmap.build_sitemap do |file_name|
51
+ :valid
52
+ end
53
+
54
+ haml "template.html".to_sym, :layout => false, :views => File.expand_path(File.join(File.dirname(__FILE__), "slickmap"))
55
+ end
56
+ end
57
+ alias :included :registered
58
+ end
59
+
60
+ def self.build_sitemap(&block)
61
+ @@utility = []
62
+ [recurse_sitemap(Middleman::Server.views, &block), @@utility]
63
+ end
64
+
65
+ def self.recurse_sitemap(path, &block)
66
+ bad_ext = path.split('.html')[1]
67
+ path = path.gsub(bad_ext, '') if bad_ext
68
+ entry = Entry.new(path, [])
69
+
70
+ #no "." or ".." dirs
71
+ Dir[File.join(path, "*")].each do |e|
72
+ next if !File.directory?(e) && !e.include?(".html")
73
+ if File.directory?(e)
74
+ entry.children << recurse_sitemap(e, &block)
75
+ elsif block_given?
76
+ how_to_handle = block.call(e)
77
+ if how_to_handle == :valid
78
+ entry.children << recurse_sitemap(e, &block)
79
+ elsif how_to_handle == :utility
80
+ bad_ext = e.split('.html')[1]
81
+ e = e.gsub(bad_ext, '') if bad_ext
82
+ @@utility << e.gsub(Middleman::Server.views + "/", '')
83
+ end
84
+ end
85
+ end
86
+
87
+ entry
88
+ end
89
+ end
@@ -0,0 +1,38 @@
1
+ module Middleman::Features::SmushPNGs
2
+ class << self
3
+ def registered(app)
4
+ require "middleman/builder"
5
+
6
+ app.alias_method :pre_smush_after_run, :after_run
7
+ app.define_method :after_run do
8
+ pre_smush_after_run
9
+ smush_dir = File.join(Middleman::Server.build_dir, Middleman::Server.images_dir)
10
+
11
+ # Read cache
12
+ cache_file = File.join(Middleman::Server.root, ".smush-cache")
13
+ cache_data = if File.exists?(cache_file)
14
+ Marshal.restore(File.read(cache_file))
15
+ else
16
+ {}
17
+ end
18
+
19
+ require "smusher"
20
+ require "json/pure"
21
+ ::Smusher.class_eval do
22
+ images_in_folder(smush_dir).each do |file|
23
+ original_file_size = size(file)
24
+ return if original_file_size.zero?
25
+ return if cache_data[file] && cache_data[file] == original_file_size
26
+
27
+ with_logging(file, true) do
28
+ write_optimized_data(file)
29
+ cache_data[file] = size(file) # Add or update cache
30
+ File.open(cache_file, "w") { |f| f.write Marshal.dump(cache_data) } # Write cache
31
+ say "<%= color('#{"[SMUSHED]".rjust(12)}', :yellow) %> " + file.gsub(Middleman::Server.build_dir+"/", '')
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ module Middleman::Features::UglyHaml
2
+ class << self
3
+ def registered(app)
4
+ app.set :haml, app.settings.haml.merge({ :ugly_haml => true })
5
+ end
6
+ alias :included :registered
7
+ end
8
+ end
@@ -0,0 +1,37 @@
1
+ module Middleman::Features
2
+ autoload :RelativeAssets, "middleman/features/relative_assets"
3
+ autoload :AssetHost, "middleman/features/asset_host"
4
+ autoload :CacheBuster, "middleman/features/cache_buster"
5
+ autoload :DefaultHelpers, "middleman/features/default_helpers"
6
+ autoload :AutomaticImageSizes, "middleman/features/automatic_image_sizes"
7
+ autoload :UglyHaml, "middleman/features/ugly_haml"
8
+ autoload :MinifyCss, "middleman/features/minify_css"
9
+ autoload :MinifyJavascript, "middleman/features/minify_javascript"
10
+ autoload :Slickmap, "middleman/features/slickmap"
11
+ autoload :SmushPNGs, "middleman/features/smush_pngs"
12
+ autoload :CodeRay, "middleman/features/code_ray"
13
+ autoload :Partials, "middleman/features/partials"
14
+ # autoload :LiveReload, "middleman/features/live_reload"
15
+
16
+ class << self
17
+ def registered(app)
18
+ app.extend ClassMethods
19
+ end
20
+ alias :included :registered
21
+ end
22
+
23
+ module ClassMethods
24
+ def activate(feature_name)
25
+ mod_name = feature_name.to_s.camelize
26
+ if Middleman::Features.const_defined?(mod_name)
27
+ register Middleman::Features.const_get(mod_name)
28
+ end
29
+ end
30
+
31
+ def enable(feature_name)
32
+ $stderr.puts "Warning: Feature activation has been renamed from enable to activate"
33
+ activate(feature_name)
34
+ super(feature_name)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ require "haml"
2
+
3
+ module Middleman
4
+ module Renderers
5
+ module Haml
6
+ class << self
7
+ def registered(app)
8
+ app.helpers Middleman::Renderers::Haml::Helpers
9
+ end
10
+ alias :included :registered
11
+ end
12
+
13
+ module Helpers
14
+ def haml_partial(name, options = {})
15
+ partial(name, options)
16
+ end
17
+ end
18
+
19
+ module Table
20
+ include ::Haml::Filters::Base
21
+
22
+ def render(text)
23
+ output = '<div class="table"><table cellspacing="0" cellpadding="0">'
24
+ line_num = 0
25
+ text.each_line do |line|
26
+ line_num += 1
27
+ next if line.strip.empty?
28
+ output << %Q{<tr class="#{(line_num % 2 == 0) ? "even" : "odd" }#{(line_num == 1) ? " first" : "" }">}
29
+
30
+ columns = line.split("|").map { |p| p.strip }
31
+ columns.each_with_index do |col, i|
32
+ output << %Q{<td class="col#{i+1}">#{col}</td>}
33
+ end
34
+
35
+ output << "</tr>"
36
+ end
37
+ output + "</table></div>"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,70 @@
1
+ require "sass"
2
+ require "compass"
3
+ require "lemonade"
4
+
5
+ module Middleman
6
+ module Renderers
7
+ module Sass
8
+ class << self
9
+ def registered(app)
10
+ app.after_feature_init do
11
+ ::Compass.configuration do |config|
12
+ config.cache_path = File.join(self.root, ".sass-cache") # For sassc files
13
+ config.project_path = self.root
14
+ config.sass_dir = File.join(File.basename(self.views), self.css_dir)
15
+ config.output_style = :nested
16
+ config.fonts_dir = File.join(File.basename(self.public), self.fonts_dir)
17
+ config.css_dir = File.join(File.basename(self.public), self.css_dir)
18
+ config.images_dir = File.join(File.basename(self.public), self.images_dir)
19
+ config.http_images_path = self.http_images_path rescue File.join(self.http_prefix || "/", self.images_dir)
20
+ config.http_stylesheets_path = self.http_css_path rescue File.join(self.http_prefix || "/", self.css_dir)
21
+ config.asset_cache_buster { false }
22
+
23
+ config.add_import_path(config.sass_dir)
24
+ end
25
+
26
+ configure :build do
27
+ ::Compass.configuration do |config|
28
+ config.css_dir = File.join(File.basename(self.build_dir), self.css_dir)
29
+ config.images_dir = File.join(File.basename(self.build_dir), self.images_dir)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ alias :included :registered
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ class Tilt::SassPlusCSSFilenameTemplate < Tilt::SassTemplate
41
+ def sass_options
42
+ location_of_sass_file = Middleman::Server.environment == :build ?
43
+ File.join(Middleman::Server.root, Middleman::Server.build_dir) :
44
+ Middleman::Server.public
45
+
46
+ parts = basename.split('.')
47
+ parts.pop
48
+ css_filename = File.join(location_of_sass_file, Middleman::Server.css_dir, parts.join("."))
49
+ super.merge(::Compass.configuration.to_sass_engine_options).merge(:css_filename => css_filename)
50
+ end
51
+ end
52
+ Tilt.register 'sass', Tilt::SassPlusCSSFilenameTemplate
53
+
54
+ class Tilt::ScssPlusCSSFilenameTemplate < Tilt::SassPlusCSSFilenameTemplate
55
+ def sass_options
56
+ super.merge(:syntax => :scss)
57
+ end
58
+ end
59
+ Tilt.register 'scss', Tilt::ScssPlusCSSFilenameTemplate
60
+
61
+
62
+ module Middleman::Renderers::Haml
63
+ module Sass
64
+ include ::Haml::Filters::Base
65
+
66
+ def render(text)
67
+ ::Sass::Engine.new(text, ::Compass.configuration.to_sass_engine_options).render
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,165 @@
1
+ # We're riding on Sinatra, so let's include it.
2
+ require "sinatra/base"
3
+
4
+ # Use the padrino project's helpers
5
+ require "padrino-core/application/rendering"
6
+ require "padrino-helpers"
7
+
8
+ module Middleman
9
+ class Server < Sinatra::Base
10
+ # Basic Sinatra config
11
+ set :app_file, __FILE__
12
+ set :root, ENV["MM_DIR"] || Dir.pwd
13
+ set :reload, false
14
+ set :sessions, false
15
+ set :logging, false
16
+ set :environment, (ENV['MM_ENV'] && ENV['MM_ENV'].to_sym) || :development
17
+
18
+ # Import padrino helper methods
19
+
20
+ # Middleman-specific options
21
+ set :index_file, "index.html" # What file responds to folder requests
22
+ # Such as the homepage (/) or subfolders (/about/)
23
+
24
+ # These directories are passed directly to Compass
25
+ set :js_dir, "javascripts" # Where to look for javascript files
26
+ set :css_dir, "stylesheets" # Where to look for CSS files
27
+ set :images_dir, "images" # Where to look for images
28
+ set :fonts_dir, "fonts" # Where to look for fonts
29
+
30
+ set :build_dir, ENV['MM_ENV'] || 'build' # Which folder are builds output to
31
+ set :http_prefix, nil # During build, add a prefix for absolute paths
32
+
33
+ # Use Padrino Helpers
34
+ register Padrino::Helpers
35
+ set :asset_stamp, false # Disable Padrino cache buster until explicitly enabled
36
+
37
+ # Activate custom features
38
+ register Middleman::Features
39
+
40
+ # Activate built-in helpers
41
+ register Middleman::Features::DefaultHelpers
42
+
43
+ # Tilt-aware renderer
44
+ register Padrino::Rendering
45
+
46
+ # Override Sinatra's set to accept a block
47
+ def self.set(option, value=self, &block)
48
+ if block_given?
49
+ value = Proc.new { block }
50
+ end
51
+
52
+ super(option, value, &nil)
53
+ end
54
+
55
+ # An array of callback procs to run after all features have been setup
56
+ @@run_after_features = []
57
+
58
+ # Add a block/proc to be run after features have been setup
59
+ def self.after_feature_init(&block)
60
+ @@run_after_features << block
61
+ end
62
+
63
+ # Activate custom renderers
64
+ register Middleman::Renderers::Haml
65
+ register Middleman::Renderers::Sass
66
+
67
+ # Rack helper for adding mime-types during local preview
68
+ def self.mime(ext, type)
69
+ ext = ".#{ext}" unless ext.to_s[0] == ?.
70
+ ::Rack::Mime::MIME_TYPES[ext.to_s] = type
71
+ end
72
+
73
+ # Default layout name
74
+ layout :layout
75
+
76
+ def self.current_layout
77
+ @layout
78
+ end
79
+
80
+ # Takes a block which allows many pages to have the same layout
81
+ # with_layout :admin do
82
+ # page "/admin/"
83
+ # page "/admin/login.html"
84
+ # end
85
+ def self.with_layout(layout_name, &block)
86
+ old_layout = current_layout
87
+
88
+ layout(layout_name)
89
+ class_eval(&block) if block_given?
90
+ ensure
91
+ layout(old_layout)
92
+ end
93
+
94
+ # The page method allows the layout to be set on a specific path
95
+ # page "/about.html", :layout => false
96
+ # page "/", :layout => :homepage_layout
97
+ def self.page(url, options={}, &block)
98
+ url << settings.index_file if url.match(%r{/$})
99
+
100
+ options[:layout] ||= current_layout
101
+ get(url) do
102
+ return yield if block_given?
103
+ process_request(options)
104
+ end
105
+ end
106
+
107
+ # This will match all requests not overridden in the project's config.rb
108
+ not_found do
109
+ process_request
110
+ end
111
+
112
+ private
113
+ # Internal method to look for templates and evaluate them if found
114
+ def process_request(options={})
115
+ # Normalize the path and add index if we're looking at a directory
116
+ path = request.path
117
+ path << settings.index_file if path.match(%r{/$})
118
+ path.gsub!(%r{^/}, '')
119
+
120
+ old_layout = settings.current_layout
121
+ settings.layout(options[:layout]) if !options[:layout].nil?
122
+ result = render(path, :layout => settings.fetch_layout_path.to_sym)
123
+ settings.layout(old_layout)
124
+
125
+ if result
126
+ content_type mime_type(File.extname(path)), :charset => 'utf-8'
127
+ status 200
128
+ return result
129
+ end
130
+
131
+ status 404
132
+ rescue Padrino::Rendering::TemplateNotFound
133
+ $stderr.puts "File not found: #{request.path}"
134
+ status 404
135
+ end
136
+ end
137
+ end
138
+
139
+ require "middleman/assets"
140
+
141
+ # The Rack App
142
+ class Middleman::Server
143
+ def self.new(*args, &block)
144
+ # If the old init.rb exists, use it, but issue warning
145
+ old_config = File.join(self.root, "init.rb")
146
+ if File.exists? old_config
147
+ $stderr.puts "== Warning: The init.rb file has been renamed to config.rb"
148
+ local_config = old_config
149
+ end
150
+
151
+ # Check for and evaluate local configuration
152
+ local_config ||= File.join(self.root, "config.rb")
153
+ if File.exists? local_config
154
+ $stderr.puts "== Reading: Local config" if logging?
155
+ Middleman::Server.class_eval File.read(local_config)
156
+ set :app_file, File.expand_path(local_config)
157
+ end
158
+
159
+ use ::Rack::ConditionalGet if environment == :development
160
+
161
+ @@run_after_features.each { |block| class_eval(&block) }
162
+
163
+ super
164
+ end
165
+ end
@@ -0,0 +1,64 @@
1
+ # Automatic sitemaps
2
+ # activate :slickmap
3
+
4
+ # CodeRay syntax highlighting in Haml
5
+ # activate :code_ray
6
+
7
+ # Automatic image dimension calculations
8
+ # activate :automatic_image_sizes
9
+
10
+ # Per-page layout changes
11
+ # With no layout
12
+ # page "/path/to/file.html", :layout => false
13
+ # With alternative layout
14
+ # page "/path/to/file.html", :layout => :otherlayout
15
+
16
+ # Helpers
17
+ helpers do
18
+ def some_helper(*args)
19
+ "Helping"
20
+ end
21
+ end
22
+
23
+ <% if css_dir %>
24
+ set :css_dir, "<%= css_dir -%>"
25
+ <% else %>
26
+ # Change the CSS directory
27
+ # set :css_dir, "alternative_css_directory"
28
+ <% end %>
29
+
30
+ <% if js_dir %>
31
+ set :js_dir, "<%= js_dir -%>"
32
+ <% else %>
33
+ # Change the JS directory
34
+ # set :js_dir, "alternative_js_directory"
35
+ <% end %>
36
+
37
+ <% if images_dir %>
38
+ set :images_dir, "<%= images_dir -%>"
39
+ <% else %>
40
+ # Change the images directory
41
+ # set :images_dir, "alternative_image_directory"
42
+ <% end %>
43
+
44
+ # Build-specific configuration
45
+ configure :build do
46
+ # For example, change the Compass output style for deployment
47
+ # activate :minify_css
48
+
49
+ # Minify Javascript on build
50
+ # activate :minify_javascript
51
+
52
+ # Shrink/smush PNG/JPEGs on build
53
+ # activate :smush_pngs
54
+
55
+ # Enable cache buster
56
+ # activate :cache_buster
57
+
58
+ # Generate ugly/obfuscated HTML from Haml
59
+ # activate :ugly_haml
60
+
61
+
62
+ # Or use a different image path
63
+ # set :http_path, "/Content/images/"
64
+ end
@@ -0,0 +1,4 @@
1
+ - content_for :head do
2
+ %title The Middleman!
3
+
4
+ %h1 The Middleman is watching.
@@ -0,0 +1,13 @@
1
+ !!! Strict
2
+ %html{ :xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en", :lang => "en" }
3
+ %head
4
+ %meta{ :content => "text/html; charset=utf-8", "http-equiv" => "Content-Type" }
5
+ / Comment in layout
6
+ = stylesheet_link_tag "site.css"
7
+ :javascript
8
+ // Comment in javascript
9
+ = yield_content :head
10
+
11
+ %body{ :class => page_classes }
12
+ #frame
13
+ = yield
@@ -0,0 +1,27 @@
1
+ @import "compass"
2
+ @import "blueprint"
3
+
4
+ $font-color: #2a2a2a
5
+ $link-color: #0388a6
6
+ $link-hover-color: #009ce0
7
+ $link-focus-color: $link-color
8
+ $link-active-color: $link-color
9
+ $link-visited-color: $link-color
10
+
11
+ $blueprint-font-family: 'Century Gothic', 'Apple Gothic', 'Helvetica Neue', arial, sans-serif
12
+ $blueprint-font-size: 13px
13
+ $blueprint-grid-columns: 12
14
+ $blueprint-grid-width: 60px
15
+ $blueprint-grid-margin: 20px
16
+
17
+ +global-reset
18
+
19
+ +blueprint-typography
20
+
21
+ a
22
+ +link-colors($link-color, $link-hover-color, $link-focus-color, $link-active-color, $link-visited-color)
23
+
24
+ #frame
25
+ padding: 50px
26
+ text-align: center
27
+ +container
@@ -0,0 +1,26 @@
1
+ require 'rack/test' # Use Rack::Test to access Sinatra without starting up a full server
2
+
3
+ # Monkey-patch to use a dynamic renderer
4
+ class Templater::Actions::File
5
+ def identical?
6
+ if exists?
7
+ return true if File.mtime(source) < File.mtime(destination)
8
+ FileUtils.identical?(source, destination)
9
+ else
10
+ false
11
+ end
12
+ end
13
+ end
14
+
15
+ class Templater::Actions::Template
16
+ def render
17
+ @@rack_test ||= Rack::Test::Session.new(Rack::MockSession.new(Middleman::Server))
18
+
19
+ @render_cache ||= begin
20
+ # The default render just requests the page over Rack and writes the response
21
+ request_path = destination.gsub(File.join(Dir.pwd, Middleman::Server.build_dir), "")
22
+ @@rack_test.get(request_path)
23
+ @@rack_test.last_response.body
24
+ end
25
+ end
26
+ end
data/lib/middleman.rb ADDED
@@ -0,0 +1,15 @@
1
+ libdir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
3
+
4
+ require 'rubygems'
5
+
6
+ module Middleman
7
+ autoload :Server, "middleman/server"
8
+
9
+ module Renderers
10
+ autoload :Haml, "middleman/renderers/haml"
11
+ autoload :Sass, "middleman/renderers/sass"
12
+ end
13
+
14
+ autoload :Features, "middleman/features"
15
+ end