安装宝石的名单?安装宝石的名单?(List of installed gems?)

2019-05-13 09:31发布

是否有一个Ruby的方法,我可以打电话让安装宝石的名单?

我想分析的输出gem list 。 是否有不同的方式来做到这一点?

Answer 1:

宝石命令是包含在红宝石1.9+现在,和是一个标准的除了红宝石预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 ,它返回的宝石,其中关键的是宝石的名称的哈希值,并且该值是创业板规格的数组。 该值是所安装的该宝石的实例中,由版本号排序的阵列。

这使得有可能做这样的事情:

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命令行,只有你可以访问所有的信息特定宝石的规格。



Answer 2:

这里列出了我已安装的所有宝石。

gem query --local

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

见2.7列出所有已安装的宝石



Answer 3:

gem query --local

 ruby -S gem list --local

清单69项

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

给我82

我用wc -l得到的数字。 不知道如果这是检查的正确方法。 试图将输出重定向到文本文件和diff'ed但这并没有帮助 - 将需要由一个手动一个比较。



Answer 4:

还有的是一个方法了好久了:

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


Answer 5:

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


Answer 6:

一个更现代的版本是使用一个类似于以下...

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

注:非常类似由叶夫根的答案的第一部分......但由于页面格式,很容易错过。



Answer 7:

使用此代码(在控制台模式):

Gem::Specification.all_names


Answer 8:

尝试在终端:

ruby -S gem list --local


Answer 9:

这里是一个非常不错的单行打印所有的宝石用自己的版本,主页和说明一起:

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


Answer 10:

也许你可以从宝石目录中的文件(宝石)?

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


Answer 11:

从你的调试器类型中$LOAD_PATH让你的宝石列表。 如果你没有一个调试器,安装撬:

gem install pry
pry
Pry(main)> $LOAD_PATH

这将输出安装的宝石的数组。



文章来源: List of installed gems?
标签: ruby rubygems