> OK, lifecycles is looking incredibly hot. I read through the docs and
> looked at the example code that comes with the generated user model.
> I had a couple of questions:
>
> - "transition :nobody", this, I'm guessing, is magic for 'guest
> user'?
Oh crikey. That's exactly the opposite of what it means! I think this
needs to be renamed.
It's for "internal" transitions that are never automatically published
over the web.
> Then what is :anybody under the 'create' definition?
That means anyone can create the thing - no restrictions
> And what does the :if=>proc do?
That's a pre-condition. The create/transition can only go ahead if the
proc returns true
> - similarly, what does :with_key do?
This means that only someone who knows the key is allowed to perform
the transition. The key would normally be provided by email a special
link that includes the key in the query string (see the user-mailer
for an example). It's used for things like forgotten password and
activate account, but could also be used to allow anyone who doesn't
have an account on the site to take part in a life-cycle.
> - can you have a more complex user requirement for the transition? My
> specific example is similar to the Friendship example in the docs, but
> it's more complex than that:
>
> 1. An existing user can request membership in a group
> 2. A user who has authority (e.g., they have an existing membership in
> the group that has an is_admin? flag or something) can approve or deny
> them
>
> I'm not sure what the lifecycle definition would look like for a
> transition like that.
Here's a similar thing from an app of mine (not finished but will give
you some ideas)
class GroupMembership < ActiveRecord::Base
hobo_model
fields do
administrator :boolean
timestamps
end
belongs_to :group
belongs_to :member, :class_name => "Person"
belongs_to :sponsor, :class_name => "Person" # The admin that
invited/approved the membership (if any)
validates_presence_of :member, :group
attr_accessor :email_address, :type => :email_address
#named_scope :admin, :conditions => "administrator"
lifecycle do
precondition { group && member && member.not_in?(group.members) }
invariant { sponsor.nil? || sponsor.in?(group.administrators) }
state :requested, :invited
state :active do
# Mailer.notify_national_admins
end
create :sponsor, :invite, :params => [ :member, :group ], :become
=> :invited do
# GroupMailer.deliver_invite(group, inviter, member)
end
create :sponsor, :invite_new_member, :params =>
[ :email_address ], :become => :invited do
# self.user = User.lifecycle.invite(:email => email, :inviter
=> admin)
end
# TODO: become invited straight away for open groups
create :member, :request, :params => [ :group ], :become
=> :requested do
# GroupMailer.deliver_request(group, member)
end
transition :member, :accept_invitation, { :invited => :active }
transition :sponsor, :accept_request, { :requested => :active }
transition :sponsor, :reject_request, { :requested => :destroy }
transition :member, :decline_invitation, { :invited => :destroy }
transition :member, :cancel_membership, { [:requested, :active]
=> :destroy }
transition :sponsor, :expell, { :active => :destroy }
end
end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Hobo
Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/hobousers?hl=en
-~----------~----~----~----~------~----~------~--~---