Apakah ada metode Ruby yang dapat saya hubungi untuk mendapatkan daftar permata yang diinstal?
Saya ingin mengurai output dari gem list
. Apakah ada cara berbeda untuk melakukan ini?
Perintah Gem disertakan dengan Ruby 1.9+ sekarang, dan merupakan tambahan standar untuk Ruby pra-1.9.
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
Berikut cara terbaru untuk mendapatkan daftar:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Karena local_gems
bergantung pada group_by
, itu mengembalikan hash permata, di mana kuncinya adalah nama permata, dan nilainya adalah array dari spesifikasi permata. Nilai adalah array dari instance permata yang diinstal, diurutkan berdasarkan nomor versi.
Itu memungkinkan untuk melakukan hal-hal seperti:
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 = "[email protected]"
# 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]
Dan:
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
Contoh terakhir mirip dengan baris gem query --local
perintah, hanya Anda yang memiliki akses ke semua informasi untuk spesifikasi permata tertentu.
Ini mencantumkan semua permata yang telah saya instal.
http://guides.rubygems.org/command-reference/#gem-list
Lihat 2.7 Mendaftar semua permata yang diinstal
sumber
gem list
.gem list
melakukan apa yang saya butuhkan, dan itu jauh lebih sederhana dan lebih mudah diingat ketika berada di CLI. Mengapa begitu banyak perintah untuk melakukan satu hal?Kedua
dan
daftar 69 entri
Sementara
memberi saya 82
Saya dulu
wc -l
mendapatkan nomornya. Tidak yakin apakah itu cara yang tepat untuk memeriksa. Mencoba untuk mengarahkan kembali output ke file teks dan berbeda tetapi itu tidak membantu - perlu membandingkan secara manual satu per satu.sumber
ruby
Perintah terakhir mencantumkan setiap versi permata pada baris yang terpisah. Untuk misalnya:sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
vssass-3.3.14
,sass-3.3.7
,sass-3.3.6
,sass-3.2.19
Sudah ada metode untuk ini sejak lama:
sumber
Namun, jika aplikasi Anda menggunakan Bundler, ia hanya akan mengembalikan daftar permata lokal yang bergantung . Untuk menginstal semua:
sumber
NoMethodError: undefined method
apa? ' for nil: NilClass` ketika saya menggunakannya (dalam arails console
).gunakan kode ini (dalam mode konsol):
sumber
Versi yang lebih modern adalah menggunakan sesuatu yang mirip dengan yang berikut ...
CATATAN: sangat mirip dengan bagian pertama dari jawaban oleh Evgeny ... tetapi karena pemformatan halaman, mudah untuk dilewatkan.
sumber
Berikut ini adalah one-liner yang sangat bagus untuk mencetak semua Permata beserta versi, beranda, dan deskripsinya:
sumber
Cobalah di terminal:
sumber
Mungkin Anda bisa mendapatkan file (permata) dari direktori permata?
sumber
Dari dalam jenis debugger Anda
$LOAD_PATH
untuk mendapatkan daftar permata Anda. Jika Anda tidak memiliki debugger, pasang pry:Ini akan menampilkan array permata yang Anda instal.
sumber