usar singletons script patrones patron ejercicios ejemplo ecmascript diseño cuando ruby-on-rails-3

ruby-on-rails-3 - singletons - singleton javascript ejemplo



¿Cómo puedo crear un objeto global de singleton en rieles (2)

En Rails, los objetos se recrean en cada solicitud. Si este es algún tipo de servicio, debería ser un singleton en el alcance de una solicitud.

Los objetos Singleton deben crearse con el rubin singleton mixin:

require ''singleton'' class Pubnub include Singleton def initialize(publish_key, subscribe_key, secret_key, ssl_on) # ... end def publish # ... end end

Entonces puedes llamarlo con el método de instance :

Pubnub.instance.publish

De esta manera, se asegura de que este objeto sea realmente un singleton (solo existirá una instancia).

Puede colocarlo de manera segura en el directorio de models , aunque a menudo prefiero el directorio lib o tal vez cree un nuevo directorio para servicios. Depende de la situación.

¡Espero eso ayude!

Tengo un objeto que quiero crear una vez y accesible en uno de mis modelos. ¿Dónde lo pongo? Me temo que si lo pongo en el archivo de clase de modelo, se creará cada vez que haga una nueva instancia de ese modelo. Solo quiero que este objeto se cree una vez al inicio. Aquí está el objeto:

require ''pubnub'' publish_key = ''fdasfs'' subscribe_key = ''sdfsdsf'' secret_key = ''fsdfsd'' ssl_on = false pubnub_obj = Pubnub.new(publish_key, subscribe_key, secret_key, ssl_on)

Lo uso así en el modelo:

class Message < ActiveRecord::Base def self.send_new_message_client(message) message = { ''some_data'' => message } info = pubnub_obj.publish({ ''channel'' => ''testing'', ''message'' => message }) puts(info) end end


Si solo desea una instancia en toda su aplicación, use un singleton, de lo contrario use una variable de clase.

Para usar un singleton, incluye el mixin de Singleton.

require ''singleton'' class Pubnub include Singleton attr_writer :publish_key, :subscribe_key, :secret_key, :ssl_on def publish #... end end

y luego usarlo así:

require ''pubnub'' class Message < ActiveRecord::Base Pubnub.instance.publish_key = ''xyz'' Pubnub.instance.subscribe_key = ''xyz'' Pubnub.instance.secret_key = ''xyz'' Pubnub.instance.ssl_on = ''xyz'' def self.send_new_message_client(message) message = { ''some_data'' => message } info = Pubnub.instance.publish({ ''channel'' => ''testing'', ''message'' => message }) puts(info) end end

También puede convertirla en una variable de clase, para vincularla más estrechamente a un modelo específico:

require ''pubnub'' class Message < ActiveRecord::Base @@pubnub_obj = Pubnub.new(''xyz'', ''xyz'', ''xyz'', ''xyz'') def self.send_new_message_client(message) message = { ''some_data'' => message } info = @@pubnub_obj.publish({ ''channel'' => ''testing'', ''message'' => message }) puts(info) end end