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



102
103
104
# File 'lib/promiscuous/publisher/model/base.rb', line 102

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

#in_publish_block?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/promiscuous/publisher/model/base.rb', line 94

def in_publish_block?
  @in_publish_block.to_i > 0
end

#inherited(subclass) ⇒ Object



110
111
112
113
114
# File 'lib/promiscuous/publisher/model/base.rb', line 110

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

#promiscuous_collection_nameObject



98
99
100
# File 'lib/promiscuous/publisher/model/base.rb', line 98

def promiscuous_collection_name
  self.name.pluralize.underscore
end

#publish(*args, &block) ⇒ Object

all methods are virtual



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/promiscuous/publisher/model/base.rb', line 67

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



106
107
108
# File 'lib/promiscuous/publisher/model/base.rb', line 106

def publish_as
  @publish_as || name
end