inline_svg 1.0.1 → 1.1.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.

Potentially problematic release.


This version of inline_svg might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77ff506f63b6e109b845e36bcdd8ae0d5bfc7fde
4
- data.tar.gz: 5e04e93613735cfec49fffa88570c875a21db5a2
3
+ metadata.gz: b6932c866bafacb7f12847808bb7f4b4d4c95174
4
+ data.tar.gz: 7238dcab1a92255185e0caeae55b454a1cddc886
5
5
  SHA512:
6
- metadata.gz: 78b2163354a33b8110d466bff371a79a461d421f3904ba65013844863d591977f3da663391abaa07729cc853bdd295df5c7d63451a9d3735c42a1b7894d2c54e
7
- data.tar.gz: 52569d02594958e9007964965175bfe3d9b313d6ec37c679eadf91fa035aba6984e15a7b8e229ba194084aadd1614399731f6c36d4f55cd3c7a105b1aa99d847
6
+ metadata.gz: 792b0ab6aeb91af7c8edcab1cbd37eca42d4fd96317a8bba31f41f4e0f53649e9b92039a8a11b8c6d880ce1fda4524c7ebec66bdac9d1a121787f51adef57ba3
7
+ data.tar.gz: 28605844152d134e18810c12db87c4df901b55d7c365c4b399e7b8ea0cce6b05508d90b0632d52a9e2f3d071e625405cb767ebcb595eb2c913e8d40cff8eb5d9
@@ -3,7 +3,8 @@ All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## [Unreleased][unreleased]
6
- - Nothing
6
+ - Allow configurable asset file implementations
7
+ [#61](https://github.com/jamesmartin/inline_svg/pull/61)
7
8
 
8
9
  ## [1.0.1] - 2017-04-10
9
10
  ### Fixed
data/README.md CHANGED
@@ -206,6 +206,32 @@ Transforms are applied in ascending order (lowest number first).
206
206
  ***Note***: Custom transformations are always applied *after* all built-in
207
207
  transformations, regardless of priority.
208
208
 
209
+ ## Custom asset file loader
210
+
211
+ An asset file loader returns a `String` representing a SVG document given a
212
+ filename. Custom asset loaders should be a Ruby object that responds to a
213
+ method called `named`, that takes one argument (a string representing the
214
+ filename of the SVG document).
215
+
216
+ A simple example might look like this:
217
+
218
+ ```ruby
219
+ class MyAssetFileLoader
220
+ def self.named(filename)
221
+ # ... load SVG document however you like
222
+ return "<svg>some document</svg>"
223
+ end
224
+ end
225
+ ```
226
+
227
+ Configure your custom asset file loader in an initializer like so:
228
+
229
+ ```ruby
230
+ InlineSvg.configure do |config|
231
+ config.asset_file = MyAssetFileLoader
232
+ end
233
+ ```
234
+
209
235
  ## Contributing
210
236
 
211
237
  1. Fork it ( [http://github.com/jamesmartin/inline_svg/fork](http://github.com/jamesmartin/inline_svg/fork) )
@@ -14,10 +14,24 @@ module InlineSvg
14
14
  class Configuration
15
15
  class Invalid < ArgumentError; end
16
16
 
17
- attr_reader :asset_finder, :custom_transformations
17
+ attr_reader :asset_file, :asset_finder, :custom_transformations
18
18
 
19
19
  def initialize
20
20
  @custom_transformations = {}
21
+ @asset_file = InlineSvg::AssetFile
22
+ end
23
+
24
+ def asset_file=(custom_asset_file)
25
+ begin
26
+ method = custom_asset_file.method(:named)
27
+ if method.arity == 1
28
+ @asset_file = custom_asset_file
29
+ else
30
+ raise InlineSvg::Configuration::Invalid.new("asset_file should implement the #named method with arity 1")
31
+ end
32
+ rescue NameError
33
+ raise InlineSvg::Configuration::Invalid.new("asset_file should implement the #named method")
34
+ end
21
35
  end
22
36
 
23
37
  def asset_finder=(finder)
@@ -9,7 +9,7 @@ module InlineSvg
9
9
  svg_file = if InlineSvg::IOResource === filename
10
10
  InlineSvg::IOResource.read filename
11
11
  else
12
- InlineSvg::AssetFile.named filename
12
+ configured_asset_file.named filename
13
13
  end
14
14
  rescue InlineSvg::AssetFile::FileNotFound
15
15
  return "<svg><!-- SVG file not found: '#{filename}' #{extension_hint(filename)}--></svg>".html_safe
@@ -20,6 +20,10 @@ module InlineSvg
20
20
 
21
21
  private
22
22
 
23
+ def configured_asset_file
24
+ InlineSvg.configuration.asset_file
25
+ end
26
+
23
27
  def extension_hint(filename)
24
28
  filename.ends_with?(".svg") ? "" : "(Try adding .svg to your filename) "
25
29
  end
@@ -1,3 +1,3 @@
1
1
  module InlineSvg
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -13,6 +13,10 @@ class MyInvalidCustomTransformInstance
13
13
  def self.create_with_value(value); end
14
14
  end
15
15
 
16
+ class MyCustomAssetFile
17
+ def self.named(filename); end
18
+ end
19
+
16
20
  describe InlineSvg do
17
21
  describe "configuration" do
18
22
  context "when a block is not given" do
@@ -42,6 +46,40 @@ describe InlineSvg do
42
46
  end
43
47
  end
44
48
 
49
+ context "configuring a custom asset file" do
50
+ it "falls back to the built-in asset file implementation by deafult" do
51
+ expect(InlineSvg.configuration.asset_file).to eq(InlineSvg::AssetFile)
52
+ end
53
+
54
+ it "adds a collaborator that meets the interface specification" do
55
+ InlineSvg.configure do |config|
56
+ config.asset_file = MyCustomAssetFile
57
+ end
58
+
59
+ expect(InlineSvg.configuration.asset_file).to eq MyCustomAssetFile
60
+ end
61
+
62
+ it "rejects a collaborator that does not conform to the interface spec" do
63
+ bad_asset_file = double("bad_asset_file")
64
+
65
+ expect do
66
+ InlineSvg.configure do |config|
67
+ config.asset_file = bad_asset_file
68
+ end
69
+ end.to raise_error(InlineSvg::Configuration::Invalid, /asset_file should implement the #named method/)
70
+ end
71
+
72
+ it "rejects a collaborator that implements the correct interface with the wrong arity" do
73
+ bad_asset_file = double("bad_asset_file", named: nil)
74
+
75
+ expect do
76
+ InlineSvg.configure do |config|
77
+ config.asset_file = bad_asset_file
78
+ end
79
+ end.to raise_error(InlineSvg::Configuration::Invalid, /asset_file should implement the #named method with arity 1/)
80
+ end
81
+ end
82
+
45
83
  context "configuring custom transformation" do
46
84
  it "allows a custom transformation to be added" do
47
85
  InlineSvg.configure do |config|
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.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-10 00:00:00.000000000 Z
11
+ date: 2017-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler