spritely 0.3.2 → 1.0.0
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.
- checksums.yaml +4 -4
- data/lib/spritely.rb +11 -34
- data/lib/spritely/collection.rb +12 -11
- data/lib/spritely/engine.rb +4 -0
- data/lib/spritely/generators/base.rb +0 -16
- data/lib/spritely/generators/chunky_png.rb +1 -4
- data/lib/spritely/image_set.rb +2 -2
- data/lib/spritely/sass_functions.rb +30 -29
- data/lib/spritely/sprite_map.rb +14 -31
- data/lib/spritely/sprockets/preprocessor.rb +65 -0
- data/lib/spritely/sprockets/transformer.rb +43 -0
- data/lib/spritely/version.rb +1 -1
- data/spec/fixtures/rails-app-changes/app/assets/stylesheets/sprites.css.scss +10 -18
- data/spec/fixtures/rails-app/app/assets/images/sprites/application.png.sprite +5 -0
- data/spec/fixtures/rails-app/app/assets/images/sprites/foo.png.sprite +1 -0
- data/spec/fixtures/rails-app/app/assets/stylesheets/sprites.css.scss +6 -14
- data/spec/fixtures/rails-app/app/assets/stylesheets/sprites_2.css.scss +4 -6
- data/spec/integration/precompilation_spec.rb +2 -14
- data/spec/spec_helper.rb +0 -4
- data/spec/spritely/collection_spec.rb +9 -8
- data/spec/spritely/generators/chunky_png_spec.rb +8 -13
- data/spec/spritely/image_set_spec.rb +2 -8
- data/spec/spritely/sass_functions_spec.rb +38 -37
- data/spec/spritely/sprite_map_spec.rb +16 -52
- data/spec/spritely/sprockets/preprocessor_spec.rb +33 -0
- data/spec/support/rails_app_helpers.rb +4 -5
- metadata +38 -49
- data/lib/generators/spritely/install_generator.rb +0 -17
- data/lib/spritely/adapters/sprockets_2.rb +0 -13
- data/lib/spritely/adapters/sprockets_3.rb +0 -11
- data/lib/spritely/cache.rb +0 -51
- data/lib/spritely/options.rb +0 -59
- data/lib/spritely/sprockets/manifest.rb +0 -20
- data/spec/generators/spritely/install_generator_spec.rb +0 -28
- data/spec/spritely/cache_spec.rb +0 -24
- data/spec/spritely/options_spec.rb +0 -29
- data/spec/spritely_spec.rb +0 -41
- data/spec/support/shared_examples.rb +0 -40
- data/spec/support/shared_examples/sprockets_2_sass_functions_helpers.rb +0 -13
- data/spec/support/shared_examples/sprockets_3_sass_functions_helpers.rb +0 -15
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Spritely::Sprockets::Preprocessor do
|
4
|
+
let(:data) { "//= spacing some-new-image 789\n//= position some-new-image right\n//= repeat another-image true\n//= repeat yet-another-image false\n//= spacing 901\n//= position left" }
|
5
|
+
let(:input) { {
|
6
|
+
data: data,
|
7
|
+
filename: "sprites/foo.png.sprite",
|
8
|
+
metadata: {}
|
9
|
+
} }
|
10
|
+
|
11
|
+
subject(:preprocessor) { Spritely::Sprockets::Preprocessor.new(comments: ["//", ["/*", "*/"]]) }
|
12
|
+
|
13
|
+
it 'saves the processed options as part of the metadata' do
|
14
|
+
preprocessor._call(input)
|
15
|
+
|
16
|
+
expect(input[:metadata][:sprite_directives]).to eq(
|
17
|
+
global: { spacing: '901', position: 'left' },
|
18
|
+
images: {
|
19
|
+
"some-new-image" => { spacing: '789', position: 'right' },
|
20
|
+
"another-image" => { repeat: 'true', spacing: '901', position: 'left' },
|
21
|
+
"yet-another-image" => { repeat: 'false', spacing: '901', position: 'left' }
|
22
|
+
}
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'invalid global option' do
|
27
|
+
let(:data) { "//= repeat true" }
|
28
|
+
|
29
|
+
it 'raises an exception' do
|
30
|
+
expect { preprocessor._call(input) }.to raise_error(ArgumentError, "'repeat' is not a valid global option")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'sprockets/rails/version'
|
2
|
+
require 'sprockets/version'
|
3
|
+
|
1
4
|
module RailsAppHelpers
|
2
5
|
GENERATOR_FLAGS = [
|
3
6
|
'--skip-active-record',
|
@@ -21,7 +24,6 @@ module RailsAppHelpers
|
|
21
24
|
f.write("gem 'sprockets', '#{Sprockets::VERSION}'")
|
22
25
|
end
|
23
26
|
%x(bundle install)
|
24
|
-
%x(rails generate spritely:install)
|
25
27
|
FileUtils.cp_r "#{__dir__}/../fixtures/rails-app/.", "."
|
26
28
|
yield
|
27
29
|
end
|
@@ -35,8 +37,7 @@ module RailsAppHelpers
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def spite_image_path(sprite_name)
|
38
|
-
|
39
|
-
fingerprint = runner(%~puts Rails.application.assets["sprites/#{sprite_name}.png"].digest~)
|
40
|
+
fingerprint = runner(%~puts Rails.application.assets["sprites/#{sprite_name}.png"].hexdigest~)
|
40
41
|
"/assets/sprites/application-#{fingerprint.strip}.png"
|
41
42
|
end
|
42
43
|
|
@@ -44,8 +45,6 @@ module RailsAppHelpers
|
|
44
45
|
%x(RAILS_ENV=production rake assets:precompile)
|
45
46
|
end
|
46
47
|
|
47
|
-
private
|
48
|
-
|
49
48
|
def runner(command)
|
50
49
|
%x(rails runner -e development '#{command}')
|
51
50
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spritely
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Robbin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: chunky_png
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: sass
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
33
|
+
version: '3.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: sprockets
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
47
|
+
version: '3.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: activesupport
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
type: :
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry-byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: sprockets-rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: railties
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,35 +109,35 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: rspec
|
126
|
+
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
131
|
+
version: '3.0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
138
|
+
version: '3.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rspec-its
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: appraisal
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -171,20 +171,17 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
-
- lib/generators/spritely/install_generator.rb
|
175
174
|
- lib/spritely.rb
|
176
|
-
- lib/spritely/adapters/sprockets_2.rb
|
177
|
-
- lib/spritely/adapters/sprockets_3.rb
|
178
|
-
- lib/spritely/cache.rb
|
179
175
|
- lib/spritely/collection.rb
|
176
|
+
- lib/spritely/engine.rb
|
180
177
|
- lib/spritely/generators/base.rb
|
181
178
|
- lib/spritely/generators/chunky_png.rb
|
182
179
|
- lib/spritely/image.rb
|
183
180
|
- lib/spritely/image_set.rb
|
184
|
-
- lib/spritely/options.rb
|
185
181
|
- lib/spritely/sass_functions.rb
|
186
182
|
- lib/spritely/sprite_map.rb
|
187
|
-
- lib/spritely/sprockets/
|
183
|
+
- lib/spritely/sprockets/preprocessor.rb
|
184
|
+
- lib/spritely/sprockets/transformer.rb
|
188
185
|
- lib/spritely/version.rb
|
189
186
|
- spec/fixtures/correct-sprite.png
|
190
187
|
- spec/fixtures/rails-app-changes/app/assets/images/application/dropdown-arrow.png
|
@@ -194,27 +191,23 @@ files:
|
|
194
191
|
- spec/fixtures/rails-app/app/assets/images/application/football.png
|
195
192
|
- spec/fixtures/rails-app/app/assets/images/application/mario.png
|
196
193
|
- spec/fixtures/rails-app/app/assets/images/foo/fool.png
|
194
|
+
- spec/fixtures/rails-app/app/assets/images/sprites/application.png.sprite
|
195
|
+
- spec/fixtures/rails-app/app/assets/images/sprites/foo.png.sprite
|
197
196
|
- spec/fixtures/rails-app/app/assets/stylesheets/sprites.css.scss
|
198
197
|
- spec/fixtures/rails-app/app/assets/stylesheets/sprites_2.css.scss
|
199
198
|
- spec/fixtures/rails-app/config/initializers/assets.rb
|
200
199
|
- spec/fixtures/test/foo.png
|
201
|
-
- spec/generators/spritely/install_generator_spec.rb
|
202
200
|
- spec/integration/precompilation_spec.rb
|
203
201
|
- spec/integration/stylesheet_spec.rb
|
204
202
|
- spec/spec_helper.rb
|
205
|
-
- spec/spritely/cache_spec.rb
|
206
203
|
- spec/spritely/collection_spec.rb
|
207
204
|
- spec/spritely/generators/chunky_png_spec.rb
|
208
205
|
- spec/spritely/image_set_spec.rb
|
209
206
|
- spec/spritely/image_spec.rb
|
210
|
-
- spec/spritely/options_spec.rb
|
211
207
|
- spec/spritely/sass_functions_spec.rb
|
212
208
|
- spec/spritely/sprite_map_spec.rb
|
213
|
-
- spec/
|
209
|
+
- spec/spritely/sprockets/preprocessor_spec.rb
|
214
210
|
- spec/support/rails_app_helpers.rb
|
215
|
-
- spec/support/shared_examples.rb
|
216
|
-
- spec/support/shared_examples/sprockets_2_sass_functions_helpers.rb
|
217
|
-
- spec/support/shared_examples/sprockets_3_sass_functions_helpers.rb
|
218
211
|
homepage: https://github.com/agrobbin/spritely
|
219
212
|
licenses:
|
220
213
|
- MIT
|
@@ -238,8 +231,8 @@ rubyforge_project:
|
|
238
231
|
rubygems_version: 2.5.1
|
239
232
|
signing_key:
|
240
233
|
specification_version: 4
|
241
|
-
summary: Hooks into the
|
242
|
-
maps
|
234
|
+
summary: Hooks into the Sprockets asset packaging system to allow you to easily generate
|
235
|
+
sprite maps
|
243
236
|
test_files:
|
244
237
|
- spec/fixtures/correct-sprite.png
|
245
238
|
- spec/fixtures/rails-app/app/assets/images/application/background.png
|
@@ -247,26 +240,22 @@ test_files:
|
|
247
240
|
- spec/fixtures/rails-app/app/assets/images/application/football.png
|
248
241
|
- spec/fixtures/rails-app/app/assets/images/application/mario.png
|
249
242
|
- spec/fixtures/rails-app/app/assets/images/foo/fool.png
|
243
|
+
- spec/fixtures/rails-app/app/assets/images/sprites/application.png.sprite
|
244
|
+
- spec/fixtures/rails-app/app/assets/images/sprites/foo.png.sprite
|
250
245
|
- spec/fixtures/rails-app/app/assets/stylesheets/sprites.css.scss
|
251
246
|
- spec/fixtures/rails-app/app/assets/stylesheets/sprites_2.css.scss
|
252
247
|
- spec/fixtures/rails-app/config/initializers/assets.rb
|
253
248
|
- spec/fixtures/rails-app-changes/app/assets/images/application/dropdown-arrow.png
|
254
249
|
- spec/fixtures/rails-app-changes/app/assets/stylesheets/sprites.css.scss
|
255
250
|
- spec/fixtures/test/foo.png
|
256
|
-
- spec/generators/spritely/install_generator_spec.rb
|
257
251
|
- spec/integration/precompilation_spec.rb
|
258
252
|
- spec/integration/stylesheet_spec.rb
|
259
253
|
- spec/spec_helper.rb
|
260
|
-
- spec/spritely/cache_spec.rb
|
261
254
|
- spec/spritely/collection_spec.rb
|
262
255
|
- spec/spritely/generators/chunky_png_spec.rb
|
263
256
|
- spec/spritely/image_set_spec.rb
|
264
257
|
- spec/spritely/image_spec.rb
|
265
|
-
- spec/spritely/options_spec.rb
|
266
258
|
- spec/spritely/sass_functions_spec.rb
|
267
259
|
- spec/spritely/sprite_map_spec.rb
|
268
|
-
- spec/
|
260
|
+
- spec/spritely/sprockets/preprocessor_spec.rb
|
269
261
|
- spec/support/rails_app_helpers.rb
|
270
|
-
- spec/support/shared_examples/sprockets_2_sass_functions_helpers.rb
|
271
|
-
- spec/support/shared_examples/sprockets_3_sass_functions_helpers.rb
|
272
|
-
- spec/support/shared_examples.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rails/generators/base'
|
2
|
-
|
3
|
-
module Spritely
|
4
|
-
module Generators
|
5
|
-
class InstallGenerator < ::Rails::Generators::Base
|
6
|
-
def create_empty_sprites_folder
|
7
|
-
empty_directory Spritely.relative_folder_path
|
8
|
-
create_file "#{Spritely.relative_folder_path}/.keep"
|
9
|
-
end
|
10
|
-
|
11
|
-
def add_sprites_folder_to_gitignore
|
12
|
-
create_file '.gitignore', skip: true
|
13
|
-
inject_into_file '.gitignore', "\n/#{Spritely.relative_folder_path.join('*.png')}\n", after: /\z/
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Spritely
|
2
|
-
module Adapters
|
3
|
-
class Sprockets2
|
4
|
-
def reset_cache!(environment, filename)
|
5
|
-
environment.instance_variable_get(:@assets).delete_if { |_, asset| asset.pathname == filename }
|
6
|
-
environment.send(:trail).tap do |trail|
|
7
|
-
trail.instance_variable_get(:@entries).delete(Spritely.directory.to_s)
|
8
|
-
trail.instance_variable_get(:@stats).delete(filename.to_s)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module Spritely
|
2
|
-
module Adapters
|
3
|
-
class Sprockets3
|
4
|
-
def reset_cache!(environment, filename)
|
5
|
-
environment.instance_variable_get(:@uris).delete_if { |_, asset| asset.pathname == filename }
|
6
|
-
environment.instance_variable_get(:@entries).delete(Spritely.directory.to_s)
|
7
|
-
environment.instance_variable_get(:@stats).delete(filename.to_s)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/lib/spritely/cache.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'digest/md5'
|
2
|
-
require 'spritely/version'
|
3
|
-
|
4
|
-
module Spritely
|
5
|
-
# `Cache` is responsible for generating and fetching the current sprite cache
|
6
|
-
# `value. It is used to determine whether to generate a new sprite map or not.
|
7
|
-
#
|
8
|
-
# Passing in a set of objects that respond to `cache_key` will generate an MD5
|
9
|
-
# hash that can then be stored in the image itself.
|
10
|
-
#
|
11
|
-
# Fetching an existing cache key actually reads the PNG file itself. It scans
|
12
|
-
# the chunks of the PNG until it finds the `cache_key` keyword, returning the
|
13
|
-
# subsequent value found.
|
14
|
-
class Cache < Struct.new(:filename)
|
15
|
-
PNG_SIGNATURE_LENGTH = 8 # http://www.w3.org/TR/PNG/#5PNG-file-signature
|
16
|
-
PNG_INFO_LENGTH = 8 # http://www.w3.org/TR/PNG/#5DataRep
|
17
|
-
PNG_CRC_LENGTH = 4 # Cyclic Redundancy Check (CRC) byte-length; http://www.w3.org/TR/PNG/#5Chunk-layout
|
18
|
-
|
19
|
-
def self.generate(*objects)
|
20
|
-
Digest::MD5.hexdigest(VERSION + objects.collect(&:cache_key).join)
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.busted?(filename, expected_cache_key)
|
24
|
-
new(filename).key != expected_cache_key
|
25
|
-
end
|
26
|
-
|
27
|
-
def key
|
28
|
-
return @key if @key
|
29
|
-
|
30
|
-
File.open(filename) do |file|
|
31
|
-
file.read(PNG_SIGNATURE_LENGTH) # we first have to read the signature to fast-forward the IO#pos
|
32
|
-
until file.eof?
|
33
|
-
each_chunk(file) do |keyword, value|
|
34
|
-
if keyword == 'cache_key'
|
35
|
-
return @key = value
|
36
|
-
break
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def each_chunk(file, &block)
|
46
|
-
length = file.read(PNG_INFO_LENGTH).unpack('Na4').first
|
47
|
-
yield *file.read(length).unpack('Z*a*')
|
48
|
-
file.read(PNG_CRC_LENGTH)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/spritely/options.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/hash/deep_merge'
|
2
|
-
require 'active_support/core_ext/hash/except'
|
3
|
-
require 'active_support/core_ext/hash/keys'
|
4
|
-
require 'active_support/core_ext/hash/slice'
|
5
|
-
|
6
|
-
module Spritely
|
7
|
-
# Provides a simpler method of querying a particular image's options. Rather
|
8
|
-
# than each `Image` needing to know how to parse the keyword arguments passed
|
9
|
-
# into the `spritely-map` function, this simplifies and de-duplicates the
|
10
|
-
# passed option keys.
|
11
|
-
#
|
12
|
-
# $application-sprite: spritely-map("application/*.png",
|
13
|
-
# $arrow-repeat: true,
|
14
|
-
# $arrow-spacing: 10px,
|
15
|
-
# $another-image-position: right,
|
16
|
-
# $spacing: 5px
|
17
|
-
# );
|
18
|
-
#
|
19
|
-
# The options passed in above will be easily accessible via an instance of
|
20
|
-
# this class.
|
21
|
-
#
|
22
|
-
# options['arrow'] => {repeat: true, spacing: 10}
|
23
|
-
# options['another-image'] => {position: 'right', spacing: 5}
|
24
|
-
class Options < Struct.new(:hash)
|
25
|
-
GLOBAL_OPTIONS = ['spacing', 'position']
|
26
|
-
|
27
|
-
def cache_key
|
28
|
-
stripped_hash.to_s
|
29
|
-
end
|
30
|
-
|
31
|
-
def inspect
|
32
|
-
"#<Spritely::Options global_options=#{global_options} options=#{options}>"
|
33
|
-
end
|
34
|
-
|
35
|
-
def [](key)
|
36
|
-
options[key.gsub('-', '_')] || global_options
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def options
|
42
|
-
@options ||= stripped_hash.except(*GLOBAL_OPTIONS).inject({}) do |h, (key, value)|
|
43
|
-
image, _, option = key.rpartition('_')
|
44
|
-
h[image] ||= global_options.dup
|
45
|
-
h.deep_merge!(image => {option.to_sym => value})
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def global_options
|
50
|
-
@global_options ||= stripped_hash.slice(*GLOBAL_OPTIONS).symbolize_keys!
|
51
|
-
end
|
52
|
-
|
53
|
-
def stripped_hash
|
54
|
-
@stripped_hash ||= hash.inject({}) do |h, (key, sass_object)|
|
55
|
-
h.merge!(key => sass_object.value)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|