как переопределить вызов проверки в activerecord в гем? - PullRequest
3 голосов
/ 15 февраля 2010

Я использую apn_on_rails для push-уведомлений iphone с рельсами.

В настоящее время проверка на токене больше не действительна, потому что проверка требует пробела каждые 8 ​​символов: validates_format_of: token,: with => / ^ [a-z0-9] {8} \ s [a-z0-9] {8} \ s [a-z0-9] {8} \ s [a-z0 -9] {8} \ с [A-z0-9] {8} \ s [A-z0-9] {8} \ s [A-z0-9] {8} \ s [A-z0-9 ] {8} $ /

http://github.com/markbates/apn_on_rails/blob/master/lib/apn_on_rails/app/models/apn/device.rb

Но токен устройства, полученный от Objective-C, не имеет места.

Итак, я хотел бы переопределить проверку, чтобы сделать это: validates_format_of: token,: with => / ^ [a-z0-9] {64} $ /

как я могу сделать это без изменения источника внутри драгоценного камня?

Спасибо.

Ответы [ 3 ]

1 голос
/ 29 июля 2010

Вы не первый с этой проблемой - я нашел полезной следующую статью Удаление проверок Rails с метапрограммированием .

1 голос
/ 31 августа 2010

Пример метапрограммирования великолепен, но вы легко можете сломать код, который зависит от этой проверки. Я бы порекомендовал написать собственные методы доступа, которые модифицируют атрибут для работы с вашим гемом. Например, используйте код Весгаррисона и измените сеттер:

def token= token
  @token = [56, 48, 40, 32, 24, 16, 8].each { |i| token.insert(i, ' ') }
end

Затем вы можете добавить этот код в модуль-обертку или дочерний класс, который вы используете в своем коде.

1 голос
/ 15 февраля 2010

Или подтвердите код:

[56, 48, 40, 32, 24, 16, 8].each { |i| code.insert(i, ' ') }
...