inline_svg 1.8.0 → 1.10.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/.github/workflows/integration_test.yml +3 -3
- data/.github/workflows/rails_6_webpacker_integration_tests.yaml +8 -4
- data/.github/workflows/ruby.yml +3 -3
- data/CHANGELOG.md +21 -2
- data/README.md +3 -1
- data/lib/inline_svg/propshaft_asset_finder.rb +2 -1
- data/lib/inline_svg/static_asset_finder.rb +2 -1
- data/lib/inline_svg/transform_pipeline/transformations/view_box.rb +9 -0
- data/lib/inline_svg/transform_pipeline/transformations.rb +4 -2
- data/lib/inline_svg/transform_pipeline.rb +1 -1
- data/lib/inline_svg/version.rb +1 -1
- data/lib/inline_svg/webpack_asset_finder.rb +16 -6
- data/lib/inline_svg.rb +2 -0
- data/spec/helpers/inline_svg_spec.rb +28 -46
- data/spec/inline_svg_spec.rb +1 -1
- data/spec/propshaft_asset_finder_spec.rb +23 -0
- data/spec/static_asset_finder_spec.rb +25 -0
- data/spec/transformation_pipeline/transformations/view_box_spec.rb +13 -0
- data/spec/transformation_pipeline/transformations_spec.rb +2 -0
- data/spec/webpack_asset_finder_spec.rb +23 -0
- metadata +15 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66214539304b60e87e9263afb26531212492ca77957e9ce8cf89d015cef86239
|
4
|
+
data.tar.gz: 6ab9cb3d75a9f268728600edb48bf27b3503145c80f1addabe8bc484c88af545
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f8d4642dff97eb5bfc358fd1ce2257d5113a6f232c02f4ecd847007ee861b2537748539c689e5e2e67297951fdd158594740a754d49469cbd8c13c72002c290
|
7
|
+
data.tar.gz: 1b5cb2dfd5e7067d64ec0cc3449c2aeeead3a39cab42f8d51db33609a296478511fa9a24a965e32b10d7f01c98e5cb4b2ef8a6268fb055a7ad968068499eccd6
|
@@ -4,11 +4,11 @@ on: [push]
|
|
4
4
|
|
5
5
|
jobs:
|
6
6
|
build:
|
7
|
-
|
8
7
|
runs-on: ubuntu-latest
|
9
8
|
strategy:
|
10
9
|
matrix:
|
11
10
|
test-branch: [rails5, rails6, rails7]
|
11
|
+
timeout-minutes: 20
|
12
12
|
steps:
|
13
13
|
- name: Checkout
|
14
14
|
uses: actions/checkout@v2
|
@@ -19,9 +19,9 @@ jobs:
|
|
19
19
|
ref: ${{ matrix.test-branch }}
|
20
20
|
path: test_app
|
21
21
|
- name: Set up Ruby 2.7
|
22
|
-
uses:
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
23
|
with:
|
24
|
-
ruby-version: 2.7.
|
24
|
+
ruby-version: 2.7.7
|
25
25
|
- name: Build local gem
|
26
26
|
run: |
|
27
27
|
gem install bundler
|
@@ -18,10 +18,10 @@ jobs:
|
|
18
18
|
repository: jamesmartin/inline_svg_test_app
|
19
19
|
ref: ${{ matrix.test-branch }}
|
20
20
|
path: test_app
|
21
|
-
- name: Set up Ruby
|
22
|
-
uses:
|
21
|
+
- name: Set up Ruby 3.1
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
23
|
with:
|
24
|
-
ruby-version:
|
24
|
+
ruby-version: 3.1
|
25
25
|
- name: Build local gem
|
26
26
|
run: |
|
27
27
|
gem install bundler
|
@@ -46,10 +46,14 @@ jobs:
|
|
46
46
|
with:
|
47
47
|
node-version: 16
|
48
48
|
if: matrix.test-branch == 'rails6-webpacker'
|
49
|
+
- name: Set up Python 2.7
|
50
|
+
uses: actions/setup-python@v4
|
51
|
+
with:
|
52
|
+
python-version: '2.7'
|
49
53
|
- name: Generate Webpacker config
|
50
54
|
run: |
|
51
55
|
cd $GITHUB_WORKSPACE/test_app
|
52
|
-
yarn install --check-files
|
56
|
+
CXXFLAGS="--std=c++17" yarn install --check-files
|
53
57
|
bundle exec rake webpacker:compile
|
54
58
|
if: matrix.test-branch == 'rails6-webpacker'
|
55
59
|
- name: Test
|
data/.github/workflows/ruby.yml
CHANGED
@@ -9,10 +9,10 @@ jobs:
|
|
9
9
|
|
10
10
|
steps:
|
11
11
|
- uses: actions/checkout@v2
|
12
|
-
- name: Set up Ruby 2.
|
13
|
-
uses:
|
12
|
+
- name: Set up Ruby 2.7
|
13
|
+
uses: ruby/setup-ruby@v1
|
14
14
|
with:
|
15
|
-
ruby-version: 2.
|
15
|
+
ruby-version: 2.7.7
|
16
16
|
- name: Build and test with Rake
|
17
17
|
run: |
|
18
18
|
gem install bundler
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
7
7
|
Nothing.
|
8
8
|
|
9
|
+
## [1.10.0] - 2024-09-03
|
10
|
+
### Added
|
11
|
+
- Support for Shakapacker. [#158](https://github.com/jamesmartin/inline_svg/pull/158). Thanks, [@tagliala](https://github.com/tagliala)
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
- Fixed documentation typos. [#157](https://github.com/jamesmartin/inline_svg/pull/157). Thanks, [@tagliala](https://github.com/tagliala)
|
15
|
+
- Fixed missing ActiveSupport require. [#152](https://github.com/jamesmartin/inline_svg/pull/152). Thanks, [@xymbol](https://github.com/xymbol)
|
16
|
+
- Remove wrapping whitespace from SVG tags. [#150](https://github.com/jamesmartin/inline_svg/pull/150). Thanks, [@fredboyle](https://github.com/fredboyle)
|
17
|
+
|
18
|
+
## [1.9.0] - 2023-03-29
|
19
|
+
### Added
|
20
|
+
- A new option: `view_box` adds a `viewBox` attribute to the SVG. [#142](https://github.com/jamesmartin/inline_svg/pull/142). Thanks [@sunny](https://github.com/sunny)
|
21
|
+
|
22
|
+
### Fixed
|
23
|
+
- Allow Propshaft assets to use fallbacks. [#140](https://github.com/jamesmartin/inline_svg/pull/140). Thanks, [@ohrite](https://github.com/ohrite)
|
24
|
+
- Handling missing file when using static assets. [#141](https://github.com/jamesmartin/inline_svg/pull/141). Thanks, [@leighhalliday](https://github.com/leighhalliday)
|
25
|
+
- Handle missing file when using Webpacker assets.
|
26
|
+
|
9
27
|
## [1.8.0] - 2022-01-09
|
10
28
|
### Added
|
11
29
|
- Remove deprecation warning for `inline_svg`, as we intend to keep it in 2.0. [#131](https://github.com/jamesmartin/inline_svg/pull/131). Thanks [@DanielJackson-Oslo](https://github.com/DanielJackson-Oslo)
|
@@ -203,7 +221,7 @@ transformations](https://github.com/jamesmartin/inline_svg/blob/master/README.md
|
|
203
221
|
|
204
222
|
## [0.5.1] - 2015-03-30
|
205
223
|
### Warning
|
206
|
-
** This version is NOT
|
224
|
+
** This version is NOT compatible with Sprockets >= 3. **
|
207
225
|
|
208
226
|
### Fixed
|
209
227
|
- Support for ActiveSupport (and hence, Rails) 4.2.x. Thanks, @jmarceli.
|
@@ -244,7 +262,8 @@ transformations](https://github.com/jamesmartin/inline_svg/blob/master/README.md
|
|
244
262
|
### Added
|
245
263
|
- Basic Railtie and view helper to inline SVG documents to Rails views.
|
246
264
|
|
247
|
-
[unreleased]: https://github.com/jamesmartin/inline_svg/compare/v1.
|
265
|
+
[unreleased]: https://github.com/jamesmartin/inline_svg/compare/v1.9.0...HEAD
|
266
|
+
[1.9.0]: https://github.com/jamesmartin/inline_svg/compare/v1.8.0...v1.9.0
|
248
267
|
[1.8.0]: https://github.com/jamesmartin/inline_svg/compare/v1.7.2...v1.8.0
|
249
268
|
[1.7.2]: https://github.com/jamesmartin/inline_svg/compare/v1.7.1...v1.7.2
|
250
269
|
[1.7.1]: https://github.com/jamesmartin/inline_svg/compare/v1.7.0...v1.7.1
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Inline SVG supports:
|
|
14
14
|
|
15
15
|
- [Rails 5](http://weblog.rubyonrails.org/2016/6/30/Rails-5-0-final/) (from [v0.10.0](https://github.com/jamesmartin/inline_svg/releases/tag/v0.10.0))
|
16
16
|
- [Rails 6](https://weblog.rubyonrails.org/2019/4/24/Rails-6-0-rc1-released/) with Sprockets or Webpacker (from [v1.5.2](https://github.com/jamesmartin/inline_svg/releases/tag/v1.5.2)).
|
17
|
-
- [Rails 7](https://weblog.rubyonrails.org/2021/12/6/Rails-7-0-rc-1-released/)
|
17
|
+
- [Rails 7](https://weblog.rubyonrails.org/2021/12/6/Rails-7-0-rc-1-released/)
|
18
18
|
|
19
19
|
Inline SVG no longer officially supports Rails 3 or Rails 4 (although they may still work). In order to reduce the maintenance cost of this project we now follow the [Rails Maintenance Policy](https://guides.rubyonrails.org/maintenance_policy.html).
|
20
20
|
|
@@ -97,6 +97,7 @@ key | description
|
|
97
97
|
`desc` | add a \<desc\> node inside the top level of the SVG document
|
98
98
|
`nocomment` | remove comment tags from the SVG document
|
99
99
|
`preserve_aspect_ratio` | adds a `preserveAspectRatio` attribute to the SVG
|
100
|
+
`view_box` | adds a `viewBox` attribute to the SVG
|
100
101
|
`aria` | adds common accessibility attributes to the SVG (see [PR #34](https://github.com/jamesmartin/inline_svg/pull/34#issue-152062674) for details)
|
101
102
|
`aria_hidden` | adds the `aria-hidden=true` attribute to the SVG
|
102
103
|
`fallback` | set fallback SVG document
|
@@ -114,6 +115,7 @@ inline_svg_tag(
|
|
114
115
|
desc: 'Some description',
|
115
116
|
nocomment: true,
|
116
117
|
preserve_aspect_ratio: 'xMaxYMax meet',
|
118
|
+
view_box: '0 0 100 100',
|
117
119
|
aria: true,
|
118
120
|
aria_hidden: true,
|
119
121
|
fallback: 'fallback-document.svg'
|
@@ -16,7 +16,8 @@ module InlineSvg
|
|
16
16
|
|
17
17
|
def pathname
|
18
18
|
if ::Rails.application.config.assets.compile
|
19
|
-
|
19
|
+
asset = ::Rails.application.assets[@filename]
|
20
|
+
Pathname.new(asset.filename) if asset.present?
|
20
21
|
else
|
21
22
|
manifest = ::Rails.application.assets_manifest
|
22
23
|
asset_path = manifest.assets[@filename]
|
@@ -10,11 +10,12 @@ module InlineSvg::TransformPipeline::Transformations
|
|
10
10
|
class: { transform: ClassAttribute },
|
11
11
|
style: { transform: StyleAttribute },
|
12
12
|
data: { transform: DataAttributes },
|
13
|
-
height: { transform: Height },
|
14
13
|
nocomment: { transform: NoComment },
|
15
14
|
preserve_aspect_ratio: { transform: PreserveAspectRatio },
|
16
15
|
size: { transform: Size },
|
17
16
|
width: { transform: Width },
|
17
|
+
height: { transform: Height },
|
18
|
+
view_box: { transform: ViewBox },
|
18
19
|
}
|
19
20
|
end
|
20
21
|
|
@@ -83,8 +84,9 @@ require 'inline_svg/transform_pipeline/transformations/description'
|
|
83
84
|
require 'inline_svg/transform_pipeline/transformations/size'
|
84
85
|
require 'inline_svg/transform_pipeline/transformations/height'
|
85
86
|
require 'inline_svg/transform_pipeline/transformations/width'
|
87
|
+
require 'inline_svg/transform_pipeline/transformations/view_box'
|
86
88
|
require 'inline_svg/transform_pipeline/transformations/id_attribute'
|
87
89
|
require 'inline_svg/transform_pipeline/transformations/data_attributes'
|
88
90
|
require 'inline_svg/transform_pipeline/transformations/preserve_aspect_ratio'
|
89
91
|
require 'inline_svg/transform_pipeline/transformations/aria_attributes'
|
90
|
-
require "inline_svg/transform_pipeline/transformations/aria_hidden_attribute"
|
92
|
+
require "inline_svg/transform_pipeline/transformations/aria_hidden_attribute"
|
data/lib/inline_svg/version.rb
CHANGED
@@ -6,21 +6,31 @@ module InlineSvg
|
|
6
6
|
|
7
7
|
def initialize(filename)
|
8
8
|
@filename = filename
|
9
|
-
|
9
|
+
manifest_lookup = asset_helper.manifest.lookup(@filename)
|
10
|
+
@asset_path = manifest_lookup.present? ? URI(manifest_lookup).path : ""
|
10
11
|
end
|
11
12
|
|
12
13
|
def pathname
|
13
14
|
return if @asset_path.blank?
|
14
15
|
|
15
|
-
if
|
16
|
+
if asset_helper.dev_server.running?
|
16
17
|
dev_server_asset(@asset_path)
|
17
|
-
elsif
|
18
|
-
File.join(
|
18
|
+
elsif asset_helper.config.public_path.present?
|
19
|
+
File.join(asset_helper.config.public_path, @asset_path)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
22
23
|
private
|
23
24
|
|
25
|
+
def asset_helper
|
26
|
+
@asset_helper ||=
|
27
|
+
if defined?(::Shakapacker)
|
28
|
+
::Shakapacker
|
29
|
+
else
|
30
|
+
::Webpacker
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
24
34
|
def dev_server_asset(file_path)
|
25
35
|
asset = fetch_from_dev_server(file_path)
|
26
36
|
|
@@ -37,8 +47,8 @@ module InlineSvg
|
|
37
47
|
end
|
38
48
|
|
39
49
|
def fetch_from_dev_server(file_path)
|
40
|
-
http = Net::HTTP.new(
|
41
|
-
http.use_ssl =
|
50
|
+
http = Net::HTTP.new(asset_helper.dev_server.host, asset_helper.dev_server.port)
|
51
|
+
http.use_ssl = asset_helper.dev_server.protocol == "https"
|
42
52
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
43
53
|
|
44
54
|
http.request(Net::HTTP::Get.new(file_path)).body
|
data/lib/inline_svg.rb
CHANGED
@@ -10,6 +10,8 @@ require "inline_svg/transform_pipeline"
|
|
10
10
|
require "inline_svg/io_resource"
|
11
11
|
|
12
12
|
require "inline_svg/railtie" if defined?(Rails)
|
13
|
+
require 'active_support'
|
14
|
+
require 'active_support/core_ext/object/blank'
|
13
15
|
require 'active_support/core_ext/string'
|
14
16
|
require 'nokogiri'
|
15
17
|
|
@@ -86,9 +86,7 @@ describe InlineSvg::ActionView::Helpers do
|
|
86
86
|
with('missing.svg').
|
87
87
|
and_raise(InlineSvg::AssetFile::FileNotFound.new)
|
88
88
|
|
89
|
-
fallback_file =
|
90
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>
|
91
|
-
SVG
|
89
|
+
fallback_file = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>'
|
92
90
|
allow(InlineSvg::AssetFile).to receive(:named).with('fallback.svg').and_return(fallback_file)
|
93
91
|
expect(helper.send(helper_method, 'missing.svg', fallback: 'fallback.svg')).to eq fallback_file
|
94
92
|
end
|
@@ -99,9 +97,7 @@ SVG
|
|
99
97
|
|
100
98
|
context "and no options" do
|
101
99
|
it "returns a html safe version of the file's contents" do
|
102
|
-
example_file =
|
103
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>
|
104
|
-
SVG
|
100
|
+
example_file = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>'
|
105
101
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(example_file)
|
106
102
|
expect(helper.send(helper_method, 'some-file')).to eq example_file
|
107
103
|
end
|
@@ -109,12 +105,8 @@ SVG
|
|
109
105
|
|
110
106
|
context "and the 'title' option" do
|
111
107
|
it "adds the title node to the SVG output" do
|
112
|
-
input_svg =
|
113
|
-
<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"></svg>
|
114
|
-
SVG
|
115
|
-
expected_output = <<-SVG
|
116
|
-
<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"><title>A title</title></svg>
|
117
|
-
SVG
|
108
|
+
input_svg = '<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"></svg>'
|
109
|
+
expected_output = '<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"><title>A title</title></svg>'
|
118
110
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
119
111
|
expect(helper.send(helper_method, 'some-file', title: 'A title')).to eq expected_output
|
120
112
|
end
|
@@ -122,12 +114,8 @@ SVG
|
|
122
114
|
|
123
115
|
context "and the 'desc' option" do
|
124
116
|
it "adds the description node to the SVG output" do
|
125
|
-
input_svg =
|
126
|
-
<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"></svg>
|
127
|
-
SVG
|
128
|
-
expected_output = <<-SVG
|
129
|
-
<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"><desc>A description</desc></svg>
|
130
|
-
SVG
|
117
|
+
input_svg = '<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"></svg>'
|
118
|
+
expected_output = '<svg xmlns="http://www.w3.org/2000/svg" role="presentation" xml:lang="en"><desc>A description</desc></svg>'
|
131
119
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
132
120
|
expect(helper.send(helper_method, 'some-file', desc: 'A description')).to eq expected_output
|
133
121
|
end
|
@@ -135,12 +123,8 @@ SVG
|
|
135
123
|
|
136
124
|
context "and the 'nocomment' option" do
|
137
125
|
it "strips comments and other unknown/unsafe nodes from the output" do
|
138
|
-
input_svg =
|
139
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"
|
140
|
-
SVG
|
141
|
-
expected_output = <<-SVG
|
142
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"></svg>
|
143
|
-
SVG
|
126
|
+
input_svg = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>'
|
127
|
+
expected_output = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"></svg>'
|
144
128
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
145
129
|
expect(helper.send(helper_method, 'some-file', nocomment: true)).to eq expected_output
|
146
130
|
end
|
@@ -148,12 +132,8 @@ SVG
|
|
148
132
|
|
149
133
|
context "and the 'aria_hidden' option" do
|
150
134
|
it "sets 'aria-hidden=true' in the output" do
|
151
|
-
input_svg =
|
152
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"></svg>
|
153
|
-
SVG
|
154
|
-
expected_output = <<-SVG
|
155
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en" aria-hidden="true"></svg>
|
156
|
-
SVG
|
135
|
+
input_svg = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"></svg>'
|
136
|
+
expected_output = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en" aria-hidden="true"></svg>'
|
157
137
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
158
138
|
expect(helper.send(helper_method, 'some-file', aria_hidden: true)).to eq expected_output
|
159
139
|
end
|
@@ -161,12 +141,8 @@ SVG
|
|
161
141
|
|
162
142
|
context "and all options" do
|
163
143
|
it "applies all expected transformations to the output" do
|
164
|
-
input_svg =
|
165
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"
|
166
|
-
SVG
|
167
|
-
expected_output = <<-SVG
|
168
|
-
<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><title>A title</title><desc>A description</desc></svg>
|
169
|
-
SVG
|
144
|
+
input_svg = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><!-- This is a comment --></svg>'
|
145
|
+
expected_output = '<svg xmlns="http://www.w3.org/2000/svg" xml:lang="en"><title>A title</title><desc>A description</desc></svg>'
|
170
146
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
171
147
|
expect(helper.send(helper_method, 'some-file', title: 'A title', desc: 'A description', nocomment: true)).to eq expected_output
|
172
148
|
end
|
@@ -184,12 +160,8 @@ SVG
|
|
184
160
|
end
|
185
161
|
|
186
162
|
it "applies custm transformations to the output" do
|
187
|
-
input_svg =
|
188
|
-
<svg></svg>
|
189
|
-
SVG
|
190
|
-
expected_output = <<-SVG
|
191
|
-
<svg custom="some value"></svg>
|
192
|
-
SVG
|
163
|
+
input_svg = '<svg></svg>'
|
164
|
+
expected_output = '<svg custom="some value"></svg>'
|
193
165
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
194
166
|
expect(helper.send(helper_method, 'some-file', custom: 'some value')).to eq expected_output
|
195
167
|
end
|
@@ -212,7 +184,7 @@ SVG
|
|
212
184
|
|
213
185
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
214
186
|
|
215
|
-
expect(helper.send(helper_method, 'some-file')).to eq "<svg custom=\"default value\"></svg
|
187
|
+
expect(helper.send(helper_method, 'some-file')).to eq "<svg custom=\"default value\"></svg>"
|
216
188
|
end
|
217
189
|
end
|
218
190
|
|
@@ -222,7 +194,7 @@ SVG
|
|
222
194
|
|
223
195
|
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
224
196
|
|
225
|
-
expect(helper.send(helper_method, 'some-file', custom: 'some value')).to eq "<svg custom=\"some value\"></svg
|
197
|
+
expect(helper.send(helper_method, 'some-file', custom: 'some value')).to eq "<svg custom=\"some value\"></svg>"
|
226
198
|
end
|
227
199
|
end
|
228
200
|
end
|
@@ -251,17 +223,27 @@ SVG
|
|
251
223
|
expect(InlineSvg::IOResource).to receive(:===).with(io_object).and_return(true)
|
252
224
|
expect(InlineSvg::IOResource).to receive(:read).with(io_object).and_return("<svg><!-- Test IO --></svg>")
|
253
225
|
output = helper.send(helper_method, io_object)
|
254
|
-
expect(output).to eq "<svg><!-- Test IO --></svg
|
226
|
+
expect(output).to eq "<svg><!-- Test IO --></svg>"
|
255
227
|
expect(output).to be_html_safe
|
256
228
|
end
|
257
229
|
|
258
230
|
it 'return valid svg for file' do
|
259
231
|
output = helper.send(helper_method, File.new(file_path))
|
260
|
-
expect(output).to eq "<svg xmlns=\"http://www.w3.org/2000/svg\" xml:lang=\"en\" role=\"presentation\"><!-- This is a test comment --></svg
|
232
|
+
expect(output).to eq "<svg xmlns=\"http://www.w3.org/2000/svg\" xml:lang=\"en\" role=\"presentation\"><!-- This is a test comment --></svg>"
|
261
233
|
expect(output).to be_html_safe
|
262
234
|
end
|
263
235
|
|
264
236
|
end
|
237
|
+
|
238
|
+
context 'default output' do
|
239
|
+
it "returns an SVG tag without any pre or post whitespace characters" do
|
240
|
+
input_svg = '<svg></svg>'
|
241
|
+
|
242
|
+
allow(InlineSvg::AssetFile).to receive(:named).with('some-file').and_return(input_svg)
|
243
|
+
|
244
|
+
expect(helper.send(helper_method, 'some-file')).to eq "<svg></svg>"
|
245
|
+
end
|
246
|
+
end
|
265
247
|
end
|
266
248
|
|
267
249
|
describe '#inline_svg' do
|
data/spec/inline_svg_spec.rb
CHANGED
@@ -47,7 +47,7 @@ describe InlineSvg do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
context "configuring a custom asset file" do
|
50
|
-
it "falls back to the built-in asset file implementation by
|
50
|
+
it "falls back to the built-in asset file implementation by default" do
|
51
51
|
expect(InlineSvg.configuration.asset_file).to eq(InlineSvg::AssetFile)
|
52
52
|
end
|
53
53
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../lib/inline_svg'
|
2
|
+
|
3
|
+
describe InlineSvg::PropshaftAssetFinder do
|
4
|
+
context "when the file is not found" do
|
5
|
+
it "returns nil" do
|
6
|
+
stub_const('Rails', double('Rails').as_null_object)
|
7
|
+
expect(::Rails.application.assets.load_path).to receive(:find).with('some-file').and_return(nil)
|
8
|
+
|
9
|
+
expect(InlineSvg::PropshaftAssetFinder.find_asset('some-file').pathname).to be_nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when the file is found" do
|
14
|
+
it "returns fully qualified file paths from Propshaft" do
|
15
|
+
stub_const('Rails', double('Rails').as_null_object)
|
16
|
+
asset = double('Asset')
|
17
|
+
expect(asset).to receive(:path).and_return(Pathname.new('/full/path/to/some-file'))
|
18
|
+
expect(::Rails.application.assets.load_path).to receive(:find).with('some-file').and_return(asset)
|
19
|
+
|
20
|
+
expect(InlineSvg::PropshaftAssetFinder.find_asset('some-file').pathname).to eq Pathname('/full/path/to/some-file')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../lib/inline_svg'
|
2
|
+
|
3
|
+
describe InlineSvg::StaticAssetFinder do
|
4
|
+
context "when the file is not found" do
|
5
|
+
it "returns nil" do
|
6
|
+
stub_const('Rails', double('Rails').as_null_object)
|
7
|
+
expect(::Rails.application.config.assets).to receive(:compile).and_return(true)
|
8
|
+
|
9
|
+
expect(described_class.find_asset('some-file').pathname).to be_nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when the file is found" do
|
14
|
+
it "returns fully qualified file path from Sprockets" do
|
15
|
+
stub_const('Rails', double('Rails').as_null_object)
|
16
|
+
expect(::Rails.application.config.assets).to receive(:compile).and_return(true)
|
17
|
+
pathname = Pathname.new('/full/path/to/some-file')
|
18
|
+
asset = double('Asset')
|
19
|
+
expect(asset).to receive(:filename).and_return(pathname)
|
20
|
+
expect(::Rails.application.assets).to receive(:[]).with('some-file').and_return(asset)
|
21
|
+
|
22
|
+
expect(described_class.find_asset('some-file').pathname).to eq(pathname)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'inline_svg/transform_pipeline'
|
2
|
+
|
3
|
+
describe InlineSvg::TransformPipeline::Transformations::ViewBox do
|
4
|
+
it "adds viewBox attribute to a SVG document" do
|
5
|
+
document = Nokogiri::XML::Document.parse('<svg>Some document</svg>')
|
6
|
+
transformation =
|
7
|
+
InlineSvg::TransformPipeline::Transformations::ViewBox
|
8
|
+
.create_with_value("0 0 100 100")
|
9
|
+
expect(transformation.transform(document).to_html).to eq(
|
10
|
+
"<svg viewBox=\"0 0 100 100\">Some document</svg>\n"
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
@@ -21,6 +21,7 @@ describe InlineSvg::TransformPipeline::Transformations do
|
|
21
21
|
size: 'irrelevant',
|
22
22
|
height: 'irrelevant',
|
23
23
|
width: 'irrelevant',
|
24
|
+
view_box: 'irrelevant',
|
24
25
|
id: 'irrelevant',
|
25
26
|
data: 'irrelevant',
|
26
27
|
preserve_aspect_ratio: 'irrelevant',
|
@@ -37,6 +38,7 @@ describe InlineSvg::TransformPipeline::Transformations do
|
|
37
38
|
InlineSvg::TransformPipeline::Transformations::Size,
|
38
39
|
InlineSvg::TransformPipeline::Transformations::Height,
|
39
40
|
InlineSvg::TransformPipeline::Transformations::Width,
|
41
|
+
InlineSvg::TransformPipeline::Transformations::ViewBox,
|
40
42
|
InlineSvg::TransformPipeline::Transformations::IdAttribute,
|
41
43
|
InlineSvg::TransformPipeline::Transformations::DataAttributes,
|
42
44
|
InlineSvg::TransformPipeline::Transformations::PreserveAspectRatio,
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../lib/inline_svg'
|
2
|
+
|
3
|
+
describe InlineSvg::WebpackAssetFinder do
|
4
|
+
context "when the file is not found" do
|
5
|
+
it "returns nil" do
|
6
|
+
stub_const('Rails', double('Rails').as_null_object)
|
7
|
+
stub_const('Webpacker', double('Webpacker').as_null_object)
|
8
|
+
expect(::Webpacker.manifest).to receive(:lookup).with('some-file').and_return(nil)
|
9
|
+
|
10
|
+
expect(described_class.find_asset('some-file').pathname).to be_nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when Shakapacker is defined" do
|
15
|
+
it "uses the new spelling" do
|
16
|
+
stub_const('Rails', double('Rails').as_null_object)
|
17
|
+
stub_const('Shakapacker', double('Shakapacker').as_null_object)
|
18
|
+
expect(::Shakapacker.manifest).to receive(:lookup).with('some-file').and_return(nil)
|
19
|
+
|
20
|
+
expect(described_class.find_asset('some-file').pathname).to be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inline_svg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Martin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -167,6 +167,7 @@ files:
|
|
167
167
|
- lib/inline_svg/transform_pipeline/transformations/style_attribute.rb
|
168
168
|
- lib/inline_svg/transform_pipeline/transformations/title.rb
|
169
169
|
- lib/inline_svg/transform_pipeline/transformations/transformation.rb
|
170
|
+
- lib/inline_svg/transform_pipeline/transformations/view_box.rb
|
170
171
|
- lib/inline_svg/transform_pipeline/transformations/width.rb
|
171
172
|
- lib/inline_svg/version.rb
|
172
173
|
- lib/inline_svg/webpack_asset_finder.rb
|
@@ -184,6 +185,8 @@ files:
|
|
184
185
|
- spec/id_generator_spec.rb
|
185
186
|
- spec/inline_svg_spec.rb
|
186
187
|
- spec/io_resource_spec.rb
|
188
|
+
- spec/propshaft_asset_finder_spec.rb
|
189
|
+
- spec/static_asset_finder_spec.rb
|
187
190
|
- spec/transformation_pipeline/transformations/aria_attributes_spec.rb
|
188
191
|
- spec/transformation_pipeline/transformations/aria_hidden_attribute_spec.rb
|
189
192
|
- spec/transformation_pipeline/transformations/class_attribute_spec.rb
|
@@ -196,13 +199,15 @@ files:
|
|
196
199
|
- spec/transformation_pipeline/transformations/style_attribute_spec.rb
|
197
200
|
- spec/transformation_pipeline/transformations/title_spec.rb
|
198
201
|
- spec/transformation_pipeline/transformations/transformation_spec.rb
|
202
|
+
- spec/transformation_pipeline/transformations/view_box_spec.rb
|
199
203
|
- spec/transformation_pipeline/transformations/width_spec.rb
|
200
204
|
- spec/transformation_pipeline/transformations_spec.rb
|
205
|
+
- spec/webpack_asset_finder_spec.rb
|
201
206
|
homepage: https://github.com/jamesmartin/inline_svg
|
202
207
|
licenses:
|
203
208
|
- MIT
|
204
209
|
metadata: {}
|
205
|
-
post_install_message:
|
210
|
+
post_install_message:
|
206
211
|
rdoc_options: []
|
207
212
|
require_paths:
|
208
213
|
- lib
|
@@ -217,8 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
222
|
- !ruby/object:Gem::Version
|
218
223
|
version: '0'
|
219
224
|
requirements: []
|
220
|
-
rubygems_version: 3.1.
|
221
|
-
signing_key:
|
225
|
+
rubygems_version: 3.1.6
|
226
|
+
signing_key:
|
222
227
|
specification_version: 4
|
223
228
|
summary: Embeds an SVG document, inline.
|
224
229
|
test_files:
|
@@ -236,6 +241,8 @@ test_files:
|
|
236
241
|
- spec/id_generator_spec.rb
|
237
242
|
- spec/inline_svg_spec.rb
|
238
243
|
- spec/io_resource_spec.rb
|
244
|
+
- spec/propshaft_asset_finder_spec.rb
|
245
|
+
- spec/static_asset_finder_spec.rb
|
239
246
|
- spec/transformation_pipeline/transformations/aria_attributes_spec.rb
|
240
247
|
- spec/transformation_pipeline/transformations/aria_hidden_attribute_spec.rb
|
241
248
|
- spec/transformation_pipeline/transformations/class_attribute_spec.rb
|
@@ -248,5 +255,7 @@ test_files:
|
|
248
255
|
- spec/transformation_pipeline/transformations/style_attribute_spec.rb
|
249
256
|
- spec/transformation_pipeline/transformations/title_spec.rb
|
250
257
|
- spec/transformation_pipeline/transformations/transformation_spec.rb
|
258
|
+
- spec/transformation_pipeline/transformations/view_box_spec.rb
|
251
259
|
- spec/transformation_pipeline/transformations/width_spec.rb
|
252
260
|
- spec/transformation_pipeline/transformations_spec.rb
|
261
|
+
- spec/webpack_asset_finder_spec.rb
|