ইনস্টল রত্নের তালিকা?


141

ইনস্টল করা রত্নগুলির তালিকা পেতে আমি কল করতে পারি এমন কোনও রুবি পদ্ধতি আছে?

আমি এর আউটপুট পার্স করতে চান gem list। এটি করার আলাদা উপায় আছে কি?

উত্তর:


55

জহর কমান্ডটি এখন রুবি ১.৯++ এর সাথে অন্তর্ভুক্ত রয়েছে এবং এটি রুবি প্রি-১.৯ এর একটি স্ট্যান্ডার্ড সংযোজন।

require 'rubygems'

name = /^/i
dep = Gem::Dependency.new(name, Gem::Requirement.default)
specs = Gem.source_index.search(dep)
puts specs[0..5].map{ |s| "#{s.name} #{s.version}" }
# >> Platform 0.4.0
# >> abstract 1.0.0
# >> actionmailer 3.0.5
# >> actionpack 3.0.5
# >> activemodel 3.0.5
# >> activerecord 3.0.5

তালিকা পেতে একটি আপডেট উপায় এখানে:

require 'rubygems'

def local_gems
   Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end

কারণ local_gemsনির্ভর করে group_by, এটি রত্নগুলির একটি হ্যাশ ফেরত দেয়, যেখানে মূলটি রত্নটির নাম এবং মানটি রত্ন বৈশিষ্ট্যের একটি অ্যারে। মানটি সেই মণির উদাহরণগুলির একটি অ্যারে যা ইনস্টল করা আছে, সংস্করণ নম্বর অনুসারে বাছাই করা।

এটি এর মতো কাজগুলি করা সম্ভব করে তোলে:

my_local_gems = local_gems()

my_local_gems['actionmailer']
# => [Gem::Specification.new do |s|
#       s.authors = ["David Heinemeier Hansson"]
#       s.date = Time.utc(2013, 12, 3)
#       s.dependencies = [Gem::Dependency.new("actionpack",
#         Gem::Requirement.new(["= 4.0.2"]),
#         :runtime),
#        Gem::Dependency.new("mail",
#         Gem::Requirement.new(["~> 2.5.4"]),
#         :runtime)]
#       s.description = "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments."
#       s.email = "david@loudthinking.com"
#       s.homepage = "http://www.rubyonrails.org"
#       s.licenses = ["MIT"]
#       s.name = "actionmailer"
#       s.require_paths = ["lib"]
#       s.required_ruby_version = Gem::Requirement.new([">= 1.9.3"])
#       s.requirements = ["none"]
#       s.rubygems_version = "2.0.14"
#       s.specification_version = 4
#       s.summary = "Email composition, delivery, and receiving framework (part of Rails)."
#       s.version = Gem::Version.new("4.0.2")
#       end]

এবং:

puts my_local_gems.map{ |name, specs| 
  [ 
    name,
    specs.map{ |spec| spec.version.to_s }.join(',')
  ].join(' ') 
}
# >> actionmailer 4.0.2
...
# >> arel 4.0.1,5.0.0
...
# >> ZenTest 4.9.5
# >> zucker 13.1

শেষ উদাহরণটি gem query --localকমান্ড-লাইনের অনুরূপ , কেবলমাত্র কোনও বিশেষ রত্নের নির্দিষ্টকরণের জন্য আপনার কাছে সমস্ত তথ্য অ্যাক্সেস থাকে।


2
লক্ষ করা উচিত, "Dependency.new w / a regexp এখন অবহেলিত"।
মার্টিন পোলজাক

351

এটি আমি ইনস্টল করা সমস্ত রত্ন তালিকাভুক্ত।

gem query --local

http://guides.rubygems.org/command-reference/#gem-list

সমস্ত ইনস্টল করা রত্নের তালিকা 2.7 দেখুন


37
আমি যখন উপবিষ্টদের দিকে তাকাই, তখন এই উত্তরটি বেশিরভাগ লোকেরা চেয়েছিল। :)
কায়জার

4
প্রশ্নে আরও ভাল উত্তর আছে gem list
নীলরে

gem listআমার যা প্রয়োজন তা হুবহু করেছে, এবং সিএলআই-এ থাকাকালীন এটি স্মরণ করা অনেক সহজ এবং সহজ। এত কিছু আদেশ একটি কাজ করার জন্য কেন?
ডেভ এভারিট

28

উভয়

gem query --local

এবং

 ruby -S gem list --local

69 এন্ট্রি তালিকা

যদিও

ruby -e 'puts Gem::Specification.all_names'

আমাকে 82 দেয়

আমি wc -lনম্বর পেতে ব্যবহৃত । নিশ্চিত কিনা এটি চেক করার সঠিক উপায় কিনা। পাঠ্য ফাইলগুলিতে আউটপুটটিকে পুনর্নির্দেশের চেষ্টা করেছিল এবং পৃথক করে কিন্তু এটি সাহায্য করেনি - একে একে ম্যানুয়ালি তুলনা করতে হবে।


1
কারণটি সহজ। প্রথম কমান্ডটি মণি প্রতি 1 টি প্রবেশ করে এবং একই লাইনে বন্ধনীগুলিতে সংস্করণগুলি তালিকাভুক্ত করে। শেষ rubyকমান্ডটি পৃথক লাইনে প্রতিটি রত্ন সংস্করণ তালিকাভুক্ত করে। জন্য উদাহরণ: sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)বনাম sass-3.3.14, sass-3.3.7, sass-3.3.6, sass-3.2.19
কায়সার

10

যুগে যুগে এটির জন্য একটি পদ্ধতি ছিল:

ruby -e 'puts Gem::Specification.all_names'

রুবি-ই 'রাখে রত্ন :: স্পেসিফিকেশন.ল_নামস' আমাকে দেয় "-e: 1: অবিচ্ছিন্ন ধ্রুবক মণি (নামআরর)" আমি কীভাবে এটি সমাধান করব?
মেটাহুমান

6
Gem::Specification.map {|a| a.name}

তবে, যদি আপনার অ্যাপ্লিকেশন বান্ডিলার ব্যবহার করে তবে এটি কেবল নির্ভর স্থানীয় রত্নগুলির তালিকা ফিরিয়ে দেবে । সমস্ত ইনস্টল করার জন্য:

def all_installed_gems
   Gem::Specification.all = nil    
   all = Gem::Specification.map{|a| a.name}  
   Gem::Specification.reset
   all
end

এটা NoMethodError: undefined method কোন দেয় ? ' শূন্যতার জন্য: নীলক্লাস` যখন আমি এটি ব্যবহার করি (ক rails console)।
আইকনোক্লাস্ট


3

আরও আধুনিক সংস্করণ হ'ল নিম্নলিখিতগুলির মতো কিছু ব্যবহার করা ...

require 'rubygems'
puts Gem::Specification.all().map{|g| [g.name, g.version.to_s].join('-') }

দ্রষ্টব্য: এভজেনি দ্বারা উত্তরের প্রথম অংশের সাথে খুব অনুরূপ ... তবে পৃষ্ঠা বিন্যাসের কারণে, এটি মিস করা সহজ।


3

সমস্ত রত্নগুলির সংস্করণ, হোমপেজ এবং বিবরণ সহ মুদ্রণের জন্য এখানে একটি দুর্দান্ত একটি লাইনার রয়েছে:

Gem::Specification.sort{|a,b| a.name <=> b.name}.map {|a| puts "#{a.name} (#{a.version})"; puts "-" * 50; puts a.homepage; puts a.description; puts "\n\n"};nil


1

আপনি কি রত্ন ডিরেক্টরি থেকে ফাইল (রত্ন) পেতে পারেন?

gemsdir = "gems directory"
gems = Dir.new(gemsdir).entries

1

আপনার ডিবাগারের মধ্যে থেকে $LOAD_PATHআপনার রত্নগুলির একটি তালিকা পেতে টাইপ করুন। আপনার যদি কোনও ডিবাগার না থাকে তবে পিসি ইনস্টল করুন:

gem install pry
pry
Pry(main)> $LOAD_PATH

এটি আপনার ইনস্টল করা রত্নগুলির একটি অ্যারে আউটপুট দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.