Commit 71f6435

Stephen Peasley <s@stephenpeasley.com>
2015-08-02 02:57:11
Use patch to update profile [WIP]
1 parent 5597a3d
Changed files (6)
app
controllers
models
views
config
spec
app/controllers/profiles_controller.rb
@@ -9,5 +9,21 @@ class ProfilesController < ApplicationController
     @user = User.find_by(username: params[:id]) if @current_user.username == params[:id]
     @program = Program.stronglifts
   end
+  
+  def update
+    @user = User.find_by(username: params[:id]) if @current_user.username == params[:id]
+    if @user.profile.update_attributes(profile_params)
+      flash[:notice] = "Updated profile. This is how your public profile appears."
+      redirect_to "/u/#{params[:id]}"
+    else
+      render 'edit'
+    end
+  end
+  
+  private
+
+    def profile_params
+      params.require(:profile).permit(:gender, :social_tolerance)
+    end
       
 end
app/models/user.rb
@@ -58,7 +58,7 @@ class User < ActiveRecord::Base
   
     def create_profile
       self.profile = Profile.create!(user: self)
-      self.profile.social_tolerance = nil
+      self.profile.gender = self.profile.social_tolerance = nil
       self.save!
     end
   
app/views/profiles/edit.html.erb
@@ -3,25 +3,26 @@
   <div class="small-12 columns text-center">
     <%= gravatar_for(@user, size: 128) %>
     <h1><%= @user.username %></h1>
-    <%= form_for :profile do |f| %>
+    <%= form_for(:profile, method: :patch) do |f| %>
       <fieldset>
         <legend><%= t("profiles.edit.gender.gender") %></legend>
         <%= radio_button_tag(:gender, "female") %>
-        <%= label_tag(:gender_f, t("profiles.edit.gender.female")) %>
+        <%= label_tag(:gender_female, t("profiles.edit.gender.female")) %>
         <%= radio_button_tag(:gender, "male") %>
-        <%= label_tag(:gender_m, t("profiles.edit.gender.male")) %>
+        <%= label_tag(:gender_male, t("profiles.edit.gender.male")) %>
         <%= radio_button_tag(:gender, "other") %>
-        <%= label_tag(:gender_m, t("profiles.edit.gender.other")) %>
+        <%= label_tag(:gender_other, t("profiles.edit.gender.other")) %>
       </fieldset>
       <fieldset>
         <legend><%= t("profiles.edit.social_tolerance.social_tolerance") %></legend>
         <%= radio_button_tag(:social_tolerance, "low") %>
-        <%= label_tag(:social_low, t("profiles.edit.social_tolerance.low")) %>
+        <%= label_tag(:social_tolerance_low, t("profiles.edit.social_tolerance.low")) %>
         <%= radio_button_tag(:social_tolerance, "medium") %>
-        <%= label_tag(:social_med, t("profiles.edit.social_tolerance.medium")) %>
+        <%= label_tag(:social_tolerance_medium, t("profiles.edit.social_tolerance.medium")) %>
         <%= radio_button_tag(:social_tolerance, "high") %>
-        <%= label_tag(:social_high, t("profiles.edit.social_tolerance.high")) %>
+        <%= label_tag(:social_tolerance_high, t("profiles.edit.social_tolerance.high")) %>
       </fieldset>
+      <%= f.submit t("profiles.edit.save"), class: "button"  %>
     <% end %>
   </div>
   
config/locales/en.yml
@@ -49,6 +49,7 @@ en:
         medium: Medium
         high: High
         social_tolerance: Social Tolerance
+      save: Save Profile
     show:
       exercise_header: Exercise
       maximum_achieved: Maximum Achieved
config/routes.rb
@@ -8,7 +8,7 @@ Rails.application.routes.draw do
     end
   end
   resources :programs, only: [:show]
-  resources :profiles, only: [:new, :create, :show, :edit], constraints: { id: /[^\/]+/ }
+  resources :profiles, only: [:new, :create, :show, :edit, :patch], constraints: { id: /[^\/]+/ }
   get "/u/:id" => "profiles#show", constraints: { id: /[^\/]+/ }
   get "/dashboard" => "training_sessions#index", as: :dashboard
   get "/terms" => "static_pages#terms"
spec/controllers/profiles_controller_spec.rb
@@ -50,6 +50,23 @@ describe ProfilesController do
       
     end
     
+    describe "#update" do
+      include_context "stronglifts_program"
+
+      let(:user) { create(:user) }
+      
+      before :each do
+        http_login(user)
+      end
+      
+      it "updates the user profile" do
+        patch :update, id: user.to_param, profile: {gender: "male"}
+        user.reload
+        expect(user.profile.gender).to eql("male")
+      end
+      
+    end
+    
   end
   
   describe "unauthenticated" do