spriter 0.10.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/rack/spriter.rb +6 -1
  2. data/lib/spriter.rb +19 -10
  3. metadata +16 -4
data/lib/rack/spriter.rb CHANGED
@@ -10,6 +10,7 @@ module Rack
10
10
  @app = app
11
11
  @stylesheets_path = options[:stylesheets_path]
12
12
  @stylesheets_url_pattern = options[:stylesheets_url_pattern]
13
+ @images = []
13
14
  ::Spriter.assets_path = options[:assets_path]
14
15
  ::Spriter.sprite_image_path = options[:sprite_image_path]
15
16
  ::Spriter.sprite_image_url = options[:sprite_image_url]
@@ -56,8 +57,12 @@ module Rack
56
57
 
57
58
  if @generated_css.nil? or files.max{ |a,b| a.mtime <=> b.mtime }.mtime > @generated_at
58
59
  names = paths.map{ |p| p.sub(/\.spriter$/, '').sub(/^#{@stylesheets_path}\//, '') }
59
- css = ::Spriter.transform(*files)
60
+
61
+ spriter = ::Spriter.new
62
+ css = spriter.transform(*(files + [@images]))
60
63
  css = [css] unless css.is_a? Array
64
+
65
+ @images = spriter.images
61
66
  @generated_at = Time.now
62
67
  @generated_css = Hash[*names.zip(css).flatten]
63
68
  end
data/lib/spriter.rb CHANGED
@@ -7,20 +7,28 @@ class Spriter
7
7
  attr_accessor :sprite_image_url
8
8
 
9
9
  def transform(*args)
10
- new(assets_path, sprite_image_path, sprite_image_url).transform(*args)
10
+ new.transform(*args)
11
11
  end
12
12
 
13
13
  def transform_files(*args)
14
- new(assets_path, sprite_image_path, sprite_image_url).transform_files(*args)
14
+ new.transform_files(*args)
15
15
  end
16
16
 
17
17
  def image_dimensions(path)
18
- magick_image = MiniMagick::Image.from_file(path)
19
- return magick_image[:width], magick_image[:height]
18
+ if path =~ /\.png$/
19
+ IO.read(path)[0x10..0x18].unpack('NN')
20
+ elsif path =~ /\.gif$/
21
+ IO.read(path)[6..10].unpack('SS')
22
+ else
23
+ magick_image = MiniMagick::Image.from_file(path)
24
+ [ magick_image[:width], magick_image[:height] ]
25
+ end
20
26
  end
21
27
  end
22
28
 
23
- def initialize(assets_path, sprite_image_path, sprite_image_url)
29
+ attr_reader :images
30
+
31
+ def initialize(assets_path = Spriter.assets_path, sprite_image_path = Spriter.sprite_image_path, sprite_image_url = Spriter.sprite_image_url)
24
32
  @assets_path, @sprite_image_path, @sprite_image_url = assets_path, sprite_image_path, sprite_image_url
25
33
  @images = []
26
34
  @y_offsets = {}
@@ -28,19 +36,20 @@ class Spriter
28
36
  end
29
37
 
30
38
  def transform(*inputs)
39
+ previous_image_list = inputs.last.is_a?(Array) ? inputs.pop : []
40
+
31
41
  image_matcher = /([^a-z])-spriter-background:\s*([^;\}]+)([;\}])/
32
42
  new_css = inputs.inject([]) do |new_css, css|
33
43
  css = css.read if css.respond_to? :read
34
44
  new_css << css.gsub(image_matcher) do |matched|
35
- indent = $1
36
- terminator = $3
37
- image = $2.strip.gsub(/(?:^['"]|['"]$)/, '')
45
+ indent, image, terminator = $1, $2, $3
46
+ image = image.strip.gsub(/(?:^['"]|['"]$)/, '')
38
47
  add_image(image)
39
48
  "#{indent}background: url(#{@sprite_image_url}) no-repeat 0 #{-y_offset(image)}#{y_offset(image) == 0 ? '' : 'px'}#{terminator} /* #{image} */"
40
49
  end
41
50
  end
42
51
 
43
- generate_sprite_image
52
+ generate_sprite_image unless @images == previous_image_list
44
53
 
45
54
  if new_css.length == 1
46
55
  new_css.first
@@ -70,7 +79,7 @@ class Spriter
70
79
  end
71
80
 
72
81
  def y_offset(image)
73
- @y_offsets[image] or raise ArgumentError, 'Unknown image'
82
+ @y_offsets[image] or raise ArgumentError, "Unknown image (#{image})\nKnown images are: #{@images.join(', ')}"
74
83
  end
75
84
 
76
85
  def generate_sprite_image
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 10
7
+ - 12
8
8
  - 0
9
- version: 0.10.0
9
+ version: 0.12.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Reevoo
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-11 00:00:00 +01:00
17
+ date: 2010-08-05 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,6 +41,18 @@ dependencies:
41
41
  version: "0"
42
42
  type: :development
43
43
  version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: mocha
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :development
55
+ version_requirements: *id003
44
56
  description:
45
57
  email:
46
58
  executables: []
@@ -83,6 +95,6 @@ rubyforge_project:
83
95
  rubygems_version: 1.3.6
84
96
  signing_key:
85
97
  specification_version: 3
86
- summary: Managers sprites and your css in a mega way.
98
+ summary: Makes CSS sprites easy.
87
99
  test_files: []
88
100