Module: Promiscuous::Publisher::Model::Base::PromiscuousMethodsBase
- Included in:
- PromiscuousMethods, Ephemeral::PromiscuousMethods, Mock::PromiscuousMethods, Mongoid::PromiscuousMethods
- Defined in:
- lib/promiscuous/publisher/model/base.rb
Instance Method Summary collapse
- #attribute(attr) ⇒ Object
- #attributes ⇒ Object
- #get_dependency(attr, value) ⇒ Object
- #initialize(instance) ⇒ Object
- #payload(options = {}) ⇒ Object
- #tracked_dependencies(options = {}) ⇒ Object
Instance Method Details
#attribute(attr) ⇒ Object
35 36 37 38 39 |
# File 'lib/promiscuous/publisher/model/base.rb', line 35 def attribute(attr) value = @instance.__send__(attr) value = value.promiscuous.payload if value.respond_to?(:promiscuous) value end |
#attributes ⇒ Object
31 32 33 |
# File 'lib/promiscuous/publisher/model/base.rb', line 31 def attributes Hash[@instance.class.published_attrs.map { |attr| [attr, self.attribute(attr)] }] end |
#get_dependency(attr, value) ⇒ Object
41 42 43 44 45 |
# File 'lib/promiscuous/publisher/model/base.rb', line 41 def get_dependency(attr, value) return nil unless value @collection ||= @instance.class.promiscuous_collection_name Promiscuous::Dependency.new(@collection, attr, value) end |
#initialize(instance) ⇒ Object
15 16 17 |
# File 'lib/promiscuous/publisher/model/base.rb', line 15 def initialize(instance) @instance = instance end |
#payload(options = {}) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/promiscuous/publisher/model/base.rb', line 19 def payload(={}) msg = {} msg[:types] = @instance.class.ancestors.select { |a| a < Promiscuous::Publisher::Model::Base }.map(&:publish_as) msg[:id] = @instance.id.to_s unless [:with_attributes] == false # promiscuous_payload is useful to implement relays msg[:attributes] = @instance.respond_to?(:promiscuous_payload) ? @instance.promiscuous_payload : self.attributes end msg end |
#tracked_dependencies(options = {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/promiscuous/publisher/model/base.rb', line 47 def tracked_dependencies(={}) # FIXME This is not sufficient, we need to consider the previous and next # values in case of an update. # Note that the caller expect the id dependency to come first @instance.class.tracked_attrs.map do |attr| begin [attr, @instance.__send__(attr)] rescue Exception => e # Don't care about missing attributes for read dependencies. raise e unless [:allow_missing_attributes] && e.is_a?(ActiveModel::MissingAttributeError) end end .map { |attr, value| get_dependency(attr, value) } .compact end |