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.
571 572 573 574 575 576 |
# File 'lib/t_ruby/package_manager.rb', line 571 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.
530 531 532 |
# File 'lib/t_ruby/bundler_integration.rb', line 530 def bundler @bundler end |
#manifest ⇒ Object (readonly)
Returns the value of attribute manifest.
569 570 571 |
# File 'lib/t_ruby/package_manager.rb', line 569 def manifest @manifest end |
#registry ⇒ Object (readonly)
Returns the value of attribute registry.
569 570 571 |
# File 'lib/t_ruby/package_manager.rb', line 569 def registry @registry end |
#resolver ⇒ Object (readonly)
Returns the value of attribute resolver.
569 570 571 |
# File 'lib/t_ruby/package_manager.rb', line 569 def resolver @resolver end |
Instance Method Details
#add(name, version = "*", dev: false) ⇒ Object
Add a dependency
590 591 592 593 594 595 596 597 598 599 600 601 602 603 |
# File 'lib/t_ruby/package_manager.rb', line 590 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
689 690 691 692 693 694 695 696 697 698 |
# File 'lib/t_ruby/package_manager.rb', line 689 def deprecate(version, ) ensure_manifest! { package: @manifest.name, version: version, deprecated: true, message: } end |
#init(name: nil) ⇒ Object
Initialize a new package
579 580 581 582 583 584 585 586 587 |
# File 'lib/t_ruby/package_manager.rb', line 579 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
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 |
# File 'lib/t_ruby/package_manager.rb', line 613 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
541 542 543 544 545 546 547 |
# File 'lib/t_ruby/bundler_integration.rb', line 541 def install_with_bundler_fallback if @bundler.bundler_project? @bundler.sync_types else install end end |
#list ⇒ Object
List installed packages
660 661 662 663 664 665 666 667 |
# File 'lib/t_ruby/package_manager.rb', line 660 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
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 |
# File 'lib/t_ruby/bundler_integration.rb', line 550 def migrate_to_bundler return { success: false, error: "Not a Bundler project" } unless @bundler.bundler_project? migrated = [] # Read existing T-Ruby manifest if @manifest @manifest.dependencies.each do |name, version| result = @bundler.add_type_gem(name, version: version) migrated << result end end # Generate new bundle manifest @bundler.generate_bundle_manifest { success: true, migrated: migrated } end |
#publish ⇒ Object
Publish package (stub - would integrate with real registry)
670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 |
# File 'lib/t_ruby/package_manager.rb', line 670 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
606 607 608 609 610 |
# File 'lib/t_ruby/package_manager.rb', line 606 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
635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 |
# File 'lib/t_ruby/package_manager.rb', line 635 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 |