Avanche is an online plataform where you play the role of an agent and gets assigned to real life missions.
# Step 1
rails new avalanche_game --database=postgresql
# Step 2 - Create databases
# Step 3 - Install Gems
# Step 4 - Inialize plugins (bootstrap, flatstrap, simpl_form, friendly_id)
rails generate bootstrap:install
rails generate bootstrap:layout application fluid
rails generate bootstrap:layout front_end fixed
rails generate bootstrap:layout auth fixed
rails generate simple_form:install --bootstrap
rails generate friendly_id
# Step 5 - Initialize Devise
rails generate devise:install
rails generate devise user username:string location:string
rails g devise:views
rake db:migrate
# Step 6 - Scaffold
rails g scaffold mission title:string description:text status:string agent_search_start:datetime agent_search_end:datetime
rails g model mission_agent mission:references description:text location:string reward:text user:references agent_name:string anonymous_agent:bool
rails g model mission_agent_step mission_agent:references step:integer description:text completed:bool proof_type:string proof:string
rails g controller agent current_missions choose_mission agent_profile
rails g controller start index about
# Step 7 - Modify
rails g model mission_agent_invite user:reference mission_agent:references status:string
rails g migration AddInviteToMissionAgent mission_agent_invites:references
rails g migration AddOwnerToMission owner:references
rails g migration AddValidationToMissionAgentStep validated:boolean validated_by:references
[X] Ajax create/delete agents [X] User List [X] Choose Mission Page [X] Accept/Denie missions [X] Agent Missions [X] Missions List [X] Mission Control / Mission Description [X] Step Validation [X] Mission Completed [X] Mission owner [X] Randomize algorithm [X] User Page [ ] Start Page - add sys statisitcs and how to play text [X] Redirect to missions page after login and signup [ ] Edit Profile Layout [ ] Mission Form [X] Agent Mission History [ ] Access control [X] Run Algorithm every time something changes [X] Sign In Redirect [ ] Heroku Upload [ ] Empty Dashboard
[ ] Background Tasks (Redis) [ ] Translations [ ] Invite Timer [ ] Mission Timer [ ] Step Timer [ ] About Page [ ] Email system [ ] New mission email alert
*No bugs found for now...
# Loop thru all mission_agents and each mission_agent_steps attributes and save them all
# Nasty override code for a neste models bug that was resolved in the project
@mission.assign_attributes(params[:mission_agents_attributes])
@mission.assign_attributes(params[:mission_agent_steps_attributes])
params[:mission][:mission_agents_attributes].values.each do |a|
if a[:mission_agent_steps_attributes] != nil
a[:mission_agent_steps_attributes].values.each do |s|
@step = MissionAgentStep.where(:id => s[:id]).first_or_create
if s[:_destroy] == 1.to_s
@step.destroy
else
@step.mission_agent_id = a[:id]
@step.description = s[:description]
@step.save
end
# Update Step Order
@steps = MissionAgentStep.order(:step => :asc).find_all_by_mission_agent_id(@step.mission_agent)
@step_number = 1
@steps.each do |step|
step.step = @step_number
step.save
@step_number = @step_number + 1
end
end
end
end
# Initial Algorithm
@users = User.all
@mission_agents = @mission.mission_agents.all
@users.each do |user|
@invited = false
@mission_agents.each do |agent|
if agent.user != user
agent.mission_agent_invites.each do |invite|
if invite.user == user
# user already invited
@invited = true
end
end
else
@invited = true
end
end
if @invited == false
@mission_agents.each do |agent|
if agent.user == nil
agent.user_id = user.id
agent.mission_agent_invites.create!(:user_id => user.id, :status => 'invited')
agent.save
end
end
end
end