compass 0.12.7 → 0.13.alpha.4

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 (254) hide show
  1. data/README.markdown +1 -1
  2. data/Rakefile +14 -9
  3. data/VERSION.yml +6 -0
  4. data/features/command_line.feature +8 -50
  5. data/features/step_definitions/command_line_steps.rb +3 -2
  6. data/frameworks/compass/stylesheets/compass/_css3.scss +2 -0
  7. data/frameworks/compass/stylesheets/compass/_support.scss +4 -4
  8. data/frameworks/compass/stylesheets/compass/css3/_animation.scss +121 -0
  9. data/frameworks/compass/stylesheets/compass/css3/_appearance.scss +10 -6
  10. data/frameworks/compass/stylesheets/compass/css3/_background-clip.scss +32 -36
  11. data/frameworks/compass/stylesheets/compass/css3/_background-origin.scss +32 -35
  12. data/frameworks/compass/stylesheets/compass/css3/_background-size.scss +12 -15
  13. data/frameworks/compass/stylesheets/compass/css3/_border-radius.scss +27 -48
  14. data/frameworks/compass/stylesheets/compass/css3/_box-shadow.scss +22 -35
  15. data/frameworks/compass/stylesheets/compass/css3/_box-sizing.scss +12 -8
  16. data/frameworks/compass/stylesheets/compass/css3/_box.scss +57 -82
  17. data/frameworks/compass/stylesheets/compass/css3/_columns.scss +104 -71
  18. data/frameworks/compass/stylesheets/compass/css3/_filter.scss +38 -18
  19. data/frameworks/compass/stylesheets/compass/css3/_flexbox.scss +294 -0
  20. data/frameworks/compass/stylesheets/compass/css3/_font-face.scss +4 -4
  21. data/frameworks/compass/stylesheets/compass/css3/_hyphenation.scss +13 -22
  22. data/frameworks/compass/stylesheets/compass/css3/_images.scss +45 -48
  23. data/frameworks/compass/stylesheets/compass/css3/_inline-block.scss +1 -1
  24. data/frameworks/compass/stylesheets/compass/css3/_regions.scss +12 -8
  25. data/frameworks/compass/stylesheets/compass/css3/_selection.scss +31 -0
  26. data/frameworks/compass/stylesheets/compass/css3/_shared.scss +226 -2
  27. data/frameworks/compass/stylesheets/compass/css3/_text-shadow.scss +21 -26
  28. data/frameworks/compass/stylesheets/compass/css3/_transform-legacy.scss +3 -3
  29. data/frameworks/compass/stylesheets/compass/css3/_transform.scss +8 -8
  30. data/frameworks/compass/stylesheets/compass/css3/_transition.scss +3 -3
  31. data/frameworks/compass/stylesheets/compass/css3/_user-interface.scss +43 -4
  32. data/frameworks/compass/stylesheets/compass/typography/_units.scss +152 -0
  33. data/frameworks/compass/stylesheets/compass/typography/_vertical_rhythm.scss +180 -102
  34. data/frameworks/compass/stylesheets/compass/typography/lists/_horizontal-list.scss +5 -3
  35. data/frameworks/compass/stylesheets/compass/typography/lists/_inline-list.scss +6 -3
  36. data/frameworks/compass/stylesheets/compass/typography/text/_ellipsis.scss +1 -1
  37. data/frameworks/compass/stylesheets/compass/utilities/general/_float.scss +7 -3
  38. data/frameworks/compass/stylesheets/compass/utilities/general/_hacks.scss +2 -2
  39. data/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss +32 -13
  40. data/frameworks/compass/stylesheets/compass/utilities/tables/_borders.scss +14 -9
  41. data/lib/compass/actions.rb +3 -1
  42. data/lib/compass/commands/update_project.rb +1 -2
  43. data/lib/compass/commands/watch_project.rb +11 -113
  44. data/lib/compass/commands.rb +1 -1
  45. data/lib/compass/compiler.rb +8 -1
  46. data/lib/compass/configuration/data.rb +1 -1
  47. data/lib/compass/configuration/helpers.rb +2 -0
  48. data/lib/compass/exec/project_options_parser.rb +8 -0
  49. data/lib/compass/logger.rb +2 -0
  50. data/lib/compass/sass_extensions/functions/cross_browser_support.rb +1 -1
  51. data/lib/compass/sass_extensions/functions/env.rb +18 -0
  52. data/lib/compass/sass_extensions/functions/gradient_support.rb +101 -29
  53. data/lib/compass/sass_extensions/functions/image_size.rb +2 -1
  54. data/lib/compass/sass_extensions/functions/math.rb +13 -1
  55. data/lib/compass/sass_extensions/functions/sprites.rb +82 -22
  56. data/lib/compass/sass_extensions/functions/urls.rb +37 -6
  57. data/lib/compass/sass_extensions/functions/utility.rb +10 -0
  58. data/lib/compass/sass_extensions/sprites/engines/chunky_png_engine.rb +11 -9
  59. data/lib/compass/sass_extensions/sprites/image.rb +7 -2
  60. data/lib/compass/sass_extensions/sprites/image_methods.rb +5 -1
  61. data/lib/compass/sass_extensions/sprites/images.rb +29 -0
  62. data/lib/compass/sass_extensions/sprites/layout/diagonal.rb +42 -0
  63. data/lib/compass/sass_extensions/sprites/layout/horizontal.rb +66 -0
  64. data/lib/compass/sass_extensions/sprites/layout/smart.rb +33 -0
  65. data/lib/compass/sass_extensions/sprites/layout/vertical.rb +68 -0
  66. data/lib/compass/sass_extensions/sprites/layout.rb +39 -0
  67. data/lib/compass/sass_extensions/sprites/layout_methods.rb +9 -115
  68. data/lib/compass/sass_extensions/sprites/sprite_map.rb +5 -1
  69. data/lib/compass/sass_extensions/sprites/sprite_methods.rb +8 -14
  70. data/lib/compass/sass_extensions/sprites.rb +2 -0
  71. data/lib/compass/sprite_importer/content.erb +29 -24
  72. data/lib/compass/sprite_importer.rb +7 -11
  73. data/lib/compass/version.rb +10 -13
  74. data/lib/compass/watcher/compiler.rb +59 -0
  75. data/lib/compass/watcher/project_watcher.rb +111 -0
  76. data/lib/compass/watcher/watch.rb +33 -0
  77. data/lib/compass/watcher.rb +11 -0
  78. data/lib/compass.rb +2 -2
  79. data/test/fixtures/sprites/public/images/numeric/200.png +0 -0
  80. data/test/fixtures/stylesheets/busted_font_urls/config.rb +32 -0
  81. data/test/fixtures/stylesheets/busted_font_urls/css/screen.css +7 -0
  82. data/test/fixtures/stylesheets/busted_font_urls/fonts/feed.ttf +0 -0
  83. data/test/fixtures/stylesheets/busted_font_urls/fonts/grid.ttf +0 -0
  84. data/test/fixtures/stylesheets/busted_font_urls/fonts/sub/dk.ttf +0 -0
  85. data/test/fixtures/stylesheets/busted_font_urls/sass/screen.sass +11 -0
  86. data/test/fixtures/stylesheets/busted_font_urls/tmp/screen.css +7 -0
  87. data/test/fixtures/stylesheets/busted_image_urls/tmp/screen.css +9 -0
  88. data/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css +33 -0
  89. data/test/fixtures/stylesheets/compass/css/animation.css +33 -0
  90. data/test/fixtures/stylesheets/compass/css/background-clip.css +5 -0
  91. data/test/fixtures/stylesheets/compass/css/background-origin.css +15 -0
  92. data/test/fixtures/stylesheets/compass/css/background-size.css +24 -0
  93. data/test/fixtures/stylesheets/compass/css/columns.css +27 -63
  94. data/test/fixtures/stylesheets/compass/css/flexbox.css +121 -0
  95. data/test/fixtures/stylesheets/compass/css/fonts.css +1 -1
  96. data/test/fixtures/stylesheets/compass/css/gradients.css +64 -36
  97. data/test/fixtures/stylesheets/compass/css/grid_background.css +7 -14
  98. data/test/fixtures/stylesheets/compass/css/hyphenation.css +4 -2
  99. data/test/fixtures/stylesheets/compass/css/lists.css +5 -5
  100. data/test/fixtures/stylesheets/compass/css/pie.css +0 -3
  101. data/test/fixtures/stylesheets/compass/css/regions.css +4 -2
  102. data/test/fixtures/stylesheets/compass/css/selection.css +13 -0
  103. data/test/fixtures/stylesheets/compass/css/sprites.css +251 -250
  104. data/test/fixtures/stylesheets/compass/css/text_shadow.css +6 -6
  105. data/test/fixtures/stylesheets/compass/css/transition.css +6 -0
  106. data/test/fixtures/stylesheets/compass/css/units.css +30 -0
  107. data/test/fixtures/stylesheets/compass/css/user-interface.css +22 -1
  108. data/test/fixtures/stylesheets/compass/css/utilities.css +15 -0
  109. data/test/fixtures/stylesheets/compass/css/vertical_rhythm.css +177 -8
  110. data/test/fixtures/stylesheets/compass/images/flag-s5b4f509715.png +0 -0
  111. data/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss +19 -0
  112. data/test/fixtures/stylesheets/compass/sass/animation.scss +13 -0
  113. data/test/fixtures/stylesheets/compass/sass/background-clip.scss +4 -2
  114. data/test/fixtures/stylesheets/compass/sass/background-origin.scss +10 -0
  115. data/test/fixtures/stylesheets/compass/sass/background-size.scss +12 -0
  116. data/test/fixtures/stylesheets/compass/sass/columns.scss +9 -9
  117. data/test/fixtures/stylesheets/compass/sass/flexbox.scss +44 -0
  118. data/test/fixtures/stylesheets/compass/sass/gradients.sass +31 -0
  119. data/test/fixtures/stylesheets/compass/sass/selection.scss +13 -0
  120. data/test/fixtures/stylesheets/compass/sass/transition.scss +1 -1
  121. data/test/fixtures/stylesheets/compass/sass/units.scss +45 -0
  122. data/test/fixtures/stylesheets/compass/sass/user-interface.scss +13 -1
  123. data/test/fixtures/stylesheets/compass/sass/utilities.scss +10 -0
  124. data/test/fixtures/stylesheets/compass/sass/vertical_rhythm.scss +208 -7
  125. data/test/fixtures/stylesheets/envtest/css/env.css +8 -0
  126. data/test/fixtures/stylesheets/envtest/sass/env.scss +16 -0
  127. data/test/fixtures/stylesheets/envtest/tmp/env.css +14 -0
  128. data/test/fixtures/stylesheets/valid/css/simple.css +4 -0
  129. data/test/helpers/diff.rb +1 -1
  130. data/test/integrations/compass_test.rb +23 -14
  131. data/test/integrations/sprites_test.rb +305 -63
  132. data/test/test_helper.rb +5 -15
  133. data/test/units/command_line_test.rb +0 -2
  134. data/test/units/compass_module_test.rb +1 -1
  135. data/test/units/configuration_test.rb +12 -0
  136. data/test/units/regressions_test.rb +8 -8
  137. data/test/units/sass_extensions_test.rb +2 -0
  138. data/test/units/sass_extenstions/gradients_test.rb +33 -0
  139. data/test/units/sprites/image_test.rb +5 -0
  140. data/test/units/sprites/images_test.rb +46 -0
  141. data/test/units/sprites/layout_test.rb +29 -4
  142. data/test/units/watcher/compiler_test.rb +39 -0
  143. data/test/units/watcher/project_watcher_test.rb +73 -0
  144. data/test/units/watcher/watch_test.rb +42 -0
  145. metadata +171 -236
  146. checksums.yaml +0 -7
  147. data/frameworks/blueprint/stylesheets/_blueprint.scss +0 -37
  148. data/frameworks/blueprint/stylesheets/blueprint/_buttons.scss +0 -101
  149. data/frameworks/blueprint/stylesheets/blueprint/_colors.scss +0 -36
  150. data/frameworks/blueprint/stylesheets/blueprint/_debug.scss +0 -28
  151. data/frameworks/blueprint/stylesheets/blueprint/_fancy-type.scss +0 -88
  152. data/frameworks/blueprint/stylesheets/blueprint/_form.scss +0 -66
  153. data/frameworks/blueprint/stylesheets/blueprint/_grid.scss +0 -258
  154. data/frameworks/blueprint/stylesheets/blueprint/_ie.scss +0 -111
  155. data/frameworks/blueprint/stylesheets/blueprint/_interaction.scss +0 -66
  156. data/frameworks/blueprint/stylesheets/blueprint/_link-icons.scss +0 -37
  157. data/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +0 -152
  158. data/frameworks/blueprint/stylesheets/blueprint/_print.scss +0 -86
  159. data/frameworks/blueprint/stylesheets/blueprint/_reset.scss +0 -3
  160. data/frameworks/blueprint/stylesheets/blueprint/_rtl.scss +0 -121
  161. data/frameworks/blueprint/stylesheets/blueprint/_scaffolding.scss +0 -52
  162. data/frameworks/blueprint/stylesheets/blueprint/_typography.scss +0 -90
  163. data/frameworks/blueprint/stylesheets/blueprint/_utilities.scss +0 -37
  164. data/frameworks/blueprint/stylesheets/blueprint/reset/_utilities.scss +0 -83
  165. data/frameworks/blueprint/templates/basic/grid.png +0 -0
  166. data/frameworks/blueprint/templates/basic/ie.sass +0 -4
  167. data/frameworks/blueprint/templates/basic/manifest.rb +0 -30
  168. data/frameworks/blueprint/templates/basic/partials/_base.sass +0 -10
  169. data/frameworks/blueprint/templates/basic/print.sass +0 -4
  170. data/frameworks/blueprint/templates/basic/screen.sass +0 -12
  171. data/frameworks/blueprint/templates/buttons/buttons/cross.png +0 -0
  172. data/frameworks/blueprint/templates/buttons/buttons/key.png +0 -0
  173. data/frameworks/blueprint/templates/buttons/buttons/tick.png +0 -0
  174. data/frameworks/blueprint/templates/buttons/buttons.sass +0 -49
  175. data/frameworks/blueprint/templates/buttons/manifest.rb +0 -17
  176. data/frameworks/blueprint/templates/link_icons/link_icons/doc.png +0 -0
  177. data/frameworks/blueprint/templates/link_icons/link_icons/email.png +0 -0
  178. data/frameworks/blueprint/templates/link_icons/link_icons/external.png +0 -0
  179. data/frameworks/blueprint/templates/link_icons/link_icons/feed.png +0 -0
  180. data/frameworks/blueprint/templates/link_icons/link_icons/im.png +0 -0
  181. data/frameworks/blueprint/templates/link_icons/link_icons/pdf.png +0 -0
  182. data/frameworks/blueprint/templates/link_icons/link_icons/visited.png +0 -0
  183. data/frameworks/blueprint/templates/link_icons/link_icons/xls.png +0 -0
  184. data/frameworks/blueprint/templates/link_icons/link_icons.sass +0 -13
  185. data/frameworks/blueprint/templates/link_icons/manifest.rb +0 -23
  186. data/frameworks/blueprint/templates/project/grid.png +0 -0
  187. data/frameworks/blueprint/templates/project/ie.sass +0 -16
  188. data/frameworks/blueprint/templates/project/manifest.rb +0 -30
  189. data/frameworks/blueprint/templates/project/partials/_base.sass +0 -11
  190. data/frameworks/blueprint/templates/project/print.sass +0 -8
  191. data/frameworks/blueprint/templates/project/screen.sass +0 -46
  192. data/frameworks/blueprint/templates/semantic/grid.png +0 -0
  193. data/frameworks/blueprint/templates/semantic/ie.sass +0 -16
  194. data/frameworks/blueprint/templates/semantic/manifest.rb +0 -33
  195. data/frameworks/blueprint/templates/semantic/partials/_base.sass +0 -10
  196. data/frameworks/blueprint/templates/semantic/partials/_form.sass +0 -6
  197. data/frameworks/blueprint/templates/semantic/partials/_page.sass +0 -17
  198. data/frameworks/blueprint/templates/semantic/partials/_two_col.sass +0 -38
  199. data/frameworks/blueprint/templates/semantic/print.sass +0 -5
  200. data/frameworks/blueprint/templates/semantic/screen.sass +0 -14
  201. data/lib/compass/commands/generate_grid_background.rb +0 -96
  202. data/lib/compass/grid_builder.rb +0 -102
  203. data/test/fixtures/stylesheets/blueprint/config.rb +0 -14
  204. data/test/fixtures/stylesheets/blueprint/css/ie.css +0 -76
  205. data/test/fixtures/stylesheets/blueprint/css/print.css +0 -56
  206. data/test/fixtures/stylesheets/blueprint/css/screen.css +0 -815
  207. data/test/fixtures/stylesheets/blueprint/css/single-imports/buttons.css +0 -56
  208. data/test/fixtures/stylesheets/blueprint/css/single-imports/colors.css +0 -80
  209. data/test/fixtures/stylesheets/blueprint/css/single-imports/debug.css +0 -11
  210. data/test/fixtures/stylesheets/blueprint/css/single-imports/fancy-type.css +0 -30
  211. data/test/fixtures/stylesheets/blueprint/css/single-imports/form.css +0 -42
  212. data/test/fixtures/stylesheets/blueprint/css/single-imports/grid.css +0 -435
  213. data/test/fixtures/stylesheets/blueprint/css/single-imports/ie.css +0 -76
  214. data/test/fixtures/stylesheets/blueprint/css/single-imports/interaction.css +0 -46
  215. data/test/fixtures/stylesheets/blueprint/css/single-imports/link-icons.css +0 -40
  216. data/test/fixtures/stylesheets/blueprint/css/single-imports/liquid.css +0 -651
  217. data/test/fixtures/stylesheets/blueprint/css/single-imports/print.css +0 -60
  218. data/test/fixtures/stylesheets/blueprint/css/single-imports/reset-utilities.css +0 -75
  219. data/test/fixtures/stylesheets/blueprint/css/single-imports/reset.css +0 -42
  220. data/test/fixtures/stylesheets/blueprint/css/single-imports/rtl.css +0 -437
  221. data/test/fixtures/stylesheets/blueprint/css/single-imports/scaffolding.css +0 -45
  222. data/test/fixtures/stylesheets/blueprint/css/single-imports/typography.css +0 -146
  223. data/test/fixtures/stylesheets/blueprint/css/single-imports/utilities.css +0 -35
  224. data/test/fixtures/stylesheets/blueprint/images/grid.png +0 -0
  225. data/test/fixtures/stylesheets/blueprint/images/link_icons/doc.png +0 -0
  226. data/test/fixtures/stylesheets/blueprint/images/link_icons/email.png +0 -0
  227. data/test/fixtures/stylesheets/blueprint/images/link_icons/external.png +0 -0
  228. data/test/fixtures/stylesheets/blueprint/images/link_icons/feed.png +0 -0
  229. data/test/fixtures/stylesheets/blueprint/images/link_icons/im.png +0 -0
  230. data/test/fixtures/stylesheets/blueprint/images/link_icons/pdf.png +0 -0
  231. data/test/fixtures/stylesheets/blueprint/images/link_icons/visited.png +0 -0
  232. data/test/fixtures/stylesheets/blueprint/images/link_icons/xls.png +0 -0
  233. data/test/fixtures/stylesheets/blueprint/sass/ie.sass +0 -3
  234. data/test/fixtures/stylesheets/blueprint/sass/print.sass +0 -3
  235. data/test/fixtures/stylesheets/blueprint/sass/screen.sass +0 -18
  236. data/test/fixtures/stylesheets/blueprint/sass/single-imports/buttons.scss +0 -4
  237. data/test/fixtures/stylesheets/blueprint/sass/single-imports/colors.scss +0 -34
  238. data/test/fixtures/stylesheets/blueprint/sass/single-imports/debug.scss +0 -3
  239. data/test/fixtures/stylesheets/blueprint/sass/single-imports/fancy-type.scss +0 -3
  240. data/test/fixtures/stylesheets/blueprint/sass/single-imports/form.scss +0 -5
  241. data/test/fixtures/stylesheets/blueprint/sass/single-imports/grid.scss +0 -3
  242. data/test/fixtures/stylesheets/blueprint/sass/single-imports/ie.scss +0 -3
  243. data/test/fixtures/stylesheets/blueprint/sass/single-imports/interaction.scss +0 -3
  244. data/test/fixtures/stylesheets/blueprint/sass/single-imports/link-icons.scss +0 -13
  245. data/test/fixtures/stylesheets/blueprint/sass/single-imports/liquid.scss +0 -3
  246. data/test/fixtures/stylesheets/blueprint/sass/single-imports/print.scss +0 -5
  247. data/test/fixtures/stylesheets/blueprint/sass/single-imports/reset-utilities.scss +0 -5
  248. data/test/fixtures/stylesheets/blueprint/sass/single-imports/reset.scss +0 -1
  249. data/test/fixtures/stylesheets/blueprint/sass/single-imports/rtl.scss +0 -3
  250. data/test/fixtures/stylesheets/blueprint/sass/single-imports/scaffolding.scss +0 -5
  251. data/test/fixtures/stylesheets/blueprint/sass/single-imports/typography.scss +0 -3
  252. data/test/fixtures/stylesheets/blueprint/sass/single-imports/utilities.scss +0 -3
  253. data/test/fixtures/stylesheets/compass/images/flag-s4798b5a210.png +0 -0
  254. data/test/units/compass_png_test.rb +0 -46
@@ -32,128 +32,22 @@ module Compass
32
32
  def compute_image_positions!
33
33
  case layout
34
34
  when SMART
35
- calculate_smart_positions
35
+ require 'compass/sass_extensions/sprites/layout/smart'
36
+ @images, @width, @height = Layout::Smart.new(@images, @kwargs).properties
36
37
  when DIAGONAL
37
- calculate_diagonal_dimensions
38
- calculate_diagonal_positions
38
+ require 'compass/sass_extensions/sprites/layout/diagonal'
39
+ @images, @width, @height = Layout::Diagonal.new(@images, @kwargs).properties
39
40
  when HORIZONTAL
40
- @height = height_for_horizontal_layout
41
- calculate_horizontal_positions
42
- @width = width_for_horizontal_layout
41
+ require 'compass/sass_extensions/sprites/layout/horizontal'
42
+ @images, @width, @height = Layout::Horizontal.new(@images, @kwargs).properties
43
43
  else
44
- @images.sort! do |a,b|
45
- if (b.size <=> a.size) === 0
46
- a.name <=> b.name
47
- else
48
- b.size <=> a.size
49
- end
50
- end
51
-
52
- @width = width_for_vertical_layout
53
- calulate_vertical_postions
54
- @height = height_for_vertical_layout
55
- if @images.any?(&:repeat_x?)
56
- calculate_repeat_extra_width!
57
- tile_images_that_repeat
58
- end
59
- end
60
- end
61
-
62
- def tile_images_that_repeat
63
- @images.map {|img| img if img.repeat_x?}.compact.each do |image|
64
- x = image.left - (image.left / image.width).ceil * image.width
65
- while x < @width do
66
- begin
67
- img = image.dup
68
- img.top = image.top
69
- img.left = x.to_i
70
- @images << img
71
- x += image.width
72
- end
73
- end
74
- end
75
- end
76
-
77
- def calculate_repeat_extra_width!
78
- require 'rational' #for ruby 1.8.7
79
- m = @images.inject(1) {|m,img| img.repeat_x? ? m.lcm(img.width) : m}
80
- remainder = @width % m
81
- @width += (m - remainder) unless remainder.zero?
82
- end
83
-
84
- def calculate_smart_positions
85
- fitter = ::Compass::SassExtensions::Sprites::RowFitter.new(@images)
86
- current_y = 0
87
- fitter.fit!.each do |row|
88
- current_x = 0
89
- row.images.each_with_index do |image, index|
90
- image.left = current_x
91
- image.top = current_y
92
- current_x += image.width
93
- end
94
- current_y += row.height
95
- end
96
- @width = fitter.width
97
- @height = fitter.height
98
- end
99
-
100
-
101
- def calculate_diagonal_dimensions
102
- @width = @images.inject(0) {|sum, img| sum + img.width}
103
- @height = @images.inject(0) {|sum, img| sum + img.height}
104
- end
105
-
106
- def calculate_diagonal_positions
107
- previous = nil
108
- @images.each_with_index do |image, index|
109
- if previous.nil?
110
- previous = image
111
- image.top = @height - image.height
112
- image.left = 0
113
- next
114
- end
115
- image.top = previous.top - image.height
116
- image.left = previous.left + previous.width
117
- previous = image
44
+ require 'compass/sass_extensions/sprites/layout/vertical'
45
+ @images, @width, @height = Layout::Vertical.new(@images, @kwargs).properties
118
46
  end
119
47
  end
120
48
 
121
- def calculate_horizontal_positions
122
- @images.each_with_index do |image, index|
123
- image.top = image.position.unit_str == '%' ? (@height - image.height) * (image.position.value / 100.0) : image.position.value
124
- next if index == 0
125
- last_image = @images[index-1]
126
- image.left = last_image.left + last_image.width + [image.spacing, last_image.spacing].max
127
- end
128
- end
129
-
130
- def calulate_vertical_postions
131
- @images.each_with_index do |image, index|
132
- image.left = (image.position.unit_str == "%" ? (@width - image.width) * (image.position.value / 100.0) : image.position.value).to_i
133
- next if index == 0
134
- last_image = @images[index-1]
135
- image.top = last_image.top + last_image.height + [image.spacing, last_image.spacing].max
136
- end
137
- end
138
-
139
- def height_for_vertical_layout
140
- last = @images.last
141
- last.top + last.height
142
- end
143
-
144
- def height_for_horizontal_layout
145
- @height = @images.map {|image| image.height + image.offset}.max
146
- end
147
-
148
- def width_for_horizontal_layout
149
- @images.inject(0) { |sum, image| sum += (image.width + image.spacing) }
150
- end
151
-
152
- def width_for_vertical_layout
153
- @images.map { |image| image.width + image.offset }.max
154
- end
155
49
  end
156
50
  end
157
51
  end
158
52
  end
159
-
53
+
@@ -39,15 +39,19 @@ module Compass
39
39
  @kwargs = kwargs
40
40
  @kwargs['cleanup'] ||= Sass::Script::Bool.new(true)
41
41
  @kwargs['layout'] ||= Sass::Script::String.new('vertical')
42
+ @kwargs['sort_by'] ||= Sass::Script::String.new('none')
42
43
  @images = nil
43
44
  @width = nil
44
45
  @height = nil
45
46
  @engine = nil
46
47
  @evaluation_context = context
47
- validate!
48
48
  compute_image_metadata!
49
49
  end
50
50
 
51
+ def sort_method
52
+ @kwargs['sort_by'].value
53
+ end
54
+
51
55
  def inspect
52
56
  puts 'images'
53
57
  @images.each do |img|
@@ -26,20 +26,15 @@ module Compass
26
26
 
27
27
  # Creates the Sprite::Image objects for each image and calculates the width
28
28
  def init_images
29
- @images = image_names.collect do |relative_file|
30
- Image.new(self, relative_file, kwargs)
29
+ @images = Images.new
30
+ image_names.each do |relative_file|
31
+ @images << Image.new(self, relative_file, kwargs)
31
32
  end
32
- end
33
-
34
- # Validates that the sprite_names are valid sass
35
- def validate!
36
- for sprite_name in sprite_names
37
- unless sprite_name =~ /\A#{Sass::SCSS::RX::IDENT}\Z/
38
- raise Sass::SyntaxError, "#{sprite_name} must be a legal css identifier"
39
- end
33
+ unless sort_method == 'none'
34
+ @images.sort_by! sort_method
40
35
  end
41
36
  end
42
-
37
+
43
38
  def name_and_hash
44
39
  "#{path}-s#{uniqueness_hash}.png"
45
40
  end
@@ -68,8 +63,7 @@ module Compass
68
63
  end
69
64
 
70
65
  def cleanup_old_sprites
71
- Dir[File.join(Compass.configuration.generated_images_path, "#{path}-s*.png")].each do |file|
72
- next if file[filename]
66
+ Sass::Util.glob(File.join(Compass.configuration.generated_images_path, "#{path}-s*.png")).each do |file|
73
67
  log :remove, file
74
68
  FileUtils.rm file
75
69
  Compass.configuration.run_sprite_removed(file)
@@ -78,7 +72,7 @@ module Compass
78
72
 
79
73
  # Does this sprite need to be generated
80
74
  def generation_required?
81
- !File.exists?(filename) || outdated? || options[:force]
75
+ !File.exists?(filename) || outdated? || options[:force]
82
76
  end
83
77
 
84
78
  # Returns the uniqueness hash for this sprite object
@@ -8,6 +8,8 @@ module Compass
8
8
  end
9
9
  end
10
10
 
11
+ require 'compass/sass_extensions/sprites/images'
12
+ require 'compass/sass_extensions/sprites/layout'
11
13
  require 'compass/sass_extensions/sprites/image_row'
12
14
  require 'compass/sass_extensions/sprites/row_fitter'
13
15
  require 'compass/sass_extensions/sprites/image'
@@ -2,18 +2,20 @@
2
2
 
3
3
  // General Sprite Defaults
4
4
  // You can override them before you import this file.
5
- $<%= name %>-sprite-base-class: ".<%= name %>-sprite" !default;
6
- $<%= name %>-sprite-dimensions: false !default;
7
- $<%= name %>-position: 0% !default;
8
- $<%= name %>-spacing: 0 !default;
9
- $<%= name %>-repeat: no-repeat !default;
10
- $<%= name %>-prefix: '' !default;
11
- $<%= name %>-clean-up: true !default;
12
- $<%= name %>-layout:vertical !default;
13
- $<%= name %>-inline: false !default;
5
+ $<%= name %>-sprite-base-class : ".<%= name %>-sprite" !default;
6
+ $<%= name %>-sprite-dimensions : false !default;
7
+ $<%= name %>-use-percentages : false !default;
8
+ $<%= name %>-position : 0% !default;
9
+ $<%= name %>-spacing : 0 !default;
10
+ $<%= name %>-repeat : no-repeat !default;
11
+ $<%= name %>-prefix : '' !default;
12
+ $<%= name %>-clean-up : true !default;
13
+ $<%= name %>-layout : vertical !default;
14
+ $<%= name %>-inline : false !default;
15
+ $<%= name %>-sort-by : 'none' !default;
14
16
 
15
17
  <% if skip_overrides %>
16
- $<%= name %>-sprites: sprite-map("<%= uri %>", $layout: $<%= name %>-layout, $cleanup: $<%= name %>-clean-up);
18
+ $<%= name %>-sprites: sprite-map("<%= uri %>", $layout: $<%= name %>-layout, $cleanup: $<%= name %>-clean-up, $spacing: $<%= name %>-spacing, $position : $<%= name %>-position);
17
19
  <% else %>
18
20
  // These variables control the generated sprite output
19
21
  // You can override them selectively before you import this file.
@@ -29,8 +31,11 @@ $<%= name %>-inline: false !default;
29
31
  $<%= name %>-<%= sprite_name %>-spacing: $<%= name %>-<%= sprite_name %>-spacing,
30
32
  $<%= name %>-<%= sprite_name %>-repeat: $<%= name %>-<%= sprite_name %>-repeat,
31
33
  <% end %>
32
- $layout: $<%= name %>-layout,
33
- $cleanup: $<%= name %>-clean-up
34
+ $layout : $<%= name %>-layout,
35
+ $cleanup : $<%= name %>-clean-up,
36
+ $spacing : $<%= name %>-spacing,
37
+ $position : $<%= name %>-position,
38
+ $sort-by : $<%= name %>-sort-by
34
39
  );
35
40
  <% end %>
36
41
 
@@ -42,14 +47,14 @@ $<%= name %>-inline: false !default;
42
47
  }
43
48
  } @else {
44
49
  #{$<%= name %>-sprite-base-class} {
45
- background: $<%= name %>-sprites no-repeat;
50
+ background-image: $<%= name %>-sprites;
51
+ background-repeat: no-repeat;
46
52
  }
47
53
  }
48
54
  //sass functions to return the dimensions of a sprite image as units
49
55
  <% [:width, :height].each do |dimension| %>
50
56
  @function <%= name %>-sprite-<%= dimension %>($name) {
51
- $file: sprite_file($<%= name %>-sprites, $name);
52
- @return image-<%= dimension %>($file);
57
+ @return sprite-<%= dimension %>($<%= name %>-sprites, $name);
53
58
  }
54
59
  <% end %>
55
60
 
@@ -60,22 +65,22 @@ $<%= name %>-inline: false !default;
60
65
  }
61
66
 
62
67
  // Move the background position to display the sprite.
63
- @mixin <%= name %>-sprite-position($name, $offset-x: 0, $offset-y: 0) {
64
- @include sprite-background-position($<%= name %>-sprites, $name, $offset-x, $offset-y)
68
+ @mixin <%= name %>-sprite-position($name, $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages) {
69
+ @include sprite-background-position($<%= name %>-sprites, $name, $offset-x, $offset-y, $use-percentages)
65
70
  }
66
71
 
67
72
  // Extends the sprite base class and set the background position for the desired sprite.
68
73
  // It will also apply the image dimensions if $dimensions is true.
69
- @mixin <%= name %>-sprite($name, $dimensions: $<%= name %>-sprite-dimensions, $offset-x: 0, $offset-y: 0) {
74
+ @mixin <%= name %>-sprite($name, $dimensions: $<%= name %>-sprite-dimensions, $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages) {
70
75
  @extend #{$<%= name %>-sprite-base-class};
71
- @include sprite($<%= name %>-sprites, $name, $dimensions, $offset-x, $offset-y)
76
+ @include sprite($<%= name %>-sprites, $name, $dimensions, $offset-x, $offset-y, $use-percentages);
72
77
  }
73
78
 
74
- @mixin <%= name %>-sprites($sprite-names, $dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0) {
75
- @include sprites($<%= name %>-sprites, $sprite-names, $<%= name %>-sprite-base-class, $dimensions, $prefix, $offset-x, $offset-y)
79
+ @mixin <%= name %>-sprites($sprite-names, $dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages) {
80
+ @include sprites($<%= name %>-sprites, $sprite-names, $<%= name %>-sprite-base-class, $dimensions, $prefix, $offset-x, $offset-y, $use-percentages)
76
81
  }
77
82
 
78
83
  // Generates a class for each sprited image.
79
- @mixin all-<%= name %>-sprites($dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0) {
80
- @include <%= name %>-sprites(<%= sprite_names.join(" ") %>, $dimensions, $prefix, $offset-x, $offset-y);
81
- }
84
+ @mixin all-<%= name %>-sprites($dimensions: $<%= name %>-sprite-dimensions, $prefix: sprite-map-name($<%= name %>-sprites), $offset-x: 0, $offset-y: 0, $use-percentages: $<%= name %>-use-percentages) {
85
+ @include <%= name %>-sprites(<%= sprite_names.join(" ") %>, $dimensions, $prefix, $offset-x, $offset-y, $use-percentages);
86
+ }
@@ -2,13 +2,13 @@ require 'erb'
2
2
  require 'compass/sprite_importer/binding'
3
3
  module Compass
4
4
  class SpriteImporter < Sass::Importers::Base
5
- VAILD_FILE_NAME = /\A#{Sass::SCSS::RX::IDENT}\Z/
5
+ VAILD_FILE_NAME = /\A#{Sass::SCSS::RX::IDENT}\Z/
6
6
  SPRITE_IMPORTER_REGEX = %r{((.+/)?([^\*.]+))/(.+?)\.png}
7
- VALID_EXTENSIONS = ['.png']
7
+ VALID_EXTENSIONS = ['.png']
8
8
 
9
- TEMPLATE_FOLDER = File.join(File.expand_path('../', __FILE__), 'sprite_importer')
9
+ TEMPLATE_FOLDER = File.join(File.expand_path('../', __FILE__), 'sprite_importer')
10
10
  CONTENT_TEMPLATE_FILE = File.join(TEMPLATE_FOLDER, 'content.erb')
11
- CONTENT_TEMPLATE = ERB.new(File.read(CONTENT_TEMPLATE_FILE))
11
+ CONTENT_TEMPLATE = ERB.new(File.read(CONTENT_TEMPLATE_FILE))
12
12
 
13
13
 
14
14
 
@@ -16,7 +16,7 @@ module Compass
16
16
  def self.find_all_sprite_map_files(path)
17
17
  hex = "[0-9a-f]"
18
18
  glob = "*-s#{hex*10}{#{VALID_EXTENSIONS.join(",")}}"
19
- Dir.glob(File.join(path, "**", glob))
19
+ Sass::Util.glob(File.join(path, "**", glob))
20
20
  end
21
21
 
22
22
  def find(uri, options)
@@ -75,7 +75,7 @@ module Compass
75
75
  # Returns the Glob of image files for the uri
76
76
  def self.files(uri)
77
77
  Compass.configuration.sprite_load_path.compact.each do |folder|
78
- files = Dir[File.join(folder, uri)].sort
78
+ files = Sass::Util.glob(File.join(folder, uri)).sort
79
79
  next if files.empty?
80
80
  return files
81
81
  end
@@ -87,11 +87,7 @@ module Compass
87
87
  # Returns an Array of image names without the file extension
88
88
  def self.sprite_names(uri)
89
89
  files(uri).collect do |file|
90
- filename = File.basename(file, '.png')
91
- unless VAILD_FILE_NAME =~ filename
92
- raise Compass::Error, "Sprite file names must be legal css identifiers. Please rename #{File.basename(file)}"
93
- end
94
- filename
90
+ File.basename(file, '.png')
95
91
  end
96
92
  end
97
93
 
@@ -1,12 +1,5 @@
1
1
  module Compass
2
2
  module Version
3
- VERSION_DETAILS = {
4
- :major => 0,
5
- :minor => 12,
6
- :build => 7,
7
- :name => "Alnilam"
8
- }
9
-
10
3
  # Returns a hash representing the version.
11
4
  # The :major, :minor, and :teeny keys have their respective numbers.
12
5
  # The :string key contains a human-readable string representation of the version.
@@ -28,7 +21,8 @@ module Compass
28
21
  end
29
22
 
30
23
  def read_version
31
- @version = VERSION_DETAILS.dup
24
+ require 'yaml'
25
+ @version = YAML::load(File.read(scope('VERSION.yml')))
32
26
  @version[:teeny] = @version[:patch]
33
27
  @version[:string] = "#{@version[:major]}.#{@version[:minor]}"
34
28
  @version[:string] << ".#{@version[:patch]}" if @version[:patch]
@@ -51,13 +45,16 @@ module Compass
51
45
  `git rev-parse HEAD`
52
46
  end
53
47
  end
54
- rescue
55
- nil
56
48
  end
57
49
 
58
50
  end
59
-
60
51
  extend Compass::Version
61
-
62
- VERSION = version[:string]
52
+ def self.const_missing(const)
53
+ # This avoid reading from disk unless the VERSION is requested.
54
+ if const == :VERSION
55
+ version[:string]
56
+ else
57
+ super
58
+ end
59
+ end
63
60
  end
@@ -0,0 +1,59 @@
1
+ module Compass
2
+ module Watcher
3
+ class Compiler
4
+ include Compass::Actions
5
+ attr_reader :working_path, :memory_store, :backing_store, :cache_store, :compiler_options, :compiler
6
+
7
+ def initialize(working_path, additional_options={})
8
+ @working_path = working_path
9
+ @compiler_options = create_compiler_options(additional_options)
10
+ @memory_store ||= Sass::CacheStores::Memory.new
11
+ @backing_store ||= compiler_options[:cache_store]
12
+ @backing_store ||= Sass::CacheStores::Filesystem.new(determine_cache_location)
13
+ @cache_store ||= Sass::CacheStores::Chain.new(@memory_store, @backing_store)
14
+ @compiler ||= create_compiler
15
+ end
16
+
17
+ def compile
18
+ @memory_cache.reset! if @memory_cache
19
+ compiler.reset_staleness_checker!
20
+ if file = compiler.out_of_date?
21
+ begin
22
+ time = Time.now.strftime("%T")
23
+ log_action(:info, "Change detected at #{time} to: #{compiler.relative_stylesheet_name(file)}", compiler_options)
24
+ compiler.run
25
+ GC.start
26
+ rescue StandardError => e
27
+ ::Compass::Exec::Helpers.report_error(e, compiler_options)
28
+ end
29
+ end
30
+ end
31
+
32
+ private #=========================================================================================>
33
+
34
+ def create_compiler_options(additional_options)
35
+ compiler_opts = {:sass => Compass.sass_engine_options, :cache_store => @cache_store, :quiet => true, :loud => [:identical, :overwrite, :create]}.merge(additional_options)
36
+ compiler_opts[:cache_location] ||= determine_cache_location
37
+ if compiler_opts.include?(:debug_info)
38
+ compiler_opts[:sass][:debug_info] = compiler_opts.delete(:debug_info)
39
+ end
40
+
41
+ compiler_opts
42
+ end
43
+
44
+ def create_compiler
45
+ @memory_store.reset!
46
+ Compass::Compiler.new(
47
+ working_path,
48
+ Compass.configuration.sass_path,
49
+ Compass.configuration.css_path,
50
+ compiler_options.dup
51
+ )
52
+ end
53
+
54
+ def determine_cache_location
55
+ Compass.configuration.cache_path || Sass::Plugin.options[:cache_location] || File.join(working_path, ".sass-cache")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,111 @@
1
+ require 'listen'
2
+ require 'forwardable'
3
+ module Compass
4
+ module Watcher
5
+ class ProjectWatcher
6
+ include Compass::Actions
7
+ SASS_FILTER = '*.s[ac]ss'
8
+ ALL_CHILDREN_SASS_FILTER = File.join('**', SASS_FILTER)
9
+ POLLING_MESSAGE = 'Compass is polling for changes'
10
+
11
+ attr_reader :options, :project_path, :watcher_compiler, :listener, :poll, :css_dir, :sass_watchers
12
+
13
+ alias :working_path :project_path
14
+
15
+ extend Forwardable
16
+
17
+ def_delegators :@watcher_compiler, :compiler, :compiler
18
+ def_delegators :@watcher_compiler, :compile, :compile
19
+
20
+ def initialize(project_path, watches=[], options={}, poll=false)
21
+ @poll = poll
22
+ @options = options
23
+ @project_path = project_path
24
+ @css_dir = Compass.configuration.css_dir
25
+ @sass_watchers = create_sass_watchers + watches
26
+ @watcher_compiler = Compass::Watcher::Compiler.new(project_path, options)
27
+ setup_listener
28
+ end
29
+
30
+ def watch!
31
+ listener.start
32
+ rescue Interrupt
33
+ log_action(:info, "Good bye!", options)
34
+ listener.stop
35
+ end
36
+
37
+ private #============================================================================>
38
+
39
+ def setup_listener
40
+ @listener = Listen.to(@project_path, :relative_paths => true)
41
+ if poll
42
+ @listener = listener.force_polling(true)
43
+ end
44
+ @listener = listener.polling_fallback_message(POLLING_MESSAGE)
45
+ @listener = listener.ignore(/\.css$/)
46
+ @listener = listener.change(&method(:listen_callback))
47
+ end
48
+
49
+ def create_sass_watchers
50
+ watches = []
51
+ Compass.configuration.sass_load_paths.map do |load_path|
52
+ load_path = load_path.root if load_path.respond_to?(:root)
53
+ next unless load_path.is_a? String
54
+ next unless load_path.include? project_path
55
+ load_path = Pathname.new(load_path).relative_path_from(Pathname.new(project_path))
56
+ filter = File.join(load_path, SASS_FILTER)
57
+ children = File.join(load_path, ALL_CHILDREN_SASS_FILTER)
58
+ if filter.match(%r{^./})
59
+ watches << Watcher::Watch.new(SASS_FILTER, &method(:sass_callback))
60
+ end
61
+ watches << Watcher::Watch.new(filter, &method(:sass_callback))
62
+ watches << Watcher::Watch.new(children, &method(:sass_callback))
63
+ end
64
+ watches.compact
65
+ end
66
+
67
+ def listen_callback(modified_file, added_file, removed_file)
68
+ #log_action(:info, ">>> Listen Callback fired added: #{added_file}, mod: #{modified_file}, rem: #{removed_file}", {})
69
+ action = nil
70
+ action ||= :modified unless modified_file.empty?
71
+ action ||= :added unless added_file.empty?
72
+ action ||= :removed unless removed_file.empty?
73
+
74
+ files = modified_file + added_file + removed_file
75
+ # run watchers
76
+ sass_watchers.each do |watcher|
77
+ files.each do |file|
78
+ watcher.run_callback(project_path, file, action) if watcher.match?(file)
79
+ end
80
+ end
81
+ end
82
+
83
+ def sass_callback(base, file, action)
84
+ #log_action(:info, ">>> Sass Callback fired #{action}, #{file}", {})
85
+ sass_modified(file) if action == :modified
86
+ sass_added(file) if action == :added
87
+ sass_removed(file) if action == :removed
88
+ end
89
+
90
+ def sass_modified(file)
91
+ log_action(:info, "#{file} was modified", options)
92
+ compile
93
+ end
94
+
95
+ def sass_added(file)
96
+ log_action(:info, "#{file} was added", options)
97
+ compile
98
+ end
99
+
100
+ def sass_removed(file)
101
+ log_action(:info, "#{file} was removed", options)
102
+ css_file = compiler.corresponding_css_file(File.join(project_path, file))
103
+ compile
104
+ if File.exists?(css_file)
105
+ remove(css_file)
106
+ end
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,33 @@
1
+ module Compass
2
+ module Watcher
3
+ class Watch
4
+ attr_reader :callback, :glob
5
+
6
+ def initialize(glob, &block)
7
+ @callback = block
8
+ @glob = glob
9
+ verify!
10
+ end
11
+
12
+ def match?(changed_path)
13
+ File.fnmatch(glob, changed_path)
14
+ end
15
+
16
+ def run_callback(base, relative, action)
17
+ callback.call(base, relative, action)
18
+ end
19
+
20
+ private
21
+
22
+ def verify!
23
+ if Pathname.new(glob).absolute?
24
+ raise AbsolutePathError, "Only paths relative to the project can be watched"
25
+ end
26
+ if callback.nil?
27
+ raise NoCallbackError, "A Block must be supplied in order to be watched"
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ require 'compass/watcher/watch'
2
+ require 'compass/watcher/compiler'
3
+ require 'compass/watcher/project_watcher'
4
+
5
+ module Compass
6
+ module Watcher
7
+ class WatcherException < Compass::Error; end
8
+ class NoCallbackError < WatcherException; end
9
+ class AbsolutePathError < WatcherException; end
10
+ end
11
+ end
data/lib/compass.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Compass
2
2
  end
3
3
 
4
- %w(dependencies util browser_support sass_extensions version errors quick_cache logger).each do |lib|
4
+ %w(dependencies util browser_support sass_extensions version errors quick_cache logger actions).each do |lib|
5
5
  require "compass/#{lib}"
6
6
  end
7
7
 
@@ -29,7 +29,7 @@ module Compass
29
29
  extend QuickCache
30
30
  end
31
31
 
32
- %w(configuration frameworks app_integration actions compiler).each do |lib|
32
+ %w(watcher configuration frameworks app_integration compiler).each do |lib|
33
33
  require "compass/#{lib}"
34
34
  end
35
35
 
@@ -0,0 +1,32 @@
1
+ # Require any additional compass plugins here.
2
+ project_type = :stand_alone
3
+ css_dir = "tmp"
4
+ sass_dir = "sass"
5
+ fonts_dir = "fonts"
6
+ output_style = :compact
7
+ # To enable relative image paths using the images_url() function:
8
+ # http_images_path = :relative
9
+ http_fonts_path = "/fonts"
10
+ line_comments = false
11
+
12
+ asset_cache_buster do |path, file|
13
+ pathname = Pathname.new(path)
14
+ dirname = pathname.dirname
15
+ basename = pathname.basename(pathname.extname)
16
+ extname = pathname.extname
17
+
18
+ case pathname.basename(pathname.extname).to_s
19
+ when "grid"
20
+ new_path = "#{dirname}/#{basename}-BUSTED#{extname}"
21
+ {:path => new_path, :query => nil}
22
+ when "feed"
23
+ "query_string"
24
+ when "dk"
25
+ {:query => "query_string"}
26
+ end
27
+ end
28
+
29
+
30
+ asset_host do |path|
31
+ "http://assets%d.example.com" % (path.size % 4)
32
+ end