Я хочу добавить небольшое расширение для класса в рубиновой драгоценности.Ruby on Rails Глобальная переменная класса, не обновляемая при изменении
Жемчужиной я использую private_pub: https://github.com/ryanb/private_pub и класс я переопределение является: https://github.com/ryanb/private_pub/blob/master/lib/private_pub/faye_extension.rb
Я поместил свою реализацию в виде нового файла в конфиге/Инициализаторы называется faye_extension.rb. Часть, которую я добавил в код, - это клиенты @@ и метод класса get_list_of_subscribers. Код в faye_extension.rb выглядит следующим образом:
PrivatePub::FayeExtension
module PrivatePub
# This class is an extension for the Faye::RackAdapter.
# It is used inside of PrivatePub.faye_app.
class FayeExtension
# Callback to handle incoming Faye messages. This authenticates both
# subscribe and publish calls.
##### MY NEW BIT
@@clients = 0
def self.get_list_of_subscribers
@@clients
end
####
def incoming(message, callback)
@@clients = @@clients + 1
if message["channel"] == "/meta/subscribe"
authenticate_subscribe(message)
elsif message["channel"] !~ %r{^/meta/}
authenticate_publish(message)
end
callback.call(message)
end
private
# Ensure the subscription signature is correct and that it has not expired.
def authenticate_subscribe(message)
subscription = PrivatePub.subscription(:channel => message["subscription"], :timestamp => message["ext"]["private_pub_timestamp"])
if message["ext"]["private_pub_signature"] != subscription[:signature]
message["error"] = "Incorrect signature."
elsif PrivatePub.signature_expired? message["ext"]["private_pub_timestamp"].to_i
message["error"] = "Signature has expired."
end
end
# Ensures the secret token is correct before publishing.
def authenticate_publish(message)
if PrivatePub.config[:secret_token].nil?
raise Error, "No secret_token config set, ensure private_pub.yml is loaded properly."
elsif message["ext"]["private_pub_token"] != PrivatePub.config[:secret_token]
message["error"] = "Incorrect token."
else
message["ext"]["private_pub_token"] = nil
end
end
end
end
При развертывании в моем приложении, метод входящего() кода FayeExtension вызывается несколько раз, однако, если в представлении где-то я использую следующую строку кода :
<h3><%= PrivatePub::FayeExtension.get_list_of_subscribers.to_s %></h3>
называть мой метод get_list_of_subscribers класса, он всегда возвращает 0, несмотря я зову входящие() 5 раз, где я хотел бы ожидать, что это выход 5. Таким образом, кажется мой @@clients = @@clients +1
код внутри входящего() является не ссылаясь или не обновляя мою глобальную переменную.
Как я могу изменить код для достижения этого?