Class: Kettle::Jem::Appraisals::ModularGemfileGenerator
- Inherits:
-
Object
- Object
- Kettle::Jem::Appraisals::ModularGemfileGenerator
- Defined in:
- lib/kettle/jem/appraisals/modular_gemfile_generator.rb,
sig/kettle/jem/appraisals.rbs
Overview
Generates modular gemfile files for the appraisal matrix.
Creates per-version gemfiles organized by gem name and Ruby series:
+gemfiles/modular/{gem_name}/{ruby_series}/v{version}.gemfile+
Instance Attribute Summary collapse
-
#base_dir ⇒ String
readonly
Absolute path to the project root (where
gemfiles/lives).
Instance Method Summary collapse
- #build_content(gem_name, version, sub_deps) ⇒ String
- #build_tier2_content(gem_name, version) ⇒ String
-
#generate(gem_name:, version:, ruby_series:, sub_deps: {}) ⇒ String
Generates a modular gemfile for a tier1 gem, including its sub-dependencies.
-
#generate_tier2(gem_name:, version:, ruby_series:) ⇒ String
Generates a modular gemfile for a tier2 gem (no sub-dependencies).
-
#initialize(base_dir: Dir.pwd) ⇒ ModularGemfileGenerator
constructor
A new instance of ModularGemfileGenerator.
Constructor Details
#initialize(base_dir: Dir.pwd) ⇒ ModularGemfileGenerator
Returns a new instance of ModularGemfileGenerator.
20 21 22 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 20 def initialize(base_dir: Dir.pwd) @base_dir = base_dir end |
Instance Attribute Details
#base_dir ⇒ String (readonly)
Returns absolute path to the project root (where gemfiles/ lives).
17 18 19 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 17 def base_dir @base_dir end |
Instance Method Details
#build_content(gem_name, version, sub_deps) ⇒ String
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 68 def build_content(gem_name, version, sub_deps) lines = [ "# frozen_string_literal: true", "", "# Generated by kettle-jem-appraisals", "gem #{gem_name.inspect}, #{version_requirement(version).inspect}" ] sub_deps.each do |dep_name, dep_version| lines << "gem #{dep_name.inspect}, \"~> #{dep_version}\"" end lines << "" "#{lines.join("\n")}\n" end |
#build_tier2_content(gem_name, version) ⇒ String
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 84 def build_tier2_content(gem_name, version) lines = [ "# frozen_string_literal: true", "", "# Generated by kettle-jem-appraisals", "gem #{gem_name.inspect}, #{version_requirement(version).inspect}", "" ] "#{lines.join("\n")}\n" end |
#generate(gem_name:, version:, ruby_series:, sub_deps: {}) ⇒ String
Generates a modular gemfile for a tier1 gem, including its sub-dependencies.
Writes the file to disk and returns the relative path.
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 34 def generate(gem_name:, version:, ruby_series:, sub_deps: {}) dir = File.join(base_dir, "gemfiles", "modular", gem_name, ruby_series) FileUtils.mkdir_p(dir) filename = "v#{version}.gemfile" path = File.join(dir, filename) content = build_content(gem_name, version, sub_deps) File.write(path, content) File.join("gemfiles", "modular", gem_name, ruby_series, filename) end |
#generate_tier2(gem_name:, version:, ruby_series:) ⇒ String
Generates a modular gemfile for a tier2 gem (no sub-dependencies).
Writes the file to disk and returns the relative path.
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 54 def generate_tier2(gem_name:, version:, ruby_series:) dir = File.join(base_dir, "gemfiles", "modular", gem_name, ruby_series) FileUtils.mkdir_p(dir) filename = "v#{version}.gemfile" path = File.join(dir, filename) content = build_tier2_content(gem_name, version) File.write(path, content) File.join("gemfiles", "modular", gem_name, ruby_series, filename) end |