Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:

jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
name: Ruby ${{ matrix.ruby }}
strategy:
matrix:
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
/pkg/
/spec/reports/
/tmp/
.DS_Store
.DS_Store
test/dummy/log/*.log
9 changes: 5 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ GEM
marcel (1.0.4)
method_source (1.0.0)
mini_mime (1.1.5)
mini_portile2 (2.8.5)
mini_portile2 (2.8.8)
minitest (5.22.3)
net-imap (0.4.10)
date
Expand All @@ -116,10 +116,10 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.1)
nokogiri (1.16.4)
nokogiri (1.18.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.16.4-arm64-darwin)
nokogiri (1.18.3-arm64-darwin)
racc (~> 1.4)
parallel (1.24.0)
parser (3.3.0.5)
Expand All @@ -132,7 +132,7 @@ GEM
railties (>= 7.0.0)
psych (5.1.2)
stringio
racc (1.7.3)
racc (1.8.1)
rack (2.2.9)
rack-test (2.1.0)
rack (>= 1.3)
Expand Down Expand Up @@ -215,6 +215,7 @@ GEM
PLATFORMS
arm64-darwin-22
ruby
x86_64-linux

DEPENDENCIES
debug (~> 1.9, >= 1.9.2)
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ rails generate rails_icons:install --libraries=LIBRARY_NAME
```bash
rails generate rails_icons:install --libraries=heroicons

Or multiple at once
# Or multiple at once
rails generate rails_icons:install --libraries=heroicons lucide
```

Expand All @@ -54,16 +54,16 @@ icon "check"
# Use another variant
icon "check", variant: "solid"

# Set library explictly
# Set library explicitly
icon "check", library: "heroicons"

# Add CSS
icon "check", class: "text-green-500"

# Add CSS with class_names
# article: https://railsdesigner.com/conditional-css-classes-in-rails/
# docs: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list
icon "check", class: ["size-4", "bg-red-500": !verified?, "bg-green-500": verified?]
# Article: https://railsdesigner.com/conditional-css-classes-in-rails/
# Documentation: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-token_list

# Add data attributes
icon "check", data: { controller: "swap" }
Expand Down Expand Up @@ -94,7 +94,7 @@ Rails Icons also includes a few animated icons. Great for loading states and so
- `fading-dots`
- `bouncing-dots`

Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as other libraries are available.
Use like this: `icon "faded-spinner", library: "animated"`. The same attributes as the others libraries are available.


## Custom icon library
Expand All @@ -112,7 +112,7 @@ icon "apple", library: "simple_icons", class: "text-black"

## Sync icons

To sync all installed libraries, run
To sync all libraries, run
```bash
rails generate rails_icons:sync
```
Expand Down
2 changes: 1 addition & 1 deletion lib/generators/rails_icons/install_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module RailsIcons
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("templates", __dir__)

desc "Install Rails Icons with the choosen libraries. This creates the configuration initializer and will sync the icons."
desc "Install Rails Icons with the chosen libraries. This creates the configuration initializer and will sync the icons."

class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"
class_option :destination, type: :string, default: RailsIcons.configuration.destination_path, desc: "Specify destination folder for icons"
Expand Down
2 changes: 1 addition & 1 deletion lib/generators/rails_icons/sync_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ module RailsIcons
class SyncGenerator < Rails::Generators::Base
source_root File.expand_path("templates", __dir__)

desc "Sync the choosen icon libraries from their respective git repos."
desc "Sync the chosen icon libraries from their respective git repos."

class_option :libraries, type: :array, default: [], desc: "Choose libraries (#{RailsIcons.libraries.keys.join("/")})"

Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/boxicons.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Boxicons
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :regular
options.exclude_variants = []

setup_regular_config(options)
setup_solid_config(options)
Expand All @@ -18,6 +19,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Boxicons defaults
# config.libraries.boxicons.exclude_variants = [] # Exclude specific variants

# config.libraries.boxicons.solid.css = "size-6"
# config.libraries.boxicons.solid.data = {}

Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/feather.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Feather
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = nil
options.exclude_variants = []

options.default = default_options
end
Expand All @@ -16,6 +17,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Feather defaults
# config.libraries.feather.exclude_variants = [] # Feather has no variants, this is provided for backwards compatibility

# config.libraries.feather.default.css = "size-6"
# config.libraries.feather.default.stroke_width = "2"
# config.libraries.feather.default.data = {}
Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/heroicons.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Heroicons
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :outline
options.exclude_variants = []

setup_outline_config(options)
setup_solid_config(options)
Expand All @@ -19,6 +20,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Heroicon defaults
# config.libraries.heroicons.exclude_variants = [:mini, :micro] # Exclude specific variants

# config.libraries.heroicons.outline.default.css = "size-6"
# config.libraries.heroicons.outline.default.stroke_width = "1.5"
# config.libraries.heroicons.outline.default.data = {}
Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/lucide.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Lucide
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :outline
options.exclude_variants = []

setup_outline_config(options)
end
Expand All @@ -16,6 +17,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Lucide defaults
# config.libraries.lucide.exclude_variants = [] # Exclude specific variants

# config.libraries.lucide.outline.default.css = "size-6"
# config.libraries.lucide.outline.default.stroke_width = "1.5"
# config.libraries.lucide.outline.default.data = {}
Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/phosphor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Phosphor
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :regular
options.exclude_variants = []

setup_bold_config(options)
setup_duotone_config(options)
Expand All @@ -21,6 +22,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Phosphor defaults
# config.libraries.phosphor.exclude_variants = [:duotone, :thin] # Exclude specific variants

# config.libraries.phosphor.bold.default.css = "size-6"
# config.libraries.phosphor.bold.default.data = {}

Expand Down
2 changes: 2 additions & 0 deletions lib/rails_icons/configuration/radix.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Radix
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = nil
options.exclude_variants = []

options.default = default_options
end
Expand All @@ -16,6 +17,7 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Radix defaults
# config.libraries.radix.exclude_variants = [] # Radix has no variants, this is provided for backwards compatibility
# config.libraries.radix.default.css = "size-6"
# config.libraries.radix.default.stroke_width = "2"
# config.libraries.radix.default.data = {}
Expand Down
3 changes: 3 additions & 0 deletions lib/rails_icons/configuration/sidekickicons.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Sidekickicons
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :outline
options.exclude_variants = []

setup_outline_config(options)
setup_solid_config(options)
Expand All @@ -19,6 +20,8 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Sidekickicons defaults
# config.libraries.sidekickicons.exclude_variants = [:mini, :micro] # Exclude specific variants

# config.libraries.sidekickicons.outline.default.css = "size-6"
# config.libraries.sidekickicons.outline.default.stroke_width = "1.5"
# config.libraries.sidekickicons.outline.default.data = {}
Expand Down
4 changes: 4 additions & 0 deletions lib/rails_icons/configuration/tabler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module Tabler
def config
ActiveSupport::OrderedOptions.new.tap do |options|
options.default_variant = :outline
options.exclude_variants = []

setup_outline_config(options)
setup_filled_config(options)
Expand All @@ -17,6 +18,9 @@ def config
def initializer_config
<<~RB.indent(2)
# Override Tabler defaults
# config.libraries.tabler.exclude_variants = [] # Exclude specific variants

# config.libraries.tabler.regular.default.css = "size-6"
# config.libraries.tabler.solid.default.css = "size-6"
# config.libraries.tabler.solid.default.data = {}

Expand Down
14 changes: 12 additions & 2 deletions lib/rails_icons/sync/process_variants.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ def initialize(temp_directory, name, library)

def process
original_variants = Dir.children(@temp_directory)
excluded_variants = RailsIcons.configuration.libraries.dig(@name.to_sym)&.exclude_variants || []

@library[:variants].each do |variant_name, variant_source_path|
next if excluded_variants.include?(variant_name)

source = File.join(@temp_directory, variant_source_path)
destination = File.join(@temp_directory, variant_name.to_s)

Expand All @@ -26,7 +29,8 @@ def process
apply_transformations_to(destination)
end

remove_files_and_folders(original_variants)
remove_files_and_folders_for(original_variants)
remove_previously_downloaded(excluded_variants)

say "[Rails Icons] Icon variants processed successfully"
end
Expand All @@ -50,12 +54,18 @@ def apply_transformations_to(destination)
end
end

def remove_files_and_folders(paths)
def remove_files_and_folders_for(paths)
paths.each do |path|
FileUtils.rm_rf(File.join(@temp_directory, path))
end
end

def remove_previously_downloaded(variants)
variants.each do |variant|
FileUtils.rm_rf(File.join(RailsIcons.configuration.destination_path, @name, variant.to_s))
end
end

def transformations
RailsIcons.libraries.dig(@name.to_sym)&.try(:transformations) || {}
end
Expand Down
2 changes: 1 addition & 1 deletion test/icon_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class IconTest < ActiveSupport::TestCase
end

test "it parses class attributes" do
assert_match(/class="present"/, icon("academic-cap", class: ["present": true, "not-presnt": false]), "SVG should contain 'class=\"present\"'")
assert_match(/class="present"/, icon("academic-cap", class: ["present": true, "not-present": false]), "SVG should contain 'class=\"present\"'")
end

test "setting variant, it returns a SVG" do
Expand Down
Loading