Sha256: 83761e5a76e81562da636602e5ce60df0a4b6fbddb33a46545616a763f8a4c5e

Contents?: true

Size: 1.22 KB

Versions: 5

Compression:

Stored size: 1.22 KB

Contents

module MessageTrain
  # Mixin module automatically extended by ActiveRecord::Base
  module Mixin
    extend ActiveSupport::Concern

    # Run message_train mixin in your model to enable
    def message_train(options = {})
      cattr_accessor :message_train_table_sym, :message_train_relationships
      table_sym = table_name.to_sym

      relationships = [options.delete(:only) || [:sender, :recipient]].flatten
      relationships -= [options.delete(:except) || []].flatten

      associations_from_relationships(relationships)

      MessageTrain.configure_table(table_sym, name, options)

      self.message_train_relationships = relationships
      self.message_train_table_sym = table_sym

      extend MessageTrain::ClassMethods
      include MessageTrain::InstanceMethods
    end

    private

    def associations_from_relationships(relationships)
      if relationships.include? :sender
        has_many :messages, as: :sender, class_name: 'MessageTrain::Message'
      end
      return unless relationships.include? :recipient
      has_many :receipts, as: :recipient, class_name: 'MessageTrain::Receipt'
      has_many(
        :unsubscribes,
        as: :recipient,
        class_name: 'MessageTrain::Unsubscribe'
      )
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
message_train-0.7.6 lib/message_train/mixin.rb
message_train-0.7.5 lib/message_train/mixin.rb
message_train-0.7.3 lib/message_train/mixin.rb
message_train-0.7.2 lib/message_train/mixin.rb
message_train-0.7.1 lib/message_train/mixin.rb