spriteful 0.2.0 → 0.3.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0368a10d14e6885315939bf705b93a6ee52da147
4
- data.tar.gz: b1a79824842c4dd6d94ff7ac061d3344ee813684
3
+ metadata.gz: 9cf879ad9e9e6ef6d5979c18ba95057105fbdb43
4
+ data.tar.gz: ba2e166801f3893946ecd53330a2fa72d5da26bc
5
5
  SHA512:
6
- metadata.gz: ce91faa1f865bc71bcd786fa376e609b62ea86fa147392ca9bca188e1e58af331e9f5fcfb58709345496ac31361156f70e18eba480eebf90efe36bfbabb394b1
7
- data.tar.gz: 7e0e39fe26e733430c32e844bb5af0a99df132e3f1914be0ae3498fbaa666f8bc5f4dd50a3a9ee33207b2036a995e88d077fe5505aa18c951f2133695bcb882d
6
+ metadata.gz: 8e051ba566bc763e3c05c0c17959f5c96b9547854946605d548d1bcccad288debd826d11be58eb51e39e3084038e574be68b3cf228fcdd53aace8faf13c44b4f
7
+ data.tar.gz: dce408ad68c9a3518496ff6a0ea8e02a08a1c6cd63b42dbc607189e4c5bbbff976e4048bdc98a3291594288c7221d6a0a8947b8ae3e38e10df809d54c2e13317
data/README.md CHANGED
@@ -121,6 +121,27 @@ images under `icons` will generate the `icons.png` and `icons.css` files. This c
121
121
  enforces previsibility over generated files and helps when regenating existing sprites whenever
122
122
  you need to add a new source to an existing sprite.
123
123
 
124
+ ## Custom templates
125
+
126
+ If you need further customization of the sprite CSS, you can use a custom ERB template
127
+ to be used instead of the builtin templates.
128
+
129
+ ```bash
130
+ spriteful image/icons --template custom_template.erb
131
+ ```
132
+
133
+ In this case, the `custom_template.erb` file will be evaluated in the context of a
134
+ `Spriteful::Template` instance. Please check this class documentation and source
135
+ to see all the available attributes and helpers.
136
+
137
+ You can copy one of the builtin templates to your working directory with the `template`
138
+ subcommand.
139
+
140
+ ```bash
141
+ spriteful template
142
+ # create spriteful.css
143
+ ```
144
+
124
145
  ## SVG Support
125
146
 
126
147
  Spriteful has a basic support for dealing with SVG images (and not only PNGs). SVG images
@@ -161,6 +182,7 @@ If you are using SVG images, the embedded SVG as data URI will be optimized with
161
182
  * `--destination` (`-d`) - Directory to save the generated image(s).
162
183
  * `--rails` (`-r`) - Forces rails specific settings, see [Spriteful and Rails](#spriteful-and-rails) for more info.
163
184
  * `--format` (`-f`) - Format to generate the sprite(s) stylesheet(s). Either "css" or "scss".
185
+ * `--template` (`-t`) - The path for a custom Stylesheet template.
164
186
  * `--mixin` - Choose to use the Mixin Directives instead of Placeholder Selector.
165
187
  * `--horizontal` - Changes the sprite orientation to horizontal, since all sprites are combined vertically by default.
166
188
  * `--save` - Saves the provided arguments for later use.
@@ -5,6 +5,7 @@ require 'spriteful/image'
5
5
  require 'spriteful/optimizer'
6
6
  require 'spriteful/sprite'
7
7
  require 'spriteful/stylesheet'
8
+ require 'spriteful/template'
8
9
 
9
10
  module Spriteful
10
11
  class EmptySourceError < Thor::Error; end
@@ -12,6 +12,7 @@ module Spriteful
12
12
  class_option :stylesheets, aliases: '-s', banner: 'STYLESHEETS_DIR', type: :string, desc: 'Directory to save the generated stylesheet(s), instead of copying them to the clipboard.', default: Dir.pwd
13
13
  class_option :destination, aliases: '-d', banner: 'DESTINATION_DIR', type: :string, desc: 'Destination directory to save the combined image(s).', default: Dir.pwd
14
14
  class_option :root, aliases: '-r', banner: 'ROOT_DIR', type: :string, desc: 'Root folder from where your static files will be served.'
15
+ class_option :template, aliases: '-t', banner: 'TEMPLATE', type: :string, desc: 'Custom template file in ERB format to be used instead of the default.'
15
16
 
16
17
  class_option :mixin, type: :boolean, desc: 'Choose to use the Mixin Directives instead of Placeholder Selectors.'
17
18
  class_option :rails, type: :boolean, desc: 'Follow default conventions for a Rails application with the Asset Pipeline.'
@@ -46,7 +47,6 @@ module Spriteful
46
47
  end
47
48
 
48
49
  prepare_options!
49
- Spriteful.options = ARGV.dup.uniq
50
50
 
51
51
  if sources.empty?
52
52
  self.class.help(shell)
@@ -61,6 +61,20 @@ module Spriteful
61
61
  save_options
62
62
  end
63
63
 
64
+ def template
65
+ create_file "spriteful.#{options.format}", Spriteful::Stylesheet.read_template(options.format)
66
+ end
67
+
68
+ protected
69
+ def self.dispatch(command, args, opts, config)
70
+ if args.first == 'template'
71
+ command = args.shift
72
+ else
73
+ command = 'execute'
74
+ end
75
+ super(command, args, opts, config)
76
+ end
77
+
64
78
  private
65
79
  # Internal: Gets an instance of `Spriteful::Optimizer`.
66
80
  def optimizer
@@ -92,19 +106,21 @@ module Spriteful
92
106
  #
93
107
  # Returns nothing.
94
108
  def save_options
95
- if options.save?
96
- options.delete(:save)
97
- parts = sources + options.map { |key, value| ["--#{key}", value.to_s] }.flatten
98
- create_file '.spritefulrc', Shellwords.join(parts) + "\n", force: true
109
+ if save_options?
110
+ parts = Shellwords.join(Spriteful.options)
111
+ create_file '.spritefulrc', parts + "\n", force: true
99
112
  end
100
113
  end
101
114
 
102
115
  def stylesheet_options
116
+ template = File.expand_path(options.template) if File.file?(options.template.to_s)
117
+
103
118
  {
104
119
  root: options.root,
105
120
  format: options.format,
106
121
  rails: options.rails?,
107
- mixin: options.mixin?
122
+ mixin: options.mixin?,
123
+ template: template
108
124
  }
109
125
  end
110
126
 
@@ -120,11 +136,15 @@ module Spriteful
120
136
  }
121
137
  end
122
138
 
123
- # Internal: Change the `options` hash if necessary, based on the
124
- # 'rails' flag.
139
+ # Internal: Changes the `options` hash if necessary (based on the
140
+ # '--rails' flag) and store the original 'ARGV' array for further
141
+ # usage.
125
142
  #
126
143
  # Returns nothing.
127
144
  def prepare_options!
145
+ Spriteful.options = ARGV.dup.uniq
146
+ @save_options = !!Spriteful.options.delete('--save')
147
+
128
148
  if options.rails?
129
149
  sources.concat(detect_sources)
130
150
  set_rails_defaults
@@ -146,5 +166,13 @@ module Spriteful
146
166
  options['stylesheets'] = File.expand_path('app/assets/stylesheets/sprites')
147
167
  options['destination'] = File.expand_path('app/assets/images/sprites')
148
168
  end
169
+
170
+ # Internal: Checks if we should save the supplied user arguments into
171
+ # the rcfile.
172
+ #
173
+ # Returns true or false.
174
+ def save_options?
175
+ @save_options
176
+ end
149
177
  end
150
178
  end
@@ -1,5 +1,3 @@
1
- require 'erb'
2
- require 'pathname'
3
1
  require 'base64'
4
2
 
5
3
  module Spriteful
@@ -15,6 +13,9 @@ module Spriteful
15
13
  # Public: returns the path where the Stylesheet should be stored.
16
14
  attr_reader :path
17
15
 
16
+ # Public: returns the custom template path.
17
+ attr_reader :template_path
18
+
18
19
  # Public: Initialize a Stylesheet
19
20
  #
20
21
  # sprite - a 'Sprite' object to create the Stylesheet.
@@ -25,16 +26,14 @@ module Spriteful
25
26
  # :rails - A flag to generate Asset Pipeline compatible Stylesheets.
26
27
  def initialize(sprite, destination, options = {})
27
28
  @sprite = sprite
28
- @destination = Pathname.new(destination)
29
- @root = nil
30
- if options[:root]
31
- @root = Pathname.new(File.expand_path(options[:root]))
32
- end
29
+ @options = options
30
+ @destination = destination
31
+
33
32
  @format = options[:format]
34
- @mixin = options.fetch(:mixin, false)
35
- @rails = options.fetch(:rails, false)
33
+ @rails = !!options[:rails]
34
+ @template_path = options[:template] || self.class.expand_template_path(@format)
36
35
 
37
- @path = @destination.join(name)
36
+ @path = File.join(@destination, name)
38
37
  end
39
38
 
40
39
  # Public: renders the CSS code for this Stylesheet.
@@ -43,8 +42,8 @@ module Spriteful
43
42
  #
44
43
  # Returns the CSS code as a 'String'.
45
44
  def render
46
- source = File.expand_path("../stylesheets/template.#{format}.erb", __FILE__)
47
- ERB.new(File.read(source), nil, '-').result(binding)
45
+ template = Template.new(@sprite, template_options)
46
+ template.render(File.read(template_path))
48
47
  end
49
48
 
50
49
  # Public: returns this Stylesheet name, based
@@ -56,26 +55,30 @@ module Spriteful
56
55
  "#{sprite_name}.#{extension}"
57
56
  end
58
57
 
59
- protected
60
-
61
- # Internal: returns the 'rails' flag.
62
- def rails?
63
- @rails
58
+ # Internal: Reads the default template Stylesheet for the given format.
59
+ #
60
+ # Returns a String.
61
+ def self.read_template(format)
62
+ path = expand_template_path(format)
63
+ File.read(path)
64
64
  end
65
65
 
66
- # Internal: returns the 'mixin' flag.
67
- def mixin?
68
- @mixin
66
+ # Internal: Expands the path to the default stylesheet for the given format.
67
+ #
68
+ # Returns the path as a String.
69
+ def self.expand_template_path(format)
70
+ File.expand_path("../stylesheets/template.#{format}.erb", __FILE__)
69
71
  end
70
72
 
71
- # Internal: select the extension prefix for the SCSS selector.
72
- def extension_prefix
73
- mixin? ? '@mixin ' : '%'
73
+ protected
74
+
75
+ def template_options
76
+ @options.merge(destination: @destination, cli_options: Spriteful.options)
74
77
  end
75
78
 
76
- # Internal: select the extension strategy for the SCSS selector.
77
- def extension_strategy
78
- mixin? ? '@include ' : '@extend %'
79
+ # Internal: returns the 'rails' flag.
80
+ def rails?
81
+ @rails
79
82
  end
80
83
 
81
84
  # Internal: defines the file extension to be used with
@@ -100,38 +103,5 @@ module Spriteful
100
103
  "_#{sprite.name}"
101
104
  end
102
105
  end
103
-
104
- # Internal: sanitizes the 'name' of a given object to
105
- # be used as a CSS selector class.
106
- #
107
- # Returns a 'String'.
108
- def class_name_for(object)
109
- object.name.split('.').first.downcase.tr('_', '-')
110
- end
111
-
112
- # Internal: computes a relative path between the sprite
113
- # path and the stylesheet expected location.
114
- #
115
- # Returns a 'String'.
116
- def image_url(sprite)
117
- path = Pathname.new(sprite.path)
118
- if @rails
119
- "sprites/#{sprite.filename}"
120
- elsif @root
121
- "/#{path.relative_path_from(@root)}"
122
- else
123
- path.relative_path_from(@destination)
124
- end
125
- end
126
-
127
- # Internal: Gets an embeddable Data URI of the image if it
128
- # is a SVG image.
129
- #
130
- # Returns a String.
131
- def data_uri(image)
132
- if image.svg?
133
- %['data:image/svg+xml;base64,#{Base64.encode64(image.blob).gsub(/\r?\n/, '')}']
134
- end
135
- end
136
106
  end
137
107
  end
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * This Stylesheet was generated by the 'spriteful' gem, with the following options:
3
3
  <%- if Spriteful.options -%>
4
- * 'spriteful <%= Spriteful.options.join(' ') %>'.
4
+ * 'spriteful <%= cli_options.join(' ') %>'.
5
5
  <%- end -%>
6
6
  * Below there are several CSS classes to use the '<%= sprite.name %>'
7
7
  * sprite on you HTML code, as in:
@@ -1,7 +1,7 @@
1
1
  // ============================================================================
2
2
  // This Stylesheet was generated by the 'spriteful' gem, with the following options:
3
3
  <%- if Spriteful.options -%>
4
- // 'spriteful <%= Spriteful.options.join(' ') %>'.
4
+ // 'spriteful <%= cli_options.join(' ') %>'.
5
5
  <%- end -%>
6
6
  <%- if mixin? -%>
7
7
  // Below there are several [Mixin Directives]
@@ -0,0 +1,113 @@
1
+ require 'erb'
2
+ require 'pathname'
3
+
4
+ module Spriteful
5
+ # Public: The Template class is the public API available in the ERB templates
6
+ # that will render a CSS/SCSS stylesheet for a sprite.
7
+ class Template
8
+ # Public: Gets the sprite object that is being rendered with this template.
9
+ attr_reader :sprite
10
+
11
+ # Public: Gets the command line options used to create the current sprite.
12
+ attr_reader :cli_options
13
+
14
+ # Public: Initializes a Template object.
15
+ #
16
+ # sprite - A instance of the Spriteful::Sprite object associated to this
17
+ # template.
18
+ # options - The Hash options that configure this template (default: {}):
19
+ # :mixin - A flag marking if the template should generate SCSS
20
+ # mixins instead of placeholders.
21
+ # :rails - A flag marking if the template is being generated in a
22
+ # Rails app.
23
+ # :root - Root folder from where the generate stylesheets will be
24
+ # served.
25
+ # :destination - Folder where styleshee will live.
26
+ def initialize(sprite, options = {})
27
+ @sprite = sprite
28
+ @options = options
29
+ @destination = Pathname.new(options[:destination])
30
+ @cli_options = options[:cli_options]
31
+
32
+ if @options[:root]
33
+ @root = Pathname.new(File.expand_path(options[:root]))
34
+ else
35
+ @root = nil
36
+ end
37
+ end
38
+
39
+ # Public: sanitizes the 'name' of a given object to be used as a CSS selector
40
+ # class.
41
+ #
42
+ # object - A Spriteful::Sprite or Spriteful::Image instance.
43
+ #
44
+ # Returns a String.
45
+ def class_name_for(object)
46
+ object.name.split('.').first.downcase.tr('_', '-')
47
+ end
48
+
49
+ # Public: Gets the extension prefix for the SCSS selector, based on the
50
+ # ':mixin' option.
51
+ #
52
+ # Returns a String.
53
+ def extension_prefix
54
+ mixin? ? '@mixin ' : '%'
55
+ end
56
+
57
+ # Internal: Gets the extension strategy for the SCSS selector, based on the
58
+ # ':mixin' option.
59
+ #
60
+ # Returns a String.
61
+ def extension_strategy
62
+ mixin? ? '@include ' : '@extend %'
63
+ end
64
+
65
+ # Public: Gets the ':mixin' flag.
66
+ def mixin?
67
+ !!@options[:mixin]
68
+ end
69
+
70
+ # Public: Gets the ':rails' flag.
71
+ def rails?
72
+ !!@options[:rails]
73
+ end
74
+
75
+ # Public: computes a relative path between the sprite path and the stylesheet
76
+ # expected location.
77
+ #
78
+ # sprite - A Spriteful::Sprite instance.
79
+ #
80
+ # Returns a String.
81
+ def image_url(sprite)
82
+ path = Pathname.new(sprite.path)
83
+ if rails?
84
+ "sprites/#{sprite.filename}"
85
+ elsif @root
86
+ "/#{path.relative_path_from(@root)}"
87
+ else
88
+ path.relative_path_from(@destination).to_s
89
+ end
90
+ end
91
+
92
+ # Public: Gets an embeddable Data URI of the image if it is a SVG image.
93
+ #
94
+ # image - A Spriteful::Image instance.
95
+ #
96
+ # Returns a String.
97
+ def data_uri(image)
98
+ if image.svg?
99
+ "data:image/svg+xml;base64,#{Base64.encode64(image.blob).gsub(/\r?\n/, '')}"
100
+ end
101
+ end
102
+
103
+ # Public: Renders the given source ERB template string in the context of the
104
+ # template object.
105
+ #
106
+ # source - A String containing the ERB template.
107
+ #
108
+ # Returns a String.
109
+ def render(source)
110
+ ERB.new(source, nil, '-').result(binding)
111
+ end
112
+ end
113
+ end
@@ -1,3 +1,3 @@
1
1
  module Spriteful
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0.beta1'
3
3
  end
@@ -0,0 +1,23 @@
1
+ /*
2
+ * This is a custom template.
3
+ */
4
+
5
+ .my-custom-template-<%= class_name_for(sprite) %> {
6
+ <% if rails? -%>
7
+ background-image: url(<%%= image_url('<%= image_url(sprite) %>') %>);
8
+ <% else -%>
9
+ background-image: url(<%= image_url(sprite) %>);
10
+ <% end -%>
11
+ background-repeat: no-repeat;
12
+ }
13
+ <% sprite.each_image do |image| %>
14
+ .my-custom-template-<%= class_name_for(sprite) %>.<%= class_name_for(image) %> {
15
+ background-position: <%= image.left %>px <%= image.top %>px;
16
+ }
17
+ <% if image.svg? %>
18
+ .svg .my-custom-template-<%= class_name_for(sprite) %>.<%= class_name_for(image) %> {
19
+ background-image: url(<%= data_uri(image) %>);
20
+ background-position: 0 0;
21
+ }
22
+ <% end -%>
23
+ <% end %>
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spriteful::Template do
4
+ let(:sprite) { double }
5
+ let(:options) { { destination: File.expand_path('tmp/output') } }
6
+ subject(:template) { Spriteful::Template.new(sprite, options) }
7
+
8
+ describe '#cli_options' do
9
+ it 'returns the cli_options provided in the options' do
10
+ options[:cli_options] = %w(one two three)
11
+ expect(template.cli_options).to eq(%w(one two three))
12
+ end
13
+ end
14
+
15
+ describe '#class_name_for' do
16
+ it 'formats the object name into a suitable CSS selector name' do
17
+ thing = double(name: 'Thing_name.jpg')
18
+ expect(template.class_name_for(thing)).to eq('thing-name')
19
+ end
20
+ end
21
+
22
+ describe '#extension_prefix' do
23
+ it 'returns the prefix to be used when defining the sprite CSS selector' do
24
+ expect(template.extension_prefix).to eq('%')
25
+ options[:mixin] = true
26
+ expect(template.extension_prefix).to eq('@mixin ')
27
+ end
28
+ end
29
+
30
+ describe '#extension_strategy' do
31
+ it 'returns prefix to be used when extending the SCSS selector' do
32
+ expect(template.extension_strategy).to eq('@extend %')
33
+ options[:mixin] = true
34
+ expect(template.extension_strategy).to eq('@include ')
35
+ end
36
+ end
37
+
38
+ describe '#mixin?' do
39
+ it 'returns true when the :mixin flag is true' do
40
+ options[:mixin] = true
41
+ expect(template.mixin?).to be(true)
42
+ end
43
+ end
44
+
45
+ describe '#rails?' do
46
+ it 'returns true when the :rails flag is true' do
47
+ options[:rails] = true
48
+ expect(template.rails?).to be(true)
49
+ end
50
+ end
51
+
52
+ describe '#image_url' do
53
+ it 'returns a path under sprites when the :rails flag is present' do
54
+ sprite = double(path: '/path', filename: 'icons.png')
55
+ options[:rails] = true
56
+
57
+ expect(template.image_url(sprite)).to eq('sprites/icons.png')
58
+ end
59
+
60
+ it 'returns an absolute path when the :root option is given' do
61
+ sprite = double(path: File.expand_path('tmp/sprites/icons.png'))
62
+ options[:root] = Pathname.new(File.expand_path('tmp'))
63
+
64
+ expect(template.image_url(sprite)).to eq('/sprites/icons.png')
65
+ end
66
+
67
+ it 'returns the sprite path relative to the destination path' do
68
+ sprite = double(path: File.expand_path('tmp/sprites/icons.png'))
69
+
70
+ expect(template.image_url(sprite)).to eq('../sprites/icons.png')
71
+ end
72
+ end
73
+
74
+ describe '#data_uri' do
75
+ it 'returns a Base64 encoded String for the SVG image' do
76
+ image = double(svg?: true, blob: '<svg />')
77
+ expect(template.data_uri(image)).to eq('data:image/svg+xml;base64,PHN2ZyAvPg==')
78
+ end
79
+ end
80
+
81
+ describe '#render' do
82
+ it 'renders the given ERB string in the template context' do
83
+ erb = 'ZOMG <%= self.class.name %>'
84
+
85
+ expect(template.render(erb)).to eq('ZOMG Spriteful::Template')
86
+ end
87
+ end
88
+ end
@@ -4,6 +4,7 @@ describe Spriteful::Stylesheet do
4
4
  let(:source) { File.expand_path('spec/fixtures/simple') }
5
5
  let(:destination) { File.expand_path('tmp') }
6
6
  let(:sprite) { Spriteful::Sprite.new(source, destination) }
7
+ let(:template) { File.expand_path('spec/fixtures/template.erb') }
7
8
 
8
9
  describe '#render' do
9
10
  it 'renders the CSS for the given sprite' do
@@ -71,5 +72,17 @@ describe Spriteful::Stylesheet do
71
72
  expect(output).to match(/^ .svg & \{/)
72
73
  end
73
74
  end
75
+
76
+ describe 'Custom templates' do
77
+ it 'renders the CSS using a custom template' do
78
+ stylesheet = Spriteful::Stylesheet.new(sprite, destination, format: 'scss', template: template)
79
+ output = stylesheet.render
80
+
81
+ expect(output).to match('This is a custom template.')
82
+ expect(output).to match(/.my-custom-template-simple \{/)
83
+ expect(output).to match(/.my-custom-template-simple.blue \{/)
84
+ expect(output).to match(/.my-custom-template-simple.red \{/)
85
+ end
86
+ end
74
87
  end
75
88
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spriteful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Mazza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-21 00:00:00.000000000 Z
11
+ date: 2014-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -133,14 +133,17 @@ files:
133
133
  - lib/spriteful/stylesheet.rb
134
134
  - lib/spriteful/stylesheets/template.css.erb
135
135
  - lib/spriteful/stylesheets/template.scss.erb
136
+ - lib/spriteful/template.rb
136
137
  - lib/spriteful/version.rb
137
138
  - spec/fixtures/simple/blue.png
138
139
  - spec/fixtures/simple/red.png
139
140
  - spec/fixtures/svg/green.svg
140
141
  - spec/fixtures/svg/red.png
142
+ - spec/fixtures/template.erb
141
143
  - spec/image_spec.rb
142
144
  - spec/spec_helper.rb
143
145
  - spec/sprite_spec.rb
146
+ - spec/spriteful/template_spec.rb
144
147
  - spec/stylesheet_spec.rb
145
148
  homepage: https://github.com/lucasmazza/spriteful
146
149
  licenses:
@@ -157,9 +160,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
160
  version: '0'
158
161
  required_rubygems_version: !ruby/object:Gem::Requirement
159
162
  requirements:
160
- - - ">="
163
+ - - ">"
161
164
  - !ruby/object:Gem::Version
162
- version: '0'
165
+ version: 1.3.1
163
166
  requirements: []
164
167
  rubyforge_project:
165
168
  rubygems_version: 2.2.2
@@ -171,7 +174,9 @@ test_files:
171
174
  - spec/fixtures/simple/red.png
172
175
  - spec/fixtures/svg/green.svg
173
176
  - spec/fixtures/svg/red.png
177
+ - spec/fixtures/template.erb
174
178
  - spec/image_spec.rb
175
179
  - spec/spec_helper.rb
176
180
  - spec/sprite_spec.rb
181
+ - spec/spriteful/template_spec.rb
177
182
  - spec/stylesheet_spec.rb