spriter 0.10.0 → 0.12.0

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 (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