Module: Promiscuous::Publisher::Model::Base::ClassMethods

Defined in:
lib/promiscuous/publisher/model/base.rb

Instance Method Summary collapse

Instance Method Details

#get_operation_class_for(operation) ⇒ Object



121
122
123
# File 'lib/promiscuous/publisher/model/base.rb', line 121

def get_operation_class_for(operation)
  Promiscuous::Publisher::Operation::Base
end

#in_publish_block?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/promiscuous/publisher/model/base.rb', line 109

def in_publish_block?
  @in_publish_block.to_i > 0
end

#inherited(subclass) ⇒ Object



129
130
131
132
133
134
# File 'lib/promiscuous/publisher/model/base.rb', line 129

def inherited(subclass)
  super
  subclass.published_attrs = self.published_attrs.dup
  subclass.tracked_attrs   = self.tracked_attrs.dup
  # no copy for published_db_fields
end

#promiscuous_collection_nameObject



117
118
119
# File 'lib/promiscuous/publisher/model/base.rb', line 117

def promiscuous_collection_name
  self.name.pluralize.underscore
end

#publish(*args, &block) ⇒ Object

all methods are virtual



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/promiscuous/publisher/model/base.rb', line 82

def publish(*args, &block)
  options    = args.extract_options!
  attributes = args.map(&:to_sym)

  # TODO reject invalid options

  @publish_as = options[:as].to_s if options[:as]

  ([self] + descendants).each do |klass|
    # When the user passes :use => [:f1, :f2] for example, operation/mongoid.rb
    # can track f1 and f2 as fields important for the publishing.
    # It's important for virtual attributes. The published_db_fields is global
    # for the entire subclass tree.
    klass.published_db_fields |= [options[:use]].flatten.map(&:to_sym) if options[:use]
    klass.published_db_fields |= attributes # aliased fields are resolved later
    klass.published_attrs     |= attributes
  end


  begin
    @in_publish_block = @in_publish_block.to_i + 1
    block.call if block
  ensure
    @in_publish_block -= 1
  end
end

#publish_asObject



125
126
127
# File 'lib/promiscuous/publisher/model/base.rb', line 125

def publish_as
  @publish_as || name
end

#track_dependencies_of(*attributes) ⇒ Object



113
114
115
# File 'lib/promiscuous/publisher/model/base.rb', line 113

def track_dependencies_of(*attributes)
  ([self] + descendants).each { |klass| klass.tracked_attrs |= attributes.map(&:to_sym) }
end