add individual user preference read/write, and default all new users to having public...
authorSteve Coast <steve@asklater.com>
Sat, 3 May 2008 12:57:48 +0000 (12:57 +0000)
committerSteve Coast <steve@asklater.com>
Sat, 3 May 2008 12:57:48 +0000 (12:57 +0000)
app/controllers/user_controller.rb
app/controllers/user_preference_controller.rb
config/routes.rb
db/migrate/012_add_user_preference_id.rb [new file with mode: 0644]

index 5d11391..e998e83 100644 (file)
@@ -11,6 +11,8 @@ class UserController < ApplicationController
     @title = 'create account'
     @user = User.new(params[:user])
 
+    @user.data_public = true
+      
     if @user.save
       token = @user.tokens.create
       flash[:notice] = "User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)<br>Please note that you won't be able to login until you've received and confirmed your email address."
index b22c522..a4de5c0 100644 (file)
@@ -1,8 +1,35 @@
+# Update and read user preferences, which are arbitrayr key/val pairs
 class UserPreferenceController < ApplicationController
   before_filter :authorize
 
-  def read
+  def read_one
+    pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
+
+    if pref
+      render :text => pref.v.to_s
+    else
+      render :text => 'OH NOES! PREF NOT FOUND!', :status => 404
+    end
+  end
+
+  def update_one
+    pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
+  
+    if pref
+      pref.v = request.raw_post.chomp
+      pref.save
+    else
+      pref = UserPreference.new
+      pref.user = @user
+      pref.k = params[:preference_key]
+      pref.v = request.raw_post.chomp
+      pref.save
+    end
+  end
+
 
+  # print out all the preferences as a big xml block
+  def read
     doc = OSM::API.new.get_xml_doc
 
     prefs = @user.preferences
@@ -15,9 +42,9 @@ class UserPreferenceController < ApplicationController
 
     doc.root << el1
     render :text => doc.to_s, :content_type => "text/xml"
-
   end
 
+  # update the entire set of preferences
   def update
     begin
       p = XML::Parser.new
@@ -30,12 +57,12 @@ class UserPreferenceController < ApplicationController
 
       doc.find('//preferences/preference').each do |pt|
         pref = UserPreference.new
-        
+
         unless keyhash[pt['k']].nil? # already have that key
           render :text => 'OH NOES! CAN HAS UNIQUE KEYS?', :status => :not_acceptable
           return
         end
-        
+
         keyhash[pt['k']] = 1
 
         pref.k = pt['k']
index 0a03962..1444de1 100644 (file)
@@ -42,7 +42,9 @@ ActionController::Routing::Routes.draw do |map|
   
   map.connect "api/#{API_VERSION}/user/details", :controller => 'user', :action => 'api_details'
   map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'read', :conditions => { :method => :get }
+  map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'read_one', :conditions => { :method => :get }
   map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'update', :conditions => { :method => :put }
+  map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'update_one', :conditions => { :method => :put }
   map.connect "api/#{API_VERSION}/user/gpx_files", :controller => 'user', :action => 'api_gpx_files'
  
   map.connect "api/#{API_VERSION}/gpx/create", :controller => 'trace', :action => 'api_create'
diff --git a/db/migrate/012_add_user_preference_id.rb b/db/migrate/012_add_user_preference_id.rb
new file mode 100644 (file)
index 0000000..9dee237
--- /dev/null
@@ -0,0 +1,12 @@
+class AddUserPreferenceId < ActiveRecord::Migration
+  def self.up
+    add_column "user_preferences", "id", :bigint, :limit => 64, :null => false, :options => "AUTO_INCREMENT"
+    
+    add_index "user_preferences", ["id"], :name => "user_preferences_id_idx"
+  end
+
+  def self.down
+    remove_index 'user_preferences', 'id'
+    remove_column 'user_preferences', 'id'
+  end
+end