Почему моему движку Rails нужно, чтобы я требовал его (в отличие от типичного гема), даже если он находится в Gemfile и для него настроены require_paths?

Я написал движок Rails под названием annotator-store. Для этого требуется явный require 'annotator_store' в /config/application.rb в основном приложении (даже если он находится в Gemfile). Это сбивает меня с толку, потому что я написал гем до того, как это не нужно делать.

Это поведение движков Rails по дизайну, или я что-то упустил?

Вот мой файл gemspec:

$:.push File.expand_path('../lib', __FILE__)
require 'annotator_store/version'

Gem::Specification.new do |spec|
  spec.name           = 'annotator-store'
  spec.version        = AnnotatorStore::VERSION
  spec.date           = Time.new.getutc.strftime('%Y-%m-%d')
  spec.authors        = ["Job King'ori Maina"]
  spec.email          = ['[email protected]']
  spec.homepage       = 'http://itsmrwave.github.io/annotator-store'
  spec.summary        = 'Rails engine to implement a Ruby backend store implementation for Annotator.'
  spec.description    = 'Rails engine to implement a Ruby backend store implementation for Annotator, an open-source JavaScript library to easily add annotation functionality to any webpage.'
  spec.license        = 'MIT'

  spec.files          = Dir['{app,config,db,lib}/**/*', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE.md', 'Rakefile', 'README.md']
  spec.require_paths  = ['lib']

  spec.required_ruby_version = '>= 1.9.3'

  # Database dependencies
  spec.add_development_dependency 'mysql2'
  spec.add_development_dependency 'pg'

  # Development dependencies
  spec.add_development_dependency 'appraisal'
  spec.add_development_dependency 'database_cleaner'
  spec.add_development_dependency 'factory_girl_rails'
  spec.add_development_dependency 'faker'
  spec.add_development_dependency 'json-schema'
  spec.add_development_dependency 'rspec-rails'

  # Runtime dependencies
  spec.add_runtime_dependency 'jbuilder'
  spec.add_runtime_dependency 'rails', '>= 4.0'
end

Как видите, я добавил папку lib в папку require_paths. Согласно документации gemspec на rubygems.org... что делает require_paths=(val) и что это ...

Пути в драгоценном камне для добавления к $LOAD_PATH при активации этого драгоценного камня.

Я правильно настроил все в папке lib, так что когда вы require 'annotator_store' все работает отлично.

Что мне не хватает?


person King'ori Maina    schedule 28.12.2014    source источник


Ответы (1)


Я подозреваю, что это проблема «-» и «_». В именах гемов Rails «-» подразумевает подкаталоги, поэтому естественным включением для вашего движка будет «lib/annotator.rb» и «lib/annotator/store.rb», а не «lib/annotator_store.rb». Таким образом, файл, который, как вы ожидаете, потребуется, не является.

Чтобы подтвердить это, вы можете изменить имя вашего движка или изменить файловую структуру в разделе «lib».

person Peter Goldstein    schedule 28.12.2014
comment
Вы были правы, я неправильно назвал драгоценный камень annotator-store, хотя он должен был быть annotator_store. Я бы посоветовал всем, кто просматривает это, взглянуть на эту ссылку о том, как «назвать свой камень». ' из документации rubygems.org для получения подробной информации. - person King'ori Maina; 28.12.2014