Czy istnieje metoda Ruby, którą mogę wywołać, aby uzyskać listę zainstalowanych klejnotów?
Chcę przeanalizować dane wyjściowe gem list
. Czy można to zrobić w inny sposób?
Polecenie Gem jest teraz dołączone do Rubiego 1.9+ i jest standardowym dodatkiem do Rubiego przed wersją 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
Oto zaktualizowany sposób uzyskania listy:
require 'rubygems'
def local_gems
Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name }
end
Ponieważ local_gems
opiera się na group_by
, zwraca skrót klejnotów, gdzie kluczem jest nazwa klejnotu, a wartością jest tablica specyfikacji klejnotów. Wartość to tablica instancji zainstalowanego klejnotu posortowana według numeru wersji.
Dzięki temu można robić takie rzeczy, jak:
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]
I:
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
Ostatni przykład jest podobny do gem query --local
wiersza poleceń, tylko że masz dostęp do wszystkich informacji dotyczących specyfikacji konkretnego klejnotu.
Zawiera listę wszystkich klejnotów, które zainstalowałem.
http://guides.rubygems.org/command-reference/#gem-list
Zobacz 2.7. Lista wszystkich zainstalowanych klejnotów
źródło
gem list
.gem list
zrobił dokładnie to, czego potrzebowałem, i jest o wiele prostszy i łatwiejszy do przywołania, gdy korzystam z CLI. Dlaczego tak wiele poleceń robi jedną rzecz?Obie
i
lista 69 wpisów
Podczas
daje mi 82
Zwykłem
wc -l
zbierać liczby. Nie jestem pewien, czy to właściwy sposób sprawdzenia. Próbowałem przekierować dane wyjściowe do plików tekstowych i porównano, ale to nie pomogło - trzeba będzie ręcznie porównać jeden po drugim.źródło
ruby
polecenie wyświetla każdą wersję klejnotu w oddzielnym wierszu. Na przykład:sass (3.3.14, 3.3.7, 3.3.6, 3.2.19)
w porównaniu zsass-3.3.14
,sass-3.3.7
,sass-3.3.6
,sass-3.2.19
Jest na to metoda od wieków:
źródło
Jeśli jednak Twoja aplikacja korzysta z pakietu Bundler, zwróci tylko listę zależnych lokalnych klejnotów. Aby zainstalować wszystko:
źródło
NoMethodError: undefined method
jakieś? dla nil: NilClass` kiedy go używam (w arails console
).użyj tego kodu (w trybie konsoli):
źródło
Bardziej nowoczesna wersja polegałaby na użyciu czegoś podobnego do następującego ...
UWAGA: bardzo podobna pierwsza część odpowiedzi Evgeny ... ale ze względu na formatowanie strony łatwo ją przeoczyć.
źródło
Oto naprawdę ładny, jednowierszowy tekst do wydrukowania wszystkich klejnotów wraz z ich wersją, stroną główną i opisem:
źródło
Wypróbuj w terminalu:
źródło
Może uda ci się pobrać pliki (klejnoty) z katalogu gems?
źródło
Z poziomu swojego typu debugera,
$LOAD_PATH
aby uzyskać listę swoich klejnotów. Jeśli nie masz debuggera, zainstaluj pry:Spowoduje to wyświetlenie tablicy zainstalowanych klejnotów.
źródło