Commit 878c7e32

mo khan <mo@mokhan.ca>
2014-09-09 03:28:21
add geolocation info to user session.
1 parent 5db0dd2
app/models/user_session.rb
@@ -13,6 +13,7 @@ class UserSession < ActiveRecord::Base
     self.accessed_at = Time.now
     self.ip = request.ip
     self.user_agent = request.user_agent
+    apply_geo_location_information_for(request)
     if save
       {
         value: key,
@@ -36,4 +37,13 @@ class UserSession < ActiveRecord::Base
   def set_unique_key
     self.key = SecureRandom.urlsafe_base64(32)
   end
+
+  def apply_geo_location_information_for(request)
+    city = GeoIP.new('config/GeoLiteCity.dat').city(request.ip)
+    return if city.nil?
+    self.latitude = city.latitude
+    self.longitude = city.longitude
+    self.city = city.city_name
+    self.country = city.country_name
+  end
 end
db/migrate/20140909030826_add_geo_location_to_user_sessions.rb
@@ -0,0 +1,8 @@
+class AddGeoLocationToUserSessions < ActiveRecord::Migration
+  def change
+    add_column :user_sessions, :latitude, :float
+    add_column :user_sessions, :longitude, :float
+    add_column :user_sessions, :city, :string
+    add_column :user_sessions, :country, :string
+  end
+end
db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20140822032550) do
+ActiveRecord::Schema.define(version: 20140909030826) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
@@ -145,8 +145,6 @@ ActiveRecord::Schema.define(version: 20140822032550) do
     t.integer "taggings_count", default: 0
   end
 
-  add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
-
   create_table "tutorials", force: true do |t|
     t.string   "heading"
     t.text     "description"
@@ -170,6 +168,10 @@ ActiveRecord::Schema.define(version: 20140822032550) do
     t.string   "user_agent"
     t.datetime "accessed_at"
     t.datetime "revoked_at"
+    t.float    "latitude"
+    t.float    "longitude"
+    t.string   "city"
+    t.string   "country"
   end
 
   add_index "user_sessions", ["accessed_at"], name: "index_user_sessions_on_accessed_at", using: :btree