active_assets 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "active_assets"
4
- s.version = '1.1.2'
4
+ s.version = '1.1.3'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ["Sam Woodard"]
7
7
  s.email = ["sam@wildfireapp.com"]
@@ -7,8 +7,7 @@ require 'fileutils'
7
7
  module ActiveAssets
8
8
  module ActiveSprites
9
9
  class AbstractRunner
10
- class AssetContext < ActionView::Base
11
- end
10
+ class FileNotFound < StandardError; end
12
11
 
13
12
  def initialize(railtie, sprites)
14
13
  @railtie = railtie
@@ -85,6 +84,11 @@ module ActiveAssets
85
84
  $stdout << "#{Time.now}: ActiveSprites \"I finished my run in #{Time.now - t} seconds.\"\n" if verbose
86
85
  end
87
86
 
87
+ protected
88
+ def file_exists!(file_path)
89
+ raise FileNotFound.new("The file you are attempting to add to your sprite, #{file_path}, does not exists.") unless File.exists?(file_path)
90
+ end
91
+
88
92
  private
89
93
  def image_computed_path(path)
90
94
  File.join('images', path)
@@ -13,6 +13,7 @@ module ActiveAssets
13
13
 
14
14
  image_list = sprite_pieces.map do |sp|
15
15
  sprite_piece_path = image_computed_full_path(sp.path)
16
+ file_exists!(sprite_piece_path)
16
17
  sp_image = ChunkyPNG::Image.from_file(sprite_piece_path)
17
18
  sp.details = SpritePiece::Details.new(
18
19
  sprite_url(sprite, sprite_path),
@@ -9,6 +9,7 @@ module ActiveAssets
9
9
 
10
10
  image_list = sprite_pieces.map do |sp|
11
11
  sp_path = image_computed_full_path(sp.path)
12
+ file_exists!(sp_path)
12
13
  image = MiniMagick::Image.open(sp_path)
13
14
  sp.details = SpritePiece::Details.new(
14
15
  sprite_url(sprite, sprite_path),
@@ -10,7 +10,9 @@ module ActiveAssets
10
10
  private
11
11
  def set_sprite_details_and_return_image_list(sprite, sprite_path, sprite_pieces, orientation)
12
12
  sprite_piece_paths = sprite_pieces.map do |sp|
13
- image_computed_full_path(sp.path)
13
+ path = image_computed_full_path(sp.path)
14
+ file_exists!(path)
15
+ path
14
16
  end
15
17
  image_list = ImageList.new(*sprite_piece_paths)
16
18
 
@@ -22,8 +22,8 @@ module ActiveAssets
22
22
 
23
23
  Details = Struct.new(:sprite_path, :x, :y, :width, :height)
24
24
 
25
- GEOMETRY_PROPS = [:x, :y, :width, :height]
26
- attr_reader(*GEOMETRY_PROPS)
25
+ CSS_PROPS = [:x, :y, :repeat, :width, :height, :important]
26
+ attr_reader(*CSS_PROPS)
27
27
  attr_accessor :details
28
28
  delegate :path, :css_selector, :to => :mapping
29
29
 
@@ -42,7 +42,7 @@ module ActiveAssets
42
42
  {
43
43
  width:#{width || "#{details.width}px"};
44
44
  height:#{height || "#{details.height}px"};
45
- background:url('#{details.sprite_path}?#{Time.now.to_i}') no-repeat #{x || "#{-details.x}px"} #{y || "#{-details.y}px"};
45
+ background:url('#{details.sprite_path}?#{Time.now.to_i}') #{repeat || "no-repeat"} #{x || "#{-details.x}px"} #{y || "#{-details.y}px"}#{" !important" if important};
46
46
  display:block;
47
47
  }
48
48
  CSS
@@ -52,7 +52,7 @@ module ActiveAssets
52
52
  "|\t#{path}\t|\t#{css_selector}\t|\t#{details.x}\t|\t#{details.y}\t|\t#{details.width}\t|\t#{details.height}\t|\n"
53
53
  end
54
54
 
55
- GEOMETRY_PROPS.each do |prop|
55
+ CSS_PROPS.each do |prop|
56
56
  eval <<-METH
57
57
  def #{prop}(*args)
58
58
  #{prop}, *_ = args
@@ -1,4 +1,5 @@
1
1
  require 'helper'
2
+ require 'css_parser'
2
3
 
3
4
  class SpritePiecetest < Test::Unit::TestCase
4
5
  def setup
@@ -6,9 +7,66 @@ class SpritePiecetest < Test::Unit::TestCase
6
7
  end
7
8
 
8
9
  def teardown
10
+ FileUtils.rm_rf(Rails.root.join('public/images/sprites'))
11
+ FileUtils.rm_rf(Rails.root.join('public/stylesheets/sprites'))
12
+
9
13
  tear_down_assets
10
14
  end
11
15
 
16
+ def important_rendered(important = false)
17
+ sp_options = {"sprite_images/sprite3/1.png" => ".klass_1"}
18
+ sp_options.update(:important => important) if important
19
+
20
+ Rails.application.sprites do
21
+ sprite :sprite2 do
22
+ sp sp_options
23
+ end
24
+ end
25
+
26
+ ENV['SPRITE'] = 'sprite2'
27
+
28
+ Rails.application.sprites.generate!
29
+
30
+ parser = CssParser::Parser.new
31
+ stylesheet_path = Rails.root.join('public/stylesheets/sprites/sprite2.css')
32
+ parser.load_file!(File.basename(stylesheet_path), File.dirname(stylesheet_path), :screen)
33
+
34
+ important = ''
35
+ parser.each_rule_set do |rs|
36
+ next unless rs.selectors.include?('.klass_1')
37
+ background = rs['background'][%r{\s*([^;]+)}, 1]
38
+ important = background[%r{\s+(!important)$}, 1]
39
+ end
40
+ important
41
+ end
42
+
43
+ def repeat_rendered(repeat = nil)
44
+ sp_options = {"sprite_images/sprite3/1.png" => ".klass_1"}
45
+ sp_options.update(:repeat => repeat) unless repeat.nil?
46
+
47
+ Rails.application.sprites do
48
+ sprite :sprite2 do
49
+ sp sp_options
50
+ end
51
+ end
52
+
53
+ ENV['SPRITE'] = 'sprite2'
54
+
55
+ Rails.application.sprites.generate!
56
+
57
+ parser = CssParser::Parser.new
58
+ stylesheet_path = Rails.root.join('public/stylesheets/sprites/sprite2.css')
59
+ parser.load_file!(File.basename(stylesheet_path), File.dirname(stylesheet_path), :screen)
60
+
61
+ repeat = ''
62
+ parser.each_rule_set do |rs|
63
+ next unless rs.selectors.include?('.klass_1')
64
+ background = rs['background'][%r{\s*([^;]+)}, 1]
65
+ repeat = background[%r{\)\s*([^\s]+)}, 1]
66
+ end
67
+ repeat
68
+ end
69
+
12
70
  def test_configure_with_block
13
71
  Rails.application.sprites do
14
72
  sprite :sprite1 do
@@ -62,4 +120,20 @@ class SpritePiecetest < Test::Unit::TestCase
62
120
 
63
121
  assert_equal paths, Rails.application.sprites['sprites/4.png'].sprite_pieces.map(&:path)
64
122
  end
123
+
124
+ def test_set_repeat
125
+ assert_equal 'repeat-y', repeat_rendered('repeat-y')
126
+ end
127
+
128
+ def test_do_not_set_repeat
129
+ assert_equal 'no-repeat', repeat_rendered
130
+ end
131
+
132
+ def test_set_important
133
+ assert_equal '!important', important_rendered(true)
134
+ end
135
+
136
+ def test_do_not_set_important
137
+ assert_equal nil, important_rendered
138
+ end
65
139
  end
@@ -29,6 +29,18 @@ module AbstractRunnerTest
29
29
 
30
30
  Selector = Struct.new(:selector, :x, :y, :width, :height)
31
31
 
32
+ def test_file_does_not_exist
33
+ Rails.application.sprites do
34
+ sprite 'sprites/fail.png' do
35
+ _"sprite_images/sprite3/3.png" => ".klass_1"
36
+ end
37
+ end
38
+
39
+ assert_raises(ActiveAssets::ActiveSprites::AbstractRunner::FileNotFound) do
40
+ Rails.application.sprites.generate!
41
+ end
42
+ end
43
+
32
44
  def test_generate
33
45
  sprite = Rails.application.sprites['sprites/4.png']
34
46
  orientation = sprite.orientation
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_assets
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 21
4
5
  prerelease:
5
- version: 1.1.2
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 3
10
+ version: 1.1.3
6
11
  platform: ruby
7
12
  authors:
8
13
  - Sam Woodard
@@ -10,97 +15,128 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-04-24 00:00:00 -07:00
18
+ date: 2011-05-16 00:00:00 -07:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
- name: oily_png
18
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
19
23
  none: false
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
23
30
  version: "0"
24
- type: :development
31
+ name: oily_png
25
32
  prerelease: false
26
- version_requirements: *id001
33
+ type: :development
34
+ requirement: *id001
27
35
  - !ruby/object:Gem::Dependency
28
- name: chunky_png
29
- requirement: &id002 !ruby/object:Gem::Requirement
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
30
37
  none: false
31
38
  requirements:
32
39
  - - ">="
33
40
  - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
34
44
  version: "0"
35
- type: :development
45
+ name: chunky_png
36
46
  prerelease: false
37
- version_requirements: *id002
47
+ type: :development
48
+ requirement: *id002
38
49
  - !ruby/object:Gem::Dependency
39
- name: rmagick
40
- requirement: &id003 !ruby/object:Gem::Requirement
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
41
51
  none: false
42
52
  requirements:
43
53
  - - ">="
44
54
  - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
45
58
  version: "0"
46
- type: :development
59
+ name: rmagick
47
60
  prerelease: false
48
- version_requirements: *id003
61
+ type: :development
62
+ requirement: *id003
49
63
  - !ruby/object:Gem::Dependency
50
- name: mini_magick
51
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ version_requirements: &id004 !ruby/object:Gem::Requirement
52
65
  none: false
53
66
  requirements:
54
67
  - - ">="
55
68
  - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
56
72
  version: "0"
57
- type: :development
73
+ name: mini_magick
58
74
  prerelease: false
59
- version_requirements: *id004
75
+ type: :development
76
+ requirement: *id004
60
77
  - !ruby/object:Gem::Dependency
61
- name: css_parser
62
- requirement: &id005 !ruby/object:Gem::Requirement
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
63
79
  none: false
64
80
  requirements:
65
81
  - - ~>
66
82
  - !ruby/object:Gem::Version
83
+ hash: 25
84
+ segments:
85
+ - 1
86
+ - 1
87
+ - 5
67
88
  version: 1.1.5
68
- type: :development
89
+ name: css_parser
69
90
  prerelease: false
70
- version_requirements: *id005
91
+ type: :development
92
+ requirement: *id005
71
93
  - !ruby/object:Gem::Dependency
72
- name: rails
73
- requirement: &id006 !ruby/object:Gem::Requirement
94
+ version_requirements: &id006 !ruby/object:Gem::Requirement
74
95
  none: false
75
96
  requirements:
76
97
  - - ~>
77
98
  - !ruby/object:Gem::Version
99
+ hash: 1
100
+ segments:
101
+ - 3
102
+ - 0
103
+ - 3
78
104
  version: 3.0.3
79
- type: :development
105
+ name: rails
80
106
  prerelease: false
81
- version_requirements: *id006
107
+ type: :development
108
+ requirement: *id006
82
109
  - !ruby/object:Gem::Dependency
83
- name: test-unit
84
- requirement: &id007 !ruby/object:Gem::Requirement
110
+ version_requirements: &id007 !ruby/object:Gem::Requirement
85
111
  none: false
86
112
  requirements:
87
113
  - - ">"
88
114
  - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 2
118
+ - 0
89
119
  version: "2.0"
90
- type: :development
120
+ name: test-unit
91
121
  prerelease: false
92
- version_requirements: *id007
122
+ type: :development
123
+ requirement: *id007
93
124
  - !ruby/object:Gem::Dependency
94
- name: ZenTest
95
- requirement: &id008 !ruby/object:Gem::Requirement
125
+ version_requirements: &id008 !ruby/object:Gem::Requirement
96
126
  none: false
97
127
  requirements:
98
128
  - - ~>
99
129
  - !ruby/object:Gem::Version
130
+ hash: 43
131
+ segments:
132
+ - 4
133
+ - 4
134
+ - 2
100
135
  version: 4.4.2
101
- type: :development
136
+ name: ZenTest
102
137
  prerelease: false
103
- version_requirements: *id008
138
+ type: :development
139
+ requirement: *id008
104
140
  description: A Railtie that provides an asset management system for css, javascript, and sprites in your Rails applications and engines. ActiveAssets includes two libraries, ActiveExpansions and ActiveSprites. ActiveSprites generates sprites defined by a dsl similar to a route definition. Similarly, ActiveExpansions' dsl creates ActionView::Helpers::AssetTagHelper javascript and stylesheet expansions, and adds additional features
105
141
  email:
106
142
  - sam@wildfireapp.com
@@ -240,7 +276,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
240
276
  requirements:
241
277
  - - ">="
242
278
  - !ruby/object:Gem::Version
243
- hash: 5489205130638636
279
+ hash: 3
244
280
  segments:
245
281
  - 0
246
282
  version: "0"
@@ -249,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
285
  requirements:
250
286
  - - ">="
251
287
  - !ruby/object:Gem::Version
252
- hash: 5489205130638636
288
+ hash: 3
253
289
  segments:
254
290
  - 0
255
291
  version: "0"