Connecting your User model
Connecting the host app User model is optional, but convenient: a user can be associated to a Missive::Subscriber and/or a Missive::Sender using the Missive::User concern.
class User < ApplicationRecord
include Missive::User
endINFO
Missive matches users with senders and subscribers by email, so your User model needs an email attribute.
Sender or subscriber only
The concerns can also be included separately, which is useful if User needs to be implemented as a Sender or Subscriber only.
class User < ApplicationRecord
include Missive::UserAsSender
include Missive::UserAsSubscriber
endThis is equivalent to:
class User < ApplicationRecord
# Missive::UserAsSender
has_one :missive_sender # ...
has_many :missive_sent_dispatches # ...
has_many :missive_sent_lists # ...
has_many :missive_sent_messages # ...
def init_sender(attributes = {})
# ...
end
# Missive::UserAsSubscriber
has_one :missive_subscriber # ...
has_many :missive_dispatches # ...
has_many :missive_subscriptions # ...
has_many :missive_subscribed_lists # ...
has_many :missive_unsubscribed_lists # ...
def init_subscriber(attributes = {})
# ...
end
endCustomizing association names
By default, association names are prefixed with missive_ to avoid collisions with existing associations. If you want to use shorter names (e.g., sender instead of missive_sender), you can customize them using the .with method:
class User < ApplicationRecord
include Missive::User.with(
sender: {
sender: :sender,
sent_dispatches: :sent_dispatches,
sent_lists: :sent_lists,
sent_messages: :sent_messages
},
subscriber: {
subscriber: :subscriber,
dispatches: :dispatches,
subscriptions: :subscriptions,
subscribed_lists: :subscribed_lists,
unsubscribed_lists: :unsubscribed_lists
}
)
endOr, if including the concerns separately:
class User < ApplicationRecord
include Missive::UserAsSender.with(
sender: :sender,
sent_dispatches: :sent_dispatches,
sent_lists: :sent_lists,
sent_messages: :sent_messages
)
include Missive::UserAsSubscriber.with(
subscriber: :subscriber,
dispatches: :dispatches,
subscriptions: :subscriptions,
subscribed_lists: :subscribed_lists,
unsubscribed_lists: :unsubscribed_lists
)
endYou only need to customize the associations you want to rename. Any unconfigured associations will use their default missive_ prefixed names.
Collision checks
If your model already defines an association with the same name as the main sender or subscriber association, Missive raises an error when the class is loaded instead of silently overriding it:
Missive::UserAsSender::AssociationAlreadyDefinedError:
Association :missive_sender is already defined on User.
Use Missive::UserAsSender.with to specify a different name.Pick another name with .with to resolve it.