active_assets 0.1.0 → 0.2.0.rc

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 (93) hide show
  1. data/.gitignore +4 -0
  2. data/README.md +168 -0
  3. data/Rakefile +6 -0
  4. data/active_assets.gemspec +11 -6
  5. data/config.ru +2 -0
  6. data/lib/active_assets.rb +1 -0
  7. data/lib/active_assets/active_expansions/railtie.rb +10 -9
  8. data/lib/active_assets/active_sprites.rb +13 -0
  9. data/lib/active_assets/active_sprites/railtie.rb +29 -0
  10. data/lib/active_assets/active_sprites/runner.rb +101 -0
  11. data/lib/active_assets/active_sprites/sprite.rb +89 -0
  12. data/lib/active_assets/active_sprites/sprite_piece.rb +63 -0
  13. data/lib/active_assets/active_sprites/sprite_stylesheet.rb +24 -0
  14. data/lib/active_assets/active_sprites/sprites.rb +51 -0
  15. data/lib/active_assets/railtie.rb +2 -0
  16. data/lib/rails/active_assets.rb +4 -5
  17. data/lib/rails/active_expansions.rb +11 -0
  18. data/lib/rails/active_sprites.rb +11 -0
  19. data/lib/tasks/{cache.rake → active_expansions/cache.rake} +0 -0
  20. data/lib/tasks/active_sprites/sprites.rake +4 -0
  21. data/script/console +1 -0
  22. data/script/server +1 -0
  23. data/script/test_server +1 -0
  24. data/test/active_assets/active_expansions/asset_test.rb +18 -1
  25. data/test/active_assets/active_expansions/expansions_test.rb +16 -2
  26. data/test/active_assets/active_sprites/runner_test.rb +43 -0
  27. data/test/active_assets/active_sprites/sprite_piece_test.rb +65 -0
  28. data/test/active_assets/active_sprites/sprite_test.rb +53 -0
  29. data/test/active_assets/active_sprites/sprites_test.rb +35 -0
  30. data/test/fixtures/rails_root/config/application.rb +1 -0
  31. data/test/fixtures/rails_root/config/environment.rb +2 -0
  32. data/test/fixtures/rails_root/config/sprites.rb +14 -0
  33. data/test/fixtures/rails_root/public/images/sprite_images/sprite3/1.gif +0 -0
  34. data/test/fixtures/rails_root/public/images/sprite_images/sprite3/2.gif +0 -0
  35. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Argentina.gif +0 -0
  36. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Australia.gif +0 -0
  37. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Austria.gif +0 -0
  38. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Belgium.gif +0 -0
  39. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Brazil.gif +0 -0
  40. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Cameroon.gif +0 -0
  41. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Canada.gif +0 -0
  42. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Chile.gif +0 -0
  43. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/China.gif +0 -0
  44. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Denmark.gif +0 -0
  45. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Finland.gif +0 -0
  46. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/France.gif +0 -0
  47. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Germany.gif +0 -0
  48. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Greece.gif +0 -0
  49. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Hong Kong.gif +0 -0
  50. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Hungary.gif +0 -0
  51. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Iceland.gif +0 -0
  52. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/India.gif +0 -0
  53. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Indonesia.gif +0 -0
  54. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Ireland.gif +0 -0
  55. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Israel.gif +0 -0
  56. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Italy.gif +0 -0
  57. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Japan.gif +0 -0
  58. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Malaysia.gif +0 -0
  59. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Mexico.gif +0 -0
  60. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/New Zealand.gif +0 -0
  61. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Norway.gif +0 -0
  62. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Pakistan.gif +0 -0
  63. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Palestine.gif +0 -0
  64. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Peru.gif +0 -0
  65. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Poland.gif +0 -0
  66. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Portugal.gif +0 -0
  67. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Puerto Rico.gif +0 -0
  68. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Romania.gif +0 -0
  69. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Russia.gif +0 -0
  70. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Saudi Arabia.gif +0 -0
  71. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Singapore.gif +0 -0
  72. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/South Africa.gif +0 -0
  73. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/South Korea.gif +0 -0
  74. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Spain.gif +0 -0
  75. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Sweden.gif +0 -0
  76. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Switzerland.gif +0 -0
  77. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Thailand.gif +0 -0
  78. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/The Netherlands.gif +0 -0
  79. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Turkey.gif +0 -0
  80. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/UK.gif +0 -0
  81. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/USA.gif +0 -0
  82. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Ukraine.gif +0 -0
  83. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Uruguay.gif +0 -0
  84. data/test/fixtures/rails_root/public/images/sprite_images/sprite4/Venezuela.gif +0 -0
  85. data/test/fixtures/sinatra_root/active_assets_test_app.rb +12 -0
  86. data/test/fixtures/sinatra_root/views/layout.erb +7 -0
  87. data/test/fixtures/sinatra_root/views/sprite.erb +3 -0
  88. data/test/helper.rb +50 -0
  89. data/test/support/rails_helper.rb +10 -1
  90. data/vendor/bin/ng +0 -0
  91. data/vendor/bin/ng.exe +0 -0
  92. data/vendor/jruby-complete-1.5.6.jar +0 -0
  93. metadata +230 -21
@@ -0,0 +1,63 @@
1
+ module ActiveAssets
2
+ module ActiveSprites
3
+ class SpritePiece
4
+ class ValidationError < StandardError
5
+ attr_reader :sprite_piece, :missing_fields
6
+ def initialize(sprite_piece, missing_fields)
7
+ @sprite, @missing_fields = sprite_piece, missing_fields
8
+ super("#{"Your sprite piece could not be created. " if @sprite_piece.nil?} Your sprite piece is invalid. It is missing the following fields: #{@missing_fields.join(', ')}")
9
+ end
10
+ end
11
+
12
+ class Mapping
13
+ attr_reader :path, :css_selector
14
+
15
+ def initialize(path, css_selector)
16
+ raise ValidationError.new(nil, [:path]) if path.blank?
17
+ @path, @css_selector = path, css_selector
18
+ end
19
+ end
20
+
21
+ GEOMETRY_PROPS = [:x, :y, :width, :height]
22
+ attr_reader(*GEOMETRY_PROPS)
23
+ attr_accessor :details
24
+ delegate :path, :css_selector, :to => :mapping
25
+
26
+ def configure(mapping, options = {}, &blk)
27
+ @mapping = mapping
28
+ options.each {|k,v| send(k, v)}
29
+ instance_eval(&blk) if block_given?
30
+ self
31
+ end
32
+
33
+ def to_s
34
+ return '' if details.nil?
35
+ <<-CSS
36
+ #{css_selector}
37
+ {
38
+ width:#{width || details.width};
39
+ height:#{height || details.height};
40
+ background:url('#{details.sprite_path}') no-repeat #{x || details.x} #{y || details.y};
41
+ display:block;
42
+ }
43
+ CSS
44
+ end
45
+
46
+ GEOMETRY_PROPS.each do |prop|
47
+ eval <<-METH
48
+ def #{prop}(*args)
49
+ #{prop}, *_ = args
50
+ @#{prop} = #{prop} if #{prop}
51
+ @#{prop}
52
+ end
53
+ METH
54
+ end
55
+
56
+ private
57
+ def mapping
58
+ @mapping
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,24 @@
1
+ require 'fileutils'
2
+
3
+ module ActiveAssets
4
+ module ActiveSprites
5
+ class SpriteStylesheet
6
+ def initialize(sprite_path, sprite_pieces)
7
+ @sprite_path, @sprite_pieces = sprite_path, sprite_pieces
8
+ end
9
+
10
+ def write(path)
11
+ to_s!
12
+ FileUtils.mkdir_p(File.dirname(path))
13
+ File.open(path, 'w+') do |f|
14
+ f.write @as_string
15
+ end
16
+ end
17
+
18
+ private
19
+ def to_s!
20
+ @as_string ||= @sprite_pieces.map(&:to_s).join("\n")
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,51 @@
1
+ module ActiveAssets
2
+ module ActiveSprites
3
+ class Sprites
4
+ def initialize
5
+ @sprites = Hash.new do |sprites, name|
6
+ sprites[name] = Sprite.new
7
+ end
8
+ end
9
+
10
+ def describe(&blk)
11
+ instance_eval(&blk) if block_given?
12
+ self
13
+ end
14
+
15
+ def all
16
+ @sprites.values
17
+ end
18
+
19
+ def sprite(*args, &blk)
20
+ sprite_path, stylesheet_path, options, as =
21
+ case args.first
22
+ when Hash
23
+ options = args.shift
24
+ args = *options.find {|k,v| k.is_a?(String) }
25
+ (args << options).tap {|a| a.last.delete(a.first)}
26
+ when Symbol
27
+ # todo make default paths configurable
28
+ ["sprites/#{args.first.to_s}.png", "sprites/#{args.first.to_s}.css", args.extract_options!, args.first]
29
+ when String
30
+ path = args.first
31
+ [path, "#{File.dirname(path)}/#{File.basename(path, File.extname(path))}.css", args.extract_options!]
32
+ end
33
+ options.reverse_merge!(:as => as)
34
+ @sprites[options[:as] || sprite_path].configure(sprite_path, stylesheet_path, options, &blk)
35
+ end
36
+
37
+ def [](name)
38
+ return nil unless @sprites.has_key?(name)
39
+ @sprites[name]
40
+ end
41
+
42
+ def clear
43
+ @sprites.clear
44
+ end
45
+
46
+ def generate!
47
+ Runner.new(@sprites).generate!
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_assets/active_expansions/railtie'
2
+ require 'active_assets/active_sprites/railtie'
@@ -1,11 +1,10 @@
1
+ require 'rails/active_expansions'
2
+ require 'rails/active_sprites'
1
3
  require 'active_assets'
2
4
 
3
5
  module Rails
4
6
  module ActiveAssets
5
- def expansions(&blk)
6
- @expansions ||= ::ActiveAssets::ActiveExpansions::Expansions.new
7
- @expansions.instance_eval(&blk) if block_given?
8
- @expansions
9
- end
7
+ include ActiveExpansions
8
+ include ActiveSprites
10
9
  end
11
10
  end
@@ -0,0 +1,11 @@
1
+ require 'active_assets/active_expansions'
2
+
3
+ module Rails
4
+ module ActiveExpansions
5
+ def expansions(&blk)
6
+ @expansions ||= ::ActiveAssets::ActiveExpansions::Expansions.new
7
+ @expansions.instance_eval(&blk) if block_given?
8
+ @expansions
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'active_assets/active_sprites'
2
+
3
+ module Rails
4
+ module ActiveSprites
5
+ def sprites(&blk)
6
+ @sprites ||= ::ActiveAssets::ActiveSprites::Sprites.new
7
+ @sprites.instance_eval(&blk) if block_given?
8
+ @sprites
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ desc "Sprites bitch!"
2
+ task :sprites => :environment do
3
+ Rails.application.sprites.generate!
4
+ end
data/script/console ADDED
@@ -0,0 +1 @@
1
+ irb -I./test/fixtures/rails_root -rrubygems -rbundler/setup -rconfig/environment
data/script/server ADDED
@@ -0,0 +1 @@
1
+ rackup -I./test/fixtures/sinatra_root -p 3000 -s thin
@@ -0,0 +1 @@
1
+ java -Xms32m -Xmx1024m -cp vendor/jruby-complete-1.5.6.jar com.martiansoftware.nailgun.NGServer
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'securerandom'
2
3
 
3
4
  class AssetTest < Test::Unit::TestCase
4
5
  def setup
@@ -35,6 +36,22 @@ class AssetTest < Test::Unit::TestCase
35
36
 
36
37
  def test_valid_bang
37
38
  asset = ActiveAssets::ActiveExpansions::Asset.new(nil, :js, :defaults, [:development, :test], "not false")
38
- assert_raise ActiveAssets::ActiveExpansions::Asset::ValidationError do asset.valid!; end
39
+ assert_raise(ActiveAssets::ActiveExpansions::Asset::ValidationError) { asset.valid! }
40
+ end
41
+
42
+ def test_invalid_type
43
+ asset = ActiveAssets::ActiveExpansions::Asset.new('/path/to/asset', :pdf, :defaults, [:development, :test], false)
44
+ assert_raises(ActiveAssets::ActiveExpansions::Asset::InvalidAssetType) { asset.valid! }
45
+ end
46
+
47
+ ActiveAssets::ActiveExpansions::Asset.members.each do |member|
48
+ eval <<-EOS
49
+ def test_#{member}_equals
50
+ val = SecureRandom.hex
51
+ asset = ActiveAssets::ActiveExpansions::Asset.new('/path/to/asset', :js, :defaults, [:development, :test], false)
52
+ asset.#{member}= val
53
+ assert_equal val, asset.#{member}
54
+ end
55
+ EOS
39
56
  end
40
57
  end
@@ -2,12 +2,12 @@ require 'helper'
2
2
 
3
3
  class ExpansionsTest < Test::Unit::TestCase
4
4
  def setup
5
- initialize_application_or_load_assets!
5
+ initialize_application_or_load_expansions!
6
6
  end
7
7
 
8
8
  def teardown
9
9
  delete_cached_assets!
10
- Rails.application.expansions.clear
10
+ tear_down_assets
11
11
  end
12
12
 
13
13
  def test_new
@@ -145,4 +145,18 @@ class ExpansionsTest < Test::Unit::TestCase
145
145
  end
146
146
  end
147
147
 
148
+ def test_expansion_1
149
+ Rails.application.expansions do
150
+ expansion :foo do
151
+ `vendor/jquery.mousewheel.js`
152
+ end
153
+
154
+ expansion :foo do
155
+ `bar/bas.js`
156
+ end
157
+ end
158
+
159
+ assert_equal %w{vendor/jquery.mousewheel.js bar/bas.js}, Rails.application.expansions.javascripts[:foo].assets.map(&:path)
160
+ end
161
+
148
162
  end
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+ require 'fileutils'
3
+
4
+ class RunnerTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ initialize_application_or_load_sprites!
8
+
9
+ assert_false Rails.application.sprites.all.empty?
10
+
11
+ assert_nothing_raised do
12
+ Rails.application.sprites.generate!
13
+ end
14
+ end
15
+
16
+ def teardown
17
+ FileUtils.rm_rf(Rails.root.join('public/images/sprites'))
18
+ FileUtils.rm_rf(Rails.root.join('public/stylesheets/sprites'))
19
+
20
+ tear_down_assets
21
+ end
22
+
23
+
24
+ def test_generate
25
+ visit "/sprite?sprite_path=/images/#{Rails.application.sprites['sprites/4.png'].path}"
26
+ assert_equal 2400, page.find('#sprite').native.height
27
+ end
28
+
29
+ def test_generate_2
30
+ visit "/sprite?sprite_path=/images/#{Rails.application.sprites['sprites/3.png'].path}"
31
+ assert_equal 96, page.find('#sprite').native.height
32
+ end
33
+
34
+ def test_sprite_exists
35
+ assert File.exists?(Rails.root.join('public/images/sprites/3.png'))
36
+ assert File.exists?(Rails.root.join('public/images/sprites/4.png'))
37
+ end
38
+
39
+ def test_stylesheets_exists
40
+ assert File.exists?(Rails.root.join('public/stylesheets/sprites/3.css'))
41
+ assert File.exists?(Rails.root.join('public/stylesheets/sprites/4.css'))
42
+ end
43
+ end
@@ -0,0 +1,65 @@
1
+ require 'helper'
2
+
3
+ class SpritePiecetest < Test::Unit::TestCase
4
+ def setup
5
+ initialize_application_or_load_sprites!
6
+ end
7
+
8
+ def teardown
9
+ tear_down_assets
10
+ end
11
+
12
+ def test_configure_with_block
13
+ Rails.application.sprites do
14
+ sprite :sprite1 do
15
+ _"sprite_images/sprite1/1.png" => ".klass_1" do
16
+ x 'right'
17
+ y 'top'
18
+ width '320px'
19
+ height '240px'
20
+ end
21
+ end
22
+ end
23
+
24
+ assert_equal "240px", sprites[:sprite1]["sprite_images/sprite1/1.png"].height
25
+ assert_equal "320px", sprites[:sprite1]["sprite_images/sprite1/1.png"].width
26
+ assert_equal "top", sprites[:sprite1]["sprite_images/sprite1/1.png"].y
27
+ assert_equal 'right', sprites[:sprite1]["sprite_images/sprite1/1.png"].x
28
+ end
29
+
30
+ def test_configure_with_options
31
+ Rails.application.sprites do
32
+ sprite :sprite2 do
33
+ _"sprite_images/sprite1/1.png" => ".klass_1", :x => 'right', :y => 'top', :width => '320px', :height => '240px'
34
+ _"sprite_images/sprite1/2.png" => ".klass_2"
35
+ end
36
+ end
37
+
38
+ assert_equal '.klass_2', sprites[:sprite2]["sprite_images/sprite1/2.png"].css_selector
39
+ assert_equal '.klass_1', sprites[:sprite2]["sprite_images/sprite1/1.png"].css_selector
40
+ assert_equal "240px", sprites[:sprite2]["sprite_images/sprite1/1.png"].height
41
+ assert_equal "320px", sprites[:sprite2]["sprite_images/sprite1/1.png"].width
42
+ assert_equal "top", sprites[:sprite2]["sprite_images/sprite1/1.png"].y
43
+ assert_equal 'right', sprites[:sprite2]["sprite_images/sprite1/1.png"].x
44
+ end
45
+
46
+ def test_raises_validation_error_when_path_is_blank
47
+ assert_raises ActiveAssets::ActiveSprites::SpritePiece::ValidationError do
48
+ Rails.application.sprites do
49
+ sprite :sprite2 do
50
+ _"" => ".klass_1"
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ def test_ordered
57
+ paths = []
58
+ Dir[Rails.root.join('public/images/sprite_images/sprite4/*.{png,gif,jpg}')].each do |path|
59
+ image_path = path.match(%r{^.*/public/images/(.*)$})[1]
60
+ paths << image_path
61
+ end
62
+
63
+ assert_equal paths, Rails.application.sprites['sprites/4.png'].sprite_pieces.map(&:path)
64
+ end
65
+ end
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+
3
+ class SpriteTest < Test::Unit::TestCase
4
+ def setup
5
+ initialize_application_or_load_sprites!
6
+ end
7
+
8
+ def teardown
9
+ tear_down_assets
10
+ end
11
+
12
+ def sprites
13
+ Rails.application.sprites
14
+ end
15
+
16
+ def test_underscore_method
17
+ assert_nothing_raised do
18
+ Rails.application.sprites do
19
+ sprite :foo do
20
+ _"sprite_images/foo/1.png" => '.my_klass'
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ def test_underscore_method_actually_adds_the_sp
27
+ Rails.application.sprites do
28
+ sprite :bar, :orientation => :horizontal do
29
+ _"sprite_images/foo/1.png" => '.my_klass'
30
+ end
31
+ end
32
+
33
+ path = "sprite_images/foo/1.png"
34
+ assert sprites[:bar].has_sprite_piece_with_path?(path)
35
+ assert_equal '.my_klass', sprites[:bar][path].css_selector
36
+ end
37
+
38
+ def test_sprite_validation
39
+ assert_raises ActiveAssets::ActiveSprites::Sprite::ValidationError do
40
+ Rails.application.sprites do
41
+ sprite ''
42
+ end
43
+ end
44
+ end
45
+
46
+ def test_raises_invalid_orientation
47
+ assert_raises ActiveAssets::ActiveSprites::Sprite::OrientationInvalid do
48
+ Rails.application.sprites do
49
+ sprite :bar, :orientation => :bad
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,35 @@
1
+ require 'helper'
2
+
3
+ class SpritesTest < Test::Unit::TestCase
4
+ def setup
5
+ initialize_application_or_load_sprites!
6
+ end
7
+
8
+ def teardown
9
+ tear_down_assets
10
+ end
11
+
12
+ def test_describe
13
+ assert Rails.application.sprites.kind_of?(ActiveAssets::ActiveSprites::Sprites)
14
+ end
15
+
16
+ def test_all
17
+ assert Rails.application.sprites.all.kind_of?(Array)
18
+ end
19
+
20
+ def test_sprite
21
+ assert_nothing_raised do
22
+ Rails.application.sprites do
23
+ sprite :foo
24
+ end
25
+ end
26
+ end
27
+
28
+ def test_sprite_with_mapping
29
+ Rails.application.sprites do
30
+ sprite 'sprites/global.png' => 'sprites/global.css'
31
+ end
32
+
33
+ assert_equal 'sprites/global.css', Rails.application.sprites['sprites/global.png'].stylesheet_path
34
+ end
35
+ end