middleman 0.9.20 → 0.9.21

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.20
1
+ 0.9.21
@@ -33,6 +33,11 @@ module Middleman
33
33
  super
34
34
  end
35
35
 
36
+ @@afters = []
37
+ def self.after(&block)
38
+ @@afters << block
39
+ end
40
+
36
41
  # Rack helper for adding mime-types during local preview
37
42
  def self.mime(ext, type)
38
43
  ext = ".#{ext}" unless ext.to_s[0] == ?.
@@ -80,10 +85,10 @@ end
80
85
  # Haml is required & includes helpers
81
86
  require "middleman/haml"
82
87
  require "middleman/sass"
83
- require 'sinatra/content_for'
84
- require 'middleman/helpers'
85
- require 'middleman/rack/static'
86
- require 'middleman/rack/sprockets'
88
+ require "sinatra/content_for"
89
+ require "middleman/helpers"
90
+ require "middleman/rack/static"
91
+ require "middleman/rack/sprockets"
87
92
 
88
93
  class Middleman::Base
89
94
  helpers Sinatra::ContentFor
@@ -92,10 +97,6 @@ class Middleman::Base
92
97
  use Middleman::Rack::Static
93
98
  use Middleman::Rack::Sprockets
94
99
 
95
- enable :compass
96
- require "middleman/features/compass"
97
- @@features -= [:compass]
98
-
99
100
  # Features disabled by default
100
101
  disable :slickmap
101
102
  disable :cache_buster
@@ -104,6 +105,7 @@ class Middleman::Base
104
105
  disable :relative_assets
105
106
  disable :maruku
106
107
  disable :smush_pngs
108
+ disable :automatic_image_sizes
107
109
 
108
110
  # Default build features
109
111
  configure :build do
@@ -118,19 +120,21 @@ class Middleman::Base
118
120
  if File.exists? local_config
119
121
  puts "== Reading: Local config" if logging?
120
122
  class_eval File.read(local_config)
123
+ set :app_file, File.expand_path(local_config)
121
124
  end
122
125
 
123
126
  # loop over enabled feature
124
127
  @@features.flatten.each do |feature_name|
125
128
  next unless send(:"#{feature_name}?")
126
- puts "== Enabling: #{feature_name.capitalize}" if logging?
127
- require "middleman/features/#{feature_name}"
129
+
130
+ feature_path = "features/#{feature_name}"
131
+ if File.exists? File.join(File.dirname(__FILE__), "#{feature_path}.rb")
132
+ puts "== Enabling: #{feature_name.to_s.capitalize}" if logging?
133
+ require "middleman/#{feature_path}"
134
+ end
128
135
  end
129
136
 
130
- ::Compass.configuration do |config|
131
- config.http_images_path = self.http_images_path rescue File.join(self.http_prefix, self.images_dir)
132
- config.http_stylesheets_path = self.http_css_path rescue File.join(self.http_prefix, self.css_dir)
133
- end
137
+ @@afters.each { |block| class_eval(&block) }
134
138
 
135
139
  super
136
140
  end
@@ -0,0 +1,282 @@
1
+ # FastImage finds the size or type of an image given its uri.
2
+ # It is careful to only fetch and parse as much of the image as is needed to determine the result.
3
+ # It does this by using a feature of Net::HTTP that yields strings from the resource being fetched
4
+ # as soon as the packets arrive.
5
+ #
6
+ # No external libraries such as ImageMagick are used here, this is a very lightweight solution to
7
+ # finding image information.
8
+ #
9
+ # FastImage knows about GIF, JPEG, BMP and PNG files.
10
+ #
11
+ # FastImage can also read files from the local filesystem by supplying the path instead of a uri.
12
+ # In this case FastImage uses the open-uri library to read the file in chunks of 256 bytes until
13
+ # it has enough. This is possibly a useful bandwidth-saving feature if the file is on a network
14
+ # attached disk rather than truly local.
15
+ #
16
+ # === Examples
17
+ # require 'fastimage'
18
+ #
19
+ # FastImage.size("http://stephensykes.com/images/ss.com_x.gif")
20
+ # => [266, 56]
21
+ # FastImage.type("http://stephensykes.com/images/pngimage")
22
+ # => :png
23
+ # FastImage.type("/some/local/file.gif")
24
+ # => :gif
25
+ #
26
+ # === References
27
+ # * http://snippets.dzone.com/posts/show/805
28
+ # * http://www.anttikupila.com/flash/getting-jpg-dimensions-with-as3-without-loading-the-entire-file/
29
+ # * http://pennysmalls.com/2008/08/19/find-jpeg-dimensions-fast-in-ruby/
30
+ # * http://imagesize.rubyforge.org/
31
+ #
32
+ require 'net/https'
33
+ require 'open-uri'
34
+
35
+ module Middleman
36
+ class FastImage
37
+ attr_reader :size, :type
38
+
39
+ class FastImageException < StandardError # :nodoc:
40
+ end
41
+ class MoreCharsNeeded < FastImageException # :nodoc:
42
+ end
43
+ class UnknownImageType < FastImageException # :nodoc:
44
+ end
45
+ class ImageFetchFailure < FastImageException # :nodoc:
46
+ end
47
+ class SizeNotFound < FastImageException # :nodoc:
48
+ end
49
+
50
+ DefaultTimeout = 2
51
+
52
+ LocalFileChunkSize = 256
53
+
54
+ # Returns an array containing the width and height of the image.
55
+ # It will return nil if the image could not be fetched, or if the image type was not recognised.
56
+ #
57
+ # By default there is a timeout of 2 seconds for opening and reading from a remote server.
58
+ # This can be changed by passing a :timeout => number_of_seconds in the options.
59
+ #
60
+ # If you wish FastImage to raise if it cannot size the image for any reason, then pass
61
+ # :raise_on_failure => true in the options.
62
+ #
63
+ # FastImage knows about GIF, JPEG, BMP and PNG files.
64
+ #
65
+ # === Example
66
+ #
67
+ # require 'fastimage'
68
+ #
69
+ # FastImage.size("http://stephensykes.com/images/ss.com_x.gif")
70
+ # => [266, 56]
71
+ # FastImage.size("http://stephensykes.com/images/pngimage")
72
+ # => [16, 16]
73
+ # FastImage.size("http://farm4.static.flickr.com/3023/3047236863_9dce98b836.jpg")
74
+ # => [500, 375]
75
+ # FastImage.size("http://www-ece.rice.edu/~wakin/images/lena512.bmp")
76
+ # => [512, 512]
77
+ # FastImage.size("test/fixtures/test.jpg")
78
+ # => [882, 470]
79
+ # FastImage.size("http://pennysmalls.com/does_not_exist")
80
+ # => nil
81
+ # FastImage.size("http://pennysmalls.com/does_not_exist", :raise_on_failure=>true)
82
+ # => raises FastImage::ImageFetchFailure
83
+ # FastImage.size("http://stephensykes.com/favicon.ico", :raise_on_failure=>true)
84
+ # => raises FastImage::UnknownImageType
85
+ # FastImage.size("http://stephensykes.com/favicon.ico", :raise_on_failure=>true, :timeout=>0.01)
86
+ # => raises FastImage::ImageFetchFailure
87
+ # FastImage.size("http://stephensykes.com/images/faulty.jpg", :raise_on_failure=>true)
88
+ # => raises FastImage::SizeNotFound
89
+ #
90
+ # === Supported options
91
+ # [:timeout]
92
+ # Overrides the default timeout of 2 seconds. Applies both to reading from and opening the http connection.
93
+ # [:raise_on_failure]
94
+ # If set to true causes an exception to be raised if the image size cannot be found for any reason.
95
+ #
96
+ def self.size(uri, options={})
97
+ new(uri, options).size
98
+ end
99
+
100
+ # Returns an symbol indicating the image type fetched from a uri.
101
+ # It will return nil if the image could not be fetched, or if the image type was not recognised.
102
+ #
103
+ # By default there is a timeout of 2 seconds for opening and reading from a remote server.
104
+ # This can be changed by passing a :timeout => number_of_seconds in the options.
105
+ #
106
+ # If you wish FastImage to raise if it cannot find the type of the image for any reason, then pass
107
+ # :raise_on_failure => true in the options.
108
+ #
109
+ # === Example
110
+ #
111
+ # require 'fastimage'
112
+ #
113
+ # FastImage.type("http://stephensykes.com/images/ss.com_x.gif")
114
+ # => :gif
115
+ # FastImage.type("http://stephensykes.com/images/pngimage")
116
+ # => :png
117
+ # FastImage.type("http://farm4.static.flickr.com/3023/3047236863_9dce98b836.jpg")
118
+ # => :jpeg
119
+ # FastImage.type("http://www-ece.rice.edu/~wakin/images/lena512.bmp")
120
+ # => :bmp
121
+ # FastImage.type("test/fixtures/test.jpg")
122
+ # => :jpeg
123
+ # FastImage.type("http://pennysmalls.com/does_not_exist")
124
+ # => nil
125
+ #
126
+ # === Supported options
127
+ # [:timeout]
128
+ # Overrides the default timeout of 2 seconds. Applies both to reading from and opening the http connection.
129
+ # [:raise_on_failure]
130
+ # If set to true causes an exception to be raised if the image type cannot be found for any reason.
131
+ #
132
+ def self.type(uri, options={})
133
+ new(uri, options.merge(:type_only=>true)).type
134
+ end
135
+
136
+ def initialize(uri, options={})
137
+ @property = options[:type_only] ? :type : :size
138
+ @timeout = options[:timeout] || DefaultTimeout
139
+ @uri = uri
140
+ @parsed_uri = URI.parse(uri.gsub(/\s/, "%20"))
141
+ if @parsed_uri.scheme == "http" || @parsed_uri.scheme == "https"
142
+ fetch_using_http
143
+ else
144
+ fetch_using_open_uri
145
+ end
146
+ raise SizeNotFound if options[:raise_on_failure] && @property == :size && !@size
147
+ rescue Timeout::Error, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET, ImageFetchFailure
148
+ raise ImageFetchFailure if options[:raise_on_failure]
149
+ rescue Errno::ENOENT
150
+ raise ImageFetchFailure if options[:raise_on_failure]
151
+ rescue UnknownImageType
152
+ raise UnknownImageType if options[:raise_on_failure]
153
+ end
154
+
155
+ private
156
+
157
+ def fetch_using_http
158
+ setup_http
159
+ @http.request_get(@parsed_uri.request_uri) do |res|
160
+ raise ImageFetchFailure unless res.is_a?(Net::HTTPSuccess)
161
+ res.read_body do |str|
162
+ break if parse_packet(str)
163
+ end
164
+ end
165
+ end
166
+
167
+ def setup_http
168
+ @http = Net::HTTP.new(@parsed_uri.host, @parsed_uri.port)
169
+ @http.use_ssl = (@parsed_uri.scheme == "https")
170
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
171
+ @http.open_timeout = @timeout
172
+ @http.read_timeout = @timeout
173
+ end
174
+
175
+ def fetch_using_open_uri
176
+ open(@uri) do |s|
177
+ while str = s.read(LocalFileChunkSize)
178
+ break if parse_packet(str)
179
+ end
180
+ end
181
+ end
182
+
183
+ # returns true once result is achieved
184
+ #
185
+ def parse_packet(str)
186
+ @str = (@unused_str || "") + str
187
+ @strpos = 0
188
+ begin
189
+ result = send("parse_#{@property}")
190
+ if result
191
+ instance_variable_set("@#{@property}", result)
192
+ true
193
+ end
194
+ rescue MoreCharsNeeded
195
+ false
196
+ end
197
+ end
198
+
199
+ def parse_size
200
+ @type = parse_type unless @type
201
+ send("parse_size_for_#{@type}")
202
+ end
203
+
204
+ def get_chars(n)
205
+ if @strpos + n - 1 >= @str.size
206
+ @unused_str = @str[@strpos..-1]
207
+ raise MoreCharsNeeded
208
+ else
209
+ result = @str[@strpos..(@strpos + n - 1)]
210
+ @strpos += n
211
+ result
212
+ end
213
+ end
214
+
215
+ def get_byte
216
+ get_chars(1).unpack("C")[0]
217
+ end
218
+
219
+ def read_int(str)
220
+ size_bytes = str.unpack("CC")
221
+ (size_bytes[0] << 8) + size_bytes[1]
222
+ end
223
+
224
+ def parse_type
225
+ case get_chars(2)
226
+ when "BM"
227
+ :bmp
228
+ when "GI"
229
+ :gif
230
+ when 0xff.chr + 0xd8.chr
231
+ :jpeg
232
+ when 0x89.chr + "P"
233
+ :png
234
+ else
235
+ raise UnknownImageType
236
+ end
237
+ end
238
+
239
+ def parse_size_for_gif
240
+ get_chars(9)[4..8].unpack('SS')
241
+ end
242
+
243
+ def parse_size_for_png
244
+ get_chars(23)[14..22].unpack('NN')
245
+ end
246
+
247
+ def parse_size_for_jpeg
248
+ loop do
249
+ @state = case @state
250
+ when nil
251
+ get_chars(2)
252
+ :started
253
+ when :started
254
+ get_byte == 0xFF ? :sof : :started
255
+ when :sof
256
+ c = get_byte
257
+ if (0xe0..0xef).include?(c)
258
+ :skipframe
259
+ elsif [0xC0..0xC3, 0xC5..0xC7, 0xC9..0xCB, 0xCD..0xCF].detect {|r| r.include? c}
260
+ :readsize
261
+ else
262
+ :skipframe
263
+ end
264
+ when :skipframe
265
+ @skip_chars = read_int(get_chars(2)) - 2
266
+ :do_skip
267
+ when :do_skip
268
+ get_chars(@skip_chars)
269
+ :started
270
+ when :readsize
271
+ s = get_chars(7)
272
+ return [read_int(s[5..6]), read_int(s[3..4])]
273
+ end
274
+ end
275
+ end
276
+
277
+ def parse_size_for_bmp
278
+ d = get_chars(27)[12..26]
279
+ d[0] == 40 ? d[4..-1].unpack('LL') : d[4..8].unpack('SS')
280
+ end
281
+ end
282
+ end
@@ -0,0 +1,29 @@
1
+ require "middleman/fastimage"
2
+
3
+ class Middleman::Base
4
+ alias_method :pre_automatic_image_tag, :image_tag
5
+ helpers do
6
+ def image_tag(path, params={})
7
+ if (!params[:width] || !params[:height]) && !path.include?("://")
8
+ params[:alt] ||= ""
9
+ prefix = options.http_images_path rescue options.images_dir
10
+
11
+ begin
12
+ real_path = File.join(options.public, asset_url(path, prefix))
13
+ if File.exists? real_path
14
+ dimensions = Middleman::FastImage.size(real_path, :raise_on_failure => true)
15
+ params[:width] ||= dimensions[0]
16
+ params[:height] ||= dimensions[1]
17
+ end
18
+ rescue
19
+ end
20
+
21
+ params = params.merge(:src => asset_url(path, prefix))
22
+ params = params.map { |k,v| %Q{#{k}="#{v}"}}.join(' ')
23
+ "<img #{params} />"
24
+ else
25
+ pre_automatic_image_tag(path, params)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,8 @@
1
- class << Middleman::Base
1
+ class << Middleman::Base
2
2
  alias_method :pre_cache_buster_asset_url, :asset_url
3
3
  def asset_url(path, prefix="", request=nil)
4
4
  http_path = pre_cache_buster_asset_url(path, prefix, request)
5
+
5
6
  if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path))
6
7
  http_path
7
8
  else
@@ -1,9 +1,5 @@
1
1
  # Otherwise use YUI
2
2
  # Fine a way to minify inline/css
3
- class Middleman::Base
4
- configure do
5
- ::Compass.configuration do |config|
6
- config.output_style = :compressed
7
- end
8
- end
3
+ ::Compass.configuration do |config|
4
+ config.output_style = :compressed
9
5
  end
@@ -1,4 +1,5 @@
1
1
  require "yui/compressor"
2
+ require "middleman/builder"
2
3
 
3
4
  module Middleman
4
5
  module Minified
@@ -29,7 +30,7 @@ END
29
30
  end
30
31
  end
31
32
  end
32
- end if Middleman::Base.environment == "build"
33
+ end
33
34
  end
34
35
 
35
36
  Middleman::Base.supported_formats << "js"
@@ -0,0 +1,5 @@
1
+ require "middleman/rack/sprockets"
2
+
3
+ class Middleman::Base
4
+ use Middleman::Rack::Sprockets
5
+ end
@@ -1,5 +1,5 @@
1
1
  require "sass"
2
- require 'compass'
2
+ require "compass"
3
3
 
4
4
  module Middleman
5
5
  module Sass
@@ -13,7 +13,7 @@ module Middleman
13
13
  static_version = options.public + request.path_info
14
14
  send_file(static_version) if File.exists? static_version
15
15
 
16
- location_of_sass_file = options.environment == "build" ? File.join(options.build_dir, options.css_dir) : "public"
16
+ location_of_sass_file = options.environment == "build" ? options.build_dir : options.public
17
17
  css_filename = File.join(Dir.pwd, location_of_sass_file) + request.path_info
18
18
  sass(path.to_sym, ::Compass.sass_engine_options.merge({ :css_filename => css_filename }))
19
19
  rescue Exception => e
@@ -67,4 +67,42 @@ end
67
67
 
68
68
  class Middleman::Base
69
69
  include Middleman::Sass
70
+
71
+ after do
72
+ ::Compass.configuration do |config|
73
+ config.project_path = self.root
74
+ config.sass_dir = File.join(File.basename(self.views), self.css_dir)
75
+ config.output_style = :nested
76
+ config.css_dir = File.join(File.basename(self.public), self.css_dir)
77
+ config.images_dir = File.join(File.basename(self.public), self.images_dir)
78
+
79
+ config.add_import_path(config.sass_dir)
80
+
81
+ config.http_images_path = self.http_images_path rescue File.join(self.http_prefix, self.images_dir)
82
+ config.http_stylesheets_path = self.http_css_path rescue File.join(self.http_prefix, self.css_dir)
83
+
84
+ if self.cache_buster?
85
+ config.asset_cache_buster do |path, real_path|
86
+ if File.readable?(real_path)
87
+ File.mtime(real_path).strftime("%s")
88
+ else
89
+ $stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}"
90
+ end
91
+ end
92
+ else
93
+ config.asset_cache_buster do
94
+ false
95
+ end
96
+ end
97
+ end
98
+
99
+ configure :build do
100
+ ::Compass.configuration do |config|
101
+ config.css_dir = File.join(File.basename(self.build_dir), self.css_dir)
102
+ config.images_dir = File.join(File.basename(self.build_dir), self.images_dir)
103
+ end
104
+ end
105
+
106
+ ::Compass.configure_sass_plugin!
107
+ end
70
108
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{middleman}
8
- s.version = "0.9.20"
8
+ s.version = "0.9.21"
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-22}
12
+ s.date = %q{2009-10-28}
13
13
  s.email = %q{tdreyno@gmail.com}
14
14
  s.executables = ["mm-init", "mm-build", "mm-server"]
15
15
  s.extra_rdoc_files = [
@@ -31,8 +31,9 @@ Gem::Specification.new do |s|
31
31
  "lib/middleman/base.rb",
32
32
  "lib/middleman/builder.rb",
33
33
  "lib/middleman/config.ru",
34
+ "lib/middleman/fastimage.rb",
35
+ "lib/middleman/features/automatic_image_sizes.rb",
34
36
  "lib/middleman/features/cache_buster.rb",
35
- "lib/middleman/features/compass.rb",
36
37
  "lib/middleman/features/growl.rb",
37
38
  "lib/middleman/features/maruku.rb",
38
39
  "lib/middleman/features/minify_css.rb",
@@ -40,6 +41,7 @@ Gem::Specification.new do |s|
40
41
  "lib/middleman/features/relative_assets.rb",
41
42
  "lib/middleman/features/slickmap.rb",
42
43
  "lib/middleman/features/smush_pngs.rb",
44
+ "lib/middleman/features/sprockets.rb",
43
45
  "lib/middleman/haml.rb",
44
46
  "lib/middleman/helpers.rb",
45
47
  "lib/middleman/rack/sprockets+ruby19.rb",
@@ -52,19 +54,23 @@ Gem::Specification.new do |s|
52
54
  "lib/middleman/template/views/stylesheets/site.css.sass",
53
55
  "lib/middleman/templater+dynamic_renderer.rb",
54
56
  "middleman.gemspec",
57
+ "spec/auto_image_sizes.rb",
55
58
  "spec/builder_spec.rb",
56
59
  "spec/cache_buster_spec.rb",
57
60
  "spec/fixtures/sample/init.rb",
61
+ "spec/fixtures/sample/public/images/blank.gif",
58
62
  "spec/fixtures/sample/public/javascripts/to-be-included.js",
59
63
  "spec/fixtures/sample/public/static.html",
60
64
  "spec/fixtures/sample/public/stylesheets/static.css",
61
65
  "spec/fixtures/sample/views/_partial.haml",
66
+ "spec/fixtures/sample/views/auto-image-sizes.html.haml",
62
67
  "spec/fixtures/sample/views/index.html.haml",
63
68
  "spec/fixtures/sample/views/inline-js.html.haml",
64
69
  "spec/fixtures/sample/views/javascripts/empty-with-include.js",
65
70
  "spec/fixtures/sample/views/layout.haml",
66
71
  "spec/fixtures/sample/views/maruku.html.maruku",
67
72
  "spec/fixtures/sample/views/services/index.html.haml",
73
+ "spec/fixtures/sample/views/stylesheets/relative_assets.css.sass",
68
74
  "spec/fixtures/sample/views/stylesheets/site.css.sass",
69
75
  "spec/generator_spec.rb",
70
76
  "spec/relative_assets_spec.rb",
@@ -77,7 +83,8 @@ Gem::Specification.new do |s|
77
83
  s.rubygems_version = %q{1.3.5}
78
84
  s.summary = %q{A static site generator utilizing Haml, Sass and providing YUI compression and cache busting}
79
85
  s.test_files = [
80
- "spec/builder_spec.rb",
86
+ "spec/auto_image_sizes.rb",
87
+ "spec/builder_spec.rb",
81
88
  "spec/cache_buster_spec.rb",
82
89
  "spec/fixtures/sample/init.rb",
83
90
  "spec/generator_spec.rb",
@@ -0,0 +1,23 @@
1
+ require 'rack/test'
2
+ require File.join(File.dirname(__FILE__), "spec_helper")
3
+
4
+ base = ::Middleman::Base
5
+ base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
6
+
7
+ describe "Auto Image sizes Feature" do
8
+ it "should not append width and height if off" do
9
+ base.disable :automatic_image_sizes
10
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
11
+ browser.get("/auto-image-sizes.html")
12
+ browser.last_response.body.should_not include("width=")
13
+ browser.last_response.body.should_not include("height=")
14
+ end
15
+
16
+ it "should append width and height if off" do
17
+ base.enable :automatic_image_sizes
18
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
19
+ browser.get("/auto-image-sizes.html")
20
+ browser.last_response.body.should include("width=")
21
+ browser.last_response.body.should include("height=")
22
+ end
23
+ end
@@ -39,7 +39,7 @@ describe "Builder" do
39
39
 
40
40
  it "should build sass files" do
41
41
  File.exists?("#{@root_dir}/build/stylesheets/site.css").should be_true
42
- File.read("#{@root_dir}/build/stylesheets/site.css").should include("html,body,div,span,applet,object,iframe")
42
+ File.read("#{@root_dir}/build/stylesheets/site.css").gsub(/\s/, "").should include("html,body,div,span,applet,object,iframe")
43
43
  end
44
44
 
45
45
  it "should build static css files" do
@@ -1,3 +1,4 @@
1
+ require 'rack/test'
1
2
  require File.join(File.dirname(__FILE__), "spec_helper")
2
3
 
3
4
  base = ::Middleman::Base
@@ -6,13 +7,15 @@ base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
6
7
  describe "Cache Buster Feature" do
7
8
  it "should not append query string if off" do
8
9
  base.disable :cache_buster
9
- base.new
10
- base.asset_url("stylesheets/static.css").should_not include("?")
10
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
11
+ browser.get("/stylesheets/relative_assets.css")
12
+ browser.last_response.body.should_not include("?")
11
13
  end
12
14
 
13
15
  it "should append query string if on" do
14
16
  base.enable :cache_buster
15
- base.new
16
- base.asset_url("stylesheets/static.css").should include("?")
17
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
18
+ browser.get("/stylesheets/relative_assets.css")
19
+ browser.last_response.body.should include("?")
17
20
  end
18
21
  end
@@ -1 +1 @@
1
- enable :maruku
1
+ # enable :maruku
@@ -0,0 +1 @@
1
+ = image_tag "blank.gif"
@@ -0,0 +1,3 @@
1
+ @import compass.sass
2
+ h1
3
+ background= image_url("blank.gif")
@@ -1,28 +1,23 @@
1
- # require File.join(File.dirname(__FILE__), "spec_helper")
2
- #
3
- # base = ::Middleman::Base
4
- # base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
5
- #
6
- # describe "Relative Assets Feature" do
7
- # before do
8
- # base.disable :relative_assets
9
- # base.init!
10
- # @app = base.new
11
- # end
12
- #
13
- # it "should not contain ../ if off" do
14
- # @app.asset_url("stylesheets/static.css").should_not include("?")
15
- # end
16
- # end
17
- #
18
- # describe "Relative Assets Feature" do
19
- # before do
20
- # base.enable :relative_assets
21
- # base.init!
22
- # @app = base.new
23
- # end
24
- #
25
- # it "should contain ../ if on" do
26
- # @app.asset_url("stylesheets/static.css").should include("?")
27
- # end
28
- # end
1
+ require 'rack/test'
2
+ require File.join(File.dirname(__FILE__), "spec_helper")
3
+
4
+ base = ::Middleman::Base
5
+ base.set :root, File.join(File.dirname(__FILE__), "fixtures", "sample")
6
+
7
+ describe "Relative Assets Feature" do
8
+ it "should not contain ../ if off" do
9
+ base.disable :relative_assets
10
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
11
+ browser.get("/stylesheets/relative_assets.css")
12
+ browser.last_response.body.should_not include("../")
13
+ end
14
+ end
15
+
16
+ describe "Relative Assets Feature" do
17
+ it "should contain ../ if on" do
18
+ base.enable :relative_assets
19
+ browser = Rack::Test::Session.new(Rack::MockSession.new(base.new))
20
+ browser.get("/stylesheets/relative_assets.css")
21
+ browser.last_response.body.should include("../")
22
+ end
23
+ end
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.20
4
+ version: 0.9.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-22 00:00:00 -07:00
12
+ date: 2009-10-28 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -158,8 +158,9 @@ files:
158
158
  - lib/middleman/base.rb
159
159
  - lib/middleman/builder.rb
160
160
  - lib/middleman/config.ru
161
+ - lib/middleman/fastimage.rb
162
+ - lib/middleman/features/automatic_image_sizes.rb
161
163
  - lib/middleman/features/cache_buster.rb
162
- - lib/middleman/features/compass.rb
163
164
  - lib/middleman/features/growl.rb
164
165
  - lib/middleman/features/maruku.rb
165
166
  - lib/middleman/features/minify_css.rb
@@ -167,6 +168,7 @@ files:
167
168
  - lib/middleman/features/relative_assets.rb
168
169
  - lib/middleman/features/slickmap.rb
169
170
  - lib/middleman/features/smush_pngs.rb
171
+ - lib/middleman/features/sprockets.rb
170
172
  - lib/middleman/haml.rb
171
173
  - lib/middleman/helpers.rb
172
174
  - lib/middleman/rack/sprockets+ruby19.rb
@@ -179,19 +181,23 @@ files:
179
181
  - lib/middleman/template/views/stylesheets/site.css.sass
180
182
  - lib/middleman/templater+dynamic_renderer.rb
181
183
  - middleman.gemspec
184
+ - spec/auto_image_sizes.rb
182
185
  - spec/builder_spec.rb
183
186
  - spec/cache_buster_spec.rb
184
187
  - spec/fixtures/sample/init.rb
188
+ - spec/fixtures/sample/public/images/blank.gif
185
189
  - spec/fixtures/sample/public/javascripts/to-be-included.js
186
190
  - spec/fixtures/sample/public/static.html
187
191
  - spec/fixtures/sample/public/stylesheets/static.css
188
192
  - spec/fixtures/sample/views/_partial.haml
193
+ - spec/fixtures/sample/views/auto-image-sizes.html.haml
189
194
  - spec/fixtures/sample/views/index.html.haml
190
195
  - spec/fixtures/sample/views/inline-js.html.haml
191
196
  - spec/fixtures/sample/views/javascripts/empty-with-include.js
192
197
  - spec/fixtures/sample/views/layout.haml
193
198
  - spec/fixtures/sample/views/maruku.html.maruku
194
199
  - spec/fixtures/sample/views/services/index.html.haml
200
+ - spec/fixtures/sample/views/stylesheets/relative_assets.css.sass
195
201
  - spec/fixtures/sample/views/stylesheets/site.css.sass
196
202
  - spec/generator_spec.rb
197
203
  - spec/relative_assets_spec.rb
@@ -225,6 +231,7 @@ signing_key:
225
231
  specification_version: 3
226
232
  summary: A static site generator utilizing Haml, Sass and providing YUI compression and cache busting
227
233
  test_files:
234
+ - spec/auto_image_sizes.rb
228
235
  - spec/builder_spec.rb
229
236
  - spec/cache_buster_spec.rb
230
237
  - spec/fixtures/sample/init.rb
@@ -1,18 +0,0 @@
1
- class Middleman::Base
2
- configure do
3
- ::Compass.configuration do |config|
4
- images_location = (self.environment == "build") ? self.build_dir : self.public
5
-
6
- config.project_path = Dir.pwd
7
- config.sass_dir = File.join(File.basename(self.views), self.css_dir)
8
- config.output_style = :nested
9
- config.css_dir = File.join(File.basename(images_location), self.css_dir)
10
- config.images_dir = File.join(File.basename(images_location), self.images_dir)
11
- # File.expand_path(self.images_dir, self.public)
12
-
13
- config.add_import_path(config.sass_dir)
14
- end
15
-
16
- ::Compass.configure_sass_plugin!
17
- end
18
- end