esvg 4.6.1 → 4.6.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: 8b5d0d6910641142e441309223019ebfbb1d2a89482bddbe54ab449a27043beb
4
- data.tar.gz: 46834ffa28ddc045350703ba4e3606c168e65022d3a024dc989970252d3a68cc
3
+ metadata.gz: 41bb830e6af4939063aeca838f5c69c550a851f71e701599ed3d4cbb52a42b5c
4
+ data.tar.gz: f494f42e0e9f9f847145a8f9d65658a9bf3104741f4a4bf513866cb6d92f942b
5
5
  SHA512:
6
- metadata.gz: 25e807067537f26d6aba337e6c94acfcf22385842411706fde699338460ed1ae6a49a9850f513a63bba17d75620696107cd4b458b97fc4bff4eadab494786ed2
7
- data.tar.gz: e69bfb87e23cffe1b4b7a17e92475f605f0ad24f7d092dd169a97ca4561819f2447790ef39a1dcc3ed6813032b7e8df04eeab4d7710b7d827286beac5d30306a
6
+ metadata.gz: bbce86545a336224d47db5219352407210fa16b16efc85c6f984058ee3ba09ea559a24122488c03e02bef076f141895107a70a2ce5f5868898f73c3dd708037e
7
+ data.tar.gz: e62b4ad90f511af5671df2d0c39c9c54e9506b25f580da403f84015cefb77f4fc843d2def09b42382bb52bb23991f70beaca2c19402883af4ac233c6aaddab14
@@ -79,7 +79,9 @@ module Esvg
79
79
  end
80
80
 
81
81
  def embed(names=nil)
82
- html_safe find_svgs(names).map{|s| s.embed_script(names) }.join
82
+ html_safe( find_svgs(names).map{ |s|
83
+ s.embed_script(names)
84
+ }.join )
83
85
  end
84
86
 
85
87
  def build_paths(names=nil)
@@ -108,13 +110,18 @@ module Esvg
108
110
  defined?(Rails) || File.exist?("./bin/rails")
109
111
  end
110
112
 
113
+ def rails_production?
114
+ rails? && Rails.env.production?
115
+ end
116
+
111
117
  def html_safe(input)
112
118
  input = input.html_safe if rails?
113
119
  input
114
120
  end
115
121
 
122
+ # Add SVG build task to `rake assets:precompile`
116
123
  def precompile_assets
117
- if defined?(Rails) && Rails.env.production? && defined?(Rake)
124
+ if rails_production? && defined?(Rake)
118
125
  ::Rake::Task['assets:precompile'].enhance do
119
126
  new(gzip: true, print: true).build
120
127
  end
@@ -161,14 +168,17 @@ module Esvg
161
168
 
162
169
  config = CONFIG.dup
163
170
 
164
- if Esvg.rails? || options[:rails]
171
+ if rails? || options[:rails]
165
172
  config.merge!(CONFIG_RAILS)
166
173
  elsif defined?(Jekyll)
167
174
  config.merge!(CONFIG_JEKYLL)
168
175
  end
169
176
 
170
177
  if path = paths.select{ |p| File.exist?(p)}.first
178
+ options[:config_file] = path
171
179
  config.merge!(deep_symbolize_keys(YAML.load(File.read(path) || {})))
180
+ else
181
+ options[:config_file] = false
172
182
  end
173
183
 
174
184
  config.merge!(options)
@@ -189,10 +199,15 @@ module Esvg
189
199
  config[:temp] = File.expand_path File.join(config[:temp], '.esvg-cache')
190
200
 
191
201
  config[:aliases] = load_aliases(config[:alias])
192
- config[:flatten] = [config[:flatten]].flatten.map { |dir| File.join(dir, '/') }.join('|')
202
+ config[:flatten_dir] = [config[:flatten]].flatten.map { |dir| File.join(dir, '/') }.join('|')
203
+ config[:read] = Time.now.to_i
193
204
 
194
205
  config
195
206
  end
207
+
208
+ def update_config ( options )
209
+ config( { config_file: options[:config_file] } )
210
+ end
196
211
 
197
212
  # Load aliases from configuration.
198
213
  # returns a hash of aliasees mapped to a name.
@@ -7,13 +7,13 @@ module Esvg
7
7
 
8
8
  attr_reader :asset, :vesion, :name
9
9
 
10
- def initialize(name, symbols, config={})
10
+ def initialize(name, symbols, parent)
11
+ @parent = parent
11
12
  @name = name
12
- @config = config
13
13
  @symbols = symbols
14
14
  @symbol_defs = []
15
15
  @asset = File.basename(name).start_with?('_')
16
- @version = @config[:version] || Digest::MD5.hexdigest(symbols.map(&:mtime).join)
16
+ @version = parent.config[:version] || Digest::MD5.hexdigest(symbols.map(&:mtime).join)
17
17
  end
18
18
 
19
19
  def embed
@@ -22,6 +22,10 @@ module Esvg
22
22
  }}
23
23
  end
24
24
 
25
+ def config
26
+ @parent.config
27
+ end
28
+
25
29
  def named?(names=[])
26
30
  [names].flatten.map {
27
31
  |n| dasherize(n)
@@ -32,7 +36,7 @@ module Esvg
32
36
  if @name == '.'
33
37
  'symbols'
34
38
  else
35
- dasherize "#{@config[:prefix]}-#{name_key}"
39
+ dasherize "#{config[:prefix]}-#{name_key}"
36
40
  end
37
41
  end
38
42
 
@@ -41,14 +45,14 @@ module Esvg
41
45
  name = name_key
42
46
 
43
47
  if name.start_with?('_') # Is it an asset?
44
- File.join @config[:assets], "#{name}.js"
48
+ File.join config[:assets], "#{name}.js"
45
49
  else # or a build file?
46
50
 
47
51
  # User doesn't want a fingerprinted build file and hasn't set a version
48
- if !@config[:fingerprint] && !@config[:version]
49
- File.join @config[:build], "#{name}.js"
52
+ if !config[:fingerprint] && !config[:version]
53
+ File.join config[:build], "#{name}.js"
50
54
  else
51
- File.join @config[:build], "#{name}-#{@version}.js"
55
+ File.join config[:build], "#{name}-#{@version}.js"
52
56
  end
53
57
  end
54
58
  end
@@ -58,9 +62,9 @@ module Esvg
58
62
 
59
63
  def name_key
60
64
  if @name == '_' # Root level asset file
61
- "_#{@config[:filename]}".sub(/_+/, '_')
65
+ "_#{config[:filename]}".sub(/_+/, '_')
62
66
  elsif @name == '.' # Root level build file
63
- @config[:filename]
67
+ config[:filename]
64
68
  else
65
69
  @name
66
70
  end
@@ -71,8 +75,8 @@ module Esvg
71
75
  @svg
72
76
  else
73
77
  attr = {
74
- "data-symbol-class" => @config[:class],
75
- "data-prefix" => @config[:prefix],
78
+ "data-symbol-class" => config[:class],
79
+ "data-prefix" => config[:prefix],
76
80
  "version" => "1.1",
77
81
  "style" => "height:0;position:absolute"
78
82
  }
@@ -9,25 +9,42 @@ module Esvg
9
9
  include Esvg::Utils
10
10
 
11
11
  attr_reader :symbols
12
- attr_reader :config
13
12
 
14
13
  def initialize(options={})
15
14
  @config = options
16
15
  @symbols = []
17
16
  @svgs = []
18
- @last_read = 0
17
+ @files_loaded = 0
19
18
  read_cache
20
19
 
21
20
  load_files
22
21
  end
23
22
 
23
+ def config
24
+ # use cached configuration
25
+ if !Esvg.rails_production? && config_expired? && config_changed?
26
+ puts "LOADING CONFIG"
27
+ @config = Esvg.update_config( @config )
28
+ else
29
+ @config
30
+ end
31
+ end
32
+
33
+ def config_expired?
34
+ @config[:throttle_read] < (Time.now.to_i - @config[:read])
35
+ end
36
+
37
+ def config_changed?
38
+ @config[:config_file] && @config[:read] < File.mtime( @config[:config_file] ).to_i
39
+ end
40
+
24
41
  def load_files
25
- return if (Time.now.to_i - @last_read) < config[:throttle_read]
42
+ return if @config[:throttle_read] < (Time.now.to_i - @files_loaded)
26
43
 
27
- files = Dir[File.join(config[:source], '**/*.svg')].uniq.sort
44
+ files = Dir[File.join(@config[:source], '**/*.svg')].uniq.sort
28
45
 
29
- if files.empty? && config[:print]
30
- puts "No svgs found at #{config[:source]}"
46
+ if files.empty? && @config[:print]
47
+ puts "No svgs found at #{@config[:source]}"
31
48
  return
32
49
  end
33
50
 
@@ -36,19 +53,19 @@ module Esvg
36
53
 
37
54
  files.each do |path|
38
55
  unless @symbols.find { |s| s.path == path }
39
- @symbols << Symbol.new(path, config)
56
+ @symbols << Symbol.new(path, self)
40
57
  end
41
58
  end
42
59
 
43
60
  @svgs.clear
44
61
 
45
62
  sort(@symbols.group_by(&:group)).each do |name, symbols|
46
- @svgs << Svg.new(name, symbols, config)
63
+ @svgs << Svg.new(name, symbols, self)
47
64
  end
48
65
 
49
- @last_read = Time.now.to_i
66
+ @files_loaded = Time.now.to_i
50
67
 
51
- puts "Read #{@symbols.size} files from #{config[:source]}" if config[:print]
68
+ puts "Read #{@symbols.size} files from #{@config[:source]}" if @config[:print]
52
69
 
53
70
  end
54
71
 
@@ -56,8 +73,8 @@ module Esvg
56
73
 
57
74
  paths = []
58
75
 
59
- if config[:core]
60
- path = File.join config[:assets], "_esvg.js"
76
+ if @config[:core]
77
+ path = File.join @config[:assets], "_esvg.js"
61
78
  write_file path, js_core
62
79
  paths << path
63
80
  end
@@ -65,11 +82,11 @@ module Esvg
65
82
  @svgs.each do |file|
66
83
  write_file file.path, js(file.embed)
67
84
 
68
- puts "Writing #{file.path}" if config[:print]
85
+ puts "Writing #{file.path}" if @config[:print]
69
86
  paths << file.path
70
87
 
71
- if !file.asset && config[:gzip] && gz = compress(file.path)
72
- puts "Writing #{gz}" if config[:print]
88
+ if !file.asset && @config[:gzip] && gz = compress(file.path)
89
+ puts "Writing #{gz}" if @config[:print]
73
90
  paths << gz
74
91
  end
75
92
  end
@@ -79,20 +96,20 @@ module Esvg
79
96
  end
80
97
 
81
98
  def write_cache
82
- puts "Writing cache" if config[:print]
83
- write_tmp config[:cache_file], @symbols.map(&:data).to_yaml
99
+ puts "Writing cache" if @config[:print]
100
+ write_tmp @config[:cache_file], @symbols.map(&:data).to_yaml
84
101
  end
85
102
 
86
103
  def read_cache
87
- (YAML.load(read_tmp config[:cache_file]) || []).each do |c|
88
- config[:cache] = c
89
- @symbols << Symbol.new(c[:path], config)
104
+ (YAML.load(read_tmp @config[:cache_file]) || []).each do |c|
105
+ @config[:cache] = c
106
+ @symbols << Symbol.new(c[:path], self)
90
107
  end
91
108
  end
92
109
 
93
110
  # Embed svg symbols
94
111
  def embed_script(names=nil)
95
- if Esvg.rails? && Rails.env.production?
112
+ if Esvg.rails_production?
96
113
  embeds = buildable_svgs(names).map(&:embed)
97
114
  else
98
115
  embeds = find_svgs(names).map(&:embed)
@@ -107,7 +124,7 @@ module Esvg
107
124
  end
108
125
 
109
126
  def cache_stale?
110
- path = File.join(config[:temp], config[:cache_file])
127
+ path = File.join(@config[:temp], @config[:cache_file])
111
128
 
112
129
  # No cache file exists or cache file is older than a new symbol
113
130
  !File.exist?(path) || @symbols.size > 0 && File.mtime(path).to_i < @symbols.map(&:mtime).sort.last
@@ -119,7 +136,7 @@ module Esvg
119
136
 
120
137
  def find_symbol(name, fallback=nil)
121
138
  # Ensure that file changes are picked up in development
122
- load_files unless Esvg.rails? && Rails.env.production?
139
+ load_files unless Esvg.rails_production?
123
140
 
124
141
  name = get_alias dasherize(name)
125
142
 
@@ -177,7 +194,7 @@ module Esvg
177
194
  }
178
195
 
179
196
  function svgName( name ) {
180
- return "#{config[:prefix]}-"+dasherize( name )
197
+ return "#{@config[:prefix]}-"+dasherize( name )
181
198
  }
182
199
 
183
200
  function use( name, options ) {
@@ -239,18 +256,18 @@ module Esvg
239
256
  end
240
257
 
241
258
  def get_alias(name)
242
- config[:aliases][dasherize(name).to_sym] || name
259
+ @config[:aliases][dasherize(name).to_sym] || name
243
260
  end
244
261
 
245
262
  def write_tmp(name, content)
246
- path = File.join(config[:temp], name)
263
+ path = File.join(@config[:temp], name)
247
264
  FileUtils.mkdir_p(File.dirname(path))
248
265
  write_file path, content
249
266
  path
250
267
  end
251
268
 
252
269
  def read_tmp(name)
253
- path = File.join(config[:temp], name)
270
+ path = File.join(@config[:temp], name)
254
271
  if File.exist? path
255
272
  File.read path
256
273
  else
@@ -6,14 +6,18 @@ module Esvg
6
6
 
7
7
  include Esvg::Utils
8
8
 
9
- def initialize(path, config={})
10
- @config = config
9
+ def initialize(path, parent)
10
+ @parent = parent
11
11
  @path = path
12
12
  @last_checked = 0
13
13
  load_data
14
14
  read
15
15
  end
16
16
 
17
+ def config
18
+ @parent.config
19
+ end
20
+
17
21
  def read
18
22
  return if !File.exist?(@path)
19
23
 
@@ -102,12 +106,12 @@ module Esvg
102
106
  def use(options={})
103
107
 
104
108
  # If preset key is set, merge presets from configuration
105
- if options[:preset] && preset = @config[:presets][ options.delete(:preset).to_sym ]
109
+ if options[:preset] && preset = config[:presets][ options.delete(:preset).to_sym ]
106
110
  options = options.merge( preset )
107
111
  end
108
112
 
109
113
  # If size key is set, merge size class from configuration
110
- if options[:size] && size_class = @config[:sizes][ options.delete(:size).to_sym ]
114
+ if options[:size] && size_class = config[:sizes][ options.delete(:size).to_sym ]
111
115
  options = options.merge( size_class )
112
116
  end
113
117
 
@@ -124,7 +128,7 @@ module Esvg
124
128
  use_attr = options.delete(:use) || {}
125
129
 
126
130
  svg_attr = {
127
- class: [@config[:class], @config[:prefix]+"-"+@name, options.delete(:class)].compact.join(' '),
131
+ class: [config[:class], config[:prefix]+"-"+@name, options.delete(:class)].compact.join(' '),
128
132
  viewBox: @size[:viewBox],
129
133
  role: 'img'
130
134
  }.merge(options)
@@ -143,7 +147,7 @@ module Esvg
143
147
  def use_tag(options={})
144
148
  options["xlink:href"] = "##{@id}"
145
149
 
146
- if options[:scale] && @config[:scale]
150
+ if options[:scale] && config[:scale]
147
151
  # User doesn't want dimensions to be set
148
152
  options.delete(:scale)
149
153
  else
@@ -157,7 +161,7 @@ module Esvg
157
161
  end
158
162
 
159
163
  def svgo?
160
- @config[:optimize] && !!Esvg.node_module('svgo')
164
+ config[:optimize] && !!Esvg.node_module('svgo')
161
165
  end
162
166
 
163
167
  def optimize
@@ -192,15 +196,15 @@ module Esvg
192
196
  private
193
197
 
194
198
  def load_data
195
- if @config[:cache]
196
- @config.delete(:cache).each do |name, value|
199
+ if config[:cache]
200
+ config.delete(:cache).each do |name, value|
197
201
  instance_variable_set("@#{name}", value)
198
202
  end
199
203
  end
200
204
  end
201
205
 
202
206
  def last_modified
203
- if Time.now.to_i - @last_checked < @config[:throttle_read]
207
+ if Time.now.to_i - @last_checked < config[:throttle_read]
204
208
  @last_modified
205
209
  else
206
210
  @last_checked = Time.now.to_i
@@ -209,11 +213,11 @@ module Esvg
209
213
  end
210
214
 
211
215
  def file_id(name)
212
- dasherize "#{@config[:prefix]}-#{name}"
216
+ dasherize "#{config[:prefix]}-#{name}"
213
217
  end
214
218
 
215
219
  def local_path
216
- @local_path ||= sub_path(@config[:source], @path)
220
+ @local_path ||= sub_path(config[:source], @path)
217
221
  end
218
222
 
219
223
  def file_name
@@ -230,7 +234,7 @@ module Esvg
230
234
  # Flattened paths which should be treated as assets will use '_' as their dir key
231
235
  # - flatten: _foo - _foo/icon.svg will have a dirkey of _
232
236
  # - filename: _icons - treats all root or flattened files as assets
233
- if dir == '.' && ( local_path.start_with?('_') || @config[:filename].start_with?('_') )
237
+ if dir == '.' && ( local_path.start_with?('_') || config[:filename].start_with?('_') )
234
238
  '_'
235
239
  else
236
240
  dir
@@ -238,14 +242,14 @@ module Esvg
238
242
  end
239
243
 
240
244
  def flatten_path
241
- @flattened_path ||= local_path.sub(Regexp.new(@config[:flatten]), '')
245
+ @flattened_path ||= local_path.sub(Regexp.new(config[:flatten_dir]), '')
242
246
  end
243
247
 
244
248
  def name_key(key)
245
249
  if key == '_' # Root level asset file
246
- "_#{@config[:filename]}".sub(/_+/, '_')
250
+ "_#{config[:filename]}".sub(/_+/, '_')
247
251
  elsif key == '.' # Root level build file
248
- @config[:filename]
252
+ config[:filename]
249
253
  else
250
254
  "#{key}"
251
255
  end
@@ -1,3 +1,3 @@
1
1
  module Esvg
2
- VERSION = "4.6.1"
2
+ VERSION = "4.6.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esvg
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.1
4
+ version: 4.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mathis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-17 00:00:00.000000000 Z
11
+ date: 2018-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler