Я пытаюсь включить метод из вспомогательного модуля в подкласс ActiveModel::Serializer
, но по какой-то причине метод не появляется.Ruby: Как включить методы из модуля в подкласс ActiveModel :: Serializer
Вот мой простой помощник модуль:
module Helpers
module Serialisers
def enforce_zulu_time(attribute)
define_method(attribute) do
object.send(attribute).utc.iso8601 unless object.try(attribute).nil?
end
end
end
end
А вот мой тест serialiser
class TestSerialiser < ActiveModel::Serializer
include Helpers::Serialisers
attributes :updated_at
enforce_zulu_time :updated_at
end
и мой простой объект сериализация
class TestItem
include ActiveModel::SerializerSupport
attr_reader :updated_at
def initialize
@updated_at = Time.now.utc
end
end
и мой тест
describe Helpers::Serialisers do
let(:item) { TestItem.new }
let(:serialiser) { TestSerialiser.new(item) }
subject { serialiser.attributes }
it { expect(subject[:updated_at]).to be_zulu_time}
end
приводит
`<class:TestSerialiser>': undefined method `enforce_zulu_time' for TestSerialiser:Class (NoMethodError)
Однако, если я просто сделать это в моем TestSerialiser
вместо
class TestSerialiser < ActiveModel::Serializer
attributes :updated_at
['updated_at'].each do |attribute|
define_method(attribute) do
object.send(attribute).utc.iso8601 unless object.send(attribute).blank?
end
end
end
все работает отлично.
Почему мой метод enforce_zulu_time
не входит?
Это похоже на работу. –