spriteful 0.1.1 → 0.1.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 24c0ddd742490c912291926301cc0872049e1286
4
+ data.tar.gz: 0c2015c6fd3dcce48037df20ae06a6e42f12182f
5
+ SHA512:
6
+ metadata.gz: 4da9e340c10c380d934281d131051a22a3659cff93952e115b80d0c656d91f0876b8154890db8e770bfcf97cea396f61b694b3bf095cbe2077b5a54746ff72a8
7
+ data.tar.gz: 266ce80cbacfe0ba5e09e2f3f013f647f2d69923814e4fda9debde4bdca6d66ea479089633ffff72fc1516ddb40f78d47ef9039a02b379aa15e31ca06d7e8768
data/README.md CHANGED
@@ -127,7 +127,8 @@ Spriteful has a basic support for dealing with SVG images (and not only PNGs). S
127
127
  will be combined along the rest of your images and will be embedded directly on the final
128
128
  Stylesheet in the data URI format. Using the `svg` root class (based on Modernizr), the
129
129
  data URI will be used for browsers that support SVG images and the composed PNG will work
130
- as a fallback for legacy browsers.
130
+ as a fallback for legacy browsers.
131
+ We recommend that you install librsvg to improve ImageMagick support for SVG images.
131
132
 
132
133
  ```css
133
134
  .images.update-icon {
@@ -154,6 +155,7 @@ Future versions of Spriteful could have support for generating composed images a
154
155
  * `--horizontal` - Changes the sprite orientation to horizontal, since all sprites are combined vertically by default.
155
156
  * `--save` - Saves the provided arguments for later use.
156
157
  * `--spacing` - Add some spacing between the images in the sprite.
158
+ * `--no-optimize` - Skip optimizing SVG images.
157
159
 
158
160
  You can add a `.spritefulrc` file with default options to your home directory or the current one that they will
159
161
  be picked up whenever you run the `spriteful` command.
@@ -20,6 +20,7 @@ module Spriteful
20
20
  class_option :spacing, type: :numeric, desc: 'Add spacing between the images in the sprite.'
21
21
 
22
22
  class_option :version, type: :boolean, aliases: '-v'
23
+ class_option :optimize, type: :boolean, default: true, desc: 'Optimize SVG source before generating CSS.'
23
24
  # Public: Gets the CLI banner for the Thor help message.
24
25
  #
25
26
  # Returns a String.
@@ -100,7 +101,8 @@ module Spriteful
100
101
  def sprite_options
101
102
  {
102
103
  horizontal: options.horizontal?,
103
- spacing: options.spacing
104
+ spacing: options.spacing,
105
+ optimize: options.optimize
104
106
  }
105
107
  end
106
108
 
@@ -30,12 +30,13 @@ module Spriteful
30
30
  # object that was initialized from the real image blob.
31
31
  #
32
32
  # magick_image - an 'Magick::Image' object.
33
- def initialize(magick_image)
33
+ def initialize(magick_image, optimize=true)
34
34
  @source = magick_image
35
- @path = magick_image.filename
35
+ @path = magick_image.base_filename
36
36
  @name = File.basename(@path)
37
37
  @width = magick_image.columns
38
38
  @height = magick_image.rows
39
+ @optimize = optimize
39
40
 
40
41
  @top = 0
41
42
  @left = 0
@@ -45,7 +46,7 @@ module Spriteful
45
46
  #
46
47
  # Returns a String.
47
48
  def blob
48
- @blob ||= SvgOptimizer.optimize(File.read(path))
49
+ @blob ||= read_blob
49
50
  end
50
51
 
51
52
  # Public: detects if the source is a SVG image
@@ -55,5 +56,16 @@ module Spriteful
55
56
  def svg?
56
57
  File.extname(@path) == '.svg'
57
58
  end
59
+
60
+ private
61
+
62
+ def read_blob
63
+ contents = File.read(path)
64
+ if @optimize
65
+ SvgOptimizer.optimize(contents)
66
+ else
67
+ contents
68
+ end
69
+ end
58
70
  end
59
71
  end
@@ -39,6 +39,7 @@ module Spriteful
39
39
  # orientation.
40
40
  # :spacing - spacing in pixels that should be placed between
41
41
  # the images in the sprite. Defaults to 0.
42
+ # :optimize - flag to optimize SVG to be inlined
42
43
  def initialize(source_dir, destination, options = {})
43
44
  source_pattern = File.join(source_dir, '*{.png,.svg}')
44
45
  sources = Dir[source_pattern].sort
@@ -49,11 +50,12 @@ module Spriteful
49
50
 
50
51
  @vertical = !options[:horizontal]
51
52
  @spacing = options[:spacing] || 0
53
+ @optimize = options[:optimize]
52
54
 
53
55
  @name = File.basename(source_dir)
54
56
  @filename = "#{name}.png"
55
57
  @path = File.expand_path(File.join(destination, @filename))
56
- @list = Magick::ImageList.new(*sources)
58
+ @list = Magick::ImageList.new(*sources) { self.background_color = 'none' }
57
59
  @images = initialize_images(@list)
58
60
 
59
61
  @height, @width = detect_dimensions
@@ -118,7 +120,7 @@ module Spriteful
118
120
  images = []
119
121
 
120
122
  list.to_a.each_with_index do |magick_image, index|
121
- image = Image.new(magick_image)
123
+ image = Image.new(magick_image, @optimize)
122
124
 
123
125
  if vertical?
124
126
  image.top = sprite_position
@@ -1,5 +1,6 @@
1
1
  require 'erb'
2
2
  require 'pathname'
3
+ require 'base64'
3
4
 
4
5
  module Spriteful
5
6
  # Public: class responsible for putting together the CSS code
@@ -129,7 +130,7 @@ module Spriteful
129
130
  # Returns a String.
130
131
  def data_uri(image)
131
132
  if image.svg?
132
- %['data:image/svg+xml;utf8,#{image.blob.gsub(/\r?\n/, "")}']
133
+ %['data:image/svg+xml;base64,#{Base64.encode64(image.blob).gsub(/\r?\n/, '')}']
133
134
  end
134
135
  end
135
136
  end
@@ -1,3 +1,3 @@
1
1
  module Spriteful
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -1,8 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spriteful::Image do
4
- let(:source_image) { double('Magick Image', filename: 'path/to/image.png', columns: 10, rows: 5) }
5
- subject(:image) { Spriteful::Image.new(source_image) }
4
+ let(:filename) { 'path/to/image.png' }
5
+ let(:source_image) { double('Magick Image', base_filename: filename, columns: 10, rows: 5) }
6
+ let(:optimize) { true }
7
+ subject(:image) { Spriteful::Image.new(source_image, optimize) }
6
8
 
7
9
  it { expect(image.name).to eq('image.png') }
8
10
  it { expect(image.path).to eq('path/to/image.png') }
@@ -12,15 +14,22 @@ describe Spriteful::Image do
12
14
  it { expect(image).to_not be_svg }
13
15
 
14
16
  context 'SVG images' do
15
- before do
16
- source_image.stub(filename: 'spec/fixtures/svg/green.svg')
17
- end
17
+ let(:filename) { 'spec/fixtures/svg/green.svg' }
18
18
 
19
19
  it { expect(image).to be_svg }
20
20
 
21
- it 'returns the SVG XML as the #blob' do
22
- xml = SvgOptimizer.optimize(File.read(source_image.filename))
21
+ it 'returns the optimized SVG XML as the #blob' do
22
+ xml = SvgOptimizer.optimize(File.read(source_image.base_filename))
23
23
  expect(image.blob).to eq(xml)
24
24
  end
25
+
26
+ context 'skiping svg optimize' do
27
+ let(:optimize) { false }
28
+
29
+ it 'returns the unoptimized SVG XML as the #blob' do
30
+ xml = File.read(source_image.base_filename)
31
+ expect(image.blob).to eq(xml)
32
+ end
33
+ end
25
34
  end
26
35
  end
@@ -1,10 +1,6 @@
1
1
  require 'spriteful'
2
2
 
3
3
  RSpec.configure do |config|
4
- config.treat_symbols_as_metadata_keys_with_true_values = true
5
- config.run_all_when_everything_filtered = true
6
- config.filter_run :focus
7
-
8
4
  config.order = 'random'
9
5
 
10
6
  config.after do
metadata CHANGED
@@ -1,116 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spriteful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.1.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Lucas Mazza
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-22 00:00:00.000000000 Z
11
+ date: 2014-04-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: thor
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.18.1
22
- - - <
20
+ - - "<"
23
21
  - !ruby/object:Gem::Version
24
22
  version: '2.0'
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>='
27
+ - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 0.18.1
33
- - - <
30
+ - - "<"
34
31
  - !ruby/object:Gem::Version
35
32
  version: '2.0'
36
33
  - !ruby/object:Gem::Dependency
37
34
  name: rmagick
38
35
  requirement: !ruby/object:Gem::Requirement
39
- none: false
40
36
  requirements:
41
- - - ~>
37
+ - - "~>"
42
38
  - !ruby/object:Gem::Version
43
39
  version: 2.13.2
44
40
  type: :runtime
45
41
  prerelease: false
46
42
  version_requirements: !ruby/object:Gem::Requirement
47
- none: false
48
43
  requirements:
49
- - - ~>
44
+ - - "~>"
50
45
  - !ruby/object:Gem::Version
51
46
  version: 2.13.2
52
47
  - !ruby/object:Gem::Dependency
53
48
  name: svg_optimizer
54
49
  requirement: !ruby/object:Gem::Requirement
55
- none: false
56
50
  requirements:
57
- - - ! '>='
51
+ - - ">="
58
52
  - !ruby/object:Gem::Version
59
53
  version: '0'
60
54
  type: :runtime
61
55
  prerelease: false
62
56
  version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
57
  requirements:
65
- - - ! '>='
58
+ - - ">="
66
59
  - !ruby/object:Gem::Version
67
60
  version: '0'
68
61
  - !ruby/object:Gem::Dependency
69
62
  name: rspec
70
63
  requirement: !ruby/object:Gem::Requirement
71
- none: false
72
64
  requirements:
73
- - - ~>
65
+ - - '='
74
66
  - !ruby/object:Gem::Version
75
- version: 2.14.0
67
+ version: 3.0.0.beta2
76
68
  type: :development
77
69
  prerelease: false
78
70
  version_requirements: !ruby/object:Gem::Requirement
79
- none: false
80
71
  requirements:
81
- - - ~>
72
+ - - '='
82
73
  - !ruby/object:Gem::Version
83
- version: 2.14.0
74
+ version: 3.0.0.beta2
84
75
  - !ruby/object:Gem::Dependency
85
76
  name: bundler
86
77
  requirement: !ruby/object:Gem::Requirement
87
- none: false
88
78
  requirements:
89
- - - ~>
79
+ - - "~>"
90
80
  - !ruby/object:Gem::Version
91
- version: '1.3'
81
+ version: '1.5'
92
82
  type: :development
93
83
  prerelease: false
94
84
  version_requirements: !ruby/object:Gem::Requirement
95
- none: false
96
85
  requirements:
97
- - - ~>
86
+ - - "~>"
98
87
  - !ruby/object:Gem::Version
99
- version: '1.3'
88
+ version: '1.5'
100
89
  - !ruby/object:Gem::Dependency
101
90
  name: rake
102
91
  requirement: !ruby/object:Gem::Requirement
103
- none: false
104
92
  requirements:
105
- - - ! '>='
93
+ - - ">="
106
94
  - !ruby/object:Gem::Version
107
95
  version: '0'
108
96
  type: :development
109
97
  prerelease: false
110
98
  version_requirements: !ruby/object:Gem::Requirement
111
- none: false
112
99
  requirements:
113
- - - ! '>='
100
+ - - ">="
114
101
  - !ruby/object:Gem::Version
115
102
  version: '0'
116
103
  description: A sprite generation tool
@@ -123,6 +110,8 @@ extra_rdoc_files: []
123
110
  files:
124
111
  - LICENSE
125
112
  - README.md
113
+ - bin/spriteful
114
+ - lib/spriteful.rb
126
115
  - lib/spriteful/cli.rb
127
116
  - lib/spriteful/image.rb
128
117
  - lib/spriteful/sprite.rb
@@ -130,7 +119,6 @@ files:
130
119
  - lib/spriteful/stylesheets/template.css.erb
131
120
  - lib/spriteful/stylesheets/template.scss.erb
132
121
  - lib/spriteful/version.rb
133
- - lib/spriteful.rb
134
122
  - spec/fixtures/simple/blue.png
135
123
  - spec/fixtures/simple/red.png
136
124
  - spec/fixtures/svg/green.svg
@@ -139,31 +127,29 @@ files:
139
127
  - spec/spec_helper.rb
140
128
  - spec/sprite_spec.rb
141
129
  - spec/stylesheet_spec.rb
142
- - bin/spriteful
143
130
  homepage: https://github.com/lucasmazza/spriteful
144
131
  licenses:
145
132
  - Apache 2.0
133
+ metadata: {}
146
134
  post_install_message:
147
135
  rdoc_options: []
148
136
  require_paths:
149
137
  - lib
150
138
  required_ruby_version: !ruby/object:Gem::Requirement
151
- none: false
152
139
  requirements:
153
- - - ! '>='
140
+ - - ">="
154
141
  - !ruby/object:Gem::Version
155
142
  version: '0'
156
143
  required_rubygems_version: !ruby/object:Gem::Requirement
157
- none: false
158
144
  requirements:
159
- - - ! '>='
145
+ - - ">="
160
146
  - !ruby/object:Gem::Version
161
147
  version: '0'
162
148
  requirements: []
163
149
  rubyforge_project:
164
- rubygems_version: 1.8.23
150
+ rubygems_version: 2.2.2
165
151
  signing_key:
166
- specification_version: 3
152
+ specification_version: 4
167
153
  summary: ''
168
154
  test_files:
169
155
  - spec/fixtures/simple/blue.png
@@ -174,4 +160,3 @@ test_files:
174
160
  - spec/spec_helper.rb
175
161
  - spec/sprite_spec.rb
176
162
  - spec/stylesheet_spec.rb
177
- has_rdoc: