2014-09-30 48 views
0

我想了解Nokogiri的最新版本。對於這個我使用:在Ruby腳本中查找最新版本的寶石

gem list nokogiri --remote 

但是它返回的寶石具有它「引入nokogiri」一個長長的清單:

backupify-rsolr-nokogiri (0.12.1.1) 
epp-nokogiri (1.0.0) 
glebm-nokogiri (1.4.2.1) 
jwagener-nokogiri (1.4.1) 
nokogiri (1.6.3.1 ruby java x64-mingw32 x86-mingw32, 1.6.1 x86-mswin32-60, 1.4.4.1 x86-mswin32) 
nokogiri-diff (0.2.0) 
nokogiri-fitzsimmons (1.5.5.3 ruby java) 
nokogiri-happymapper (0.5.9) 
nokogiri-happymapper-deiga (0.5.10) 
nokogiri-maglev- (1.5.5.20120817130721) 
nokogiri-maven (1.5.0 java) 
nokogiri-plist (0.5.0) 
nokogiri-pretty (0.1.0) 
nokogiri-streaming-reader (0.0.2) 
nokogiri-styles (0.1.2) 
nokogiri-xmlsec (0.0.4) 
nokogiri-xmlsec1 (0.0.7) 
nokogiri_bang_finders (1.0.0) 
nokogiri_helper (0.0.1) 
nokogiri_html_helpers (0.1.4) 
nokogiri_truncate_html (0.0.3) 
rack-nokogiri (0.1.0) 
revo-nokogiri (1.4.1 java) 
rsolr-nokogiri (0.0.0) 
rss-nokogiri (0.0.1.1) 
rubyjedi-nokogiri_java (1.4.0.20100513161003 java) 
sax-machine-nokogiri-1.4.4-safe (0.0.15) 
spp_nokogiri_ext (0.0.5) 
superfeedr-nokogiri (1.4.0.20091116183308) 
tenderlove-nokogiri (0.0.0.20081001111445, 0.0.0 x86-mswin32-60) 
watir-nokogiri (1.0.0) 

是否有一個命令,只是從它那裏得到的引入nokogiri寶石?即:

nokogiri (1.6.3.1 ruby java x64-mingw32 x86-mingw32, 1.6.1 x86-mswin32-60, 1.4.4.1 x86-mswin32) 

而且我怎樣才能使運行該命令的Ruby腳本?我正在嘗試編寫一個腳本,它將查找最新版本的寶石,然後執行一些操作。我的腳本將負責運行此命令。

回答

1
$ gem list "^nokogiri$" --remote 

*** REMOTE GEMS *** 

nokogiri (1.6.3.1 ruby java x64-mingw32 x86-mingw32, 1.6.1 x86-mswin32-60, 1.4.4.1 x86-mswin32) 

爲他們分別本地和遠程的寶石都listsearch狀態的幫助;使用search可能會更好。它具有相同的正則表達式功能。

沒有提到正則表達式的能力;我從「nokogiri」的結果中得出了它的結論。

我錯過了「Ruby腳本」的一部分,在這種情況下,使用現有的Gem功能要好得多,沒有其他任何意義。它掃描你所使用的工具庫,因爲他們顯然已經具備的功能建在一個良好的習慣。

+0

很好的捕獲使用正則表達式的字符串。我總是用grep來進一步過濾。 – 2014-09-30 14:38:53

2

如果你需要這個Ruby腳本里面,你可能想看看在類Gem::SpecFetcher使用的gem命令執行遠程搜索,例如:

specs = Gem::SpecFetcher.fetcher.detect(:latest) do |name_tuple| 
    name_tuple.name == 'nokogiri' && name_tuple.platform == 'ruby' 
end 

specs是一個數組(只用元件在這種情況下)-2-元件陣列,第一個是Gem::NameTuple對象和第二個是一個Gem::Source對象(我們不在這裏感興趣)。

found = specs.first.first 
# => #<Gem::NameTuple nokogiri, 1.6.3.1, ruby> 
found.name 
# => "nokogiri" 
found.version 
# => #<Gem::Version "1.6.3.1">