You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Figure we have an Event model that has many invitations. We want to know how many Invitations have status: accepted, rejected, pending or maybe.
To do so we define a Source module and a Cached module we will load then into classes that match these roles.
Counter Module
This is the module were counting actions are defined. This method has the following fields:
- :source_class
- :source_id
class and id gives us the source model instance.
- :source_relation is the name of the relation that will let us know
the collection of items.
- :name is the name of the counter. This is the status we want to count.
- :count is the number of items count.
all: counts all elements
new: counts new before some "status" field is updated
:default => true # it defines [:all, :new] counters
:default => [:new] # it will define :new counter only
:default => [:simple, :new] # adds :new and :simple. This last one only counts new items, it's descreased manualy by calling reset!
The counted model, the one belonging to another, should have a status column (it can be specified with the param :status_field if it's not called 'status') that can
be compared when is updated or the current status can be seen to decrease the counter before it's destroyed.
For this purpose three methods are created for every status:
@invitation.status.current (current status)
@invitation.status.before (status before update)
@invitation.status.after (status after update)
Source class collection accessor method has method for every counter so we can access them.
@event.invitations.pending => invitations scoped by pending status
@event.invitations.pending.count => pending invitations count
:new
increase => it is being increased when a new item is created
decrease => when this item is updated, the counter will decrease it
:all
increase => it is being increased when a new item is created
decrease => it is being decreased when an item is destroyed