k_starter 0.1.0 → 0.1.1
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/.builders/generators/01-bootstrap.rb +16 -16
 - data/.rubocop.yml +14 -0
 - data/CHANGELOG.md +7 -0
 - data/Gemfile +22 -0
 - data/README.md +1 -1
 - data/exe/k_starter +15 -0
 - data/ext/k_starter/extconf.rb +5 -0
 - data/ext/k_starter/k_starter.c +9 -0
 - data/ext/k_starter/k_starter.h +6 -0
 - data/lib/k_starter/app.rb +16 -0
 - data/lib/k_starter/app_generator.rb +198 -0
 - data/lib/k_starter/cli.rb +63 -0
 - data/lib/k_starter/commands/.keep +1 -0
 - data/lib/k_starter/commands/command.rb +54 -0
 - data/lib/k_starter/commands/configuration/configuration_menu.rb +46 -0
 - data/lib/k_starter/commands/project/bootstrap_project.rb +28 -0
 - data/lib/k_starter/commands/project/edit_project.rb +34 -0
 - data/lib/k_starter/commands/project/new_project.rb +28 -0
 - data/lib/k_starter/commands/project/project_menu.rb +51 -0
 - data/lib/k_starter/commands/project/select_new_project_type.rb +44 -0
 - data/lib/k_starter/database/base_model.rb +21 -0
 - data/lib/k_starter/database/config_model.rb +99 -0
 - data/lib/k_starter/database/project_model.rb +94 -0
 - data/lib/k_starter/map.rb +46 -0
 - data/lib/k_starter/questions/ask_questions.rb +20 -0
 - data/lib/k_starter/questions/base_question.rb +208 -0
 - data/lib/k_starter/questions/gem.rb +132 -0
 - data/lib/k_starter/questions/rails.rb +162 -0
 - data/lib/k_starter/questions/svelte.rb +52 -0
 - data/lib/k_starter/r7_hotwire.rb +98 -0
 - data/lib/k_starter/schema.rb +89 -0
 - data/lib/k_starter/starters/base.rb +80 -0
 - data/lib/k_starter/starters/gem.rb +71 -0
 - data/lib/k_starter/starters/nuxt.rb +29 -0
 - data/lib/k_starter/starters/rails.rb +29 -0
 - data/lib/k_starter/starters/svelte.rb +45 -0
 - data/lib/k_starter/tty_helpers.rb +118 -0
 - data/lib/k_starter/version.rb +1 -1
 - data/lib/k_starter.rb +44 -1
 - data/package-lock.json +2 -2
 - data/package.json +1 -1
 - metadata +172 -1
 
| 
         @@ -0,0 +1,132 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Questions
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Ask code generations for a new GEM.
         
     | 
| 
      
 6 
     | 
    
         
            +
                class BaseGem < BaseQuestion
         
     | 
| 
      
 7 
     | 
    
         
            +
                  attr_reader :exe            # has executable folder
         
     | 
| 
      
 8 
     | 
    
         
            +
                  attr_reader :coc            # has code of conduct
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_reader :mit            # has MIT license
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_reader :rspec          # has rspec tests
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def initialize(**args)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    args = { type: :gem }.merge(args)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def ask_questions
         
     | 
| 
      
 18 
     | 
    
         
            +
                    ask_name
         
     | 
| 
      
 19 
     | 
    
         
            +
                    ask_root_path
         
     | 
| 
      
 20 
     | 
    
         
            +
                    ask_github_key
         
     | 
| 
      
 21 
     | 
    
         
            +
                    ask_description
         
     | 
| 
      
 22 
     | 
    
         
            +
                    story_questions
         
     | 
| 
      
 23 
     | 
    
         
            +
                    klue_template_questions
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    ask_exe
         
     | 
| 
      
 26 
     | 
    
         
            +
                    ask_coc
         
     | 
| 
      
 27 
     | 
    
         
            +
                    ask_mit
         
     | 
| 
      
 28 
     | 
    
         
            +
                    ask_rspec
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def to_h
         
     | 
| 
      
 32 
     | 
    
         
            +
                    super.merge(
         
     | 
| 
      
 33 
     | 
    
         
            +
                      {
         
     | 
| 
      
 34 
     | 
    
         
            +
                        exe: exe,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        coc: coc,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        mit: mit,
         
     | 
| 
      
 37 
     | 
    
         
            +
                        rspec: rspec
         
     | 
| 
      
 38 
     | 
    
         
            +
                      }
         
     | 
| 
      
 39 
     | 
    
         
            +
                    )
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  def to_dom
         
     | 
| 
      
 43 
     | 
    
         
            +
                    KStarter::Schema::GemProject.new(to_h)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  private
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  def initialize_attributes(**args)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    @exe = args[:exe]
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @coc = args[:coc]
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @mit = args[:mit]
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @rspec = args[:rspec]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def apply_attribute_defaults
         
     | 
| 
      
 58 
     | 
    
         
            +
                    default_story_active
         
     | 
| 
      
 59 
     | 
    
         
            +
                    default_klue_template_active
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    default_exe
         
     | 
| 
      
 62 
     | 
    
         
            +
                    default_coc
         
     | 
| 
      
 63 
     | 
    
         
            +
                    default_mit
         
     | 
| 
      
 64 
     | 
    
         
            +
                    default_rspec
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  def question
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @question ||= prompt
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  def ask_name
         
     | 
| 
      
 72 
     | 
    
         
            +
                    @name = question.ask('Name (ruby GEM)') do |q|
         
     | 
| 
      
 73 
     | 
    
         
            +
                      q.default(name) unless name.nil?
         
     | 
| 
      
 74 
     | 
    
         
            +
                      q.required(true, 'GEM name is required, and can only contain letters, numbers, and underscores.')
         
     | 
| 
      
 75 
     | 
    
         
            +
                      q.validate(/\A\w+\Z/)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  def ask_exe
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @exe = question.yes?('Has executable folder?', default: exe)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  def default_exe
         
     | 
| 
      
 84 
     | 
    
         
            +
                    @exe = false if @exe.nil?
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  def ask_coc
         
     | 
| 
      
 88 
     | 
    
         
            +
                    @coc = question.yes?('Has code of conduct?', default: coc)
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                  def default_coc
         
     | 
| 
      
 92 
     | 
    
         
            +
                    @coc = true if @coc.nil?
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  def ask_mit
         
     | 
| 
      
 96 
     | 
    
         
            +
                    @mit = question.yes?('Has MIT license?', default: mit)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  def default_mit
         
     | 
| 
      
 100 
     | 
    
         
            +
                    @mit = true if @mit.nil?
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  def ask_rspec
         
     | 
| 
      
 104 
     | 
    
         
            +
                    @rspec = question.yes?('Has rspec tests?', default: rspec)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                  def default_rspec
         
     | 
| 
      
 108 
     | 
    
         
            +
                    @rspec = true if @rspec.nil?
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                # Ask code generations for a new Ruby GEM project.
         
     | 
| 
      
 113 
     | 
    
         
            +
                class LibraryGem < KStarter::Questions::BaseGem
         
     | 
| 
      
 114 
     | 
    
         
            +
                  def initialize(**args)
         
     | 
| 
      
 115 
     | 
    
         
            +
                    args = { variant: :library }.merge(args)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
                end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                # Ask code generations for a new Ruby command line GEM project.
         
     | 
| 
      
 121 
     | 
    
         
            +
                class CliGem < KStarter::Questions::BaseGem
         
     | 
| 
      
 122 
     | 
    
         
            +
                  def initialize(**args)
         
     | 
| 
      
 123 
     | 
    
         
            +
                    args = { variant: :cli }.merge(args)
         
     | 
| 
      
 124 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 125 
     | 
    
         
            +
                  end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  def default_exe
         
     | 
| 
      
 128 
     | 
    
         
            +
                    @exe = true if @exe.nil?
         
     | 
| 
      
 129 
     | 
    
         
            +
                  end
         
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
              end
         
     | 
| 
      
 132 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,162 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Questions
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Ask code generations for a new GEM.
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Rails < BaseQuestion
         
     | 
| 
      
 7 
     | 
    
         
            +
                  attr_reader :include_action_text
         
     | 
| 
      
 8 
     | 
    
         
            +
                  attr_reader :include_active_storage
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_reader :include_sample_models
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_reader :include_javascript_libraries
         
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_reader :include_devise
         
     | 
| 
      
 12 
     | 
    
         
            +
                  attr_reader :include_rspec
         
     | 
| 
      
 13 
     | 
    
         
            +
                  attr_reader :include_common_pages
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_reader :run_db_migrate
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def initialize(**args)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    args = { type: 'rails' }.merge(args)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def ask_questions
         
     | 
| 
      
 22 
     | 
    
         
            +
                    ask_name
         
     | 
| 
      
 23 
     | 
    
         
            +
                    ask_root_path
         
     | 
| 
      
 24 
     | 
    
         
            +
                    ask_github_key
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ask_description
         
     | 
| 
      
 26 
     | 
    
         
            +
                    story_questions
         
     | 
| 
      
 27 
     | 
    
         
            +
                    klue_template_questions
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    ask_include_action_text
         
     | 
| 
      
 30 
     | 
    
         
            +
                    ask_include_active_storage
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ask_include_sample_models
         
     | 
| 
      
 32 
     | 
    
         
            +
                    ask_include_javascript_libraries
         
     | 
| 
      
 33 
     | 
    
         
            +
                    ask_include_devise
         
     | 
| 
      
 34 
     | 
    
         
            +
                    ask_include_rspec
         
     | 
| 
      
 35 
     | 
    
         
            +
                    ask_include_common_pages
         
     | 
| 
      
 36 
     | 
    
         
            +
                    ask_run_db_migrate
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def to_h
         
     | 
| 
      
 40 
     | 
    
         
            +
                    super.merge(
         
     | 
| 
      
 41 
     | 
    
         
            +
                      {
         
     | 
| 
      
 42 
     | 
    
         
            +
                        include_action_text: include_action_text,
         
     | 
| 
      
 43 
     | 
    
         
            +
                        include_active_storage: include_active_storage,
         
     | 
| 
      
 44 
     | 
    
         
            +
                        include_sample_models: include_sample_models,
         
     | 
| 
      
 45 
     | 
    
         
            +
                        include_javascript_libraries: include_javascript_libraries,
         
     | 
| 
      
 46 
     | 
    
         
            +
                        include_devise: include_devise,
         
     | 
| 
      
 47 
     | 
    
         
            +
                        include_rspec: include_rspec,
         
     | 
| 
      
 48 
     | 
    
         
            +
                        include_common_pages: include_common_pages,
         
     | 
| 
      
 49 
     | 
    
         
            +
                        run_db_migrate: run_db_migrate
         
     | 
| 
      
 50 
     | 
    
         
            +
                      }
         
     | 
| 
      
 51 
     | 
    
         
            +
                    )
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  def to_dom
         
     | 
| 
      
 55 
     | 
    
         
            +
                    KStarter::Schema::RailsProject.new(to_h)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  private
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  def initialize_attributes(**args)
         
     | 
| 
      
 61 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    @include_action_text = args[:include_action_text]
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @include_active_storage = args[:include_active_storage]
         
     | 
| 
      
 65 
     | 
    
         
            +
                    @include_sample_models = args[:include_sample_models]
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @include_javascript_libraries = args[:include_javascript_libraries]
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @include_devise = args[:include_devise]
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @include_rspec = args[:include_rspec]
         
     | 
| 
      
 69 
     | 
    
         
            +
                    @include_common_pages = args[:include_common_pages]
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @run_db_migrate = args[:run_db_migrate]
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  def apply_attribute_defaults
         
     | 
| 
      
 74 
     | 
    
         
            +
                    default_story_active
         
     | 
| 
      
 75 
     | 
    
         
            +
                    default_klue_template_active
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    default_include_action_text
         
     | 
| 
      
 78 
     | 
    
         
            +
                    default_include_active_storage
         
     | 
| 
      
 79 
     | 
    
         
            +
                    default_include_sample_models
         
     | 
| 
      
 80 
     | 
    
         
            +
                    default_include_javascript_libraries
         
     | 
| 
      
 81 
     | 
    
         
            +
                    default_include_devise
         
     | 
| 
      
 82 
     | 
    
         
            +
                    default_include_rspec
         
     | 
| 
      
 83 
     | 
    
         
            +
                    default_include_common_pages
         
     | 
| 
      
 84 
     | 
    
         
            +
                    default_run_db_migrate
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  def ask_name
         
     | 
| 
      
 88 
     | 
    
         
            +
                    @name = question.ask('Name (rails application)') do |q|
         
     | 
| 
      
 89 
     | 
    
         
            +
                      q.default(name) unless name.nil?
         
     | 
| 
      
 90 
     | 
    
         
            +
                      q.required(true, 'Rails application name is required, and can only contain letters, numbers, and underscores.')
         
     | 
| 
      
 91 
     | 
    
         
            +
                      q.validate(/\A\w+\Z/)
         
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  def ask_include_action_text
         
     | 
| 
      
 96 
     | 
    
         
            +
                    @include_action_text = question.yes?('Include Action Text', default: include_action_text)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                  def ask_include_active_storage
         
     | 
| 
      
 100 
     | 
    
         
            +
                    @include_active_storage = question.yes?('Include Active Storage', default: include_active_storage)
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  def ask_include_sample_models
         
     | 
| 
      
 104 
     | 
    
         
            +
                    @include_sample_models = question.yes?('Include Sample Models', default: include_sample_models)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                  def ask_include_javascript_libraries
         
     | 
| 
      
 108 
     | 
    
         
            +
                    @include_javascript_libraries = question.yes?('Include Javascript Libraries', default: include_javascript_libraries)
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                  def ask_include_devise
         
     | 
| 
      
 112 
     | 
    
         
            +
                    @include_devise = question.yes?('Include Devise', default: include_devise)
         
     | 
| 
      
 113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                  def ask_include_rspec
         
     | 
| 
      
 116 
     | 
    
         
            +
                    @include_rspec = question.yes?('Include Rspec', default: include_rspec)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                  def ask_include_common_pages
         
     | 
| 
      
 120 
     | 
    
         
            +
                    @include_common_pages = question.yes?('Include Common Pages', default: include_common_pages)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  def ask_run_db_migrate
         
     | 
| 
      
 124 
     | 
    
         
            +
                    @run_db_migrate = question.yes?('DB Migrate', default: run_db_migrate)
         
     | 
| 
      
 125 
     | 
    
         
            +
                  end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  # defaults
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                  def default_include_action_text
         
     | 
| 
      
 130 
     | 
    
         
            +
                    @include_action_text = true if @include_action_text.nil?
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                  def default_include_active_storage
         
     | 
| 
      
 134 
     | 
    
         
            +
                    @include_active_storage = true if @include_active_storage.nil?
         
     | 
| 
      
 135 
     | 
    
         
            +
                  end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                  def default_include_sample_models
         
     | 
| 
      
 138 
     | 
    
         
            +
                    @include_sample_models = true if @include_sample_models.nil?
         
     | 
| 
      
 139 
     | 
    
         
            +
                  end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                  def default_include_javascript_libraries
         
     | 
| 
      
 142 
     | 
    
         
            +
                    @include_javascript_libraries = true if @include_javascript_libraries.nil?
         
     | 
| 
      
 143 
     | 
    
         
            +
                  end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                  def default_include_devise
         
     | 
| 
      
 146 
     | 
    
         
            +
                    @include_devise = true if @include_devise.nil?
         
     | 
| 
      
 147 
     | 
    
         
            +
                  end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                  def default_include_rspec
         
     | 
| 
      
 150 
     | 
    
         
            +
                    @include_rspec = true if @include_rspec.nil?
         
     | 
| 
      
 151 
     | 
    
         
            +
                  end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                  def default_include_common_pages
         
     | 
| 
      
 154 
     | 
    
         
            +
                    @include_common_pages = true if @include_common_pages.nil?
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                  def default_run_db_migrate
         
     | 
| 
      
 158 
     | 
    
         
            +
                    @run_db_migrate = true if @run_db_migrate.nil?
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
      
 161 
     | 
    
         
            +
              end
         
     | 
| 
      
 162 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Questions
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Ask code generations for a new GEM.
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Svelte < BaseQuestion
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def initialize(**args)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    args = { type: :svelte }.merge(args)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    super(**args)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def ask_questions
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ask_name
         
     | 
| 
      
 14 
     | 
    
         
            +
                    ask_root_path
         
     | 
| 
      
 15 
     | 
    
         
            +
                    ask_github_key
         
     | 
| 
      
 16 
     | 
    
         
            +
                    ask_description
         
     | 
| 
      
 17 
     | 
    
         
            +
                    story_questions
         
     | 
| 
      
 18 
     | 
    
         
            +
                    klue_template_questions
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def to_h
         
     | 
| 
      
 22 
     | 
    
         
            +
                    super.merge(
         
     | 
| 
      
 23 
     | 
    
         
            +
                      {
         
     | 
| 
      
 24 
     | 
    
         
            +
                      }
         
     | 
| 
      
 25 
     | 
    
         
            +
                    )
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def to_dom
         
     | 
| 
      
 29 
     | 
    
         
            +
                    KStarter::Schema::SvelteProject.new(to_h)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  private
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  def apply_attribute_defaults
         
     | 
| 
      
 35 
     | 
    
         
            +
                    default_story_active
         
     | 
| 
      
 36 
     | 
    
         
            +
                    default_klue_template_active
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def question
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @question ||= prompt
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  def ask_name
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @name = question.ask('Name (Svelte Application)') do |q|
         
     | 
| 
      
 45 
     | 
    
         
            +
                      q.default(name) unless name.nil?
         
     | 
| 
      
 46 
     | 
    
         
            +
                      q.required(true, 'Svelte application name is required, and can only contain letters, numbers, and underscores.')
         
     | 
| 
      
 47 
     | 
    
         
            +
                      q.validate(/\A\w+\Z/)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,98 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # require 'uri'
         
     | 
| 
      
 4 
     | 
    
         
            +
            # require 'net/http'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'active_model'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'pry'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative 'base_template'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # R7HotwireTemplate
         
     | 
| 
      
 10 
     | 
    
         
            +
            class R7HotwireTemplate < BaseTemplate
         
     | 
| 
      
 11 
     | 
    
         
            +
              attr_reader :host
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def customize_template
         
     | 
| 
      
 14 
     | 
    
         
            +
                gac('Base Rails 7 image created')
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                settings_for_asset_management
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                ask_questions
         
     | 
| 
      
 19 
     | 
    
         
            +
                add_gems
         
     | 
| 
      
 20 
     | 
    
         
            +
                add_gem_groups
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              # ./bin/rails javascript:install:esbuild
         
     | 
| 
      
 24 
     | 
    
         
            +
              def after_bundle
         
     | 
| 
      
 25 
     | 
    
         
            +
                add_action_text               if action_text?
         
     | 
| 
      
 26 
     | 
    
         
            +
                add_active_storage            if active_storage?
         
     | 
| 
      
 27 
     | 
    
         
            +
                add_devise                    if devise?
         
     | 
| 
      
 28 
     | 
    
         
            +
                add_rspec                     if rspec?
         
     | 
| 
      
 29 
     | 
    
         
            +
                add_javascript_libraries      if javascript_libraries?
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                gac('Base Rails 7 default structure created')
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                setup_models                  if sample_models?
         
     | 
| 
      
 34 
     | 
    
         
            +
                setup_common_pages            if common_pages?
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                rails_command('db:migrate')   if db_migrate?
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              private
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def add_devise
         
     | 
| 
      
 42 
     | 
    
         
            +
                run 'bundle add devise'
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                Bundler.with_unbundled_env { run 'bundle install' }
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                rails_command 'generate devise:install'
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                run 'rails generate devise User role:integer'
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                alter_first_file('db/migrate/*_create_users.rb') do |file|
         
     | 
| 
      
 51 
     | 
    
         
            +
                  host.in_root do
         
     | 
| 
      
 52 
     | 
    
         
            +
                    host.gsub_file(file,
         
     | 
| 
      
 53 
     | 
    
         
            +
                                   't.integer :role',
         
     | 
| 
      
 54 
     | 
    
         
            +
                                   't.integer :role, default: 0')
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                rails_command 'generate devise:views'
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              def ask_questions
         
     | 
| 
      
 62 
     | 
    
         
            +
                self.include_action_text          = no?("Add action text 'Rails'?")
         
     | 
| 
      
 63 
     | 
    
         
            +
                self.include_active_storage       = no?("Add active storage 'Rails'?")
         
     | 
| 
      
 64 
     | 
    
         
            +
                self.include_javascript_libraries = no?("Add javascript libraries 'Pinned'?") # this is if using importmap
         
     | 
| 
      
 65 
     | 
    
         
            +
                self.include_sample_models        = no?('Add sample models?')
         
     | 
| 
      
 66 
     | 
    
         
            +
                self.include_common_pages         = yes?('Add common pages?')
         
     | 
| 
      
 67 
     | 
    
         
            +
                self.include_devise               = no?('Add devise?') # Alter t.integer :role, default: 0
         
     | 
| 
      
 68 
     | 
    
         
            +
                self.include_rspec                = no?('Add rspec?')
         
     | 
| 
      
 69 
     | 
    
         
            +
                self.run_db_migrate               = yes?('Run db:migrate?')
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              def setup_models
         
     | 
| 
      
 73 
     | 
    
         
            +
                g_scaffold('post', 'title', 'content:text')
         
     | 
| 
      
 74 
     | 
    
         
            +
                g_scaffold('book', 'title', 'content:text')
         
     | 
| 
      
 75 
     | 
    
         
            +
                g_resource('comment', 'post:references', 'content:text')
         
     | 
| 
      
 76 
     | 
    
         
            +
                g_mailer('posts', 'submitted', 'broken')
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
              def setup_common_pages
         
     | 
| 
      
 80 
     | 
    
         
            +
                g_controller('home', 'index')
         
     | 
| 
      
 81 
     | 
    
         
            +
                host.route("root to: 'home#index'")
         
     | 
| 
      
 82 
     | 
    
         
            +
                # g_controller("pages", "home", "about")
         
     | 
| 
      
 83 
     | 
    
         
            +
                # host.route("root to: 'pages#home'")
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              def add_javascript_libraries
         
     | 
| 
      
 87 
     | 
    
         
            +
                # see: https://youtube.com/clip/Ugkx_tDcsUclZ-GR1Ck6liDKrlvmf38r92mw
         
     | 
| 
      
 88 
     | 
    
         
            +
                # host.run("bin/importmap pin local-time")
         
     | 
| 
      
 89 
     | 
    
         
            +
                host.run('bin/importmap pin local-time --download')
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            setup_rails = R7HotwireTemplate.new(self)
         
     | 
| 
      
 94 
     | 
    
         
            +
            setup_rails.customize_template
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            after_bundle do
         
     | 
| 
      
 97 
     | 
    
         
            +
              setup_rails.after_bundle
         
     | 
| 
      
 98 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,89 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Types
         
     | 
| 
      
 4 
     | 
    
         
            +
              include Dry.Types()
         
     | 
| 
      
 5 
     | 
    
         
            +
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 8 
     | 
    
         
            +
              # Schema for storing model data for projects and other configuration data
         
     | 
| 
      
 9 
     | 
    
         
            +
              module Schema
         
     | 
| 
      
 10 
     | 
    
         
            +
                # Configuration class for the project types
         
     | 
| 
      
 11 
     | 
    
         
            +
                class ProjectType < Dry::Struct
         
     | 
| 
      
 12 
     | 
    
         
            +
                  attribute :type                             , Types::Coercible::Symbol
         
     | 
| 
      
 13 
     | 
    
         
            +
                  attribute :variant                          , Types::Coercible::Symbol.optional.default(nil)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attribute :path                             , Types::Strict::String
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                class Github < Dry::Struct
         
     | 
| 
      
 18 
     | 
    
         
            +
                  attribute :user                             , Types::Strict::String
         
     | 
| 
      
 19 
     | 
    
         
            +
                  attribute :organizations                    , Types::Array.of(Types::Coercible::String)
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                # User story node
         
     | 
| 
      
 23 
     | 
    
         
            +
                class Story < Dry::Struct
         
     | 
| 
      
 24 
     | 
    
         
            +
                  attribute :active                           , Types::Strict::Bool
         
     | 
| 
      
 25 
     | 
    
         
            +
                  attribute :actor                            , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  attribute :problem                          , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  attribute :solution                         , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  attribute :user_story                       , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # Klue template node
         
     | 
| 
      
 32 
     | 
    
         
            +
                class KlueTemplate < Dry::Struct
         
     | 
| 
      
 33 
     | 
    
         
            +
                  attribute :active                           , Types::Strict::Bool
         
     | 
| 
      
 34 
     | 
    
         
            +
                  attribute :name                             , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                # Base class for project data
         
     | 
| 
      
 38 
     | 
    
         
            +
                class BaseProject < Dry::Struct
         
     | 
| 
      
 39 
     | 
    
         
            +
                  attribute :name                             , Types::Strict::String
         
     | 
| 
      
 40 
     | 
    
         
            +
                  attribute :type                             , Types::Coercible::Symbol
         
     | 
| 
      
 41 
     | 
    
         
            +
                  attribute :variant                          , Types::Coercible::Symbol.optional.default(nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  attribute :root_path                        , Types::Strict::String # .constructor { |path| File.expand_path(path) }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  attribute :description                      , Types::Strict::String.optional.default(nil)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  attribute :story                            , KStarter::Schema::Story
         
     | 
| 
      
 45 
     | 
    
         
            +
                  attribute :klue_template                    , KStarter::Schema::KlueTemplate
         
     | 
| 
      
 46 
     | 
    
         
            +
                  attribute :github_key                       , Types::Strict::String
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  def expanded_project_path
         
     | 
| 
      
 49 
     | 
    
         
            +
                    File.join(expanded_root_path, name)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def expanded_root_path
         
     | 
| 
      
 53 
     | 
    
         
            +
                    File.expand_path(root_path)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def github_account_type
         
     | 
| 
      
 57 
     | 
    
         
            +
                    github_key == App.config.github_user ? :user : :organization
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  def github_organization
         
     | 
| 
      
 61 
     | 
    
         
            +
                    github_account_type == :organization ? github_key : nil
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                class RailsProject < BaseProject
         
     | 
| 
      
 66 
     | 
    
         
            +
                  attribute :include_action_text              , Types::Strict::Bool
         
     | 
| 
      
 67 
     | 
    
         
            +
                  attribute :include_active_storage           , Types::Strict::Bool
         
     | 
| 
      
 68 
     | 
    
         
            +
                  attribute :include_sample_models            , Types::Strict::Bool
         
     | 
| 
      
 69 
     | 
    
         
            +
                  attribute :include_javascript_libraries     , Types::Strict::Bool
         
     | 
| 
      
 70 
     | 
    
         
            +
                  attribute :include_devise                   , Types::Strict::Bool
         
     | 
| 
      
 71 
     | 
    
         
            +
                  attribute :include_rspec                    , Types::Strict::Bool
         
     | 
| 
      
 72 
     | 
    
         
            +
                  attribute :include_common_pages             , Types::Strict::Bool
         
     | 
| 
      
 73 
     | 
    
         
            +
                  attribute :run_db_migrate                   , Types::Strict::Bool
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                class GemProject < BaseProject
         
     | 
| 
      
 77 
     | 
    
         
            +
                  attribute :exe                             , Types::Strict::Bool
         
     | 
| 
      
 78 
     | 
    
         
            +
                  attribute :coc                             , Types::Strict::Bool
         
     | 
| 
      
 79 
     | 
    
         
            +
                  attribute :mit                             , Types::Strict::Bool
         
     | 
| 
      
 80 
     | 
    
         
            +
                  attribute :rspec                           , Types::Strict::Bool
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                class SvelteProject < BaseProject
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                class NuxtProject < BaseProject
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Starters
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Generate command line for a new ruby gem project.
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include TtyHelpers
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_reader :project
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_reader :code_open_delay
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def initialize(project, **args)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @project = project
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @code_open_delay = args[:code_open_delay] || 0
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def system_in_root(script)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    Dir.chdir(project.expanded_root_path) do
         
     | 
| 
      
 19 
     | 
    
         
            +
                      system script
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def system_in_project(script)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Dir.chdir(project.expanded_project_path) do
         
     | 
| 
      
 25 
     | 
    
         
            +
                      system script
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  def project_path_exist?
         
     | 
| 
      
 30 
     | 
    
         
            +
                    File.exist?(project.expanded_project_path)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  def project_path_delete
         
     | 
| 
      
 34 
     | 
    
         
            +
                    return unless project_path_exist?
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    FileUtils.rm_rf(project.expanded_project_path)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def project_open_in_vscode
         
     | 
| 
      
 40 
     | 
    
         
            +
                    sleep code_open_delay if code_open_delay.positive?
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    Dir.chdir(project.expanded_project_path) do
         
     | 
| 
      
 43 
     | 
    
         
            +
                      system('code .')
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def ask_destroy_existing_project
         
     | 
| 
      
 48 
     | 
    
         
            +
                    question.yes?('Do you want to destroy the existing project folder')
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  def ask_exit_if_project_exists
         
     | 
| 
      
 52 
     | 
    
         
            +
                    question.yes?('This project exists. Do you want to cancel new project creation?')
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  def exiting(message = 'Exiting')
         
     | 
| 
      
 56 
     | 
    
         
            +
                    question.warn(message)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  def create_kbuilder
         
     | 
| 
      
 61 
     | 
    
         
            +
                    KManager::Cli::Commands::New.new.call(
         
     | 
| 
      
 62 
     | 
    
         
            +
                      project_folder: project.expanded_project_path,
         
     | 
| 
      
 63 
     | 
    
         
            +
                      builder_folder: File.join(project.expanded_project_path, '.builders'),
         
     | 
| 
      
 64 
     | 
    
         
            +
                      description: project.description,
         
     | 
| 
      
 65 
     | 
    
         
            +
                      user_story: project.story.user_story,
         
     | 
| 
      
 66 
     | 
    
         
            +
                      repo_organization: project.github_organization,
         
     | 
| 
      
 67 
     | 
    
         
            +
                      template: project.klue_template.name,
         
     | 
| 
      
 68 
     | 
    
         
            +
                      log_level: nil,
         
     | 
| 
      
 69 
     | 
    
         
            +
                      force: true
         
     | 
| 
      
 70 
     | 
    
         
            +
                    )
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  private
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  def question
         
     | 
| 
      
 76 
     | 
    
         
            +
                    @question ||= prompt
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,71 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # Examples
         
     | 
| 
      
 4 
     | 
    
         
            +
            # bundle gem --coc --ci=github --exe --linter=rubocop --test=rspec --mit k_genesis
         
     | 
| 
      
 5 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit k_genesis
         
     | 
| 
      
 6 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit conventional_gitflow
         
     | 
| 
      
 7 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit k_director
         
     | 
| 
      
 8 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit k_config
         
     | 
| 
      
 9 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit funky
         
     | 
| 
      
 10 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit --linter=rubocop --ci-github cmdlet
         
     | 
| 
      
 11 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit cmdlet
         
     | 
| 
      
 12 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit drawio_dsl
         
     | 
| 
      
 13 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit tailwind_dsl
         
     | 
| 
      
 14 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit test-google-cloud-functions
         
     | 
| 
      
 15 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit handlebarsjs
         
     | 
| 
      
 16 
     | 
    
         
            +
            # bundle gem --coc --test=rspec --mit k_starter
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module KStarter
         
     | 
| 
      
 19 
     | 
    
         
            +
              module Starters
         
     | 
| 
      
 20 
     | 
    
         
            +
                # Generate command line for a new ruby gem project.
         
     | 
| 
      
 21 
     | 
    
         
            +
                class Gem < KStarter::Starters::Base
         
     | 
| 
      
 22 
     | 
    
         
            +
                  def execute
         
     | 
| 
      
 23 
     | 
    
         
            +
                    create_gem
         
     | 
| 
      
 24 
     | 
    
         
            +
                    create_kbuilder
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    project_open_in_vscode
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  private
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def create_gem
         
     | 
| 
      
 32 
     | 
    
         
            +
                    if project_path_exist?
         
     | 
| 
      
 33 
     | 
    
         
            +
                      return exiting            if ask_exit_if_project_exists
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                      project_path_delete       if ask_destroy_existing_project
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    system_in_root(build_create_gem_bash)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def build_create_gem_bash
         
     | 
| 
      
 42 
     | 
    
         
            +
                    <<-BASH
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    echo "Generating gem project #{project.name}..."
         
     | 
| 
      
 45 
     | 
    
         
            +
                    echo "Ruby version:"
         
     | 
| 
      
 46 
     | 
    
         
            +
                    ruby -v
         
     | 
| 
      
 47 
     | 
    
         
            +
                    echo "Current folder: "
         
     | 
| 
      
 48 
     | 
    
         
            +
                    pwd
         
     | 
| 
      
 49 
     | 
    
         
            +
                    # create the gem
         
     | 
| 
      
 50 
     | 
    
         
            +
                    #{build_bundle_gem}
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    BASH
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                  # rubocop:disable Metrics/AbcSize
         
     | 
| 
      
 56 
     | 
    
         
            +
                  def build_bundle_gem
         
     | 
| 
      
 57 
     | 
    
         
            +
                    # bundle gem --coc --exe --test=rspec --mit k_genesis
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                    bundle_gem = []
         
     | 
| 
      
 60 
     | 
    
         
            +
                    bundle_gem << 'bundle gem'
         
     | 
| 
      
 61 
     | 
    
         
            +
                    bundle_gem << '--coc' if project.coc
         
     | 
| 
      
 62 
     | 
    
         
            +
                    bundle_gem << '--exe' if project.exe
         
     | 
| 
      
 63 
     | 
    
         
            +
                    bundle_gem << '--mit' if project.mit
         
     | 
| 
      
 64 
     | 
    
         
            +
                    bundle_gem << '--test=rspec' if project.rspec
         
     | 
| 
      
 65 
     | 
    
         
            +
                    bundle_gem << project.name.to_s
         
     | 
| 
      
 66 
     | 
    
         
            +
                    bundle_gem.join(' ')
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
                  # rubocop:enable Metrics/AbcSize
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     |