class ComponentGenerator

Public Instance Methods

clear_component() click to toggle source
# File lib/generators/component/component_generator.rb, line 69
def clear_component
  return unless destroying?

  base_path = default_path + "components"
  base_path_dup = base_path.dup

  paths = split_name[0..-2].map do |split|
    base_path_dup += split
    [base_path_dup, split]
  end

  paths.reverse.each do |(path, split)|
    FileUtils.rm_rf(component_path)

    Dir.chdir(path)
    directories = Dir.glob("*").select do |entry|
      File.directory?(entry)
    end

    if directories.size == 0
      FileUtils.rm_rf(path)
      remove_line!(base_path + "index.js", split)
    else
      remove_line!(path + "index.js", component_name)
    end
  end

  FileUtils.rm_rf(component_path)
  remove_line!(base_path + "index.js", component_name)
end
create_css_file() click to toggle source
# File lib/generators/component/component_generator.rb, line 13
def create_css_file
  template "#{stylesheet_engine}.erb", component_path + "#{name_with_namespace}.#{stylesheet_engine}"
end
create_js_file() click to toggle source
# File lib/generators/component/component_generator.rb, line 17
def create_js_file
  template "js.erb", component_path + "#{name_with_namespace}.js"
  if stimulus?
    template "stimulus_controller_js.erb", component_path + "#{name_with_namespace}_controller.js"
  end
end
create_locale_files() click to toggle source
# File lib/generators/component/component_generator.rb, line 28
def create_locale_files
  return unless locale?

  I18n.available_locales.each do |locale|
    @locale = locale
    template "locale.erb", component_path + "#{name_with_namespace}.#{locale}.yml"
  end
end
create_rb_file() click to toggle source
# File lib/generators/component/component_generator.rb, line 24
def create_rb_file
  template "rb.erb", component_path + "#{module_name.underscore}.rb"
end
create_view_file() click to toggle source
# File lib/generators/component/component_generator.rb, line 9
def create_view_file
  template "#{template_prefix}view.html.#{template_engine}.erb", component_path + "_#{name_with_namespace.underscore}.html.#{template_engine}"
end
import_to_packs() click to toggle source
# File lib/generators/component/component_generator.rb, line 37
def import_to_packs
  root_path = default_path
  base_path = root_path + "components"

  imports = []

  split_name[0..-2].each do |split|
    base_path += split
    file_path = base_path + "index.js"
    create_file(file_path) unless File.exist?(file_path)
    imports << base_path.relative_path_from(root_path)
  end

  root_path_dup = root_path.dup

  [Pathname.new("components"), *split_name[0..-2]].each do |split|
    root_path_dup += split
    import = imports.shift
    if import
      append_to_file(root_path_dup + "index.js") do
        "\nimport \"#{import}\";\n"
      end
      sort_lines_alphabetically!(root_path_dup + "index.js")
    end
  end

  append_to_file(base_path + "index.js") do
    "\nimport \"#{base_path.relative_path_from(root_path)}/#{component_name}/#{name_with_namespace.underscore}\";\n"
  end
  sort_lines_alphabetically!(base_path + "index.js")
end

Protected Instance Methods

component_class_name() click to toggle source
# File lib/generators/component/component_generator.rb, line 124
def component_class_name
  name_with_namespace.dasherize
end
component_name() click to toggle source
# File lib/generators/component/component_generator.rb, line 128
def component_name
  split_name.last.underscore
end
component_path() click to toggle source
# File lib/generators/component/component_generator.rb, line 114
def component_path
  path_parts = [default_path, "components", *split_name]

  Pathname.new(path_parts.join("/"))
end
default_path() click to toggle source
# File lib/generators/component/component_generator.rb, line 140
def default_path
  rails_configuration.komponent.root
end
locale?() click to toggle source
# File lib/generators/component/component_generator.rb, line 144
def locale?
  return options[:locale] if options[:locale]
  komponent_configuration[:locale]
end
module_name() click to toggle source
# File lib/generators/component/component_generator.rb, line 120
def module_name
  "#{name_with_namespace}_component".camelize
end
name_with_namespace() click to toggle source
# File lib/generators/component/component_generator.rb, line 110
def name_with_namespace
  split_name.join("_")
end
split_name() click to toggle source
# File lib/generators/component/component_generator.rb, line 106
def split_name
  name.split(/[:,::,\/]/).reject(&:blank?).map(&:underscore)
end
stimulus?() click to toggle source
# File lib/generators/component/component_generator.rb, line 149
def stimulus?
  return options[:stimulus] if options[:stimulus]
  komponent_configuration[:stimulus]
end
stylesheet_engine() click to toggle source
# File lib/generators/component/component_generator.rb, line 136
def stylesheet_engine
  rails_configuration.komponent.stylesheet_engine
end
template_engine() click to toggle source
# File lib/generators/component/component_generator.rb, line 132
def template_engine
  app_generators.rails[:template_engine] || :erb
end
template_prefix() click to toggle source
# File lib/generators/component/component_generator.rb, line 102
def template_prefix
  stimulus? ? "stimulus_" : ""
end

Private Instance Methods

app_generators() click to toggle source
# File lib/generators/component/component_generator.rb, line 167
def app_generators
  rails_configuration.app_generators
end
destroying?() click to toggle source
# File lib/generators/component/component_generator.rb, line 199
def destroying?
  self.behavior == :revoke
end
komponent_configuration() click to toggle source
# File lib/generators/component/component_generator.rb, line 156
def komponent_configuration
  {
    stimulus: nil,
    locale: nil,
  }.merge(app_generators.komponent)
end
rails_configuration() click to toggle source
# File lib/generators/component/component_generator.rb, line 163
def rails_configuration
  Rails.application.config
end
remove_line!(path, component_name) click to toggle source
# File lib/generators/component/component_generator.rb, line 187
def remove_line!(path, component_name)
  lines = File.readlines(path).map do |line|
    line unless line =~ /#{component_name}/
  end.compact

  File.open(path, "w") do |f|
    lines.each do |line|
      f.write(line)
    end
  end
end
sort_lines_alphabetically!(path) click to toggle source
# File lib/generators/component/component_generator.rb, line 171
def sort_lines_alphabetically!(path)
  lines = File.readlines(path).map do |line|
    line if line =~ /^import ["'](.*)["'];$/
  end.compact

  return if lines.empty?

  lines = lines.uniq.sort

  File.open(path, "w") do |f|
    lines.each do |line|
      f.write(line)
    end
  end
end