Ruby on Rails 5.2 - ActiveSupport::Subscriber

वर्ग ActiveSupport :: सदस्य




ruby

वर्ग ActiveSupport :: सदस्य

जनक:
Object

ActiveSupport::Subscriber ActiveSupport::Notifications का उपभोग करने के लिए सेट एक ऑब्जेक्ट है। ग्राहक अपने दिए गए नाम स्थान के आधार पर किसी पंजीकृत वस्तु को सूचनाएं भेजता है।

एक उदाहरण एक सक्रिय रिकॉर्ड ग्राहक होगा जो प्रश्नों के बारे में आंकड़े एकत्र करने के लिए जिम्मेदार होगा:

module ActiveRecord
  class StatsSubscriber < ActiveSupport::Subscriber
    attach_to :active_record

    def sql(event)
      Statsd.timing("sql.#{event.payload[:name]}", event.duration)
    end
  end
end

कॉन्फ़िगर किए जाने के बाद, जब भी "sql.active_record" अधिसूचना प्रकाशित होती है, तो यह ठीक से इवेंट (ActiveSupport :: Notifications :: Event) को sql विधि से भेज देगा।

गुण

नामस्थान [आर]

TODO इसे निजी में बदलें जब हमने रूबी 2.2 समर्थन को गिरा दिया है। रूबी 2.2 "निजी विशेषता?" चेतावनी के लिए समाधान।

नोटिफ़ायर [R]

TODO इसे निजी में बदलें जब हमने रूबी 2.2 समर्थन को गिरा दिया है। रूबी 2.2 "निजी विशेषता?" चेतावनी के लिए समाधान।

ग्राहक [R]

TODO इसे निजी में बदलें जब हमने रूबी 2.2 समर्थन को गिरा दिया है। रूबी 2.2 "निजी विशेषता?" चेतावनी के लिए समाधान।

पब्लिक क्लास के तरीके

संलग्न_ओ (नाम स्थान, ग्राहक = नया, नोटिफ़ायर = ActiveSupport :: सूचनाएं) स्रोत दिखाएं
# File activesupport/lib/active_support/subscriber.rb, line 30
def attach_to(namespace, subscriber = new, notifier = ActiveSupport::Notifications)
  @namespace  = namespace
  @subscriber = subscriber
  @notifier   = notifier

  subscribers << subscriber

  # Add event subscribers for all existing methods on the class.
  subscriber.public_methods(false).each do |event|
    add_event_subscriber(event)
  end
end

सब्सक्राइबर को किसी नेमस्पेस से अटैच करें।

method_added (ईवेंट) स्रोत दिखाएं
# File activesupport/lib/active_support/subscriber.rb, line 44
def method_added(event)
  # Only public methods are added as subscribers, and only if a notifier
  # has been set up. This means that subscribers will only be set up for
  # classes that call #attach_to.
  if public_method_defined?(event) && notifier
    add_event_subscriber(event)
  end
end

क्लास में जोड़े गए सभी नए तरीकों के लिए इवेंट सब्सक्राइबर जोड़ता है।

# File activesupport/lib/active_support/subscriber.rb, line 80
def initialize
  @queue_key = [self.class.name, object_id].join "-"
  @patterns  = []
  super
end
सुपरक्लास विधि कहता है
# File activesupport/lib/active_support/subscriber.rb, line 53
def subscribers
  @@subscribers ||= []
end

निजी कक्षा के तरीके

add_event_subscriber (घटना) स्रोत दिखाएँ
# File activesupport/lib/active_support/subscriber.rb, line 65
def add_event_subscriber(event) # :doc:
  return if %w{ start finish }.include?(event.to_s)

  pattern = "#{event}.#{namespace}"

  # Don't add multiple subscribers (eg. if methods are redefined).
  return if subscriber.patterns.include?(pattern)

  subscriber.patterns << pattern
  notifier.subscribe(pattern, subscriber)
end

सार्वजनिक प्रवृत्ति के तरीके

खत्म (नाम, आईडी, पेलोड) दिखाएँ स्रोत
# File activesupport/lib/active_support/subscriber.rb, line 94
def finish(name, id, payload)
  finished  = now
  event     = event_stack.pop
  event.end = finished
  event.payload.merge!(payload)

  method = name.split(".".freeze).first
  send(method, event)
end
प्रारंभ (नाम, आईडी, पेलोड) दिखाएँ स्रोत
# File activesupport/lib/active_support/subscriber.rb, line 86
def start(name, id, payload)
  e = ActiveSupport::Notifications::Event.new(name, now, nil, id, payload)
  parent = event_stack.last
  parent << e if parent

  event_stack.push e
end