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+
Gems tracked by Kettle::Rb::GemFloors get their minor series' security
floor (e.g. "~> 7.1.0", ">= 7.1.6"). Exact patch versions stay pinned.
A comment notes advisories that no release in the series fixes, and an
exact patch version below the floor.
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.
27 28 29 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 27 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).
24 25 26 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 24 def base_dir @base_dir end |
Instance Method Details
#build_content(gem_name, version, sub_deps) ⇒ String
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 75 def build_content(gem_name, version, sub_deps) lines = header_lines lines.concat(gem_lines(gem_name, version, pinned_requirements(gem_name, version))) sub_deps.each do |dep_name, dep_version| lines.concat(gem_lines(dep_name, dep_version, floored_requirements(dep_name, dep_version, ["~> #{dep_version}"]))) end lines << "" "#{lines.join("\n")}\n" end |
#build_tier2_content(gem_name, version) ⇒ String
87 88 89 90 91 92 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 87 def build_tier2_content(gem_name, version) lines = header_lines lines.concat(gem_lines(gem_name, version, pinned_requirements(gem_name, version))) lines << "" "#{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.
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 41 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.
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/kettle/jem/appraisals/modular_gemfile_generator.rb', line 61 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 |