Module: Compass::SassExtensions::Sprites::SpriteMethods

Included in:
SpriteMap
Defined in:
lib/compass/sass_extensions/sprites/sprite_methods.rb

Constant Summary collapse

SPRITE_VERSION =

Changing this string will invalidate all previously generated sprite images. We should do so only when the packing algorithm changes

"2"

Instance Method Summary collapse

Instance Method Details

#cleanup_old_spritesObject



65
66
67
68
69
70
71
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 65

def cleanup_old_sprites
  Sass::Util.glob(File.join(Compass.configuration.generated_images_path, "#{path}-s*.png")).each do |file|
    log :remove, file
    FileUtils.rm file
    Compass.configuration.run_sprite_removed(file)
  end
end

#compute_image_metadata!Object

Calculates the overal image dimensions collects image sizes and input parameters for each sprite Calculates the height



13
14
15
16
17
18
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 13

def compute_image_metadata!
  @width = 0
  init_images
  compute_image_positions!
  init_engine
end

#filenameObject

The on-the-disk filename of the sprite



43
44
45
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 43

def filename
  File.join(Compass.configuration.generated_images_path, name_and_hash)
end

#generateObject

Generate a sprite image if necessary



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 52

def generate
  if generation_required?
    if kwargs.get_var('cleanup').value
      cleanup_old_sprites
    end
    engine.construct_sprite
    Compass.configuration.run_sprite_generated(engine.canvas)
    save!
  else
    log :unchanged, filename
  end
end

#generation_required?Boolean

Does this sprite need to be generated

Returns:

  • (Boolean)


74
75
76
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 74

def generation_required?
  !File.exists?(filename) || outdated? || options[:force]
end

#image_filenamesObject

All the full-path filenames involved in this sprite



106
107
108
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 106

def image_filenames
  @images.map(&:file)
end

#init_engineObject



20
21
22
23
24
25
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 20

def init_engine
  @engine = eval("::Compass::SassExtensions::Sprites::#{modulize}Engine.new(nil, nil, nil)")
  @engine.width = @width
  @engine.height = @height
  @engine.images = @images
end

#init_imagesObject

Creates the Sprite::Image objects for each image and calculates the width



28
29
30
31
32
33
34
35
36
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 28

def init_images
  @images = Images.new
  image_names.each do |relative_file|
    @images << Image.new(self, relative_file, kwargs)
  end
  unless sort_method == 'none'
    @images.sort_by! sort_method
  end
end

#log(action, filename, *extra) ⇒ Object



128
129
130
131
132
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 128

def log(action, filename, *extra)
  if options[:compass] && options[:compass][:logger] && !options[:quiet]
    options[:compass][:logger].record(action, relativize(filename), *extra)
  end
end

#mtimeObject

Mtime of the sprite file



119
120
121
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 119

def mtime
  @mtime ||= File.mtime(filename)
end

#name_and_hashObject



38
39
40
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 38

def name_and_hash
  "#{path}-s#{uniqueness_hash}.png"
end

#outdated?Boolean

Checks whether this sprite is outdated

Returns:

  • (Boolean)


111
112
113
114
115
116
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 111

def outdated?
  if File.exists?(filename)
    return @images.any? {|image| image.mtime.to_i > self.mtime.to_i }
  end
  true
end

#relativize(path) ⇒ Object



47
48
49
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 47

def relativize(path)
  Pathname.new(path).relative_path_from(Pathname.new(Dir.pwd)).to_s rescue path
end

#save!Object

Saves the sprite engine



96
97
98
99
100
101
102
103
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 96

def save!
  FileUtils.mkdir_p(File.dirname(filename))
  saved = engine.save(filename)
  log :create, filename
  Compass.configuration.run_sprite_saved(filename)
  @mtime = nil if saved
  saved
end

#sizeObject

Calculate the size of the sprite



124
125
126
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 124

def size
  [width, height]
end

#uniqueness_hashObject

Returns the uniqueness hash for this sprite object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/compass/sass_extensions/sprites/sprite_methods.rb', line 79

def uniqueness_hash
  @uniqueness_hash ||= begin
    sum = Digest::MD5.new
    sum << SPRITE_VERSION
    sum << path
    sum << layout
    images.each do |image|
      [:relative_file, :height, :width, :repeat, :spacing, :position, :digest].each do |attr|
        sum << image.send(attr).to_s
      end
    end
    sum.hexdigest[0...10]
  end
  @uniqueness_hash
end