heroicons_helper 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a4fd38721f8363f1f2b36b45cec732c0dba30f7ac3ad5d1cb243a8e5a722bda
4
- data.tar.gz: 59333a78638dacbc4690bc22d231382d79addea64d4bb703b2efbdb4ccc052df
3
+ metadata.gz: fa8cbd61b03ddc8aab60aa75caad4b4a0fa7ca42c7b4c808c0900cbcffdbc918
4
+ data.tar.gz: 4ddab3edb1ccca807b67c19c4c04dc7c7d58749175a1e8c8ecc6ae50fa410010
5
5
  SHA512:
6
- metadata.gz: 1aef948793f04e86a224734f44da163f037a26c74f392757c0cb0b7546ae26edbfb00ef6ef0bd5bed5bea6b93be49933f3c432f28c94b9654b2905028dced010
7
- data.tar.gz: 40c2239119dc8de51e43e55260e2bd9190faaad885ae1e53f4a5b4a24eb2420f5cc5d0e5fb13658c9a5cae55563d319fd858895a23dedbb5611da192d87bb654
6
+ metadata.gz: 16156c67a9b80aef825dde4c4a6f5e331bc0fe23223ba385ecae02867a586ea759eadf8dd2484581b4f51d66aee2489e210de0030b0d88f1bb73d7f3d2ec09d4
7
+ data.tar.gz: b222c12def03a08771c1282fff023a707565e93c4695f678af4c8da4aa69b13d3f5d33f1281abfdd6e88b9bfb7754e17fd810c9176ace2d03d392344438e2018
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # HeroiconsHelper
2
2
 
3
- This gem helps you use Heroicons in your Ruby projects. It's inspired by [heroicons-ruby](https://github.com/chunlea/heroicons-ruby) and [octicons](https://github.com/primer/octicons).
3
+ This gem helps you use Heroicons in your Ruby projects. It's inspired by [heroicons-ruby](https://github.com/chunlea/heroicons-ruby) and [octicons_gem](https://github.com/primer/octicons/tree/main/lib/octicons_gem).
4
4
 
5
5
  ## Installation
6
6
 
@@ -25,12 +25,12 @@ include HeroiconsHelper
25
25
  You'll have a brand new method called `heroicon` whose signature looks like this:
26
26
 
27
27
  ```ruby
28
- heroicon(symbol, variant, attributes: {})
28
+ heroicon(icon, variant, attributes: {})
29
29
  ```
30
30
 
31
31
  where
32
32
 
33
- * `symbol` is the heroicons name
33
+ * `icon` is the Heroicon name (eg. `:bell` or `"bell")
34
34
  * `variant` is the type of Heroicons (eg., `outline` or `solid`)
35
35
  * `attributes` are any additional HTML attributes to add on to the resulting `svg` element
36
36
 
@@ -3,23 +3,23 @@
3
3
  module HeroiconsHelper
4
4
  # Icon to show heroicons by name and variant.
5
5
  class Icon
6
- attr_reader :path, :attributes, :width, :height, :symbol, :variant, :keywords
6
+ attr_reader :path, :attributes, :width, :height, :name, :variant, :keywords
7
7
 
8
8
  VARIANT_OUTLINE = "outline"
9
9
  VARIANT_SOLID = "solid"
10
10
  VARIANTS = [VARIANT_OUTLINE, VARIANT_SOLID].freeze
11
11
 
12
- def initialize(symbol, variant, attributes: {})
13
- @symbol = symbol.to_s
12
+ def initialize(name, variant, attributes: {})
13
+ @name = name.to_s
14
14
  @variant = variant.to_s
15
15
 
16
- heroicon = get_heroicon(@symbol, @variant)
16
+ heroicon = get_heroicon(@name, @variant)
17
17
 
18
18
  @path = heroicon["path"]
19
19
  @width = heroicon["width"]
20
20
  @height = heroicon["height"]
21
21
  @keywords = heroicon["keywords"]
22
- @attributes = attributes.dup
22
+ @attributes = attributes.dup.compact
23
23
  @attributes[:class] = classes
24
24
  @attributes[:viewBox] = viewbox
25
25
  @attributes.merge!(size)
@@ -30,7 +30,7 @@ module HeroiconsHelper
30
30
 
31
31
  # Returns an string representing a <svg> tag
32
32
  def to_svg
33
- "<svg xmlns=\"http://www.w3.org/2000/svg\" #{html_attributes}>#{@path}</svg>"
33
+ "<!-- Heroicon name: #{@variant}/#{@name} --><svg xmlns=\"http://www.w3.org/2000/svg\" #{html_attributes}>#{@path}</svg>"
34
34
  end
35
35
 
36
36
  private def html_attributes
@@ -54,7 +54,7 @@ module HeroiconsHelper
54
54
 
55
55
  # prepare the octicon class
56
56
  private def classes
57
- "heroicon heroicon-#{@symbol}-#{@variant} #{@attributes[:class]} ".strip
57
+ "heroicon heroicon-#{@name}-#{@variant} #{@attributes[:class]} ".strip
58
58
  end
59
59
 
60
60
  private def variant_attributes
@@ -101,17 +101,17 @@ module HeroiconsHelper
101
101
  (width.to_i * @height) / @width
102
102
  end
103
103
 
104
- private def get_heroicon(symbol, variant)
105
- raise ArgumentError, "Icon name can't be empty" if symbol.empty?
104
+ private def get_heroicon(name, variant)
105
+ raise ArgumentError, "Icon name can't be empty" if name.empty?
106
106
 
107
107
  raise ArgumentError, "Variant `#{variant.inspect}` is invalid; must be one of #{VARIANTS.join(", ")}" unless VARIANTS.include?(variant)
108
108
 
109
- icon = HeroiconsHelper::ICON_SYMBOLS[symbol]
109
+ icon = HeroiconsHelper::ICON_NAMES[name]
110
110
 
111
- raise ArgumentError, "Couldn't find Heroicon for `#{symbol.inspect}`" unless icon
111
+ raise ArgumentError, "Couldn't find Heroicon for `#{name.inspect}`" unless icon
112
112
 
113
113
  icon_variant = icon["variants"][variant]
114
- raise ArgumentError, "Heroicon for `#{symbol.inspect}` doesn't have variant `#{variant.inspect}`" unless icon_variant
114
+ raise ArgumentError, "Heroicon for `#{name.inspect}` doesn't have variant `#{variant.inspect}`" unless icon_variant
115
115
 
116
116
  {
117
117
  "name" => icon["name"],
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HeroiconsHelper
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
@@ -7,9 +7,22 @@ require "json"
7
7
 
8
8
  module HeroiconsHelper
9
9
  file_data = File.read(File.join(File.dirname(__FILE__), "./heroicons_helper/data.json"))
10
- ICON_SYMBOLS = JSON.parse(file_data).freeze
10
+ ICON_NAMES = JSON.parse(file_data).freeze
11
11
 
12
- def heroicon(symbol, variant:, **attributes)
13
- ::HeroiconsHelper::Icon.new(symbol, variant, attributes: attributes)
12
+ def heroicon(name, variant:, **attributes)
13
+ cache_key = HeroiconsHelper::Cache.get_key(
14
+ name: name,
15
+ variant: variant,
16
+ height: attributes[:height],
17
+ width: attributes[:width]
18
+ )
19
+
20
+ cached_heroicon = HeroiconsHelper::Cache.read(cache_key)
21
+ return cached_heroicon unless cached_heroicon.nil?
22
+
23
+ heroicon = ::HeroiconsHelper::Icon.new(name, variant, attributes: attributes)
24
+ HeroiconsHelper::Cache.set(cache_key, heroicon)
25
+
26
+ heroicon
14
27
  end
15
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroicons_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen J. Torikian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-11 00:00:00.000000000 Z
11
+ date: 2022-06-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A package that distributes Heroicons as a gem, for easy inclusion in
14
14
  Ruby projects.