|
| 1 | +class Config |
| 2 | + PROJECT_ROOT_PATH = File.absolute_path(File.join(__dir__, "../..")) |
| 3 | + CI_CONFIGS_PATH = File.join(PROJECT_ROOT_PATH, "ci/configs") |
| 4 | + BUILD_PATH = File.join(PROJECT_ROOT_PATH, "tmp/builds") |
| 5 | + TEMPLATE_PATH = File.join(PROJECT_ROOT_PATH, "template.rb") |
| 6 | + TARGET_VERSIONS_PATH = File.join(PROJECT_ROOT_PATH, "target_versions.yml") |
| 7 | + DEFAULT_CONFIG_NAME = "readme_example".freeze |
| 8 | + VANILLA_CONFIG_NAME = "vanilla".freeze |
| 9 | + APP_NAME_SUFFIX = "template_app".freeze |
| 10 | + CI_CONFIGS = Dir.children(CI_CONFIGS_PATH).map { |f| f.sub(".yml", "") } |
| 11 | + AVAILABLE_CONFIG_NAMES = [ |
| 12 | + VANILLA_CONFIG_NAME, |
| 13 | + DEFAULT_CONFIG_NAME, |
| 14 | + *CI_CONFIGS |
| 15 | + ].freeze |
| 16 | + TARGET_RAILS_MAJOR_MINOR = YAML.safe_load_file(TARGET_VERSIONS_PATH).fetch("target_rails_major_minor") |
| 17 | + |
| 18 | + def self.all_configs |
| 19 | + AVAILABLE_CONFIG_NAMES.map { |name| new(name:) } |
| 20 | + end |
| 21 | + |
| 22 | + ## |
| 23 | + # Resolves the CLI parameter to a list of Config instances |
| 24 | + # |
| 25 | + def self.resolve_to_configs(cli_param) |
| 26 | + return all_configs if cli_param == "all_variants" |
| 27 | + return [new(name: cli_param)] if AVAILABLE_CONFIG_NAMES.include?(cli_param) |
| 28 | + |
| 29 | + [new(name: DEFAULT_CONFIG_NAME)] |
| 30 | + end |
| 31 | + |
| 32 | + attr_reader :name, :app_name, :config_path |
| 33 | + |
| 34 | + def initialize(name:) |
| 35 | + @name = name |
| 36 | + @app_name = case name |
| 37 | + when VANILLA_CONFIG_NAME |
| 38 | + "#{name}_#{target_rails_major}_#{APP_NAME_SUFFIX}" |
| 39 | + else |
| 40 | + "#{name}_#{APP_NAME_SUFFIX}" |
| 41 | + end |
| 42 | + |
| 43 | + @config_path = case name |
| 44 | + when DEFAULT_CONFIG_NAME |
| 45 | + File.join(PROJECT_ROOT_PATH, "ackama_rails_template.config.yml") |
| 46 | + when VANILLA_CONFIG_NAME |
| 47 | + nil |
| 48 | + else |
| 49 | + File.join(CI_CONFIGS_PATH, "#{name}.yml") |
| 50 | + end |
| 51 | + end |
| 52 | + |
| 53 | + def vanilla? |
| 54 | + name == VANILLA_CONFIG_NAME |
| 55 | + end |
| 56 | + |
| 57 | + def app_path |
| 58 | + File.join(BUILD_PATH, app_name) |
| 59 | + end |
| 60 | + |
| 61 | + def target_versions_path |
| 62 | + TARGET_VERSIONS_PATH |
| 63 | + end |
| 64 | + |
| 65 | + def build_path |
| 66 | + BUILD_PATH |
| 67 | + end |
| 68 | + |
| 69 | + def template_path |
| 70 | + return nil if vanilla? |
| 71 | + |
| 72 | + TEMPLATE_PATH |
| 73 | + end |
| 74 | + |
| 75 | + def inspect |
| 76 | + <<~INSPECT |
| 77 | + <Config: |
| 78 | + @name: #{name} |
| 79 | + @app_name: #{app_name} |
| 80 | + @config_path: #{config_path} |
| 81 | + @app_path: #{app_path} |
| 82 | + @target_versions_path: #{target_versions_path} |
| 83 | + @build_path: #{build_path} |
| 84 | + @template_path: #{template_path} |
| 85 | + > |
| 86 | + INSPECT |
| 87 | + end |
| 88 | + |
| 89 | + def target_rails_major_minor |
| 90 | + TARGET_RAILS_MAJOR_MINOR |
| 91 | + end |
| 92 | + |
| 93 | + def target_rails_major |
| 94 | + TARGET_RAILS_MAJOR_MINOR.split(".").first |
| 95 | + end |
| 96 | +end |
0 commit comments