Created
October 14, 2010 01:59
-
-
Save Asher-/625399 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
website :open_source_publishing do |prototype| | |
agents :users, :groups, :admins, :superusers | |
default_agent :non_user | |
root :index do |site_map| | |
# make a forum at /forum | |
plugin :forum, 'forum' | |
end | |
get :index do | |
page_class RPWeb::Page | |
content_class OpenSourcePublishing | |
view :index | |
end | |
plugin :forum do | |
end | |
# post :url_name | |
# put :url_name | |
# delete :url_name | |
# any :url_name | |
# resource :url_name | |
end | |
agent :non_user do |interface| | |
can do |privileges| | |
perform :register | |
end | |
end | |
agent :user do |interface| | |
has :login_info, :username, :password, :email_address, :snailmail_address | |
actions :login, :logout | |
answers :logged_in?, :owns?, :belongs_to?, :can_access? | |
can do |privileges| | |
create :group | |
perform :login, :logout | |
end | |
workflow do | |
before( :anything ).except :register do |these_prerequisites| | |
demand :logged_in? or declare_error :login_required | |
end | |
# event hooks | |
every :inquiry do |inquiry_hook| | |
log inquiry_hook | |
end | |
inquiry :user_data do | |
demand :username | |
demand :email_address | |
ask :snailmail_address do | |
demand :zipcode | |
end | |
end | |
action :register do | |
inquire :user_data | |
prompt :login | |
end | |
action :login do | |
demand :username, :password or declare_error :login_failed | |
end | |
end | |
end | |
ability :group do |interface| | |
has :users, :groups | |
is_a :privilege_object, :user | |
can do |abilities| | |
provides do |services| | |
agent :owners, :invite | |
everyone :join, :leave | |
end | |
end | |
answers :owns?, :belongs_to?, :can_access? | |
end | |
asset :email_address do |interface| | |
has :username, :hostname | |
end | |
asset :hostname do |interface| | |
has :domain_name, :host | |
end | |
asset :snailmail_address do |interface| | |
has :street_address, :street_sub_address | |
end | |
# maps two abilities - :send and :receive | |
# :send can target any object that can :receive | |
ability :send do |object, recipient| | |
expect recipient, :receive | |
recipient :receive, object | |
end | |
ability :receive do |object, from| | |
end | |
# automatic inclusion of singulars in plurals - ie admin in admins | |
agent :admin do |interface| | |
is_a :user | |
can do |privileges| | |
create :users, :groups | |
delete :users, :groups | |
end | |
end | |
agent :superuser do | |
is_a :user, :admin | |
can do |privileges| | |
create :admins | |
delete :admins | |
end | |
end | |
plugin :forum do | |
has_urls :index, :subindex, :forum_posts, :post | |
root :forum do |location| | |
asset :forums => '%forum%' do |forum_name| | |
# threads in a forum [joe: why aspects? why not agents/assets?] | |
aspect :threads => '%thread%' do |thread_name| # [joe -- thread?] | |
end | |
# track which users use which forums and their posts by user | |
aspect :users => '%user%' do |user_name| | |
end | |
# pinned posts | |
aspect :pinned => 'pinned' do |pinned_topics| | |
asset :overview => 'topics' do |list_of_pinned_topics| | |
list forum_name, :pinned_topics | |
end | |
asset :topics => '%topic%' do |topic_name| | |
end | |
end | |
# [joe -- other forum stuff: account management interface, 'achievements' for good forum behavior (creating, upvoting posts, respondoning to posts, writing popular comments, etc.) ] | |
end | |
end | |
has_agents :users, :moderators, :admins, :superusers | |
agent :user do | |
can do |privileges| | |
create :thread, :post, :private_message | |
end | |
end | |
agent :moderator do | |
can do |privileges| | |
create :forum | |
end | |
end | |
web_module :forum do | |
# ... | |
end | |
end | |
plugin_extension :forum, :achievements do | |
agent :user do | |
can do | |
receive :award | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment