Class: TRuby::PackageManager
- Inherits:
-
Object
- Object
- TRuby::PackageManager
- Defined in:
- lib/t_ruby/package_manager.rb,
lib/t_ruby/bundler_integration.rb
Overview
Extension to PackageManager for Bundler support
Instance Attribute Summary collapse
-
#bundler ⇒ Object
readonly
Returns the value of attribute bundler.
-
#manifest ⇒ Object
readonly
Returns the value of attribute manifest.
-
#registry ⇒ Object
readonly
Returns the value of attribute registry.
-
#resolver ⇒ Object
readonly
Returns the value of attribute resolver.
Instance Method Summary collapse
-
#add(name, version = "*", dev: false) ⇒ Object
Add a dependency.
-
#deprecate(version, message) ⇒ Object
Create deprecation notice.
-
#init(name: nil) ⇒ Object
Initialize a new package.
-
#initialize(project_dir: ".") ⇒ PackageManager
constructor
A new instance of PackageManager.
-
#install ⇒ Object
Install all dependencies.
-
#install_with_bundler_fallback ⇒ Object
Use Bundler if available, fall back to native package management.
-
#list ⇒ Object
List installed packages.
-
#migrate_to_bundler ⇒ Object
Migrate from native T-Ruby packages to Bundler.
-
#publish ⇒ Object
Publish package (stub - would integrate with real registry).
-
#remove(name) ⇒ Object
Remove a dependency.
-
#update(name = nil) ⇒ Object
Update dependencies.
Constructor Details
#initialize(project_dir: ".") ⇒ PackageManager
Returns a new instance of PackageManager.
570 571 572 573 574 575 |
# File 'lib/t_ruby/package_manager.rb', line 570 def initialize(project_dir: ".") @project_dir = project_dir @manifest = PackageManifest.load(File.join(project_dir, PackageManifest::MANIFEST_FILE)) @registry = PackageRegistry.new(local_path: File.join(project_dir, ".trb-packages")) @resolver = DependencyResolver.new(@registry) end |
Instance Attribute Details
#bundler ⇒ Object (readonly)
Returns the value of attribute bundler.
531 532 533 |
# File 'lib/t_ruby/bundler_integration.rb', line 531 def bundler @bundler end |
#manifest ⇒ Object (readonly)
Returns the value of attribute manifest.
568 569 570 |
# File 'lib/t_ruby/package_manager.rb', line 568 def manifest @manifest end |
#registry ⇒ Object (readonly)
Returns the value of attribute registry.
568 569 570 |
# File 'lib/t_ruby/package_manager.rb', line 568 def registry @registry end |
#resolver ⇒ Object (readonly)
Returns the value of attribute resolver.
568 569 570 |
# File 'lib/t_ruby/package_manager.rb', line 568 def resolver @resolver end |
Instance Method Details
#add(name, version = "*", dev: false) ⇒ Object
Add a dependency
589 590 591 592 593 594 595 596 597 598 599 600 601 602 |
# File 'lib/t_ruby/package_manager.rb', line 589 def add(name, version = "*", dev: false) ensure_manifest! if dev @manifest.add_dev_dependency(name, version) else @manifest.add_dependency(name, version) end @manifest.save(File.join(@project_dir, PackageManifest::MANIFEST_FILE)) # Resolve and install install end |
#deprecate(version, message) ⇒ Object
Create deprecation notice
688 689 690 691 692 693 694 695 696 697 |
# File 'lib/t_ruby/package_manager.rb', line 688 def deprecate(version, ) ensure_manifest! { package: @manifest.name, version: version, deprecated: true, message: , } end |
#init(name: nil) ⇒ Object
Initialize a new package
578 579 580 581 582 583 584 585 586 |
# File 'lib/t_ruby/package_manager.rb', line 578 def init(name: nil) @manifest = PackageManifest.new( name: name || File.basename(@project_dir), version: "0.1.0", types: "lib/types/**/*.d.trb" ) @manifest.save(File.join(@project_dir, PackageManifest::MANIFEST_FILE)) @manifest end |
#install ⇒ Object
Install all dependencies
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 |
# File 'lib/t_ruby/package_manager.rb', line 612 def install ensure_manifest! result = @resolver.resolve(@manifest) if result[:conflicts].any? raise "Dependency conflicts: #{result[:conflicts].join(", ")}" end installed = [] result[:resolved].each do |name, version| pkg = @registry.install(name, version) installed << pkg if pkg end # Generate lockfile generate_lockfile(result[:resolved]) installed end |
#install_with_bundler_fallback ⇒ Object
Use Bundler if available, fall back to native package management
542 543 544 545 546 547 548 |
# File 'lib/t_ruby/bundler_integration.rb', line 542 def install_with_bundler_fallback if @bundler.bundler_project? @bundler.sync_types else install end end |
#list ⇒ Object
List installed packages
659 660 661 662 663 664 665 666 |
# File 'lib/t_ruby/package_manager.rb', line 659 def list lockfile_path = File.join(@project_dir, ".trb-lock.json") return {} unless File.exist?(lockfile_path) JSON.parse(File.read(lockfile_path)) rescue JSON::ParserError {} end |
#migrate_to_bundler ⇒ Object
Migrate from native T-Ruby packages to Bundler
551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 |
# File 'lib/t_ruby/bundler_integration.rb', line 551 def migrate_to_bundler return { success: false, error: "Not a Bundler project" } unless @bundler.bundler_project? migrated = [] # Read existing T-Ruby manifest @manifest&.dependencies&.each do |name, version| result = @bundler.add_type_gem(name, version: version) migrated << result end # Generate new bundle manifest @bundler.generate_bundle_manifest { success: true, migrated: migrated } end |
#publish ⇒ Object
Publish package (stub - would integrate with real registry)
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 |
# File 'lib/t_ruby/package_manager.rb', line 669 def publish ensure_manifest! unless @manifest.valid? raise "Invalid manifest: missing name or version" end # Validate package validate_package # In real implementation, would upload to registry { name: @manifest.name, version: @manifest.version, status: :published, } end |
#remove(name) ⇒ Object
Remove a dependency
605 606 607 608 609 |
# File 'lib/t_ruby/package_manager.rb', line 605 def remove(name) ensure_manifest! @manifest.remove_dependency(name) @manifest.save(File.join(@project_dir, PackageManifest::MANIFEST_FILE)) end |
#update(name = nil) ⇒ Object
Update dependencies
634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 |
# File 'lib/t_ruby/package_manager.rb', line 634 def update(name = nil) ensure_manifest! if name # Update specific package current = @manifest.dependencies[name] if current @manifest.dependencies[name] = "*" # Get latest result = @resolver.resolve(@manifest) if result[:resolved][name] @manifest.dependencies[name] = "^#{result[:resolved][name]}" @manifest.save(File.join(@project_dir, PackageManifest::MANIFEST_FILE)) end end else # Update all @manifest.dependencies.each_key do |dep_name| update(dep_name) end end install end |