sassc-inline-svg 0.0.1 → 0.0.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.
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