2014-01-14 5 views
3

Я пытаюсь найти зависимости для рубинового драгоценного камня. Я знаю, что команда gem dependency сообщит мне о зависимостях драгоценного камня. Но я хочу сделать больше, чем это. Я также хочу знать зависимости тех камней, которые генерируются командой gem dependency. Я имею в виду, я хочу узнать все драгоценные камни до последнего, от которого зависит мой драгоценный камень.Как узнать все зависимости драгоценного камня?

Любые указатели будут оценены. Заранее спасибо.

Примечание: Идея заключается в том, чтобы построить что-то вроде https://www.gemlou.pe/

+0

Посмотрите на ** Gemfile.lock **, для зависимостей развитий выглядят at * rubygems.org * –

+2

Но как вы это делаете с 'gem dependency [] -R'? @Pseeyush Gupta, я начну щедрость, если не поступят ответы (несколько дней) – Davit

ответ

7
$ gem dependency nokogiri -R 

, например, даст вам список как

Gem nokogiri-1.6.0 
    hoe (~> 2.16, development) 
    hoe-bundler (>= 1.1, development) 
    hoe-debugging (>= 1.0.3, development) 
    hoe-gemspec (>= 1.0, development) 
    hoe-git (>= 1.4, development) 
    mini_portile (~> 0.5.0) 
    minitest (~> 2.2.2, development) 
    racc (>= 1.4.6, development) 
    rake (>= 0.9, development) 
    rake-compiler (~> 0.8.0, development) 
    rdoc (~> 3.10, development) 
    rexical (>= 1.0.5, development) 
    Used by 
    haml-4.0.3 (nokogiri (>= 0, development)) 
    mime-types-1.23 (nokogiri (~> 1.5, development)) 
    redcarpet-2.3.0 (nokogiri (>= 0, development)) 
    tilt-1.4.1 (nokogiri (>= 0, development)) 

что Включать обратной зависимости в выходе

Подробнее на $ gem dependencyhttp://guides.rubygems.org/command-reference/#gem_dependency

обновление

Согласно результатам исследования я сделал на паутине, и после того, как об этом спросили с учетом моих коллег и других, я пошел к выводу, что нет никакого способа можно в настоящее время использовать $ gem dependency, чтобы выяснить, полный рекурсивный список зависимостей от драгоценных камней.

Написание рубиновой жести, подобной той, которую вы указали в обновленном вами вопросе, не должно быть сложным. Я считаю, что это можно сделать, написав простой рекурсивный цикл и выбрав информацию о драгоценных камнях, возможно, в желательном формате.

Я думаю, что от этого отказываться по этой теме, но кто-то может начать баунти за кого-то другого (не мне), которые могли бы думать о «лучший способ, чтобы получить рекуррентные зависимости драгоценный камень» кроме https://www.gemlou.pe который Я думаю, это хорошо.

+0

Спасибо. Но поскольку я сказал, что зависимость от жемчужины даст мне только список драгоценных камней, на которых зависит мой драгоценный камень. Я также хочу знать драгоценные камни, на которых занесены перечисленные драгоценные камни. Как и rdoc, зависит от json. Что-то вроде поиска рекурсивной зависимости. – Pensu

+0

Я не совсем понимаю, о чем вы спрашиваете, но меня это тоже интересует. '$ gem dependency rdoc -R' перечисляет' json'. Можете ли вы рассказать драгоценный камень, который имеет «рекурсивную» зависимость, и он не будет указан там? – dachi

+0

Хорошо, извините, если я не был чист. Понимаете, когда вы ищете зависимость nokogiri, это показывает вам rdoc. Но для rdoc вам также нужен json, которого нет в списке. То, что я пытаюсь сделать, - это когда я ищу зависимости от nokogiri, я получаю все зависимости, т. Е. Как rdoc, так и json. Надеюсь, теперь я поняла. – Pensu

9

следующий класс будет рекурсивно получать зависимости от драгоценных камней (обратите внимание на его доказательство концепции, чтобы он не делал ничего необычного, но его хорошая отправная точка). для документации, пожалуйста, обратитесь rubydocs: Gem::Dependency и Gem::Specification

class GemRequirements 
    def initialize(name, version = nil) 
    @gem = Gem::Dependency.new(name, version) 
    end 

    def dependency_tree 
    @dependency_tree ||= {}.merge(get_dependency(@gem)) 
    end 

    private 

    def get_dependency(gem_dependency) 
    spec = gem_dependency.matching_specs.first 
    dep_key = "#{gem_dependency.name} #{spec.version}" 
    hash = { dep_key => {} } 
    spec.runtime_dependencies.each do |spec_dependency| 
     spec_dependency_spec = spec_dependency.matching_specs.first 
     spec_dep_key = "#{spec_dependency.name} #{spec_dependency_spec.version}" 
     hash[dep_key][spec_dep_key] = get_dependency(spec_dependency) 
    end 
    hash 
    end 
end 

вы можете использовать его в вашем программно приложении или из рубиновой консоли:

r = GemRequirements.new 'rails' 
r.dependency_tree 
=> {"rails 3.2.12"=> 
    {"activesupport 3.2.12"=> 
    {"activesupport 3.2.12"=> 
     {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
     "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
    "actionpack 3.2.12"=> 
    {"actionpack 3.2.12"=> 
     {"activesupport 3.2.12"=> 
     {"activesupport 3.2.12"=> 
      {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
      "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
     "activemodel 3.2.12"=> 
     {"activemodel 3.2.12"=> 
      {"activesupport 3.2.12"=> 
      {"activesupport 3.2.12"=> 
       {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
      "builder 3.0.4"=>{"builder 3.0.4"=>{}}}}, 
     "rack-cache 1.2"=> 
     {"rack-cache 1.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
     "builder 3.0.4"=>{"builder 3.0.4"=>{}}, 
     "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
     "rack-test 0.6.2"=> 
     {"rack-test 0.6.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
     "journey 1.0.4"=>{"journey 1.0.4"=>{}}, 
     "sprockets 2.2.2"=> 
     {"sprockets 2.2.2"=> 
      {"hike 1.2.1"=>{"hike 1.2.1"=>{}}, 
      "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}, 
      "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
      "tilt 1.4.1"=>{"tilt 1.4.1"=>{}}}}, 
     "erubis 2.7.0"=>{"erubis 2.7.0"=>{}}}}, 
    "activerecord 3.2.12"=> 
    {"activerecord 3.2.12"=> 
     {"activesupport 3.2.12"=> 
     {"activesupport 3.2.12"=> 
      {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
      "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
     "activemodel 3.2.12"=> 
     {"activemodel 3.2.12"=> 
      {"activesupport 3.2.12"=> 
      {"activesupport 3.2.12"=> 
       {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
      "builder 3.0.4"=>{"builder 3.0.4"=>{}}}}, 
     "arel 3.0.2"=>{"arel 3.0.2"=>{}}, 
     "tzinfo 0.3.37"=>{"tzinfo 0.3.37"=>{}}}}, 
    "activeresource 3.2.12"=> 
    {"activeresource 3.2.12"=> 
     {"activesupport 3.2.12"=> 
     {"activesupport 3.2.12"=> 
      {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
      "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
     "activemodel 3.2.12"=> 
     {"activemodel 3.2.12"=> 
      {"activesupport 3.2.12"=> 
      {"activesupport 3.2.12"=> 
       {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
      "builder 3.0.4"=>{"builder 3.0.4"=>{}}}}}}, 
    "actionmailer 3.2.12"=> 
    {"actionmailer 3.2.12"=> 
     {"actionpack 3.2.12"=> 
     {"actionpack 3.2.12"=> 
      {"activesupport 3.2.12"=> 
      {"activesupport 3.2.12"=> 
       {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
      "activemodel 3.2.12"=> 
      {"activemodel 3.2.12"=> 
       {"activesupport 3.2.12"=> 
       {"activesupport 3.2.12"=> 
        {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
        "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
       "builder 3.0.4"=>{"builder 3.0.4"=>{}}}}, 
      "rack-cache 1.2"=> 
      {"rack-cache 1.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
      "builder 3.0.4"=>{"builder 3.0.4"=>{}}, 
      "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
      "rack-test 0.6.2"=> 
      {"rack-test 0.6.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
      "journey 1.0.4"=>{"journey 1.0.4"=>{}}, 
      "sprockets 2.2.2"=> 
      {"sprockets 2.2.2"=> 
       {"hike 1.2.1"=>{"hike 1.2.1"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}, 
       "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
       "tilt 1.4.1"=>{"tilt 1.4.1"=>{}}}}, 
      "erubis 2.7.0"=>{"erubis 2.7.0"=>{}}}}, 
     "mail 2.4.4"=> 
     {"mail 2.4.4"=> 
      {"mime-types 1.21"=>{"mime-types 1.21"=>{}}, 
      "treetop 1.4.12"=> 
      {"treetop 1.4.12"=>{"polyglot 0.3.3"=>{"polyglot 0.3.3"=>{}}}}, 
      "i18n 0.6.4"=>{"i18n 0.6.4"=>{}}}}}}, 
    "railties 3.2.12"=> 
    {"railties 3.2.12"=> 
     {"rake 10.1.0"=>{"rake 10.1.0"=>{}}, 
     "rack-ssl 1.3.3"=> 
     {"rack-ssl 1.3.3"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
     "thor 0.18.1"=>{"thor 0.18.1"=>{}}, 
     "rdoc 3.12.2"=>{"rdoc 3.12.2"=>{"json 1.8.1"=>{"json 1.8.1"=>{}}}}, 
     "activesupport 3.2.12"=> 
     {"activesupport 3.2.12"=> 
      {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
      "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
     "actionpack 3.2.12"=> 
     {"actionpack 3.2.12"=> 
      {"activesupport 3.2.12"=> 
      {"activesupport 3.2.12"=> 
       {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
      "activemodel 3.2.12"=> 
      {"activemodel 3.2.12"=> 
       {"activesupport 3.2.12"=> 
       {"activesupport 3.2.12"=> 
        {"i18n 0.6.4"=>{"i18n 0.6.4"=>{}}, 
        "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}}}, 
       "builder 3.0.4"=>{"builder 3.0.4"=>{}}}}, 
      "rack-cache 1.2"=> 
      {"rack-cache 1.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
      "builder 3.0.4"=>{"builder 3.0.4"=>{}}, 
      "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
      "rack-test 0.6.2"=> 
      {"rack-test 0.6.2"=>{"rack 1.4.5"=>{"rack 1.4.5"=>{}}}}, 
      "journey 1.0.4"=>{"journey 1.0.4"=>{}}, 
      "sprockets 2.2.2"=> 
      {"sprockets 2.2.2"=> 
       {"hike 1.2.1"=>{"hike 1.2.1"=>{}}, 
       "multi_json 1.8.2"=>{"multi_json 1.8.2"=>{}}, 
       "rack 1.4.5"=>{"rack 1.4.5"=>{}}, 
       "tilt 1.4.1"=>{"tilt 1.4.1"=>{}}}}, 
      "erubis 2.7.0"=>{"erubis 2.7.0"=>{}}}}}}, 
    "bundler 1.3.5"=>{"bundler 1.3.5"=>{}}}} 
Смежные вопросы