Запуск методов из области видимости Синатры - PullRequest
1 голос
/ 09 сентября 2011

Я использую ActionMailer для отправки электронных писем, но я бы хотел использовать рендеринг Sinatra Tilt. Я не знаю, как получить доступ к экземпляру Sinatra из-за пределов Sinatra, поэтому я могу сделать это:

class Mailer < ActionMailer
  def test(address)
    mail(:to=>address,
         :body => 'turns out you need something here?') do |format|
      details = erb(:myview)
      format.text { details }
      format.html { markdown(details) }
    end
  end
end

Надеюсь, вы увидите, что я пытаюсь сделать, но в данный момент я получаю сообщение об ошибке "метод не найден". Любые идеи, как я могу включить область действия экземпляра Синатры в блоке формата?

Спасибо.

1 Ответ

1 голос
/ 10 сентября 2011

Вот несколько вариантов.

Номер один (некрасиво)

class Mailer < ActionMailer
  def test(address, instance)
    mail(:to=>address,
         :body => 'turns out you need something here?') do |format|
      details = instance.erb(:myview)
      format.text { details }
      format.html { markdown(details) }
    end
  end
end

Тогда в вашем приложении

get '/send_mail' do
  Mailer.new.test('bob@example.com', self)
end

Номер два

Определите свой класс Mailer в блоке помощников вашего приложения.Это должно дать ему доступ к erb .Я сделал нечто очень похожее на обычный mail gem.За исключением того, что я определил метод, а не целый класс.Думаю, это все еще должно работать.

helpers do
  class Mailer < ActionMailer
    def test(address)
      mail(:to=>address,
           :body => 'turns out you need something here?') do |format|
        details = erb(:myview)
        format.text { details }
        format.html { markdown(details) }
      end
    end
  end
end

Номер три

Посмотрите на код Синатры и / или Тилта, следуйте erb вверхстек до тех пор, пока он больше не заботится об экземпляре запроса, и продублируйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...