sassc-inline-svg 0.0.1 → 0.0.2

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
  SHA256:
3
- metadata.gz: bfe1125b1aeeb7871aac174f657357fcc5f7e446156d03cb9449f59bd8961dea
4
- data.tar.gz: a000f33cd15b2c92ccde94018233ec2e3c108939b6adb9f26d79f83e12edf336
3
+ metadata.gz: 45fab522fafd72280e5c32a70f46201cf31cb3936c931b73e53609e6b81f68ab
4
+ data.tar.gz: ec172364ac155f64c36c922859493e7228790fb3bf12b6db55fc6954cdc497b3
5
5
  SHA512:
6
- metadata.gz: 8acff27ee03b575862006c77173f50f8348121e419da224855e747828c54c91ace3df19ee4d1891c747b18ce3da0898d5ace0b580424b599a2ec336378702a2b
7
- data.tar.gz: 3fd6893203dfec9ce69066f312c2ff8d6501634601e57b7bbc524f8923a70954206ae6debed1202d1780842d14a45a0795a303b3aaca6301131bd8b9f2fa96b9
6
+ metadata.gz: 48d62ecf4fa8c9e1ae0602b408954a5727971379863b5a3ed56a46a03c25a24d33088214d5020aca707c98b257907dbcd2859c98d2b2c988a92d54d3a81aa01a
7
+ data.tar.gz: bd9631d10eac751d06bc82c46d7a529a75d1f58285b580824bf06fb6ce009c12465d58f2e8875d6ac21b29d2676dac1288b70a2076d69d3b71fe56378dd95e1d
@@ -0,0 +1,5 @@
1
+ /coverage/
2
+ Gemfile.lock
3
+
4
+ # IDE
5
+ .idea
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/README.md CHANGED
@@ -1,12 +1,26 @@
1
- ## Adds `inline_svg` as a Sass function.
1
+ # sassс-inline-svg
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/sassc-inline-svg.svg)](https://badge.fury.io/rb/sassc-inline-svg)
4
+
5
+ Inline url-encoded SVG with Sassc. Optional variable string replacement included!
6
+
7
+ Inspired by https://github.com/franzheidl/sass-inline-svg
8
+
9
+ ## Installation
10
+
11
+ gem install sassc-inline-svg
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'sassc-inline-svg'
16
+
2
17
  ## Usage
3
- ```sass
18
+
19
+ Sassc-inline-svg adds a `inline_svg` function you can use with Sass. It url-encodes the contents of the specified file and inlines it in your CSS (Url-encoded SVG is about 30% smaller than base64).
20
+
21
+
22
+ ```css
4
23
  .block {
5
24
  background: #0e4573 inline_svg('example.svg', (fillcolor: '#23b3e8')) no-repeat;
6
25
  }
7
26
  ```
8
- ## Installing gem
9
- Add to your Gemfile:
10
- ```ruby
11
- gem 'sassc-inline-svg'
12
- ```
@@ -7,22 +7,17 @@ require 'cgi'
7
7
  module SassC::InlineSVG
8
8
  module Functions
9
9
  def inline_svg(path, options = nil)
10
- sprockets_context.depend_on_asset(path.value)
11
10
  svg = read_file(path.value.strip)
12
- options.value.each_pair { |k, v| svg.gsub!(k.value, v.value) if svg.include?(k.value) } unless options.nil?
13
- SassC::Script::Value::String.new(encoded_url(svg))
11
+ svg = replace_options(svg, options)
12
+ SassC::Script::Value::String.new(encode_url(svg))
14
13
  end
15
14
 
16
15
  private
17
16
 
18
- def encoded_url(svg)
19
- encoded = CGI::escape(svg).gsub("+", "%20")
20
- "url('data:image/svg+xml;charset=utf-8," + encoded + "')"
21
- end
22
-
23
17
  def read_file(path)
24
- if defined?(Rails)
25
- asset = (Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application)).find_asset(path).to_s
18
+ if defined?(Rails) && Rails.application
19
+ source = Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application)
20
+ asset = source.find_asset(path)
26
21
  raise "File not found or cannot be read (Sprockets): #{path}" if asset.nil?
27
22
 
28
23
  return asset.to_s
@@ -31,6 +26,20 @@ module SassC::InlineSVG
31
26
 
32
27
  File.open(path, 'rb') { |f| f.read }.strip
33
28
  end
29
+
30
+ def replace_options(svg, options)
31
+ return svg if options.nil?
32
+
33
+ options.value.each_pair do |k, v|
34
+ svg.gsub!(k.value, v.value) if svg.include?(k.value)
35
+ end
36
+ svg
37
+ end
38
+
39
+ def encode_url(svg)
40
+ encoded = CGI::escape(svg).gsub("+", "%20")
41
+ "url('data:image/svg+xml;charset=utf-8," + encoded + "')"
42
+ end
34
43
  end
35
44
  end
36
45
 
@@ -3,6 +3,6 @@
3
3
 
4
4
  module SassC
5
5
  module InlineSVG
6
- VERSION = '0.0.1'
6
+ VERSION = '0.0.2'
7
7
  end
8
8
  end
@@ -18,4 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.require_paths = ['lib']
19
19
 
20
20
  s.add_dependency 'sassc-rails', '~> 2.0'
21
+
22
+ s.add_development_dependency 'rspec', "~> 3.0"
23
+ s.add_development_dependency 'simplecov', '~> 0.19'
21
24
  end
@@ -0,0 +1,79 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ RSpec.describe 'Functions' do
5
+ let(:dummy_class) { Class.new { extend SassC::InlineSVG::Functions } }
6
+ let(:options) { nil }
7
+ let(:path) { OpenStruct.new(value: file_path) }
8
+
9
+ subject { dummy_class.inline_svg(path, options) }
10
+
11
+ context 'when is this app without rails' do
12
+ context 'when the file is found' do
13
+ let(:file_path) { 'spec/support/files/example.svg' }
14
+
15
+ context 'without options' do
16
+ it 'returns encoded url' do
17
+ expect(subject.value).to eq(File.read('spec/support/files/encoded_svg.txt'))
18
+ end
19
+ end
20
+
21
+ context 'with options' do
22
+ let(:options) { OpenStruct.new(value: { OpenStruct.new(value: 'fillcolor') => OpenStruct.new(value: '#0e4573')}) }
23
+
24
+ it 'returns encoded url' do
25
+ expect(subject.value).to eq(File.read('spec/support/files/encoded_svg_with_options.txt'))
26
+ end
27
+ end
28
+ end
29
+
30
+ context 'when the file is not found' do
31
+ let(:file_path) { 'example.svg' }
32
+
33
+ context 'when is this app without rails' do
34
+ it 'returns encoded url' do
35
+ expect { subject.value }.to raise_error('File not found or cannot be read (native): example.svg')
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ context 'when is this a rails app' do
42
+ before do
43
+ stub_const 'Rails', OpenStruct.new(application: OpenStruct.new(assets: Class.new))
44
+ allow(Rails.application.assets).to receive(:find_asset) { File.read(file_path) }
45
+ end
46
+
47
+ context 'when the file is found' do
48
+ let(:file_path) { 'spec/support/files/example.svg' }
49
+
50
+ context 'without options' do
51
+ it 'returns encoded url' do
52
+ expect(subject.value).to eq(File.read('spec/support/files/encoded_svg.txt'))
53
+ end
54
+ end
55
+
56
+ context 'with options' do
57
+ let(:options) { OpenStruct.new(value: { OpenStruct.new(value: 'fillcolor') => OpenStruct.new(value: '#0e4573')}) }
58
+
59
+ it 'returns encoded url' do
60
+ expect(subject.value).to eq(File.read('spec/support/files/encoded_svg_with_options.txt'))
61
+ end
62
+ end
63
+ end
64
+
65
+ context 'when the file is not found' do
66
+ let(:file_path) { 'example.svg' }
67
+
68
+ before do
69
+ allow(Rails.application.assets).to receive(:find_asset) { nil }
70
+ end
71
+
72
+ context 'when is this app without rails' do
73
+ it 'returns encoded url' do
74
+ expect { subject.value }.to raise_error('File not found or cannot be read (Sprockets): example.svg')
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ RSpec.describe SassC::InlineSVG do
5
+ it 'has a version number' do
6
+ expect(SassC::InlineSVG::VERSION).not_to be nil
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'sassc-inline-svg'
6
+
7
+ require 'simplecov'
8
+ SimpleCov.start
9
+
10
+ RSpec.configure do |config|
11
+ # Disable RSpec exposing methods globally on `Module` and `main`
12
+ config.disable_monkey_patching!
13
+
14
+ config.filter_run focus: true
15
+ config.run_all_when_everything_filtered = true
16
+
17
+ config.expect_with :rspec do |c|
18
+ c.syntax = :expect
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%2235%2025%2030%2050%22%20version%3D%221.1%22%3E%0A%20%20%3Cg%20fill%3D%22fillcolor%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M67.5251263%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C68.8919613%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2071.1080387%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2072.4748737%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C73.8417088%2C61.1080387%0A%20%20%20%20%20%20%20%20%20%20%20%20%2073.8417088%2C58.8919613%0A%20%20%20%20%20%20%20%20%20%20%20%20%2072.4748737%2C57.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L52.4748737%2C37.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C51.1080387%2C36.1582912%0A%20%20%20%20%20%20%20%20%20%20%20%20%2048.8919613%2C36.1582912%0A%20%20%20%20%20%20%20%20%20%20%20%20%2047.5251263%2C37.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L27.5251263%2C57.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C26.1582912%2C58.8919613%0A%20%20%20%20%20%20%20%20%20%20%20%20%2026.1582912%2C61.1080387%0A%20%20%20%20%20%20%20%20%20%20%20%20%2027.5251263%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C28.8919613%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2031.1080387%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2032.4748737%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L50.0095722%2C44.9401752%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L67.5251263%2C62.4748737%20Z%22%0A%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%2850.000000%2C%2050.000000%29%20rotate%28-90.000000%29%20translate%28-50.000000%2C%20-50.000000%29%20%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E')
@@ -0,0 +1 @@
1
+ url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%2235%2025%2030%2050%22%20version%3D%221.1%22%3E%0A%20%20%3Cg%20fill%3D%22%230e4573%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M67.5251263%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C68.8919613%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2071.1080387%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2072.4748737%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C73.8417088%2C61.1080387%0A%20%20%20%20%20%20%20%20%20%20%20%20%2073.8417088%2C58.8919613%0A%20%20%20%20%20%20%20%20%20%20%20%20%2072.4748737%2C57.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L52.4748737%2C37.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C51.1080387%2C36.1582912%0A%20%20%20%20%20%20%20%20%20%20%20%20%2048.8919613%2C36.1582912%0A%20%20%20%20%20%20%20%20%20%20%20%20%2047.5251263%2C37.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L27.5251263%2C57.5251263%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C26.1582912%2C58.8919613%0A%20%20%20%20%20%20%20%20%20%20%20%20%2026.1582912%2C61.1080387%0A%20%20%20%20%20%20%20%20%20%20%20%20%2027.5251263%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20C28.8919613%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2031.1080387%2C63.8417088%0A%20%20%20%20%20%20%20%20%20%20%20%20%2032.4748737%2C62.4748737%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L50.0095722%2C44.9401752%0A%20%20%20%20%20%20%20%20%20%20%20%20%20L67.5251263%2C62.4748737%20Z%22%0A%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%2850.000000%2C%2050.000000%29%20rotate%28-90.000000%29%20translate%28-50.000000%2C%20-50.000000%29%20%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E')
@@ -0,0 +1,25 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="35 25 30 50" version="1.1">
2
+ <g fill="fillcolor">
3
+ <path d="M67.5251263,62.4748737
4
+ C68.8919613,63.8417088
5
+ 71.1080387,63.8417088
6
+ 72.4748737,62.4748737
7
+ C73.8417088,61.1080387
8
+ 73.8417088,58.8919613
9
+ 72.4748737,57.5251263
10
+ L52.4748737,37.5251263
11
+ C51.1080387,36.1582912
12
+ 48.8919613,36.1582912
13
+ 47.5251263,37.5251263
14
+ L27.5251263,57.5251263
15
+ C26.1582912,58.8919613
16
+ 26.1582912,61.1080387
17
+ 27.5251263,62.4748737
18
+ C28.8919613,63.8417088
19
+ 31.1080387,63.8417088
20
+ 32.4748737,62.4748737
21
+ L50.0095722,44.9401752
22
+ L67.5251263,62.4748737 Z"
23
+ transform="translate(50.000000, 50.000000) rotate(-90.000000) translate(-50.000000, -50.000000) "/>
24
+ </g>
25
+ </svg>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sassc-inline-svg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Leonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-23 00:00:00.000000000 Z
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sassc-rails
@@ -24,17 +24,53 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.19'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.19'
27
55
  description: Adds inline_svg as a Sass function.
28
56
  email: ordm67@gmail.com
29
57
  executables: []
30
58
  extensions: []
31
59
  extra_rdoc_files: []
32
60
  files:
61
+ - ".gitignore"
62
+ - ".rspec"
33
63
  - Gemfile
34
64
  - README.md
35
65
  - lib/sassc-inline-svg.rb
36
66
  - lib/sassc-inline-svg/version.rb
37
67
  - sassc-inline-svg.gemspec
68
+ - spec/sassc-inline-svg/functions_spec.rb
69
+ - spec/sassc-inline-svg/version_spec.rb
70
+ - spec/spec_helper.rb
71
+ - spec/support/files/encoded_svg.txt
72
+ - spec/support/files/encoded_svg_with_options.txt
73
+ - spec/support/files/example.svg
38
74
  homepage: https://github.com/OrdinaryMagic/sassc-inline-svg
39
75
  licenses:
40
76
  - MIT