diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 97f8b31bc..12f87c481 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,6 @@ class UsersController < ApplicationController + before_filter :authenticate_user!, :except => [:new, :create] - before_filter :authenticate_user! def index @users = User.sort(:created_at.desc).all end @@ -27,9 +27,9 @@ class UsersController < ApplicationController end def create - @user = User.new(params[:user]) - - if @user.save! + @user = User.instantiate(params[:user]) + + if @user.created_at && @user.person.created_at flash[:notice] = "Successfully signed up." redirect_to root_path else diff --git a/app/helpers/status_messages_helper.rb b/app/helpers/status_messages_helper.rb index 57d0f2f17..840e789a0 100644 --- a/app/helpers/status_messages_helper.rb +++ b/app/helpers/status_messages_helper.rb @@ -1,5 +1,4 @@ module StatusMessagesHelper - def my_latest_message unless @latest_status_message.nil? return @latest_status_message.message @@ -7,7 +6,4 @@ module StatusMessagesHelper return "No message to display." end end - - - end diff --git a/app/models/user.rb b/app/models/user.rb index f30feadf0..1896af90c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -118,7 +118,11 @@ class User ###Helpers############ - + def self.instantiate( opts = {} ) + opts[:person][:email] = opts[:email] + opts[:person][:serialized_key] = generate_key + User.create( opts) + end def terse_url terse= self.url.gsub(/https?:\/\//, '') @@ -145,4 +149,8 @@ class User OpenSSL::PKey::RSA::generate 1024 end + def self.generate_key + OpenSSL::PKey::RSA::generate 1024 + end + end diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml index b03da3518..6ea93b780 100644 --- a/app/views/devise/registrations/new.html.haml +++ b/app/views/devise/registrations/new.html.haml @@ -3,15 +3,24 @@ = devise_error_messages! %p = f.label :email - %br/ = f.text_field :email %p = f.label :password - %br/ = f.password_field :password %p = f.label :password_confirmation - %br/ = f.password_field :password_confirmation + + = f.fields_for :person do |p| + = p.hidden_field :url, :value => "http://google.com/" + + = p.fields_for :profile do |pr| + %p + = pr.label :first_name + = pr.text_field :first_name + %p + = pr.label :last_name + = pr.text_field :last_name + %p= f.submit "Sign up" = render :partial => "devise/shared/links" diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index bcc977505..b32581afc 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -11,6 +11,20 @@ describe User do Person.count.should == n+1 end + it 'should instantiate with a person and be valid' do + user = User.instantiate(:email => "bob@bob.com", + :password => "password", + :password_confirmation => "password", + :person => + {:profile => { + :first_name => "bob", + :last_name => "grimm"}}) + + user.save.should be true + user.person.should_not be nil + user.person.profile.should_not be nil + end + describe 'friend requesting' do it "should be able to accept a pending friend request" do friend = Factory.create(:person)