Новый драгоценный камень с Bundler, из класса - PullRequest
1 голос
/ 12 ноября 2011

Когда мы запускаем команду bundle gem new_gem, создается каталог с этими файлами:

  create  new_gem/Gemfile
  create  new_gem/Rakefile
  create  new_gem/.gitignore
  create  new_gem/new_gem.gemspec
  create  new_gem/lib/new_gem.rb
  create  new_gem/lib/new_gem/version.rb

По умолчанию файл new_gem/lib/new_gem.rb является модулем с именем NewGem.

* 1008.* Мой вопрос заключается в следующем: как я могу сделать, если NewGem класс?Вместо того, чтобы иметь NewGem::NewGem, я хотел бы просто определить этот класс (без корневого модуля).

Я попытался просто заменить модуль на класс внутри этого файла, а затем сделать локальный гем для тестированияэто, но после его установки, я не могу загрузить его в IRB (с require 'new_gem').

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 12 ноября 2011

Вы должны спросить себя, почему вы хотите это сделать. Модуль существует для пространства имен кода вашего драгоценного камня. Как правило, чтобы обеспечить контекст для всех классов внутри, но даже в одном геме класса, это помогло бы обеспечить конфликты с другим кодом в мире.

Если ваш класс не назван SomethingThatCouldNeverPossiblyBeDefinedAnywhereElse, оставить этот модуль на месте, вероятно, хорошо. И независимо от этого, оставить модуль без изменений - все еще хорошо, так как это соглашение и то, что люди ожидают, изучая / используя ваш код.

Имея это в виду, есть несколько вещей, которые вам нужно сделать, если вы хотите получить драгоценный камень одного класса.

  1. Сгенерированный gemspec хочет require 'new_gem/version', чтобы найти его номер версии. Измените это на просто require 'new_gem'.

  2. Gemspec также перечисляет содержащиеся в нем файлы, используя git ls, и сгенерированный пакет gem уже содержит new_gem/version, включенный в предварительно созданное git-репо. Удалить это:

    git rm lib/new_gem/version.rb
    
  3. Измените ваш new_gem модуль на класс, как вы делали ранее.

  4. Удалите сгенерированное version.rb требование из вашего класса и вместо этого определите там версию, например ::

    class NewGem
      VERSION = '0.0.1'
    end 
    
  5. Наконец установите драгоценный камень через rake install. Вы не сможете загрузить его в IRB, пока не сделаете это.

...