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 +4 -4
- data/README.md +3 -3
- data/lib/heroicons_helper/icon.rb +12 -12
- data/lib/heroicons_helper/version.rb +1 -1
- data/lib/heroicons_helper.rb +16 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa8cbd61b03ddc8aab60aa75caad4b4a0fa7ca42c7b4c808c0900cbcffdbc918
|
4
|
+
data.tar.gz: 4ddab3edb1ccca807b67c19c4c04dc7c7d58749175a1e8c8ecc6ae50fa410010
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 [
|
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(
|
28
|
+
heroicon(icon, variant, attributes: {})
|
29
29
|
```
|
30
30
|
|
31
31
|
where
|
32
32
|
|
33
|
-
* `
|
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, :
|
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(
|
13
|
-
@
|
12
|
+
def initialize(name, variant, attributes: {})
|
13
|
+
@name = name.to_s
|
14
14
|
@variant = variant.to_s
|
15
15
|
|
16
|
-
heroicon = get_heroicon(@
|
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
|
-
"
|
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-#{@
|
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(
|
105
|
-
raise ArgumentError, "Icon name can't be empty" if
|
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::
|
109
|
+
icon = HeroiconsHelper::ICON_NAMES[name]
|
110
110
|
|
111
|
-
raise ArgumentError, "Couldn't find Heroicon for `#{
|
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 `#{
|
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"],
|
data/lib/heroicons_helper.rb
CHANGED
@@ -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
|
-
|
10
|
+
ICON_NAMES = JSON.parse(file_data).freeze
|
11
11
|
|
12
|
-
def heroicon(
|
13
|
-
|
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
|
+
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
|
+
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.
|