Описание тега refinements

Усовершенствования - это функция Ruby, предназначенная для уменьшения воздействия исправлений обезьяны на других пользователей класса исправленных обезьян. Уточнения позволяют расширять класс локально, а не глобально.
2 ответа

Как использовать уточнения Ruby в представлениях Rails?

У меня есть проект Rails 4 с использованием Ruby 2.0. Я определил некоторые уточнения. Ввод <% using MyRefinements %> В верхней части окна просмотра файлов возникает ошибка "неопределенный метод" с использованием "". Когда я добавляю: using My…
17 мар '14 в 19:27
1 ответ

Рубиновые доработки и крючки

Я пытаюсь использовать рубиновые доработки, чтобы применить крючки для рельсов. Я хочу избежать исправления обезьян. При исправлении обезьяны это будет работать как таковое ActiveRecord::Base.class_eval do after_find do # do something with my_method…
31 авг '15 в 16:32
1 ответ

Уточнение в рубине

Есть ли способ ограничить эффект уточнения в одной программе ruby, кроме использования его в модуле? Например, скажем, имя уточнения - StringRefinement, и когда мы набираем текст с использованием StringRefinement, оно вступает в силу и действует до …
12 май '15 в 09:54
1 ответ

Уточнения и пространства имен

Попытка исправить net/http и применить его только к одному классу обслуживания. Уточнения, кажется, путь. Патч обезьяны ниже работает, а уточнение - нет. Это проблема пространства имен? Проект на ruby ​​2.3.0, но пробовал и с 2.4.1, и, кажется, толь…
22 ноя '17 в 17:43
1 ответ

Можно ли использовать методы, определенные в уточнениях в представлениях Синатры?

У меня есть класс, определенный в геме, к которому я добавляю некоторые методы с помощью доработок (в Ruby 2.3.0). Этот класс встречается в некоторых представлениях Синатры (хамл). Когда я обращаюсь к этим дополнительным методам в помощнике, это не …
04 мар '16 в 12:12
1 ответ

Как "супер" в уточнении может вызвать переопределенный метод?

У меня сложилось впечатление, что доработки выходят за рамки обычной схемы наследования в Ruby; что переопределение метода в уточнении заменило исходный метод для всего кода, использующего уточнение. Но потом я попробовал этот эксперимент с superи о…
12 окт '15 в 03:44
1 ответ

Как разделить код между уточнениями ruby?

module Ext refine Hash do def foo puts :in_foo end def bar puts :in_bar foo end end end module Test using Ext Hash.new.bar end # in_bar # in_foo # => nil Это работает как ожидалось. Но если я хочу поделиться foo а также bar между Hash а также Arr…
28 июн '15 в 08:46
1 ответ

Использование доработок для исправления основного модуля, такого как ядро

Я иду через Facets API и выбираю некоторые методы для включения в мою улучшенную библиотеку патчей. Я попал в ловушку, пытаясь залатать ядро. Это модуль, в то время как другие вещи, которые я исправил, были классы (String, Array и т. Д.) Вот доказат…
12 дек '16 в 00:31
2 ответа

Почему to_proc не работает внутри доработок Ruby?

Кажется, что to_proc не работает с методами, определенными в уточнениях: module ArrayExtensions refine Array do def sum reduce(0, :+) end end end using ArrayExtensions puts [[1, 2, 3]].map { |array| array.sum } # => 6 puts [[1, 2, 3]].map(&:s…
11 фев '16 в 07:31
1 ответ

Рубиновые доработки получили

В метапрограммировании Ruby 2 в главе 2 раздела "Уточнения" я обнаружил следующий фрагмент кода Ruby: class MyClass def my_method "original my_method()" end def another_method my_method end end module MyClassRefinement refine MyClass do def my_metho…
07 окт '17 в 18:30
1 ответ

Лучший способ организовать длинный кусок кода в блоке уточнения ruby

module Access def last self[-1] end def start_end self[0] + last end end module StringExt refine String do include Access end end using StringExt puts 'abcd'.last # => d puts 'abcd'.start_end Когда класс очищается с помощью слишком большого колич…
29 мар '17 в 09:22
1 ответ

Являются ли доработки в Ruby 2.0 совершенно бесполезными?

В Ruby 2.0 были представлены так называемые доработки. Я играл с ними, и теперь я полностью одурачен: - главное заявленное преимущество refine в том, что они не являются глобальными. Ба. module MyModule class ::String def my_locally_needed_func # do…
05 мар '13 в 09:45
2 ответа

endeca возвращает ноль результатов в уточнениях, когда ни одно из уточнений не доступно в ref app?

Я использую Endeca 3.1.2 Assembler API. Когда я нажимаю на запрос Endeca, он дает мне несколько уточнений, которые содержат ноль и некоторые положительные значения. Пример: category **category1(0)** category2(25) **category3(0)** Как этот результат …
04 янв '16 в 21:50
1 ответ

Пользовательский поиск Google: у некоторых уточнений нет результатов

Я настроил поисковую систему Google для своего сайта, и она работает очень хорошо. Я также настроил доработки для разных категорий на сайте. Например, чашки, блюдца, тарелки Когда я выполняю поиск, используя api или окно поиска, для "China Cups" goo…
05 янв '16 в 00:32
2 ответа

Можно ли использовать рубиновые уточнения для изменения поведения действия контроллера в тестах?

Можно ли использовать функцию уточнений, чтобы заглушить действие контроллера? Я определяю уточнение в "my_controller_refinement.rb" require "my_controller" module MyControllerRefinement refine MyController do def create_item(my_object = {}) return …
18 май '17 в 16:00
2 ответа

Применяются ли уточнения только к методам экземпляров?

Я пытаюсь понять функцию уточнения Руби, и я столкнулся со сценарием, который я не понимаю. Возьмите этот пример кода: class Traveller def what_are_you puts "I'm a Backpacker" end def self.preferred_accommodation puts "Hostels" end end module Refine…
08 янв '15 в 05:22
0 ответов

NoMethodError при использовании уточнений в модели ActiveRecord

Рубин: 2.3.7 Рельсы: 4.2.10 У меня есть следующая реализация, где я хочу использовать уточнения, чтобы добавить метод в класс String module StringExtensions refine String do def numeric? str = String.new(self) (/\A\d+\z/ =~ str) == 0 end end end cla…
24 янв '19 в 03:16
1 ответ

Почему я получил, что main.using разрешено только на верхнем уровне, когда я использовал уточнение в IRB?

Я пытался использовать уточнение в IRB (v0.9.6, Ruby 2.3.0): module Foo refine Object do def foo() "foo" end end end using Foo # => RuntimeError: main.using is permitted only at toplevel Это в основном точная настройка из документации (что привод…
05 янв '16 в 20:21
1 ответ

Обернуть блок для использования уточнения

Учитывая следующее уточнение: module StringRefinement refine String do def bar length end end end Я хочу реализовать модуль для выполнения блоков, используя мое уточнение: module Demo using StringRefinement def self.wrap(*args, &block) instance_…
28 авг '15 в 10:25
1 ответ

Уточните метод класса драгоценного камня

Я должен обернуть некоторое поведение вокруг внешнего драгоценного камня в изящной и изолированной манере. Учитывая приведенную ниже абстракцию, все идет гладко, но "bar" никогда не печатается. Может кто-нибудь сказать мне, почему? Мой код: module R…
10 ноя '17 в 12:43