Попытка понять, для чего Base.rakismet_binding - PullRequest
0 голосов
/ 13 ноября 2009

Что значит эта часть. , ,

    unless Rakismet::Base.rakismet_binding.nil?
      { :referrer => 'request.referer', :user_ip => 'request.remote_ip',
        :user_agent => 'request.user_agent' }.each_pair do |k,v|
          data[k] = eval(v, Rakismet::Base.rakismet_binding) || ''
      end
    end

из следующего метода делать?

module InstanceMethods
  def spam?
    data = akismet_data

    unless Rakismet::Base.rakismet_binding.nil?
      { :referrer => 'request.referer', :user_ip => 'request.remote_ip',
        :user_agent => 'request.user_agent' }.each_pair do |k,v|
          data[k] = eval(v, Rakismet::Base.rakismet_binding) || ''
      end
    end

    self.akismet_response = Rakismet::Base.akismet_call('comment-check', data)
    self.akismet_response == 'true'
  end

Я нашел другие ссылки на rakismet_binding в rakismet.rb:

  class Base
    cattr_accessor :valid_key, :rakismet_binding

и controller_extensions.rb:

def rakismet(&block)
  Rakismet::Base.rakismet_binding = binding
  yield
  Rakismet::Base.rakismet_binding = nil
end
private :rakismet

Но я понятия не имею, для чего это.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

привязка ядра - это специальный объект, содержащий контекст вызова метода, включая все переменные экземпляра. Что делает метод rakismet(&block), так это временно назначает текущую привязку (экземпляр ActionController) переменной класса, чтобы она была доступна любым вызовам метода rakismet и выполняла содержимое блока.

Следующий фрагмент кода

unless Rakismet::Base.rakismet_binding.nil?
  { :referrer => 'request.referer', :user_ip => 'request.remote_ip',
    :user_agent => 'request.user_agent' }.each_pair do |k,v|
      data[k] = eval(v, Rakismet::Base.rakismet_binding) || ''
  end
end

проверяет, доступна ли привязка, и если да, то пытается автоматически собрать некоторую информацию из текущей привязки, такую ​​как ActionController # request.referer, ActionController # request.remote_ip и т. Д.

В двух словах, это обходной путь для сбора некоторых переменных из вашего текущего запроса ActionController, которые в противном случае не были бы доступны Rakismet.

0 голосов
/ 13 ноября 2009

Последний фрагмент кода в значительной степени указывает на его намерение - его следует использовать в виде блока и обернуть текущую привязку.

Если вы посмотрите на некоторые юнит-тесты для этого класса:

http://github.com/jfrench/rakismet/blob/master/spec/models/model_extension_spec.rb?raw=true

Вы можете увидеть, как его использовать.

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