programing

설치된 보석 목록?

css3 2023. 6. 4. 22:29

설치된 보석 목록?

설치된 보석 목록을 얻기 위해 제가 전화할 수 있는 루비 메소드가 있습니까?

의 출력을 구문 분석합니다.gem list.

이것을 하는 다른 방법이 방법이 있습니까?

이것은 내가 설치한 모든 보석들을 나열입니다.

gem query --local

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

설치된 모든 보석 나열

Gem 명령은 현재 Ruby 1.9+에 포함되어 있으며 Ruby 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명령줄, 사용자만 특정 보석의 사양에 대한 모든 정보에 액세스할 수 있습니다.

둘다요.

gem query --local

그리고.

 ruby -S gem list --local

69개 항목을 나열

하는 동안에

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

반품 82

사용한wc -l숫자를 확인할 수 있습니다.그것이 확인할 수 있는 올바른 방법인지 확실하지 않습니다.출력을 텍스트 파일로 리디렉션하려고 했지만 디파짓되지 않았습니다. 하나씩 수동으로 비교해야 합니다.

오랫동안 이를 위한 방법이 있었습니다.

ruby -e 'puts Gem::Specification.all_names'
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

이 코드 사용(콘솔 모드):

Gem::Specification.all_names

여기 모든 Gems를 버전, 홈페이지 및 설명과 함께 인쇄할 수 있는 정말 멋진 한 줄기가 있습니다.

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

좀 더 현대적인 버전은 다음과 같은 것을 사용하는 것입니다.

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

참고: Evgeny의 답변의 첫 부분과 매우 유사합니다...그러나 페이지 형식 때문에 놓치기 쉽습니다.

터미널에서 사용해 보십시오.

ruby -S gem list --local

gems 디렉토리에서 파일(젬)을 얻을 수 있을까요?

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

디버거 유형 내에서$LOAD_PATH당신의 보석 목록을 얻을 수 있습니다.디버거가 없으면 프라이를 설치합니다.

gem install pry
pry
Pry(main)> $LOAD_PATH

그러면 설치된 보석 배열이 출력됩니다.

언급URL : https://stackoverflow.com/questions/5177634/list-of-installed-gems