Kuki_Bulochka
@Kuki_Bulochka

Куда устанавливаются gem файлы в RoR 4?

Подскажите пожалуйста в какую директорию устанавливаются gem файлы для Ruby on Rails 4

Суть в том чтобы можно было менять код
Например.

Для гема will_paginate.
После добавления в представление (views)
<%= will_paginate @items %>
генерируется следующий html код:
<div class="pagination">
 <a class="previous_page" rel="prev start" href="/items?page=1">← Previous</a>
 <a rel="prev start" href="/items?page=1">1</a>
 <em class="current">2</em>
 <a rel="next" href="/items?page=3">3</a>
 <a class="next_page" rel="next" href="/items?page=3">Next →</a>
</div>


Хотелось бы его видоизменить
  • Вопрос задан
  • 3906 просмотров
Решения вопроса 4
Vakiliy
@Vakiliy
Для просмотра куда установлен gem:
bundle show <name_gem>

для просмотра исходников, (по редактированию далее)
EDITOR=vim bundle open <name_gem>

по поводу правок - изменять установленные гемы не рекомендуется, пример, все ваши правки пропадут при обновлении gem`а

Варианты:
1. расширить библиотеку посредством 'Monkey patch', достоинство, вы ни чего не правите в исходной библиотеке, недостатки, устранение ошибок после внесения автором gem`a изменений;

2. сделать локальную/удаленную (fork) копию, и устанавливать эту версию, достоинство в контроле над происходящими с gem`ом изменениями. Выглядит это примерно так:

cd <path>
gem unpuck <name_gem> (если без git`a)
git clone --bare <адрес> (если с git)
#... правки gem`a ...
# Вариант 1. Настройки Bundle, говорим, что <name_gem> локальный (главное не забыть об этом)
bundle config local.spree <path>/<name_gem>

# Вариант 2: Gemfile:
gem 'name_gem', path: <path> # локально
gem 'name_gem', :git => '<repo path/url>', :branch => 'you_hack_branch'


Относительно wil-paginate и его View`ихи. При показе пагинации можно указывать свой обработчик
= will_paginate(.... :renderer =>
Пример как это делается: можно посмотреть тут
Ответ написан
Freika
@Freika
Senior Ruby on Rails developer
Гем устанавливается в папку с версией Ruby.
Таким образом отредактировав гем, вы ничего толкового не добьетесь. Расширьте класс, допишите свой код (скажем, рендеринг собственного парциала вместо встроенного) внутри вашего приложения.
Ответ написан
kirillplatonov
@kirillplatonov
Ruby on Rails developer
will_paginate мертв

возьмите https://github.com/amatsuda/kaminari
он не сильно отличается по использованию и позволяет кастомизировать свои представления
Ответ написан
@Rigorbb
Обычно использую для расширения гемов такую схему
- для моделей и контроллеров гема, создаю в уже в своем приложении модель/контроллер с именем oldname_decorator.rb, где в class_eval do расширяю иои переопределяю исходный класс

- для вьюх - просто копируем соттв файл из гема в свое приложение, сохраняя структуру папок, начиная от view. При перезапуске вебсервера ваш файл заменит файл из гема.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы