Yüklü mücevherlerin listesini almak için arayabileceğim bir Ruby yöntemi var mı?
Çıktısını ayrıştırmak istiyorum gem list
. Bunu yapmanın farklı bir yolu var mı?
Yüklü mücevherlerin listesini almak için arayabileceğim bir Ruby yöntemi var mı?
Çıktısını ayrıştırmak istiyorum gem list
. Bunu yapmanın farklı bir yolu var mı?
Yanıtlar:
Gem komutu şimdi Ruby 1.9+ ile birlikte gelir ve Ruby 1.9 öncesi için standart bir ektir.
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
İşte bir liste almanın güncellenmiş bir yolu:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Çünkü local_gems
güvendiği için group_by
, değerli taşların bir karmasını döndürür, burada anahtarın mücevher adı ve değer değerli taş özelliklerinin bir dizisidir. Değer, yüklü olan bu cevher örneğinin sürüm numarasına göre sıralanmış bir dizisidir.
Bu, aşağıdaki gibi şeyleri yapmayı mümkün kılar:
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]
Ve:
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
Son örnek gem query --local
komut satırına benzer , yalnızca belirli bir gem spesifikasyonu için tüm bilgilere erişebilirsiniz.
Bu, yüklediğim tüm taşları listeler.
gem query --local
http://guides.rubygems.org/command-reference/#gem-list
2.7 Kurulu tüm mücevherleri listeleme
gem list
.
gem list
Tam olarak ihtiyacım olanı yaptım ve CLI'de hatırlamak çok daha basit ve kolay. Neden bir şey yapmak için bu kadar çok komut var?
Her ikisi de
gem query --local
ve
ruby -S gem list --local
69 girişi listele
Süre
ruby -e 'puts Gem::Specification.all_names'
bana 82 verir
Kullandığım wc -l
rakamları elde etmek. Kontrol etmenin doğru yolu olduğundan emin değilim. Çıktıyı metin dosyalarına yönlendirmeye çalıştı ve dağıldı, ancak bu yardımcı olmadı - tek tek manuel olarak karşılaştırılması gerekecek.
ruby
komut, her gem sürümünü ayrı bir satırda listeler. İçin örnek: sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
vs sass-3.3.14
, sass-3.3.7
, sass-3.3.6
, sass-3.2.19
Bunun için çağlar boyunca bir yöntem var:
ruby -e 'puts Gem::Specification.all_names'
Gem::Specification.map {|a| a.name}
Ancak, uygulamanız Bundler kullanıyorsa, yalnızca bağımlı yerel mücevherlerin listesini döndürür . Tümünü yüklemek için:
def all_installed_gems
Gem::Specification.all = nil
all = Gem::Specification.map{|a| a.name}
Gem::Specification.reset
all
end
NoMethodError: undefined method
herhangi bir şey verir mi? ' Nil için: kullandığımda NilClass` (a rails console
).
bu kodu kullanın (konsol modunda):
Gem::Specification.all_names
İşte tüm Mücevherleri sürümleri, ana sayfaları ve açıklamaları ile birlikte yazdırmak için gerçekten güzel bir tek astar:
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
Terminalde deneyin:
ruby -S gem list --local
Hata ayıklayıcı türü içinden $LOAD_PATH
değerli taşlarınızın bir listesini almak için. Hata ayıklayıcı yoksa, gözetleme yükleyin:
gem install pry
pry
Pry(main)> $LOAD_PATH
Bu, kurulu mücevherlerinizin bir dizisini çıktılar.