rails_icons 1.1.0 → 1.2.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: 628225582b62195c9f7bc3994d9fcad7aa37dc563b4d0e73069c5efdddd81332
4
- data.tar.gz: 3241569575d809f7c6bbce51804cab8255df585f24a9473878432d2930596fcb
3
+ metadata.gz: 6413197bc61eb646096a2c6abbf25696fd6eb8c986d85cc08519509066f83e85
4
+ data.tar.gz: e1a1f952e9f499a39adba3958be58fc7f7aafbd779397ce5b7d62c4e1d16cb9c
5
5
  SHA512:
6
- metadata.gz: c4226fb17440c8eb8949ecce47be982b7dc17f022e33b1bccc640dbd16b700096e2f6867dceace37c597e56919be83621523ac8f842976365dc81517149bf4cc
7
- data.tar.gz: 1c1b35579576475f1b06ccf56416850c3d333402ebfefc63b8b1250b4317a196b04b15512ca5ac17cd26faba7298439114b4f175803c564ecbf1d22123db3eba
6
+ metadata.gz: 37de7ecd41860ff20570285ba3910192c5e52273a0991ae06f51a6d823078031bb0304fce7fae49a8866d5b71c2caf3a99f6123b1cfa9209b61b35acf86e1018
7
+ data.tar.gz: 4590aceead66f68e8b890a53823eb9fe8c959c58678631f854bedf49c763c81deda9de0175763b26fb2ad135be3d561e8ab3dd5a2c19b921cd06fad710330884
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_icons (1.1.0)
4
+ rails_icons (1.2.0)
5
5
  nokogiri (~> 1.16, >= 1.16.4)
6
6
  rails (> 6.1)
7
7
 
@@ -104,7 +104,7 @@ GEM
104
104
  marcel (1.0.4)
105
105
  method_source (1.0.0)
106
106
  mini_mime (1.1.5)
107
- mini_portile2 (2.8.5)
107
+ mini_portile2 (2.8.8)
108
108
  minitest (5.22.3)
109
109
  net-imap (0.4.10)
110
110
  date
@@ -116,10 +116,10 @@ GEM
116
116
  net-smtp (0.5.0)
117
117
  net-protocol
118
118
  nio4r (2.7.1)
119
- nokogiri (1.16.4)
119
+ nokogiri (1.18.3)
120
120
  mini_portile2 (~> 2.8.2)
121
121
  racc (~> 1.4)
122
- nokogiri (1.16.4-arm64-darwin)
122
+ nokogiri (1.18.3-arm64-darwin)
123
123
  racc (~> 1.4)
124
124
  parallel (1.24.0)
125
125
  parser (3.3.0.5)
@@ -132,7 +132,7 @@ GEM
132
132
  railties (>= 7.0.0)
133
133
  psych (5.1.2)
134
134
  stringio
135
- racc (1.7.3)
135
+ racc (1.8.1)
136
136
  rack (2.2.9)
137
137
  rack-test (2.1.0)
138
138
  rack (>= 1.3)
@@ -215,6 +215,7 @@ GEM
215
215
  PLATFORMS
216
216
  arm64-darwin-22
217
217
  ruby
218
+ x86_64-linux
218
219
 
219
220
  DEPENDENCIES
220
221
  debug (~> 1.9, >= 1.9.2)
data/README.md CHANGED
@@ -40,7 +40,7 @@ rails generate rails_icons:install --libraries=LIBRARY_NAME
40
40
  ```bash
41
41
  rails generate rails_icons:install --libraries=heroicons
42
42
 
43
- Or multiple at once
43
+ # Or multiple at once
44
44
  rails generate rails_icons:install --libraries=heroicons lucide
45
45
  ```
46
46
 
@@ -54,16 +54,16 @@ icon "check"
54
54
  # Use another variant
55
55
  icon "check", variant: "solid"
56
56
 
57
- # Set library explictly
57
+ # Set library explicitly
58
58
  icon "check", library: "heroicons"
59
59
 
60
60
  # Add CSS
61
61
  icon "check", class: "text-green-500"
62
62
 
63
63
  # Add CSS with class_names
64
- # article: https://railsdesigner.com/conditional-css-classes-in-rails/
65
- # docs: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
66
64
  icon "check", class: ["size-4", "bg-red-500": !verified?, "bg-green-500": verified?]
65
+ # ↳ Article: https://railsdesigner.com/conditional-css-classes-in-rails/
66
+ # ↳ Documentation: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
67
67
 
68
68
  # Add data attributes
69
69
  icon "check", data: { controller: "swap" }
@@ -75,13 +75,17 @@ icon "check", stroke_width: 2
75
75
 
76
76
  ## First-party libraries
77
77
 
78
- - [Boxicons](https://github.com/atisawd/boxicons) (1600+ icons)
79
- - [Feather](https://github.com/feathericons/feather) (280+ icons)
80
- - [Heroicons](https://github.com/tailwindlabs/heroicons) (300+ icons)
81
- - [Lucide](https://github.com/lucide-icons/lucide) (1500+ icons)
82
- - [Phosphor](https://github.com/phosphor-icons/core) (9000+ icons)
83
- - [Radix](https://github.com/radix-ui/icons/) (300+ icons)
84
- - [Tabler](https://github.com/tabler/tabler-icons) (5700+ icons)
78
+ - [Boxicons](https://railsdesigner.com/rails-icons/boxicons/) (1600+ icons)
79
+ - [Feather](https://railsdesigner.com/rails-icons/feather/) (280+ icons)
80
+ - [Flags](https://railsdesigner.com/rails-icons/flags/) (540+ icons)
81
+ - [Heroicons](https://railsdesigner.com/rails-icons/heroicons/) (300+ icons)
82
+ - [Linear](https://railsdesigner.com/rails-icons/linear/) (170+ icons)
83
+ - [Lucide](https://railsdesigner.com/rails-icons/lucide/) (1500+ icons)
84
+ - [Phosphor](https://railsdesigner.com/rails-icons/phosphor/) (9000+ icons)
85
+ - [Radix](https://railsdesigner.com/rails-icons/radix/) (300+ icons)
86
+ - [SidekickIcons](https://railsdesigner.com/rails-icons/sidekickicons/) (49 icons, complementing [Heroicons](https://railsdesigner.com/rails-icons/heroicons/))
87
+ - [Tabler](https://railsdesigner.com/rails-icons/tabler/) (5700+ icons)
88
+ - [Weather](https://railsdesigner.com/rails-icons/weather/) (215+ icons)
85
89
 
86
90
 
87
91
  ## Animated icons
@@ -93,7 +97,7 @@ Rails Icons also includes a few animated icons. Great for loading states and so
93
97
  - `fading-dots`
94
98
  - `bouncing-dots`
95
99
 
96
- Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as other libraries are available.
100
+ Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as the others libraries are available.
97
101
 
98
102
 
99
103
  ## Custom icon library
@@ -111,7 +115,7 @@ icon "apple", library: "simple_icons", class: "text-black"
111
115
 
112
116
  ## Sync icons
113
117
 
114
- To sync all installed libraries, run
118
+ To sync all libraries, run
115
119
  ```bash
116
120
  rails generate rails_icons:sync
117
121
  ```
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_icons/base_generator"
4
+
3
5
  module RailsIcons
4
- class InitializerGenerator < Rails::Generators::Base
6
+ class InitializerGenerator < RailsIcons::BaseGenerator
5
7
  source_root File.expand_path("templates", __dir__)
6
8
 
7
9
  desc "Create the Rails Icons initializer."
@@ -20,9 +22,9 @@ module RailsIcons
20
22
  return unless File.exist?(INITIALIZER)
21
23
  return if default_configuration_exists?
22
24
 
23
- if options[:libraries].present?
25
+ if libraries.present?
24
26
  default_configuration = <<~RB.indent(2)
25
- config.default_library = "#{options[:libraries].first}"
27
+ config.default_library = "#{libraries.first}"
26
28
  # config.default_variant = "" # Set a default variant for all libraries
27
29
  RB
28
30
 
@@ -76,7 +78,7 @@ module RailsIcons
76
78
  def create_custom_directory = FileUtils.mkdir_p(File.join(options[:destination], options[:custom]))
77
79
 
78
80
  def library_configuration
79
- options[:libraries].map { RailsIcons.libraries[_1.to_sym].initializer_config }.join("\n")
81
+ libraries.map { RailsIcons.libraries[_1.to_sym].initializer_config }.join("\n")
80
82
  end
81
83
 
82
84
  def custom_configuration
@@ -95,5 +97,7 @@ module RailsIcons
95
97
 
96
98
  File.readlines(INITIALIZER).any? { _1.match?(line) }
97
99
  end
100
+
101
+ def libraries = options[:libraries].map(&:downcase)
98
102
  end
99
103
  end
@@ -1,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_icons/base_generator"
4
+
3
5
  module RailsIcons
4
- class InstallGenerator < Rails::Generators::Base
6
+ class InstallGenerator < RailsIcons::BaseGenerator
5
7
  source_root File.expand_path("templates", __dir__)
6
8
 
7
- desc "Install Rails Icons with the choosen libraries. This creates the configuration initializer and will sync the icons."
9
+ desc "Install Rails Icons with the chosen libraries. This creates the configuration initializer and will sync the icons."
8
10
 
9
11
  class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
10
12
  class_option :destination, type: :string, default: RailsIcons.configuration.destination_path, desc: "Specify destination folder for icons"
@@ -22,6 +24,6 @@ module RailsIcons
22
24
 
23
25
  private
24
26
 
25
- def attributes = ["--libraries=#{options[:libraries].join(" ")}", "--destination=#{options[:destination]}"].join(" ")
27
+ def attributes = ["--libraries=#{options[:libraries].map(&:downcase).join(" ")}", "--destination=#{options[:destination]}"].join(" ")
26
28
  end
27
29
  end
@@ -1,25 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails_icons/base_generator"
3
4
  require "rails_icons/sync/engine"
4
5
 
5
6
  module RailsIcons
6
- class SyncGenerator < Rails::Generators::Base
7
+ class SyncGenerator < RailsIcons::BaseGenerator
7
8
  source_root File.expand_path("templates", __dir__)
8
9
 
9
- desc "Sync the choosen icon libraries from their respective git repos."
10
+ desc "Sync the chosen icon libraries from their respective git repos."
10
11
 
11
12
  class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
12
13
 
13
- def sync_icons
14
- raise "[Rails Icons] Not a valid library" if libraries.empty?
15
-
16
- libraries.each { Sync::Engine.new(_1).sync }
17
- end
14
+ def sync_icons = libraries.each { Sync::Engine.new(_1).sync }
18
15
 
19
16
  private
20
17
 
21
18
  def libraries
22
- options[:libraries].presence || synced_libraries
19
+ options[:libraries].map(&:downcase).presence || synced_libraries
23
20
  end
24
21
 
25
22
  def synced_libraries
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class BaseGenerator < Rails::Generators::Base
5
+ def initialize(*arguments)
6
+ super(*arguments)
7
+
8
+ validate!
9
+ end
10
+
11
+ private
12
+
13
+ def validate!
14
+ raise RailsIcons::LibraryNotFound.new("") if options.libraries.empty?
15
+ raise RailsIcons::LibraryNotFound.new(invalid_libraries.join(", ")) if invalid_libraries.any?
16
+ end
17
+
18
+ def invalid_libraries = options.libraries.map(&:to_sym).map(&:downcase).reject { RailsIcons.libraries.key?(_1) }
19
+ end
20
+ end
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = :regular
11
+ options.exclude_variants = []
11
12
 
12
13
  setup_regular_config(options)
13
14
  setup_solid_config(options)
@@ -18,6 +19,8 @@ module RailsIcons
18
19
  def initializer_config
19
20
  <<~RB.indent(2)
20
21
  # Override Boxicons defaults
22
+ # config.libraries.boxicons.exclude_variants = [] # Exclude specific variants
23
+
21
24
  # config.libraries.boxicons.solid.css = "size-6"
22
25
  # config.libraries.boxicons.solid.data = {}
23
26
 
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = nil
11
+ options.exclude_variants = []
11
12
 
12
13
  options.default = default_options
13
14
  end
@@ -16,6 +17,8 @@ module RailsIcons
16
17
  def initializer_config
17
18
  <<~RB.indent(2)
18
19
  # Override Feather defaults
20
+ # config.libraries.feather.exclude_variants = [] # Feather has no variants, this is provided for backwards compatibility
21
+
19
22
  # config.libraries.feather.default.css = "size-6"
20
23
  # config.libraries.feather.default.stroke_width = "2"
21
24
  # config.libraries.feather.default.data = {}
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class Configuration
5
+ module Flags
6
+ extend self
7
+
8
+ def config
9
+ ActiveSupport::OrderedOptions.new.tap do |options|
10
+ options.default_variant = "landscape"
11
+ options.exclude_variants = []
12
+
13
+ setup_square_config(options)
14
+ setup_landscape_config(options)
15
+ end
16
+ end
17
+
18
+ def initializer_config
19
+ <<~RB.indent(2)
20
+ # Override Flags defaults
21
+ # config.libraries.flags.exclude_variants = [:square, :landscape]
22
+
23
+ # config.libraries.flags.square.default.css = "size-6"
24
+ # config.libraries.flags.square.default.data = {}
25
+
26
+ # config.libraries.flags.landscape.default.css = "size-6"
27
+ # config.libraries.flags.landscape.default.data = {}
28
+ RB
29
+ end
30
+
31
+ def source
32
+ {
33
+ url: "https://github.com/lipis/flag-icons.git",
34
+ variants: {
35
+ square: "flags/1x1",
36
+ landscape: "flags/4x3"
37
+ }
38
+ }
39
+ end
40
+
41
+ private
42
+
43
+ def setup_square_config(options)
44
+ options.square = ActiveSupport::OrderedOptions.new
45
+ options.square.default = default_square_options
46
+ end
47
+
48
+ def setup_landscape_config(options)
49
+ options.landscape = ActiveSupport::OrderedOptions.new
50
+ options.landscape.default = default_landscape_options
51
+ end
52
+
53
+ def default_square_options
54
+ ActiveSupport::OrderedOptions.new.tap do |options|
55
+ options.css = "size-6"
56
+ options.data = {}
57
+ end
58
+ end
59
+
60
+ def default_landscape_options
61
+ ActiveSupport::OrderedOptions.new.tap do |options|
62
+ options.css = "size-6"
63
+ options.data = {}
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = :outline
11
+ options.exclude_variants = []
11
12
 
12
13
  setup_outline_config(options)
13
14
  setup_solid_config(options)
@@ -19,6 +20,8 @@ module RailsIcons
19
20
  def initializer_config
20
21
  <<~RB.indent(2)
21
22
  # Override Heroicon defaults
23
+ # config.libraries.heroicons.exclude_variants = [:mini, :micro] # Exclude specific variants
24
+
22
25
  # config.libraries.heroicons.outline.default.css = "size-6"
23
26
  # config.libraries.heroicons.outline.default.stroke_width = "1.5"
24
27
  # config.libraries.heroicons.outline.default.data = {}
@@ -68,16 +71,16 @@ module RailsIcons
68
71
  options.micro.default = default_micro_options
69
72
  end
70
73
 
71
- def default_solid_options
74
+ def default_outline_options
72
75
  ActiveSupport::OrderedOptions.new.tap do |options|
76
+ options.stroke_width = 1.5
73
77
  options.css = "size-6"
74
78
  options.data = {}
75
79
  end
76
80
  end
77
81
 
78
- def default_outline_options
82
+ def default_solid_options
79
83
  ActiveSupport::OrderedOptions.new.tap do |options|
80
- options.stroke_width = 1.5
81
84
  options.css = "size-6"
82
85
  options.data = {}
83
86
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class Configuration
5
+ module Linear
6
+ extend self
7
+
8
+ def config
9
+ ActiveSupport::OrderedOptions.new.tap do |options|
10
+ options.default_variant = nil
11
+ options.exclude_variants = []
12
+
13
+ options.default = default_options
14
+ end
15
+ end
16
+
17
+ def initializer_config
18
+ <<~RB.indent(2)
19
+ # Override Linear defaults
20
+ # config.libraries.linear.exclude_variants = []
21
+
22
+ # config.libraries.linear.default.css = "size-6"
23
+ # config.libraries.linear.default.stroke_width = "2"
24
+ # config.libraries.linear.default.data = {}
25
+ RB
26
+ end
27
+
28
+ def source
29
+ {
30
+ url: "https://github.com/cjpatoilo/linearicons.git",
31
+ variants: {
32
+ ".": "dist/svg" # Linear has no variants, store in the top directory
33
+ }
34
+ }
35
+ end
36
+
37
+ private
38
+
39
+ def default_options
40
+ ActiveSupport::OrderedOptions.new.tap do |options|
41
+ options.stroke_width = "2"
42
+ options.css = "size-6"
43
+ options.data = {}
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = :outline
11
+ options.exclude_variants = []
11
12
 
12
13
  setup_outline_config(options)
13
14
  end
@@ -16,6 +17,8 @@ module RailsIcons
16
17
  def initializer_config
17
18
  <<~RB.indent(2)
18
19
  # Override Lucide defaults
20
+ # config.libraries.lucide.exclude_variants = [] # Exclude specific variants
21
+
19
22
  # config.libraries.lucide.outline.default.css = "size-6"
20
23
  # config.libraries.lucide.outline.default.stroke_width = "1.5"
21
24
  # config.libraries.lucide.outline.default.data = {}
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = :regular
11
+ options.exclude_variants = []
11
12
 
12
13
  setup_bold_config(options)
13
14
  setup_duotone_config(options)
@@ -21,6 +22,8 @@ module RailsIcons
21
22
  def initializer_config
22
23
  <<~RB.indent(2)
23
24
  # Override Phosphor defaults
25
+ # config.libraries.phosphor.exclude_variants = [:duotone, :thin] # Exclude specific variants
26
+
24
27
  # config.libraries.phosphor.bold.default.css = "size-6"
25
28
  # config.libraries.phosphor.bold.default.data = {}
26
29
 
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = nil
11
+ options.exclude_variants = []
11
12
 
12
13
  options.default = default_options
13
14
  end
@@ -16,6 +17,7 @@ module RailsIcons
16
17
  def initializer_config
17
18
  <<~RB.indent(2)
18
19
  # Override Radix defaults
20
+ # config.libraries.radix.exclude_variants = [] # Radix has no variants, this is provided for backwards compatibility
19
21
  # config.libraries.radix.default.css = "size-6"
20
22
  # config.libraries.radix.default.stroke_width = "2"
21
23
  # config.libraries.radix.default.data = {}
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class Configuration
5
+ module Sidekickicons
6
+ extend self
7
+
8
+ def config
9
+ ActiveSupport::OrderedOptions.new.tap do |options|
10
+ options.default_variant = :outline
11
+ options.exclude_variants = []
12
+
13
+ setup_outline_config(options)
14
+ setup_solid_config(options)
15
+ setup_mini_config(options)
16
+ setup_micro_config(options)
17
+ end
18
+ end
19
+
20
+ def initializer_config
21
+ <<~RB.indent(2)
22
+ # Override Sidekickicons defaults
23
+ # config.libraries.sidekickicons.exclude_variants = [:mini, :micro] # Exclude specific variants
24
+
25
+ # config.libraries.sidekickicons.outline.default.css = "size-6"
26
+ # config.libraries.sidekickicons.outline.default.stroke_width = "1.5"
27
+ # config.libraries.sidekickicons.outline.default.data = {}
28
+
29
+ # config.libraries.sidekickicons.solid.default.css = "size-6"
30
+ # config.libraries.sidekickicons.solid.default.data = {}
31
+
32
+ # config.libraries.sidekickicons.mini.default.css = "size-5"
33
+ # config.libraries.sidekickicons.mini.default.data = {}
34
+
35
+ # config.libraries.sidekickicons.micro.default.css = "size-4"
36
+ # config.libraries.sidekickicons.micro.default.data = {}
37
+ RB
38
+ end
39
+
40
+ def source
41
+ {
42
+ url: "https://github.com/ndri/sidekickicons",
43
+ variants: {
44
+ outline: "optimized/24/outline",
45
+ solid: "optimized/24/solid",
46
+ mini: "optimized/20/solid",
47
+ micro: "optimized/16/solid"
48
+ }
49
+ }
50
+ end
51
+
52
+ private
53
+
54
+ def setup_outline_config(options)
55
+ options.outline = ActiveSupport::OrderedOptions.new
56
+ options.outline.default = default_outline_options
57
+ end
58
+
59
+ def setup_solid_config(options)
60
+ options.solid = ActiveSupport::OrderedOptions.new
61
+ options.solid.default = default_solid_options
62
+ end
63
+
64
+ def setup_mini_config(options)
65
+ options.mini = ActiveSupport::OrderedOptions.new
66
+ options.mini.default = default_mini_options
67
+ end
68
+
69
+ def setup_micro_config(options)
70
+ options.micro = ActiveSupport::OrderedOptions.new
71
+ options.micro.default = default_micro_options
72
+ end
73
+
74
+ def default_solid_options
75
+ ActiveSupport::OrderedOptions.new.tap do |options|
76
+ options.css = "size-6"
77
+ options.data = {}
78
+ end
79
+ end
80
+
81
+ def default_outline_options
82
+ ActiveSupport::OrderedOptions.new.tap do |options|
83
+ options.stroke_width = 1.5
84
+ options.css = "size-6"
85
+ options.data = {}
86
+ end
87
+ end
88
+
89
+ def default_mini_options
90
+ ActiveSupport::OrderedOptions.new.tap do |options|
91
+ options.css = "size-5"
92
+ options.data = {}
93
+ end
94
+ end
95
+
96
+ def default_micro_options
97
+ ActiveSupport::OrderedOptions.new.tap do |options|
98
+ options.css = "size-4"
99
+ options.data = {}
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -8,6 +8,7 @@ module RailsIcons
8
8
  def config
9
9
  ActiveSupport::OrderedOptions.new.tap do |options|
10
10
  options.default_variant = :outline
11
+ options.exclude_variants = []
11
12
 
12
13
  setup_outline_config(options)
13
14
  setup_filled_config(options)
@@ -17,6 +18,9 @@ module RailsIcons
17
18
  def initializer_config
18
19
  <<~RB.indent(2)
19
20
  # Override Tabler defaults
21
+ # config.libraries.tabler.exclude_variants = [] # Exclude specific variants
22
+
23
+ # config.libraries.tabler.regular.default.css = "size-6"
20
24
  # config.libraries.tabler.solid.default.css = "size-6"
21
25
  # config.libraries.tabler.solid.default.data = {}
22
26
 
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsIcons
4
+ class Configuration
5
+ module Weather
6
+ extend self
7
+
8
+ def config
9
+ ActiveSupport::OrderedOptions.new.tap do |options|
10
+ options.default_variant = nil
11
+ options.exclude_variants = []
12
+
13
+ options.default = default_options
14
+ end
15
+ end
16
+
17
+ def initializer_config
18
+ <<~RB.indent(2)
19
+ # Override Weather defaults
20
+ # config.libraries.weather.exclude_variants = []
21
+
22
+ # config.libraries.weather.default.css = "size-6"
23
+ # config.libraries.weather.default.data = {}
24
+ RB
25
+ end
26
+
27
+ def source
28
+ {
29
+ url: "https://github.com/erikflowers/weather-icons.git",
30
+ variants: {
31
+ ".": "svg" # Weather has no variants, store in the top directory
32
+ }
33
+ }
34
+ end
35
+
36
+ def transformations
37
+ {
38
+ filenames: {
39
+ delete_prefix: ["wi-"]
40
+ }
41
+ }
42
+ end
43
+
44
+ private
45
+
46
+ def default_options
47
+ ActiveSupport::OrderedOptions.new.tap do |options|
48
+ options.css = "size-6"
49
+ options.data = {}
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsIcons
4
- class NotFound < StandardError; end
4
+ class IconNotFound < StandardError
5
+ def initialize(icon_name)
6
+ super("The icon `#{icon_name}` is not available. Please check the icon name and try again.")
7
+ end
8
+ end
9
+
10
+ class LibraryNotFound < StandardError
11
+ def initialize(library_name)
12
+ if library_name.empty?
13
+ super("No libraries were specified. Please choose from: #{RailsIcons.libraries.keys.to_sentence(last_word_connector: " or ")}")
14
+ else
15
+ super("The library `#{library_name}` is not available. Please check the library name and try again.")
16
+ end
17
+ end
18
+ end
5
19
  end
@@ -13,7 +13,7 @@ module RailsIcons
13
13
 
14
14
  icon_path = icons_path_in_app || icons_path_in_engines
15
15
 
16
- raise RailsIcons::NotFound if icon_path.nil?
16
+ raise RailsIcons::IconNotFound if icon_path.nil?
17
17
 
18
18
  icon_path
19
19
  end
@@ -10,7 +10,7 @@ class RailsIcons::Icon
10
10
  end
11
11
 
12
12
  def svg
13
- raise RailsIcons::NotFound, error_message unless File.exist?(file_path)
13
+ raise RailsIcons::IconNotFound, error_message unless File.exist?(file_path)
14
14
 
15
15
  Nokogiri::HTML::DocumentFragment.parse(File.read(file_path))
16
16
  .at_css("svg")
@@ -1,11 +1,15 @@
1
1
  require_relative "configuration/animated"
2
2
  require_relative "configuration/boxicons"
3
3
  require_relative "configuration/feather"
4
+ require_relative "configuration/flags"
4
5
  require_relative "configuration/heroicons"
6
+ require_relative "configuration/linear"
5
7
  require_relative "configuration/lucide"
6
8
  require_relative "configuration/phosphor"
7
9
  require_relative "configuration/radix"
10
+ require_relative "configuration/sidekickicons"
8
11
  require_relative "configuration/tabler"
12
+ require_relative "configuration/weather"
9
13
 
10
14
  module RailsIcons
11
15
  extend self
@@ -14,11 +18,15 @@ module RailsIcons
14
18
  {
15
19
  boxicons: RailsIcons::Configuration::Boxicons,
16
20
  feather: RailsIcons::Configuration::Feather,
21
+ flags: RailsIcons::Configuration::Flags,
17
22
  heroicons: RailsIcons::Configuration::Heroicons,
23
+ linear: RailsIcons::Configuration::Linear,
18
24
  lucide: RailsIcons::Configuration::Lucide,
19
25
  phosphor: RailsIcons::Configuration::Phosphor,
20
26
  radix: RailsIcons::Configuration::Radix,
21
- tabler: RailsIcons::Configuration::Tabler
27
+ sidekickicons: RailsIcons::Configuration::Sidekickicons,
28
+ tabler: RailsIcons::Configuration::Tabler,
29
+ weather: RailsIcons::Configuration::Weather
22
30
  }
23
31
  end
24
32
  end
@@ -32,12 +32,12 @@ module RailsIcons
32
32
 
33
33
  private
34
34
 
35
- TEMP_DIRECTORY = Rails.root.join("tmp/icons").freeze
35
+ TEMP_DIRECTORY = Rails.root.join("tmp/rails_icons").freeze
36
36
 
37
37
  def clone_repository
38
38
  raise "[Rails Icons] Failed to clone repository" unless system("git clone '#{@library[:url]}' '#{@temp_directory}'")
39
39
 
40
- say "'#{@name}' repository cloned successfully."
40
+ say "[Rails Icons] '#{@name}' repository cloned successfully."
41
41
  end
42
42
 
43
43
  def process_variants = Sync::ProcessVariants.new(@temp_directory, @name, @library).process
@@ -12,8 +12,11 @@ module RailsIcons
12
12
 
13
13
  def process
14
14
  original_variants = Dir.children(@temp_directory)
15
+ excluded_variants = RailsIcons.configuration.libraries.dig(@name.to_sym)&.exclude_variants || []
15
16
 
16
17
  @library[:variants].each do |variant_name, variant_source_path|
18
+ next if excluded_variants.include?(variant_name)
19
+
17
20
  source = File.join(@temp_directory, variant_source_path)
18
21
  destination = File.join(@temp_directory, variant_name.to_s)
19
22
 
@@ -26,7 +29,8 @@ module RailsIcons
26
29
  apply_transformations_to(destination)
27
30
  end
28
31
 
29
- remove_files_and_folders(original_variants)
32
+ remove_files_and_folders_for(original_variants)
33
+ remove_previously_downloaded(excluded_variants)
30
34
 
31
35
  say "[Rails Icons] Icon variants processed successfully"
32
36
  end
@@ -50,12 +54,18 @@ module RailsIcons
50
54
  end
51
55
  end
52
56
 
53
- def remove_files_and_folders(paths)
57
+ def remove_files_and_folders_for(paths)
54
58
  paths.each do |path|
55
59
  FileUtils.rm_rf(File.join(@temp_directory, path))
56
60
  end
57
61
  end
58
62
 
63
+ def remove_previously_downloaded(variants)
64
+ variants.each do |variant|
65
+ FileUtils.rm_rf(File.join(RailsIcons.configuration.destination_path, @name, variant.to_s))
66
+ end
67
+ end
68
+
59
69
  def transformations
60
70
  RailsIcons.libraries.dig(@name.to_sym)&.try(:transformations) || {}
61
71
  end
@@ -1,3 +1,3 @@
1
1
  module RailsIcons
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_icons
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rails Designer Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-13 00:00:00.000000000 Z
11
+ date: 2025-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -70,15 +70,20 @@ files:
70
70
  - lib/generators/rails_icons/sync_generator.rb
71
71
  - lib/generators/rails_icons/templates/initializer.rb.tt
72
72
  - lib/rails_icons.rb
73
+ - lib/rails_icons/base_generator.rb
73
74
  - lib/rails_icons/configuration.rb
74
75
  - lib/rails_icons/configuration/animated.rb
75
76
  - lib/rails_icons/configuration/boxicons.rb
76
77
  - lib/rails_icons/configuration/feather.rb
78
+ - lib/rails_icons/configuration/flags.rb
77
79
  - lib/rails_icons/configuration/heroicons.rb
80
+ - lib/rails_icons/configuration/linear.rb
78
81
  - lib/rails_icons/configuration/lucide.rb
79
82
  - lib/rails_icons/configuration/phosphor.rb
80
83
  - lib/rails_icons/configuration/radix.rb
84
+ - lib/rails_icons/configuration/sidekickicons.rb
81
85
  - lib/rails_icons/configuration/tabler.rb
86
+ - lib/rails_icons/configuration/weather.rb
82
87
  - lib/rails_icons/engine.rb
83
88
  - lib/rails_icons/errors.rb
84
89
  - lib/rails_icons/helpers/icon_helper.rb