active_assets 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,7 +32,7 @@ module ActiveAssets
32
32
  self
33
33
  end
34
34
 
35
- def to_s
35
+ def to_css
36
36
  return '' if details.nil?
37
37
  <<-CSS
38
38
  #{css_selector}
@@ -45,6 +45,10 @@ module ActiveAssets
45
45
  CSS
46
46
  end
47
47
 
48
+ def to_s
49
+ "|\t#{path}\t|\t#{css_selector}\t|\t#{details.x}\t|\t#{details.y}\t|\t#{details.width}\t|\t#{details.height}\t|\n"
50
+ end
51
+
48
52
  GEOMETRY_PROPS.each do |prop|
49
53
  eval <<-METH
50
54
  def #{prop}(*args)
@@ -8,16 +8,15 @@ module ActiveAssets
8
8
  end
9
9
 
10
10
  def write(path)
11
- to_s!
12
11
  FileUtils.mkdir_p(File.dirname(path))
13
12
  File.open(path, 'w+') do |f|
14
- f.write @as_string
13
+ f.write to_s
15
14
  end
16
15
  end
17
16
 
18
17
  private
19
- def to_s!
20
- @as_string ||= @sprite_pieces.map(&:to_s).join("\n")
18
+ def to_s
19
+ @as_string ||= @sprite_pieces.map(&:to_css).join("\n")
21
20
  end
22
21
  end
23
22
  end
@@ -54,18 +54,43 @@ module ActiveAssets
54
54
  case sprite_backend
55
55
  when :rmagick
56
56
  require 'rmagick'
57
- RmagickRunner.new(@sprites).generate!(railtie)
58
- when :chunky_png
57
+ RmagickRunner.new(railtie, @sprites).generate!
58
+ when :mini_magick
59
+ require 'mini_magick'
60
+ MiniMagickRunner.new(railtie, @sprites).generate!
61
+ when :chunky_png, :oily_png
59
62
  begin
60
63
  require 'oily_png'
61
- ChunkyPngRunner.new(@sprites).generate!(railtie)
64
+ ChunkyPngRunner.new(railtie, @sprites).generate!
62
65
  rescue LoadError
63
66
  require 'chunky_png'
64
- ChunkyPngRunner.new(@sprites).generate!(railtie)
65
- raise
67
+ ChunkyPngRunner.new(railtie @sprites).generate!
68
+ end
69
+ else
70
+ begin
71
+ require 'rmagick'
72
+ RmagickRunner.new(railtie, @sprites).generate!
73
+ rescue LoadError
74
+ begin
75
+ begin
76
+ require 'oily_png'
77
+ ChunkyPngRunner.new(railtie, @sprites).generate!
78
+ rescue LoadError
79
+ require 'chunky_png'
80
+ ChunkyPngRunner.new(railtie, @sprites).generate!
81
+ end
82
+ rescue LoadError
83
+ require 'mini_magick'
84
+ MiniMagickRunner.new(railtie, @sprites).generate!
85
+ end
66
86
  end
67
87
  end
68
- rescue LoadError
88
+ rescue LoadError => e
89
+ msg = ''
90
+ msg << "You have not specified any sprite runtime in your configuration. We tried to load all supported runtimes, but failed to load any." if !sprite_backend
91
+ msg << "Your requested backend, #{sprite_backend}, was not found." if sprite_backend
92
+ msg << " Supported sprite backends include :rmagick, :chunky_png, and :mini_magick. To use oily_png, install oily_png and configure with :chunky_png.\n"
93
+ $stdout << msg
69
94
  end
70
95
  end
71
96
  end
@@ -1,4 +1,5 @@
1
1
  desc "Generate sprites."
2
2
  task :sprites => :environment do
3
+ ENV['VERBOSE'] ||= 'true'
3
4
  Rails.application.sprites.generate!
4
5
  end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class ChunkyPngRunnerTest < Test::Unit::TestCase
4
+ include AbstractRunnerTest
5
+
6
+ def setup
7
+ ActiveAssets::ActiveSprites::Sprites.sprite_backend = :chunky_png
8
+ runner_setup
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class MiniMagickRunnerTest < Test::Unit::TestCase
4
+ include AbstractRunnerTest
5
+
6
+ def setup
7
+ ActiveAssets::ActiveSprites::Sprites.sprite_backend = :mini_magick
8
+ runner_setup
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class RmagickRunnerTest < Test::Unit::TestCase
4
+ include AbstractRunnerTest
5
+
6
+ def setup
7
+ ActiveAssets::ActiveSprites::Sprites.sprite_backend = :rmagick
8
+ runner_setup
9
+ end
10
+ end
@@ -7,5 +7,5 @@ module ActiveAssetsTest
7
7
  end
8
8
  end
9
9
 
10
- Rails.application.config.active_sprites.sprite_backend = :rmagick
10
+ # Rails.application.config.active_sprites.sprite_backend = :mini_magick
11
11
  Rails.application.config.active_support.deprecation = :stderr
data/test/helper.rb CHANGED
@@ -9,8 +9,6 @@ require 'active_assets'
9
9
  require 'socket'
10
10
  require 'timeout'
11
11
 
12
- require 'raster_graphics'
13
-
14
12
  TEST_RAILS_ROOT = File.expand_path('../fixtures/rails_root', __FILE__)
15
13
 
16
14
  Dir[File.expand_path('../support/**/*.rb', __FILE__)].each {|f| load f }
@@ -20,12 +18,6 @@ load File.join(TEST_RAILS_ROOT, 'config/application.rb')
20
18
  class Test::Unit::TestCase
21
19
  include RailsHelper
22
20
 
23
- include(Module.new do
24
- def percent_difference(image_1_path, image_2_path)
25
- Pixmap.open(image_1_path) - Pixmap.open(image_2_path)
26
- end
27
- end)
28
-
29
21
  def sprites
30
22
  Rails.application.sprites
31
23
  end
@@ -1,11 +1,10 @@
1
- require 'helper'
2
1
  require 'fileutils'
3
2
  require 'rmagick'
4
3
  require 'css_parser'
5
4
 
6
- class RunnerTest < Test::Unit::TestCase
5
+ module AbstractRunnerTest
7
6
  include Magick
8
- def setup
7
+ def runner_setup
9
8
  initialize_application_or_load_sprites!
10
9
 
11
10
  assert_false Rails.application.sprites.all.empty?
@@ -13,6 +12,12 @@ class RunnerTest < Test::Unit::TestCase
13
12
  assert_nothing_raised do
14
13
  Rails.application.sprites.generate!
15
14
  end
15
+
16
+ assert File.exists?(Rails.root.join('public/images/sprites/3.png'))
17
+ assert File.exists?(Rails.root.join('public/images/sprites/4.png'))
18
+
19
+ assert File.exists?(Rails.root.join('public/stylesheets/sprites/3.css'))
20
+ assert File.exists?(Rails.root.join('public/stylesheets/sprites/4.css'))
16
21
  end
17
22
 
18
23
  def teardown
@@ -36,14 +41,14 @@ class RunnerTest < Test::Unit::TestCase
36
41
 
37
42
  sprite_pieces_with_selector_data = []
38
43
 
39
- parser.each_selector do |selectors, declarations, specificity|
40
- sprite_piece = sprite_pieces.find {|sp| sp.css_selector == selectors }
41
- width = declarations[%r{width:\s*(\d+)(?:px)?;}, 1].to_i
42
- height = declarations[%r{height:\s*(\d+)(?:px)?;}, 1].to_i
43
- background = declarations[%r{background:\s*([^;]+)}, 1]
44
+ parser.each_rule_set do |rs|
45
+ sprite_piece = sprite_pieces.find {|sp| rs.selectors.include?(sp.css_selector) }
46
+ width = rs['width'][%r{\s*(\d+)(?:px)?;?$}, 1].to_i
47
+ height = rs['height'][%r{\s*(\d+)(?:px)?;?$}, 1].to_i
48
+ background = rs['background'][%r{\s*([^;]+)}, 1]
44
49
  x = background[%r{\s-?(\d+)(?:px)?\s}, 1].to_i
45
50
  y = background[%r{\s-?(\d+)(?:px)?$}, 1].to_i
46
- sprite_pieces_with_selector_data << [sprite_piece, Selector.new(selectors, x, y, width, height)]
51
+ sprite_pieces_with_selector_data << [sprite_piece, Selector.new(rs.selectors, x, y, width, height)]
47
52
  end
48
53
 
49
54
  sprite_pieces_with_selector_data.each do |sp, selector_data|
@@ -56,19 +61,11 @@ class RunnerTest < Test::Unit::TestCase
56
61
  selector_data.width,
57
62
  selector_data.height
58
63
  )
59
- curr_sprite_image_file = Tempfile.new("curr_sprite_img.ppm")
60
- curr_sprite_image.write "ppm:#{curr_sprite_image_file.path}"
61
- curr_sprite_piece_image_bmp = Tempfile.new("curr_sprite_piece_image_bmp.ppm")
62
- sprite_piece_image.write "ppm:#{curr_sprite_piece_image_bmp.path}"
63
- pd = percent_difference(curr_sprite_image_file.path, curr_sprite_piece_image_bmp.path)
64
- assert pd <= 0.25
64
+ pd = curr_sprite_image.compare_channel(sprite_piece_image, MeanSquaredErrorMetric).last
65
+ assert_equal 0, pd
65
66
  ensure
66
67
  sprite_piece_image.destroy! if sprite_piece_image
67
68
  curr_sprite_image.destroy! if curr_sprite_image
68
- curr_sprite_image_file.close if curr_sprite_image_file
69
- curr_sprite_piece_image_bmp.close if curr_sprite_piece_image_bmp
70
- curr_sprite_piece_image_bmp = nil
71
- curr_sprite_image_file = nil
72
69
  curr_sprite_image = nil
73
70
  sprite_piece_image = nil
74
71
  end
@@ -77,14 +74,4 @@ class RunnerTest < Test::Unit::TestCase
77
74
  sprite_image.destroy! if sprite_image
78
75
  sprite_image = nil
79
76
  end
80
-
81
- def test_sprite_exists
82
- assert File.exists?(Rails.root.join('public/images/sprites/3.png'))
83
- assert File.exists?(Rails.root.join('public/images/sprites/4.png'))
84
- end
85
-
86
- def test_stylesheets_exists
87
- assert File.exists?(Rails.root.join('public/stylesheets/sprites/3.css'))
88
- assert File.exists?(Rails.root.join('public/stylesheets/sprites/4.css'))
89
- end
90
77
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_assets
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sam Woodard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-26 00:00:00 -08:00
18
+ date: 2011-01-29 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -62,6 +62,20 @@ dependencies:
62
62
  prerelease: false
63
63
  - !ruby/object:Gem::Dependency
64
64
  version_requirements: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ type: :development
74
+ requirement: *id004
75
+ name: mini_magick
76
+ prerelease: false
77
+ - !ruby/object:Gem::Dependency
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
65
79
  none: false
66
80
  requirements:
67
81
  - - ~>
@@ -73,11 +87,11 @@ dependencies:
73
87
  - 5
74
88
  version: 1.1.5
75
89
  type: :development
76
- requirement: *id004
90
+ requirement: *id005
77
91
  name: css_parser
78
92
  prerelease: false
79
93
  - !ruby/object:Gem::Dependency
80
- version_requirements: &id005 !ruby/object:Gem::Requirement
94
+ version_requirements: &id006 !ruby/object:Gem::Requirement
81
95
  none: false
82
96
  requirements:
83
97
  - - ~>
@@ -89,11 +103,11 @@ dependencies:
89
103
  - 3
90
104
  version: 3.0.3
91
105
  type: :development
92
- requirement: *id005
106
+ requirement: *id006
93
107
  name: rails
94
108
  prerelease: false
95
109
  - !ruby/object:Gem::Dependency
96
- version_requirements: &id006 !ruby/object:Gem::Requirement
110
+ version_requirements: &id007 !ruby/object:Gem::Requirement
97
111
  none: false
98
112
  requirements:
99
113
  - - ">"
@@ -104,11 +118,11 @@ dependencies:
104
118
  - 0
105
119
  version: "2.0"
106
120
  type: :development
107
- requirement: *id006
121
+ requirement: *id007
108
122
  name: test-unit
109
123
  prerelease: false
110
124
  - !ruby/object:Gem::Dependency
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
125
+ version_requirements: &id008 !ruby/object:Gem::Requirement
112
126
  none: false
113
127
  requirements:
114
128
  - - ~>
@@ -120,10 +134,10 @@ dependencies:
120
134
  - 2
121
135
  version: 4.4.2
122
136
  type: :development
123
- requirement: *id007
137
+ requirement: *id008
124
138
  name: ZenTest
125
139
  prerelease: false
126
- description: A Railtie that provides a full asset management system, including support for development and deployment. It is comprised of two libraries, ActiveSprites and ActiveExpansions. ActiveSprites generates sprites and their corresponding stylesheet from dsl definition. ActiveExpansions manages javascript and css, including concatenation support for deployment, using Rails expansions plus a dsl.
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
127
141
  email:
128
142
  - sam@wildfireapp.com
129
143
  executables: []
@@ -153,10 +167,12 @@ files:
153
167
  - lib/active_assets/active_expansions/stylesheets.rb
154
168
  - lib/active_assets/active_expansions/type_inferrable.rb
155
169
  - lib/active_assets/active_sprites.rb
156
- - lib/active_assets/active_sprites/chunky_png_runner.rb
157
170
  - lib/active_assets/active_sprites/configurable.rb
158
171
  - lib/active_assets/active_sprites/railtie.rb
159
- - lib/active_assets/active_sprites/rmagick_runner.rb
172
+ - lib/active_assets/active_sprites/runners/abstract_runner.rb
173
+ - lib/active_assets/active_sprites/runners/chunky_png_runner.rb
174
+ - lib/active_assets/active_sprites/runners/mini_magick_runner.rb
175
+ - lib/active_assets/active_sprites/runners/rmagick_runner.rb
160
176
  - lib/active_assets/active_sprites/sprite.rb
161
177
  - lib/active_assets/active_sprites/sprite_piece.rb
162
178
  - lib/active_assets/active_sprites/sprite_stylesheet.rb
@@ -170,7 +186,9 @@ files:
170
186
  - script/console
171
187
  - test/active_assets/active_expansions/asset_test.rb
172
188
  - test/active_assets/active_expansions/expansions_test.rb
173
- - test/active_assets/active_sprites/runner_test.rb
189
+ - test/active_assets/active_sprites/runners/chunky_png_runner_test.rb
190
+ - test/active_assets/active_sprites/runners/mini_magick_runner_test.rb
191
+ - test/active_assets/active_sprites/runners/rmagick_runner_test.rb
174
192
  - test/active_assets/active_sprites/sprite_piece_test.rb
175
193
  - test/active_assets/active_sprites/sprite_test.rb
176
194
  - test/active_assets/active_sprites/sprites_test.rb
@@ -236,8 +254,7 @@ files:
236
254
  - test/fixtures/rails_root/public/stylesheets/bar/bas.css
237
255
  - test/fixtures/rails_root/public/stylesheets/bas/bar.css
238
256
  - test/helper.rb
239
- - test/raster_graphics.rb
240
- - test/raster_graphics_test.rb
257
+ - test/support/abstract_runner.rb
241
258
  - test/support/rails_helper.rb
242
259
  has_rdoc: true
243
260
  homepage: http://github.com/shwoodard/active_assets
@@ -272,11 +289,13 @@ rubyforge_project: activeassets
272
289
  rubygems_version: 1.4.2
273
290
  signing_key:
274
291
  specification_version: 3
275
- summary: A Railtie that provides a full asset management system, including support for development and deployment.
292
+ summary: A Railtie that provides an asset management system for css, javascript, and sprites in your Rails applications and engines.
276
293
  test_files:
277
294
  - test/active_assets/active_expansions/asset_test.rb
278
295
  - test/active_assets/active_expansions/expansions_test.rb
279
- - test/active_assets/active_sprites/runner_test.rb
296
+ - test/active_assets/active_sprites/runners/chunky_png_runner_test.rb
297
+ - test/active_assets/active_sprites/runners/mini_magick_runner_test.rb
298
+ - test/active_assets/active_sprites/runners/rmagick_runner_test.rb
280
299
  - test/active_assets/active_sprites/sprite_piece_test.rb
281
300
  - test/active_assets/active_sprites/sprite_test.rb
282
301
  - test/active_assets/active_sprites/sprites_test.rb
@@ -342,6 +361,5 @@ test_files:
342
361
  - test/fixtures/rails_root/public/stylesheets/bar/bas.css
343
362
  - test/fixtures/rails_root/public/stylesheets/bas/bar.css
344
363
  - test/helper.rb
345
- - test/raster_graphics.rb
346
- - test/raster_graphics_test.rb
364
+ - test/support/abstract_runner.rb
347
365
  - test/support/rails_helper.rb
@@ -1,119 +0,0 @@
1
- require 'action_controller'
2
- require 'action_view'
3
- require 'rack/mount'
4
- require 'action_view'
5
- require 'fileutils'
6
- begin
7
- require 'oily_png'
8
- rescue LoadError
9
- require 'chunky_png'
10
- end
11
-
12
- module ActiveAssets
13
- module ActiveSprites
14
- class ChunkyPngRunner
15
- class AssetContext < ActionView::Base
16
- end
17
-
18
- def initialize(sprites)
19
- @sprites = if ENV['SPRITE']
20
- sprites.select do |name, sprite|
21
- ENV['SPRITE'].split(',').map(&:strip).any? do |sp|
22
- # were going to be very forgiving
23
- name == sp ||
24
- name == sp.to_sym ||
25
- name == ::Rack::Mount::Utils.normalize_path(sp)
26
- end
27
- end.map(&:last)
28
- else
29
- sprites.values
30
- end
31
- end
32
-
33
- def generate!(railtie = Rails.application, debug = ENV['DEBUG'])
34
- p "Engine Class Name: #{railtie.class.name}" if debug
35
-
36
- context = setup_context(railtie)
37
-
38
- @sprites.each do |sprite|
39
- next if sprite.sprite_pieces.empty?
40
- sprite_path = sanitize_asset_path(context.image_path(sprite.path))
41
- p "Sprite Path: #{sprite_path}" if debug
42
- sprite_stylesheet_path = sanitize_asset_path(context.stylesheet_path(sprite.stylesheet_path))
43
- p "Sprite Stylesheet Path: #{sprite_stylesheet_path}" if debug
44
-
45
- orientation = sprite.orientation.to_s
46
- sprite_pieces = sprite.sprite_pieces
47
-
48
- begin
49
- width, height = 0, 0
50
- image_list = []
51
-
52
- sprite_pieces.each do |sp|
53
- sprite_piece_path = File.join(railtie.config.paths.public.to_a.first, sanitize_asset_path(context.image_path(sp.path)))
54
- sp_image = ChunkyPNG::Image.from_file(sprite_piece_path)
55
- image_list << sp_image
56
- sp.details = SpritePiece::Details.new(
57
- sprite.url.present? ? sprite.url : sprite_path,
58
- orientation == Sprite::Orientation::VERTICAL ? 0 : width,
59
- orientation == Sprite::Orientation::VERTICAL ? height : 0,
60
- sp_image.width,
61
- sp_image.height
62
- )
63
-
64
- width = orientation == Sprite::Orientation::HORIZONTAL ? width + sp_image.width : [width, sp_image.width].max
65
- height = orientation == Sprite::Orientation::VERTICAL ? height + sp_image.height : [height, sp_image.height].max
66
- end
67
-
68
- @sprite = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
69
-
70
- image_list.each_with_index do |image, i|
71
- @sprite.replace(image, sprite_pieces[i].details.x, sprite_pieces[i].details.y)
72
- end
73
-
74
- stylesheet = SpriteStylesheet.new(sprite_pieces)
75
- stylesheet.write File.join(railtie.config.paths.public.to_a.first, sprite_stylesheet_path)
76
- write File.join(railtie.config.paths.public.to_a.first, sprite_path), sprite.quality
77
- ensure
78
- finish
79
- end
80
- end
81
- end
82
-
83
- private
84
- def write(path, quality = nil)
85
- FileUtils.mkdir_p(File.dirname(path))
86
- @sprite.save(path)
87
- end
88
-
89
- def finish
90
- @sprite = nil
91
- end
92
-
93
- def sanitize_asset_path(path)
94
- path.split('?').first
95
- end
96
-
97
- def setup_context(railtie)
98
- unless railtie.config.respond_to?(:action_controller)
99
- railtie.config.action_controller = ActiveSupport::OrderedOptions.new
100
-
101
- paths = railtie.config.paths
102
- options = railtie.config.action_controller
103
-
104
- options.assets_dir ||= paths.public.to_a.first
105
- options.javascripts_dir ||= paths.public.javascripts.to_a.first
106
- options.stylesheets_dir ||= paths.public.stylesheets.to_a.first
107
-
108
- ActiveSupport.on_load(:action_controller) do
109
- options.each { |k,v| send("#{k}=", v) }
110
- end
111
- end
112
-
113
- controller = ActionController::Base.new
114
- AssetContext.new(railtie.config.action_controller, {}, controller)
115
- end
116
-
117
- end
118
- end
119
- end