middleman 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,6 +11,8 @@ begin
11
11
  gem.authors = ["Thomas Reynolds"]
12
12
  gem.rubyforge_project = "middleman"
13
13
  gem.executables = %w(mm-init mm-build mm-server)
14
+ gem.add_dependency("thin")
15
+ gem.add_dependency("shotgun")
14
16
  gem.add_dependency("templater")
15
17
  gem.add_dependency("sprockets")
16
18
  gem.add_dependency("sinatra")
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.17
1
+ 0.9.18
data/bin/mm-build CHANGED
@@ -6,7 +6,7 @@ ENV['MM_ENV'] = "build"
6
6
  require File.join(File.dirname(__FILE__), "..", "lib", "middleman")
7
7
  require 'middleman/builder'
8
8
 
9
- Middleman::Base.init!
9
+ #Middleman::Base.init!
10
10
  Middleman::Builder.init!
11
11
 
12
12
  Middleman::Generators.run_cli(Dir.pwd, 'mm-build', 1, %w(build --force).concat(ARGV))
data/bin/mm-server CHANGED
@@ -5,15 +5,39 @@ require 'optparse'
5
5
  # Require Middleman
6
6
  require File.join(File.dirname(__FILE__), '..', 'lib', 'middleman')
7
7
 
8
+ env = ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development'
9
+ options = { :Port => 4567, :AccessLog => [] }
10
+
11
+ OptionParser.new { |opts|
12
+ opts.banner = "Usage: mm-server [rack options]"
13
+ opts.separator ""
14
+ opts.separator "Rack options:"
15
+ opts.on("-p", "--port PORT", "use PORT (default: 4567)") { |port|
16
+ options[:Port] = port
17
+ }
18
+ opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
19
+ env = e
20
+ }
21
+ opts.on("--debug", "Debug mode") {
22
+ ::Middleman::Base.set :logging, true
23
+ }
24
+
25
+ opts.parse! ARGV
26
+ }
27
+
28
+ ENV['RACK_ENV'] = env
29
+
8
30
  class Middleman::Base
9
31
  set :root, Dir.pwd
32
+ end
33
+
34
+ require 'shotgun'
35
+ config = File.join(File.dirname(__FILE__), '..', 'lib', 'middleman', 'config.ru')
36
+ app = Shotgun.new(config, lambda { |inner_app| Middleman::Base })
10
37
 
11
- OptionParser.new { |op|
12
- op.on('-e env') { |val| set :environment, val.to_sym }
13
- op.on('-s server') { |val| set :server, val }
14
- op.on('-p port') { |val| set :port, val.to_i }
15
- }.parse!(ARGV.dup)
38
+ require 'thin'
39
+ Thin::Logging.silent = true
16
40
 
17
- # Start Middleman
18
- run!
41
+ Rack::Handler::Thin.run app, options do |inst|
42
+ puts "== The Middleman is standing watch on port #{options[:Port]}"
19
43
  end
@@ -8,49 +8,44 @@ module Middleman
8
8
  class Base < Sinatra::Base
9
9
  set :app_file, __FILE__
10
10
  set :root, Dir.pwd
11
+ set :reload, false
12
+ set :logging, false
11
13
  set :environment, ENV['MM_ENV'] || :development
12
- set :supported_formats, ["erb"]
14
+ set :supported_formats, %w(erb)
13
15
  set :index_file, "index.html"
14
16
  set :js_dir, "javascripts"
15
17
  set :css_dir, "stylesheets"
16
18
  set :images_dir, "images"
17
19
  set :build_dir, "build"
18
20
  set :http_prefix, "/"
19
-
20
- # Features enabled by default
21
- enable :compass
22
- enable :content_for
23
- enable :sprockets
24
21
 
25
- # Features disabled by default
26
- disable :slickmap
27
- disable :cache_buster
28
- disable :minify_css
29
- disable :minify_javascript
30
- disable :relative_assets
31
- disable :maruku
32
- disable :smush_pngs
22
+ use Rack::ConditionalGet if environment == :development
23
+
24
+ @@features = []
33
25
 
34
- # Default build features
35
- configure :build do
36
- enable :minify_css
37
- enable :minify_javascript
38
- enable :cache_buster
26
+ def self.enable(*opts)
27
+ @@features << opts
28
+ super
39
29
  end
40
-
30
+
31
+ def self.disable(*opts)
32
+ @@features -= opts
33
+ super
34
+ end
35
+
41
36
  # Rack helper for adding mime-types during local preview
42
37
  def self.mime(ext, type)
43
38
  ext = ".#{ext}" unless ext.to_s[0] == ?.
44
- Rack::Mime::MIME_TYPES[ext.to_s] = type
39
+ ::Rack::Mime::MIME_TYPES[ext.to_s] = type
45
40
  end
46
-
41
+
47
42
  # Convenience function to discover if a tempalte exists for the requested renderer (haml, sass, etc)
48
43
  def template_exists?(path, renderer=nil)
49
44
  template_path = path.dup
50
45
  template_path << ".#{renderer}" if renderer
51
46
  File.exists? File.join(options.views, template_path)
52
47
  end
53
-
48
+
54
49
  # Base case renderer (do nothing), Should be over-ridden
55
50
  module StaticRender
56
51
  def render_path(path)
@@ -62,84 +57,74 @@ module Middleman
62
57
  end
63
58
  end
64
59
  include StaticRender
65
-
66
- # Disable static asset handling in Rack, so we can customize it here
67
- disable :static
68
-
60
+
69
61
  # This will match all requests not overridden in the project's init.rb
70
62
  not_found do
71
63
  # Normalize the path and add index if we're looking at a directory
72
64
  path = request.path
73
65
  path << options.index_file if path.match(%r{/$})
74
66
  path.gsub!(%r{^/}, '')
75
-
67
+
76
68
  # If the enabled renderers succeed, return the content, mime-type and an HTTP 200
77
69
  if content = render_path(path)
78
70
  content_type media_type(File.extname(path)), :charset => 'utf-8'
79
71
  status 200
80
72
  content
81
73
  else
82
- # If no template handler renders the template, return the static file if it exists
83
- path = File.join(options.public, request.path)
84
- if !File.directory?(path) && File.exists?(path)
85
- status 200
86
- send_file(path)
87
- else
88
- status 404
89
- end
74
+ status 404
90
75
  end
91
76
  end
92
-
93
- # Copy, pasted & edited version of the setup in Sinatra.
94
- # Basically just changed the app's name and call out feature & configuration init.
95
- def self.run!(options={}, &block)
96
- init!
97
- set options
98
- handler = detect_rack_handler
99
- handler_name = handler.name.gsub(/.*::/, '')
100
- puts "== The Middleman is standing watch on port #{port}"
101
- handler.run self, :Host => host, :Port => port do |server|
102
- trap(:INT) do
103
- ## Use thins' hard #stop! if available, otherwise just #stop
104
- server.respond_to?(:stop!) ? server.stop! : server.stop
105
- puts "\n== The Middleman has ended his patrol"
106
- end
107
-
108
- if block_given?
109
- block.call
110
- ## Use thins' hard #stop! if available, otherwise just #stop
111
- server.respond_to?(:stop!) ? server.stop! : server.stop
112
- end
113
- end
114
- rescue Errno::EADDRINUSE => e
115
- puts "== The Middleman is already standing watch on port #{port}!"
77
+ end
78
+ end
79
+
80
+ # Haml is required & includes helpers
81
+ require "middleman/haml"
82
+ require "middleman/sass"
83
+ require 'sinatra/content_for'
84
+ require 'middleman/helpers'
85
+ require 'middleman/rack/static'
86
+ require 'middleman/rack/sprockets'
87
+
88
+ class Middleman::Base
89
+ helpers Sinatra::ContentFor
90
+ helpers Middleman::Helpers
91
+
92
+ use Middleman::Rack::Static
93
+ use Middleman::Rack::Sprockets
94
+
95
+ enable :compass
96
+
97
+ # Features disabled by default
98
+ disable :slickmap
99
+ disable :cache_buster
100
+ disable :minify_css
101
+ disable :minify_javascript
102
+ disable :relative_assets
103
+ disable :maruku
104
+ disable :smush_pngs
105
+
106
+ # Default build features
107
+ configure :build do
108
+ enable :minify_css
109
+ enable :minify_javascript
110
+ enable :cache_buster
111
+ end
112
+
113
+ def self.new(*args, &bk)
114
+ # Check for and evaluate local configuration
115
+ local_config = File.join(self.root, "init.rb")
116
+ if File.exists? local_config
117
+ puts "== Reading: Local config" if logging?
118
+ class_eval File.read(local_config)
116
119
  end
117
120
 
118
- # Require the features for this project
119
- def self.init!(quiet=false)
120
- # Built-in helpers
121
- require 'middleman/helpers'
122
- helpers Middleman::Helpers
123
-
124
- # Haml is required & includes helpers
125
- require "middleman/features/haml"
126
-
127
- # Check for and evaluate local configuration
128
- local_config = File.join(self.root, "init.rb")
129
- if File.exists? local_config
130
- puts "== Local config at: #{local_config}" unless quiet
131
- class_eval File.read(local_config)
132
- end
133
-
134
- # loop over enabled feature
135
- features_path = File.expand_path("features/*.rb", File.dirname(__FILE__))
136
- Dir[features_path].each do |f|
137
- feature_name = File.basename(f, '.rb')
138
- option_name = :"#{feature_name}?"
139
- if respond_to?(option_name) && send(option_name) === true
140
- require "middleman/features/#{feature_name}"
141
- end
142
- end
121
+ # loop over enabled feature
122
+ @@features.flatten.each do |feature_name|
123
+ next unless send(:"#{feature_name}?")
124
+ puts "== Enabling: #{feature_name.capitalize}" if logging?
125
+ require "middleman/features/#{feature_name}"
143
126
  end
127
+
128
+ super
144
129
  end
145
130
  end
@@ -1,6 +1,5 @@
1
1
  require 'templater'
2
2
  require 'middleman/templater+dynamic_renderer.rb'
3
- require 'rack/test' # Use Rack::Test to access Sinatra without starting up a full server
4
3
 
5
4
  # Placeholder for any methods the builder needs to abstract to allow feature integration
6
5
  module Middleman
@@ -37,9 +36,12 @@ module Middleman
37
36
  end
38
37
 
39
38
  def self.init!
40
- glob! File.basename(Middleman::Base.public), Middleman::Base.supported_formats
39
+ glob! File.basename(Middleman::Base.public), []
41
40
  glob! File.basename(Middleman::Base.views), Middleman::Base.supported_formats
42
41
  end
42
+
43
+ def after_run
44
+ end
43
45
  end
44
46
 
45
47
  module Generators
@@ -0,0 +1,2 @@
1
+ require 'middleman'
2
+ run Middleman::Base
@@ -1,15 +1,13 @@
1
- class Middleman::Base
1
+ class << Middleman::Base
2
2
  alias_method :pre_cache_buster_asset_url, :asset_url
3
- helpers do
4
- def asset_url(path, prefix="")
5
- http_path = pre_cache_buster_asset_url(path, prefix)
6
- if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path))
7
- http_path
8
- else
9
- real_path = File.join(self.class.environment == "build" ? options.build_dir : options.public, prefix, path)
10
- http_path << "?" + File.mtime(real_path).strftime("%s") if File.readable?(real_path)
11
- http_path
12
- end
3
+ def asset_url(path, prefix="", request=nil)
4
+ http_path = pre_cache_buster_asset_url(path, prefix, request)
5
+ if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path))
6
+ http_path
7
+ else
8
+ real_path = File.join(self.public, prefix, path)
9
+ http_path << "?" + File.mtime(real_path).strftime("%s") if File.readable?(real_path)
10
+ http_path
13
11
  end
14
12
  end
15
13
  end
@@ -1,5 +1,3 @@
1
- require 'compass'
2
-
3
1
  class Middleman::Base
4
2
  configure do
5
3
  ::Compass.configuration do |config|
@@ -12,20 +12,24 @@ module Middleman
12
12
  END
13
13
  end
14
14
  end
15
+ end
15
16
 
16
- module StaticJavascript
17
- def render_path(path)
18
- if template_exists?(path, :js)
19
- compressor = YUI::JavaScriptCompressor.new(:munge => true)
20
- compressor.compress(super)
21
- else
22
- super
17
+ class Builder
18
+ alias_method :pre_yui_after_run, :after_run
19
+ def after_run
20
+ pre_yui_after_run
21
+
22
+ compressor = ::YUI::JavaScriptCompressor.new(:munge => true)
23
+ Dir[File.join(Middleman::Base.build_dir, Middleman::Base.js_dir, "**", "*.js")].each do |path|
24
+ lines = IO.readlines(path)
25
+ if lines.length > 1
26
+ compressed_js = compressor.compress(lines.join($/))
27
+ File.open(path, 'w') { |f| f.write(compressed_js) }
28
+ say "<%= color('#{"[COMPRESSED]".rjust(12)}', :yellow) %> " + path.gsub(Middleman::Base.build_dir+"/", '')
23
29
  end
24
30
  end
25
31
  end
26
- end
27
-
28
- class Base
29
- include Middleman::Minified::StaticJavascript
30
- end
31
- end
32
+ end if Middleman::Base.environment == "build"
33
+ end
34
+
35
+ Middleman::Base.supported_formats << "js"
@@ -1,30 +1,24 @@
1
- class Middleman::Base
2
- if compass?
3
- configure do
4
- ::Compass.configuration do |config|
5
- config.relative_assets = true
6
- end
7
- end
8
- end
9
-
10
- helpers do
11
- alias_method :pre_relative_asset_url, :asset_url
12
- def asset_url(path, prefix="")
13
- path = pre_relative_asset_url(path, prefix)
14
- if path.include?("://")
15
- path
1
+ ::Compass.configuration do |config|
2
+ config.relative_assets = true
3
+ end
4
+
5
+ class << Middleman::Base
6
+ alias_method :pre_relative_asset_url, :asset_url
7
+ def asset_url(path, prefix="", request=nil)
8
+ path = pre_relative_asset_url(path, prefix, request)
9
+ if path.include?("://")
10
+ path
11
+ else
12
+ path = path[1,path.length-1] if path[0,1] == '/'
13
+ request_path = request.path_info.dup
14
+ request_path << self.class.index_file if path.match(%r{/$})
15
+ request_path.gsub!(%r{^/}, '')
16
+ parts = request_path.split('/')
17
+
18
+ if parts.length > 1
19
+ "../" * (parts.length - 1) + path
16
20
  else
17
- path = path[1,path.length-1] if path[0,1] == '/'
18
- request_path = request.path_info.dup
19
- request_path << options.index_file if path.match(%r{/$})
20
- request_path.gsub!(%r{^/}, '')
21
- parts = request_path.split('/')
22
-
23
- if parts.length > 1
24
- "../" * (parts.length - 1) + path
25
- else
26
- path
27
- end
21
+ path
28
22
  end
29
23
  end
30
24
  end
@@ -1,4 +1,4 @@
1
- require 'haml'
1
+ require "haml"
2
2
 
3
3
  module Middleman
4
4
  module Haml
@@ -62,71 +62,8 @@ module Middleman
62
62
  end
63
63
  end
64
64
  end
65
-
66
- module Sass
67
- def self.included(base)
68
- base.supported_formats << "sass"
69
- end
70
-
71
- def render_path(path)
72
- if template_exists?(path, :sass)
73
- begin
74
- static_version = options.public + request.path_info
75
- send_file(static_version) if File.exists? static_version
76
-
77
- location_of_sass_file = options.environment == "build" ? File.join(options.build_dir, options.css_dir) : "public"
78
- css_filename = File.join(Dir.pwd, location_of_sass_file) + request.path_info
79
- sass(path.to_sym, Compass.sass_engine_options.merge({ :css_filename => css_filename }))
80
- rescue Exception => e
81
- sass_exception_string(e)
82
- end
83
- else
84
- super
85
- end
86
- end
87
-
88
- # Handle Sass errors
89
- def sass_exception_string(e)
90
- e_string = "#{e.class}: #{e.message}"
91
-
92
- if e.is_a? ::Sass::SyntaxError
93
- e_string << "\non line #{e.sass_line}"
94
-
95
- if e.sass_filename
96
- e_string << " of #{e.sass_filename}"
97
-
98
- if File.exists?(e.sass_filename)
99
- e_string << "\n\n"
100
-
101
- min = [e.sass_line - 5, 0].max
102
- begin
103
- File.read(e.sass_filename).rstrip.split("\n")[
104
- min .. e.sass_line + 5
105
- ].each_with_index do |line, i|
106
- e_string << "#{min + i + 1}: #{line}\n"
107
- end
108
- rescue
109
- e_string << "Couldn't read sass file: #{e.sass_filename}"
110
- end
111
- end
112
- end
113
- end
114
- <<END
115
- /*
116
- #{e_string}
117
-
118
- Backtrace:\n#{e.backtrace.join("\n")}
119
- */
120
- body:before {
121
- white-space: pre;
122
- font-family: monospace;
123
- content: "#{e_string.gsub('"', '\"').gsub("\n", '\\A ')}"; }
124
- END
125
- end
126
- end
127
65
  end
128
66
 
129
67
  class Middleman::Base
130
68
  include Middleman::Haml::Renderer
131
- include Middleman::Sass
132
69
  end
@@ -1,4 +1,11 @@
1
1
  module Middleman
2
+ class Base
3
+ def self.asset_url(path, prefix="", request=nil)
4
+ base_url = File.join(self.http_prefix, prefix)
5
+ path.include?("://") ? path : File.join(base_url, path)
6
+ end
7
+ end
8
+
2
9
  module Helpers
3
10
  def page_classes(*additional)
4
11
  path = request.path_info
@@ -14,16 +21,15 @@ module Middleman
14
21
  classes.join(' ')
15
22
  end
16
23
 
24
+ def asset_url(path, prefix="")
25
+ self.class.asset_url(path, prefix, request)
26
+ end
27
+
17
28
  def link_to(title, url="#", params={})
18
29
  params.merge!(:href => url)
19
30
  params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
20
31
  %Q{<a #{params}>#{title}</a>}
21
32
  end
22
-
23
- def asset_url(path, prefix="")
24
- base_url = File.join(options.http_prefix, prefix)
25
- path.include?("://") ? path : File.join(base_url, path)
26
- end
27
33
 
28
34
  def image_tag(path, params={})
29
35
  params[:alt] ||= ""
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'sprockets'
3
+ require 'middleman/rack/sprockets+ruby19' # Sprockets ruby 1.9 duckpunch
4
+ rescue LoadError
5
+ puts "Sprockets not available. Install it with: gem install sprockets"
6
+ end
7
+
8
+ module Middleman
9
+ module Rack
10
+ class Sprockets
11
+ def initialize(app, options={})
12
+ @app = app
13
+ end
14
+
15
+ def call(env)
16
+ path = env["PATH_INFO"]
17
+ source = File.join(Middleman::Base.views, path)
18
+
19
+ if path.match(/\.js$/) && File.exists?(source)
20
+ secretary = ::Sprockets::Secretary.new( :root => Middleman::Base.root,
21
+ :source_files => [ File.join("views", path) ],
22
+ :load_path => [ File.join("public", Middleman::Base.js_dir),
23
+ File.join("views", Middleman::Base.js_dir) ])
24
+
25
+ [200, { "Content-Type" => "text/javascript" }, [secretary.concatenation.to_s]]
26
+ else
27
+ @app.call(env)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ Middleman::Base.supported_formats << "js"
@@ -0,0 +1,21 @@
1
+ module Middleman
2
+ module Rack
3
+ class Static
4
+ def initialize(app, options={})
5
+ @app = app
6
+ root = Middleman::Base.public
7
+ @file_server = ::Rack::File.new(root)
8
+ end
9
+
10
+ def call(env)
11
+ path = env["PATH_INFO"]
12
+ file_path = File.join(Middleman::Base.public, path)
13
+ if path.include?("favicon.ico") || (File.exists?(file_path) && !File.directory?(file_path))
14
+ @file_server.call(env)
15
+ else
16
+ @app.call(env)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,70 @@
1
+ require "sass"
2
+ require 'compass'
3
+
4
+ module Middleman
5
+ module Sass
6
+ def self.included(base)
7
+ base.supported_formats << "sass"
8
+ end
9
+
10
+ def render_path(path)
11
+ if template_exists?(path, :sass)
12
+ begin
13
+ static_version = options.public + request.path_info
14
+ send_file(static_version) if File.exists? static_version
15
+
16
+ location_of_sass_file = options.environment == "build" ? File.join(options.build_dir, options.css_dir) : "public"
17
+ css_filename = File.join(Dir.pwd, location_of_sass_file) + request.path_info
18
+ sass(path.to_sym, ::Compass.sass_engine_options.merge({ :css_filename => css_filename }))
19
+ rescue Exception => e
20
+ sass_exception_string(e)
21
+ end
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ # Handle Sass errors
28
+ def sass_exception_string(e)
29
+ e_string = "#{e.class}: #{e.message}"
30
+
31
+ if e.is_a? ::Sass::SyntaxError
32
+ e_string << "\non line #{e.sass_line}"
33
+
34
+ if e.sass_filename
35
+ e_string << " of #{e.sass_filename}"
36
+
37
+ if File.exists?(e.sass_filename)
38
+ e_string << "\n\n"
39
+
40
+ min = [e.sass_line - 5, 0].max
41
+ begin
42
+ File.read(e.sass_filename).rstrip.split("\n")[
43
+ min .. e.sass_line + 5
44
+ ].each_with_index do |line, i|
45
+ e_string << "#{min + i + 1}: #{line}\n"
46
+ end
47
+ rescue
48
+ e_string << "Couldn't read sass file: #{e.sass_filename}"
49
+ end
50
+ end
51
+ end
52
+ end
53
+ <<END
54
+ /*
55
+ #{e_string}
56
+
57
+ Backtrace:\n#{e.backtrace.join("\n")}
58
+ */
59
+ body:before {
60
+ white-space: pre;
61
+ font-family: monospace;
62
+ content: "#{e_string.gsub('"', '\"').gsub("\n", '\\A ')}"; }
63
+ END
64
+ end
65
+ end
66
+ end
67
+
68
+ class Middleman::Base
69
+ include Middleman::Sass
70
+ end
@@ -1,3 +1,5 @@
1
+ require 'rack/test' # Use Rack::Test to access Sinatra without starting up a full server
2
+
1
3
  # Monkey-patch to use a dynamic renderer
2
4
  class Templater::Actions::File
3
5
  def identical?
@@ -12,20 +14,12 @@ end
12
14
 
13
15
  class Templater::Actions::Template
14
16
  def render
15
- # The default render just requests the page over Rack and writes the response
16
- request_path = destination.gsub(File.join(Dir.pwd, Middleman::Base.build_dir), "")
17
- browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Base))
18
- browser.get(request_path)
19
- browser.last_response.body
20
- end
21
-
22
- def identical?
23
- if File.exists?(destination)
24
- extension = File.extname(source)
25
- return true if !%w(.sass .js .haml).include?(extension) && File.exists?(source) && File.mtime(source) < File.mtime(destination)
26
- File.read(destination) == render
27
- else
28
- false
17
+ @render_cache ||= begin
18
+ # The default render just requests the page over Rack and writes the response
19
+ request_path = destination.gsub(File.join(Dir.pwd, Middleman::Base.build_dir), "")
20
+ browser = Rack::Test::Session.new(Rack::MockSession.new(Middleman::Base))
21
+ browser.get(request_path)
22
+ browser.last_response.body
29
23
  end
30
24
  end
31
25
  end
data/middleman.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{middleman}
8
- s.version = "0.9.17"
8
+ s.version = "0.9.18"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Thomas Reynolds"]
12
- s.date = %q{2009-10-14}
12
+ s.date = %q{2009-10-22}
13
13
  s.email = %q{tdreyno@gmail.com}
14
14
  s.executables = ["mm-init", "mm-build", "mm-server"]
15
15
  s.extra_rdoc_files = [
@@ -30,20 +30,22 @@ Gem::Specification.new do |s|
30
30
  "lib/middleman.rb",
31
31
  "lib/middleman/base.rb",
32
32
  "lib/middleman/builder.rb",
33
+ "lib/middleman/config.ru",
33
34
  "lib/middleman/features/cache_buster.rb",
34
35
  "lib/middleman/features/compass.rb",
35
- "lib/middleman/features/content_for.rb",
36
36
  "lib/middleman/features/growl.rb",
37
- "lib/middleman/features/haml.rb",
38
37
  "lib/middleman/features/maruku.rb",
39
38
  "lib/middleman/features/minify_css.rb",
40
39
  "lib/middleman/features/minify_javascript.rb",
41
40
  "lib/middleman/features/relative_assets.rb",
42
41
  "lib/middleman/features/slickmap.rb",
43
42
  "lib/middleman/features/smush_pngs.rb",
44
- "lib/middleman/features/sprockets+ruby19.rb",
45
- "lib/middleman/features/sprockets.rb",
43
+ "lib/middleman/haml.rb",
46
44
  "lib/middleman/helpers.rb",
45
+ "lib/middleman/rack/sprockets+ruby19.rb",
46
+ "lib/middleman/rack/sprockets.rb",
47
+ "lib/middleman/rack/static.rb",
48
+ "lib/middleman/sass.rb",
47
49
  "lib/middleman/template/init.rbt",
48
50
  "lib/middleman/template/views/index.html.haml",
49
51
  "lib/middleman/template/views/layout.html.haml",
@@ -53,13 +55,13 @@ Gem::Specification.new do |s|
53
55
  "spec/builder_spec.rb",
54
56
  "spec/cache_buster_spec.rb",
55
57
  "spec/fixtures/sample/init.rb",
56
- "spec/fixtures/sample/public/javascripts/empty-with-include.js",
57
58
  "spec/fixtures/sample/public/javascripts/to-be-included.js",
58
59
  "spec/fixtures/sample/public/static.html",
59
60
  "spec/fixtures/sample/public/stylesheets/static.css",
60
61
  "spec/fixtures/sample/views/_partial.haml",
61
62
  "spec/fixtures/sample/views/index.html.haml",
62
63
  "spec/fixtures/sample/views/inline-js.html.haml",
64
+ "spec/fixtures/sample/views/javascripts/empty-with-include.js",
63
65
  "spec/fixtures/sample/views/layout.haml",
64
66
  "spec/fixtures/sample/views/maruku.html.maruku",
65
67
  "spec/fixtures/sample/views/services/index.html.haml",
@@ -88,6 +90,8 @@ Gem::Specification.new do |s|
88
90
  s.specification_version = 3
89
91
 
90
92
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
93
+ s.add_runtime_dependency(%q<thin>, [">= 0"])
94
+ s.add_runtime_dependency(%q<shotgun>, [">= 0"])
91
95
  s.add_runtime_dependency(%q<templater>, [">= 0"])
92
96
  s.add_runtime_dependency(%q<sprockets>, [">= 0"])
93
97
  s.add_runtime_dependency(%q<sinatra>, [">= 0"])
@@ -99,6 +103,8 @@ Gem::Specification.new do |s|
99
103
  s.add_development_dependency(%q<rspec>, [">= 0"])
100
104
  s.add_development_dependency(%q<sdoc>, [">= 0"])
101
105
  else
106
+ s.add_dependency(%q<thin>, [">= 0"])
107
+ s.add_dependency(%q<shotgun>, [">= 0"])
102
108
  s.add_dependency(%q<templater>, [">= 0"])
103
109
  s.add_dependency(%q<sprockets>, [">= 0"])
104
110
  s.add_dependency(%q<sinatra>, [">= 0"])
@@ -111,6 +117,8 @@ Gem::Specification.new do |s|
111
117
  s.add_dependency(%q<sdoc>, [">= 0"])
112
118
  end
113
119
  else
120
+ s.add_dependency(%q<thin>, [">= 0"])
121
+ s.add_dependency(%q<shotgun>, [">= 0"])
114
122
  s.add_dependency(%q<templater>, [">= 0"])
115
123
  s.add_dependency(%q<sprockets>, [">= 0"])
116
124
  s.add_dependency(%q<sinatra>, [">= 0"])
@@ -123,3 +131,4 @@ Gem::Specification.new do |s|
123
131
  s.add_dependency(%q<sdoc>, [">= 0"])
124
132
  end
125
133
  end
134
+
@@ -4,25 +4,15 @@ base = ::Middleman::Base
4
4
  base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
5
5
 
6
6
  describe "Cache Buster Feature" do
7
- before do
7
+ it "should not append query string if off" do
8
8
  base.disable :cache_buster
9
- base.init!(true)
10
- @app = base.new
9
+ base.new
10
+ base.asset_url("stylesheets/static.css").should_not include("?")
11
11
  end
12
12
 
13
- it "should not append query string if off" do
14
- @app.asset_url("stylesheets/static.css").should_not include("?")
15
- end
16
- end
17
-
18
- describe "Cache Buster Feature" do
19
- before do
20
- base.enable :cache_buster
21
- base.init!(true)
22
- @app = base.new
23
- end
24
-
25
13
  it "should append query string if on" do
26
- @app.asset_url("stylesheets/static.css").should include("?")
14
+ base.enable :cache_buster
15
+ base.new
16
+ base.asset_url("stylesheets/static.css").should include("?")
27
17
  end
28
18
  end
@@ -0,0 +1 @@
1
+ //= require <to-be-included>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.17
4
+ version: 0.9.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -9,9 +9,29 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-14 00:00:00 -07:00
12
+ date: 2009-10-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thin
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: shotgun
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
15
35
  - !ruby/object:Gem::Dependency
16
36
  name: templater
17
37
  type: :runtime
@@ -137,20 +157,22 @@ files:
137
157
  - lib/middleman.rb
138
158
  - lib/middleman/base.rb
139
159
  - lib/middleman/builder.rb
160
+ - lib/middleman/config.ru
140
161
  - lib/middleman/features/cache_buster.rb
141
162
  - lib/middleman/features/compass.rb
142
- - lib/middleman/features/content_for.rb
143
163
  - lib/middleman/features/growl.rb
144
- - lib/middleman/features/haml.rb
145
164
  - lib/middleman/features/maruku.rb
146
165
  - lib/middleman/features/minify_css.rb
147
166
  - lib/middleman/features/minify_javascript.rb
148
167
  - lib/middleman/features/relative_assets.rb
149
168
  - lib/middleman/features/slickmap.rb
150
169
  - lib/middleman/features/smush_pngs.rb
151
- - lib/middleman/features/sprockets+ruby19.rb
152
- - lib/middleman/features/sprockets.rb
170
+ - lib/middleman/haml.rb
153
171
  - lib/middleman/helpers.rb
172
+ - lib/middleman/rack/sprockets+ruby19.rb
173
+ - lib/middleman/rack/sprockets.rb
174
+ - lib/middleman/rack/static.rb
175
+ - lib/middleman/sass.rb
154
176
  - lib/middleman/template/init.rbt
155
177
  - lib/middleman/template/views/index.html.haml
156
178
  - lib/middleman/template/views/layout.html.haml
@@ -160,13 +182,13 @@ files:
160
182
  - spec/builder_spec.rb
161
183
  - spec/cache_buster_spec.rb
162
184
  - spec/fixtures/sample/init.rb
163
- - spec/fixtures/sample/public/javascripts/empty-with-include.js
164
185
  - spec/fixtures/sample/public/javascripts/to-be-included.js
165
186
  - spec/fixtures/sample/public/static.html
166
187
  - spec/fixtures/sample/public/stylesheets/static.css
167
188
  - spec/fixtures/sample/views/_partial.haml
168
189
  - spec/fixtures/sample/views/index.html.haml
169
190
  - spec/fixtures/sample/views/inline-js.html.haml
191
+ - spec/fixtures/sample/views/javascripts/empty-with-include.js
170
192
  - spec/fixtures/sample/views/layout.haml
171
193
  - spec/fixtures/sample/views/maruku.html.maruku
172
194
  - spec/fixtures/sample/views/services/index.html.haml
@@ -1,9 +0,0 @@
1
- begin
2
- require 'sinatra/content_for'
3
-
4
- class Middleman::Base
5
- helpers Sinatra::ContentFor
6
- end
7
- rescue LoadError
8
- puts "Sinatra::ContentFor not available. Install it with: gem install sinatra-content-for"
9
- end
@@ -1,29 +0,0 @@
1
- begin
2
- require 'sprockets'
3
- require 'middleman/features/sprockets+ruby19' # Sprockets ruby 1.9 duckpunch
4
- rescue LoadError
5
- puts "Sprockets not available. Install it with: gem install sprockets"
6
- end
7
-
8
- module Middleman
9
- module Sprockets
10
- def self.included(base)
11
- base.supported_formats << "js"
12
- end
13
-
14
- def render_path(path)
15
- source = File.join(options.public, path)
16
- if File.extname(path) == '.js' && File.exists?(source)
17
- secretary = ::Sprockets::Secretary.new( :asset_root => options.public,
18
- :source_files => [source] )
19
- secretary.concatenation.to_s
20
- else
21
- super
22
- end
23
- end
24
- end
25
- end
26
-
27
- class Middleman::Base
28
- include Middleman::Sprockets
29
- end
@@ -1 +0,0 @@
1
- //= require "to-be-included"