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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/spritely.rb +11 -34
  3. data/lib/spritely/collection.rb +12 -11
  4. data/lib/spritely/engine.rb +4 -0
  5. data/lib/spritely/generators/base.rb +0 -16
  6. data/lib/spritely/generators/chunky_png.rb +1 -4
  7. data/lib/spritely/image_set.rb +2 -2
  8. data/lib/spritely/sass_functions.rb +30 -29
  9. data/lib/spritely/sprite_map.rb +14 -31
  10. data/lib/spritely/sprockets/preprocessor.rb +65 -0
  11. data/lib/spritely/sprockets/transformer.rb +43 -0
  12. data/lib/spritely/version.rb +1 -1
  13. data/spec/fixtures/rails-app-changes/app/assets/stylesheets/sprites.css.scss +10 -18
  14. data/spec/fixtures/rails-app/app/assets/images/sprites/application.png.sprite +5 -0
  15. data/spec/fixtures/rails-app/app/assets/images/sprites/foo.png.sprite +1 -0
  16. data/spec/fixtures/rails-app/app/assets/stylesheets/sprites.css.scss +6 -14
  17. data/spec/fixtures/rails-app/app/assets/stylesheets/sprites_2.css.scss +4 -6
  18. data/spec/integration/precompilation_spec.rb +2 -14
  19. data/spec/spec_helper.rb +0 -4
  20. data/spec/spritely/collection_spec.rb +9 -8
  21. data/spec/spritely/generators/chunky_png_spec.rb +8 -13
  22. data/spec/spritely/image_set_spec.rb +2 -8
  23. data/spec/spritely/sass_functions_spec.rb +38 -37
  24. data/spec/spritely/sprite_map_spec.rb +16 -52
  25. data/spec/spritely/sprockets/preprocessor_spec.rb +33 -0
  26. data/spec/support/rails_app_helpers.rb +4 -5
  27. metadata +38 -49
  28. data/lib/generators/spritely/install_generator.rb +0 -17
  29. data/lib/spritely/adapters/sprockets_2.rb +0 -13
  30. data/lib/spritely/adapters/sprockets_3.rb +0 -11
  31. data/lib/spritely/cache.rb +0 -51
  32. data/lib/spritely/options.rb +0 -59
  33. data/lib/spritely/sprockets/manifest.rb +0 -20
  34. data/spec/generators/spritely/install_generator_spec.rb +0 -28
  35. data/spec/spritely/cache_spec.rb +0 -24
  36. data/spec/spritely/options_spec.rb +0 -29
  37. data/spec/spritely_spec.rb +0 -41
  38. data/spec/support/shared_examples.rb +0 -40
  39. data/spec/support/shared_examples/sprockets_2_sass_functions_helpers.rb +0 -13
  40. data/spec/support/shared_examples/sprockets_3_sass_functions_helpers.rb +0 -15
@@ -1,20 +0,0 @@
1
- require 'sprockets/manifest'
2
-
3
- module Spritely
4
- # In order to hook into Sprockets' asset compilation appropriately, we must
5
- # chain our own implementation of `compile`. Our extension calls up to the
6
- # original, and then performs the same action on the generated sprite images,
7
- # forcing the sprites to be part of the compiled asset manifest.
8
- module Sprockets
9
- module Manifest
10
- def compile(*args)
11
- super
12
- super(*Dir.glob(Spritely.directory.join('*.png')))
13
- end
14
- end
15
-
16
- # TODO: Once we drop support for Ruby 2.0, stop using `send`.
17
- # `Module#prepend` was made public in Ruby 2.1.
18
- ::Sprockets::Manifest.send(:prepend, Manifest)
19
- end
20
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
- require 'generators/spritely/install_generator'
3
-
4
- describe Spritely::Generators::InstallGenerator, :generator do
5
- destination File.expand_path("../../../../tmp", __FILE__)
6
-
7
- before do
8
- prepare_destination
9
- run_generator
10
- end
11
-
12
- subject { destination_root }
13
-
14
- it { is_expected.to have_structure {
15
- directory 'app' do
16
- directory 'assets' do
17
- directory 'images' do
18
- directory 'sprites' do
19
- file '.keep'
20
- end
21
- end
22
- end
23
- end
24
- file '.gitignore' do
25
- contains '/app/assets/images/sprites/*.png'
26
- end
27
- } }
28
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spritely::Cache do
4
- let(:filename) { File.join(__dir__, '..', 'fixtures', 'test', 'foo.png') }
5
-
6
- subject { Spritely::Cache.new(filename) }
7
-
8
- before { stub_const('Spritely::VERSION', 'foobar') }
9
-
10
- its(:filename) { should eq(filename) }
11
- its(:key) { should eq('527272411fe99a8b5e9da254ac0aae88') }
12
-
13
- describe '.generate' do
14
- it 'should collect the cache_key values and digest them' do
15
- expect(Spritely::Cache.generate(double(cache_key: 'asdf'), double(cache_key: 'hjkl'))).to eq('566ddc3d81de1f58fb37ecf29082d0f5')
16
- end
17
- end
18
-
19
- describe '.busted?' do
20
- it 'should check the expected value against the real value' do
21
- expect(Spritely::Cache).to be_busted(filename, 'asdf')
22
- end
23
- end
24
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spritely::Options do
4
- let(:hash) { {
5
- 'some_new_image_spacing' => Sass::Script::Number.new(789),
6
- 'some_new_image_x' => Sass::Script::Number.new(123),
7
- 'some_new_image_y' => Sass::Script::Number.new(456),
8
- 'some_new_image_position' => Sass::Script::String.new('right'),
9
- 'another_image_repeat' => Sass::Script::Bool.new(true),
10
- 'yet_another_image_repeat' => Sass::Script::Bool.new(false),
11
- 'spacing' => Sass::Script::Number.new(901),
12
- 'position' => Sass::Script::String.new('left')
13
- } }
14
-
15
- subject(:options) { Spritely::Options.new(hash) }
16
-
17
- its(:inspect) { should eq("#<Spritely::Options global_options=#{{spacing: 901, position: 'left'}} options=#{{'some_new_image' => {spacing: 789, position: 'right', x: 123, y: 456}, 'another_image' => {spacing: 901, position: 'left', repeat: true}, 'yet_another_image' => {spacing: 901, position: 'left', repeat: false}}}>") }
18
- its(:cache_key) { should eq({"some_new_image_spacing" => 789, "some_new_image_x" => 123, "some_new_image_y" => 456, "some_new_image_position" => 'right', "another_image_repeat" => true, "yet_another_image_repeat" => false, "spacing" => 901, "position" => 'left'}.to_s) }
19
-
20
- its(['some-new-image']) { should eq({spacing: 789, position: 'right', x: 123, y: 456}) }
21
- its(['another-image']) { should eq({spacing: 901, repeat: true, position: 'left'}) }
22
- its(['yet-another-image']) { should eq({spacing: 901, repeat: false, position: 'left'}) }
23
-
24
- describe '#[]' do
25
- it 'should fall back to an empty hash' do
26
- expect(options['unknown']).to eq({spacing: 901, position: 'left'})
27
- end
28
- end
29
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spritely do
4
- describe '.environment' do
5
- let(:application) { double(assets: 'assets environment') }
6
-
7
- before { stub_const('::Rails', double(application: application)) }
8
-
9
- its(:environment) { should eq('assets environment') }
10
-
11
- context 'sprockets-rails version 3' do
12
- before { stub_const('Sprockets::Rails::VERSION', '3.0.0') }
13
-
14
- its(:environment) { should eq('assets environment') }
15
-
16
- context 'the Rails application assets environment is nil' do
17
- let(:application) { double(assets: nil) }
18
-
19
- before { allow(::Sprockets::Railtie).to receive(:build_environment).with(application).and_return('new assets environment') }
20
-
21
- its(:environment) { should eq('new assets environment') }
22
- end
23
- end
24
- end
25
-
26
- describe '.directory' do
27
- before { stub_const('::Rails', double(root: Pathname.new('foo/bar'))) }
28
-
29
- its(:directory) { should eq(Pathname.new('foo/bar/app/assets/images/sprites')) }
30
- end
31
-
32
- describe '.relative_folder_path' do
33
- its(:relative_folder_path) { should eq(Pathname.new('app/assets/images/sprites')) }
34
- end
35
-
36
- describe '.sprockets_version' do
37
- before { stub_const('Sprockets::VERSION', '1.0') }
38
-
39
- its(:sprockets_version) { should eq(1) }
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- shared_examples "a generator" do
2
- let(:images) { [OpenStruct.new(data: 'first image data', left: 1, top: 10), OpenStruct.new(data: 'second image data', left: 2, top: 20)] }
3
- let(:sprite_map) { double(images: images, width: 100, height: 200, filename: 'blah.png', cache_key: 'cachevalue') }
4
-
5
- its(:sprite_map) { should eq(sprite_map) }
6
-
7
- describe '.create!' do
8
- let(:generator) { double }
9
-
10
- before { allow(described_class).to receive(:new).with(sprite_map).and_return(generator) }
11
-
12
- it 'should work some magic' do
13
- expect(generator).to receive(:build!)
14
- expect(generator).to receive(:ensure_directory_exists!)
15
- expect(generator).to receive(:save!)
16
- described_class.create!(sprite_map)
17
- end
18
- end
19
-
20
- describe '#ensure_directory_exists!' do
21
- let(:directory_exists) { true }
22
-
23
- before do
24
- allow(Spritely).to receive(:directory).and_return('blah')
25
- allow(File).to receive(:exist?).with('blah').and_return(directory_exists)
26
- end
27
-
28
- it 'should not raise an exception' do
29
- expect { subject.ensure_directory_exists! }.to_not raise_error
30
- end
31
-
32
- context 'the sprites folder does not exist' do
33
- let(:directory_exists) { false }
34
-
35
- it 'should raise an exception' do
36
- expect { subject.ensure_directory_exists! }.to raise_error("'app/assets/images/sprites' doesn't exist. Run `rails generate spritely:install`.")
37
- end
38
- end
39
- end
40
- end
@@ -1,13 +0,0 @@
1
- module Sprockets2SassFunctionsHelpers
2
- def evaluate(value)
3
- Sprockets::ScssTemplate.new { value }.evaluate(sprockets_environment.context_class.new(sprockets_environment, nil, nil), nil)
4
- end
5
-
6
- def sprockets_environment
7
- @sprockets_environment ||= Sprockets::Environment.new.tap do |sprockets_environment|
8
- sprockets_environment.context_class.class_eval do
9
- def asset_path(path, options = {}); path; end
10
- end
11
- end
12
- end
13
- end
@@ -1,15 +0,0 @@
1
- module Sprockets3SassFunctionsHelpers
2
- def evaluate(value)
3
- Sprockets::ScssProcessor.call(environment: sprockets_environment, data: value, filename: "test.scss", metadata: {}, cache: Sprockets::Cache.new)[:data]
4
- end
5
-
6
- def sprockets_environment
7
- @sprockets_environment ||= Sprockets::CachedEnvironment.new(Sprockets::Environment.new).tap do |sprockets_environment|
8
- sprockets_environment.context_class.class_eval do
9
- def depend_on(path); end
10
- def depend_on_asset(path); end
11
- def asset_path(path, options = {}); path; end
12
- end
13
- end
14
- end
15
- end