compass-rmagick-engine 0.0.1
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.
- data/.DS_Store +0 -0
- data/.gitignore +5 -0
- data/Gemfile +7 -0
- data/Rakefile +2 -0
- data/Readme.md +20 -0
- data/compass-rmagick-engine.gemspec +25 -0
- data/lib/compass-rmagick-engine/version.rb +5 -0
- data/lib/compass-rmagick-engine.rb +42 -0
- data/spec/rmagick_spec.rb +77 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/test_project/.DS_Store +0 -0
- data/spec/test_project/public/.DS_Store +0 -0
- data/spec/test_project/public/images/.DS_Store +0 -0
- data/spec/test_project/public/images/squares/ten-by-ten.png +0 -0
- data/spec/test_project/public/images/squares/twenty-by-twenty.png +0 -0
- metadata +98 -0
data/.DS_Store
ADDED
Binary file
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Compass Rmagick Engine
|
2
|
+
|
3
|
+
Compass Rmagick Engine is a drop in replacement for creating sprites using chunky_png.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
### Rails
|
8
|
+
|
9
|
+
In your gem file add
|
10
|
+
|
11
|
+
1. `gem 'compass-rmagick-engine'`
|
12
|
+
2. Add `sprite_engine = :rmagick` to your compass config
|
13
|
+
|
14
|
+
Standalone
|
15
|
+
|
16
|
+
1. run `gem install compass-rmagick-engine`
|
17
|
+
2. open your compass config file and add `require 'compass-rmagick-engine'`
|
18
|
+
3. and also add `sprite_engine = :rmagick`
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "compass-rmagick-engine/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "compass-rmagick-engine"
|
7
|
+
s.version = Compass::Rmagick::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Scott Davis"]
|
10
|
+
s.email = ["jetviper21@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/jetviper21/compass-rmagick-engine"
|
12
|
+
s.summary = %q{Rmagick sprite engine for compass}
|
13
|
+
s.description = %q{Drop in rmagick sprite engine for compass}
|
14
|
+
|
15
|
+
s.rubyforge_project = "compass-rmagick-engine"
|
16
|
+
|
17
|
+
s.add_dependency "compass", '~> 0.11.beta.5'
|
18
|
+
s.add_dependency "rmagick", '~> 2.13.1'
|
19
|
+
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rmagick'
|
2
|
+
module Compass
|
3
|
+
module SassExtensions
|
4
|
+
module Sprites
|
5
|
+
module RmagickEngine
|
6
|
+
class ::Magick::Image
|
7
|
+
alias :save :write
|
8
|
+
end
|
9
|
+
|
10
|
+
def construct_sprite
|
11
|
+
output_png = Magick::Image.new(width, height)
|
12
|
+
output_png.background_color = 'none'
|
13
|
+
output_png.format = 'PNG24'
|
14
|
+
images.each do |image|
|
15
|
+
input_png = Magick::Image.read(image.file).first
|
16
|
+
if image.repeat == "no-repeat"
|
17
|
+
output_png = composite_images(output_png, input_png, image.left, image.top)
|
18
|
+
else
|
19
|
+
x = image.left - (image.left / image.width).ceil * image.width
|
20
|
+
while x < width do
|
21
|
+
output_png = composite_images(output_png, input_png, x, image.top)
|
22
|
+
x += image.width
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
output_png
|
27
|
+
end
|
28
|
+
|
29
|
+
private #===============================================================================>
|
30
|
+
|
31
|
+
def composite_images(dest_image, src_image, x, y)
|
32
|
+
width = [src_image.columns + x, dest_image.columns].max
|
33
|
+
height = [src_image.rows + y, dest_image.rows].max
|
34
|
+
image = Magick::Image.new(width, height) {self.background_color = 'none'}
|
35
|
+
image.composite!(dest_image, 0, 0, Magick::CopyCompositeOp)
|
36
|
+
image.composite!(src_image, x, y, Magick::CopyCompositeOp)
|
37
|
+
image
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'compass-rmagick-engine'
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
describe Compass::Sprites do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@images_src_path = File.join(File.dirname(__FILE__), 'test_project', 'public', 'images')
|
9
|
+
@images_tmp_path = File.join(File.dirname(__FILE__), 'test_project', 'public', 'images-tmp')
|
10
|
+
::FileUtils.cp_r @images_src_path, @images_tmp_path
|
11
|
+
file = StringIO.new("images_path = #{@images_tmp_path.inspect}\nsprite_engine = :rmagick")
|
12
|
+
Compass.add_configuration(file, "sprite_config")
|
13
|
+
Compass.configure_sass_plugin!
|
14
|
+
end
|
15
|
+
|
16
|
+
after :each do
|
17
|
+
FileUtils.rm_r @images_tmp_path
|
18
|
+
end
|
19
|
+
|
20
|
+
def map_location(file)
|
21
|
+
Dir.glob(File.join(@images_tmp_path, file)).first
|
22
|
+
end
|
23
|
+
|
24
|
+
def image_size(file)
|
25
|
+
IO.read(map_location(file))[0x10..0x18].unpack('NN')
|
26
|
+
end
|
27
|
+
|
28
|
+
def image_md5(file)
|
29
|
+
md5 = Digest::MD5.new
|
30
|
+
md5.update IO.read(map_location(file))
|
31
|
+
md5.hexdigest
|
32
|
+
end
|
33
|
+
|
34
|
+
def render(scss)
|
35
|
+
scss = %Q(@import "compass"; #{scss})
|
36
|
+
options = Compass.sass_engine_options
|
37
|
+
options[:line_comments] = false
|
38
|
+
options[:style] = :expanded
|
39
|
+
options[:syntax] = :scss
|
40
|
+
css = Sass::Engine.new(scss, options).render
|
41
|
+
# reformat to fit result of heredoc:
|
42
|
+
" #{css.gsub('@charset "UTF-8";', '').gsub(/\n/, "\n ").strip}\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should render sprites using rmagick" do
|
46
|
+
css = render <<-CSS
|
47
|
+
@import "squares/*.png"
|
48
|
+
CSS
|
49
|
+
File.exists?(File.join(@images_tmp_path, 'squares-161c60ad78.png'))
|
50
|
+
image_size('squares-*.png').should == [20,30]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should render aprites using spacing" do
|
54
|
+
css = render <<-SCSS
|
55
|
+
$squares-ten-by-ten-spacing: 44px;
|
56
|
+
$squares-twenty-by-twenty-spacing: 33px;
|
57
|
+
@import "squares/*.png";
|
58
|
+
@include all-squares-sprites;
|
59
|
+
SCSS
|
60
|
+
css.should == <<-CSS
|
61
|
+
.squares-sprite, .squares-ten-by-ten, .squares-twenty-by-twenty {
|
62
|
+
background: url('/squares-1cd84c9068.png') no-repeat;
|
63
|
+
}
|
64
|
+
|
65
|
+
.squares-ten-by-ten {
|
66
|
+
background-position: 0 0;
|
67
|
+
}
|
68
|
+
|
69
|
+
.squares-twenty-by-twenty {
|
70
|
+
background-position: 0 -54px;
|
71
|
+
}
|
72
|
+
CSS
|
73
|
+
image_size('squares-*.png').should == [20, 74]
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
end
|
data/spec/spec_helper.rb
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: compass-rmagick-engine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Scott Davis
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-29 00:00:00 -04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: compass
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.11.beta.5
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rmagick
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 2.13.1
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
description: Drop in rmagick sprite engine for compass
|
39
|
+
email:
|
40
|
+
- jetviper21@gmail.com
|
41
|
+
executables: []
|
42
|
+
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- .DS_Store
|
49
|
+
- .gitignore
|
50
|
+
- Gemfile
|
51
|
+
- Rakefile
|
52
|
+
- Readme.md
|
53
|
+
- compass-rmagick-engine.gemspec
|
54
|
+
- lib/compass-rmagick-engine.rb
|
55
|
+
- lib/compass-rmagick-engine/version.rb
|
56
|
+
- spec/rmagick_spec.rb
|
57
|
+
- spec/spec_helper.rb
|
58
|
+
- spec/test_project/.DS_Store
|
59
|
+
- spec/test_project/public/.DS_Store
|
60
|
+
- spec/test_project/public/images/.DS_Store
|
61
|
+
- spec/test_project/public/images/squares/ten-by-ten.png
|
62
|
+
- spec/test_project/public/images/squares/twenty-by-twenty.png
|
63
|
+
has_rdoc: true
|
64
|
+
homepage: https://github.com/jetviper21/compass-rmagick-engine
|
65
|
+
licenses: []
|
66
|
+
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
requirements: []
|
85
|
+
|
86
|
+
rubyforge_project: compass-rmagick-engine
|
87
|
+
rubygems_version: 1.6.2
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: Rmagick sprite engine for compass
|
91
|
+
test_files:
|
92
|
+
- spec/rmagick_spec.rb
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- spec/test_project/.DS_Store
|
95
|
+
- spec/test_project/public/.DS_Store
|
96
|
+
- spec/test_project/public/images/.DS_Store
|
97
|
+
- spec/test_project/public/images/squares/ten-by-ten.png
|
98
|
+
- spec/test_project/public/images/squares/twenty-by-twenty.png
|