回答:
Gemコマンドは現在Ruby 1.9以降に含まれており、Ruby pre 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
リストを取得する更新された方法は次のとおりです。
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
、gemのハッシュを返します。キーはgemの名前で、値はgem仕様の配列です。値は、インストールされているそのgemのインスタンスの配列であり、バージョン番号でソートされています。
これにより、次のようなことが可能になります。
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
コマンドラインに似ていますが、特定のgemの仕様に関するすべての情報にアクセスできるのはあなただけです。
これにより、インストールしたすべてのgemがリストされます。
gem query --local
http://guides.rubygems.org/command-reference/#gem-list
2.7インストールされたすべてのgemの一覧表示を参照してください
gem list
。
gem list
私が必要とするものを正確に実行しました。CLIで呼び出すと、はるかにシンプルで簡単に呼び出すことができます。なぜそんなに多くのコマンドが1つのことをするのですか?
両方とも
gem query --local
そして
ruby -S gem list --local
69エントリのリスト
ながら
ruby -e 'puts Gem::Specification.all_names'
82をくれ
以前wc -l
は番号を取得していました。それが正しい方法かどうかはわかりません。出力をテキストファイルにリダイレクトして比較しましたが、効果はありませんでした。手動で1つずつ比較する必要があります。
ruby
コマンドは、各gemバージョンを別々の行にリストします。用例: 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
年齢のためにこれのための方法がありました:
ruby -e 'puts Gem::Specification.all_names'
Gem::Specification.map {|a| a.name}
ただし、アプリがBundlerを使用している場合、依存するローカルGemのリストのみが返されます。すべてをインストールするには:
def all_installed_gems
Gem::Specification.all = nil
all = Gem::Specification.map{|a| a.name}
Gem::Specification.reset
all
end
NoMethodError: undefined method
何かを与えるのですか?」nil:NilClass`を使用する場合(a内rails console
)。