aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Houston <robin.houston@gmail.com>2012-07-02 14:43:35 +0100
committerRobin Houston <robin.houston@gmail.com>2012-07-02 14:49:29 +0100
commit229b21bdf661fd5590c9b0b6bf4b2c9913f12935 (patch)
treea8913508d89950cb3b0b6042b942cdf182cbc1f0
parent9c602d0e202d96018fffd1b7202fe20bdbb91bc3 (diff)
Set the API key in a much more efficient way
If we are using PostgreSQL, populate the api_key column in a more efficient fashion. Conflicts: db/migrate/112_add_api_key_to_public_bodies.rb
-rw-r--r--db/migrate/112_add_api_key_to_public_bodies.rb47
1 files changed, 44 insertions, 3 deletions
diff --git a/db/migrate/112_add_api_key_to_public_bodies.rb b/db/migrate/112_add_api_key_to_public_bodies.rb
index 24961612d..43dccb198 100644
--- a/db/migrate/112_add_api_key_to_public_bodies.rb
+++ b/db/migrate/112_add_api_key_to_public_bodies.rb
@@ -4,9 +4,50 @@ class AddApiKeyToPublicBodies < ActiveRecord::Migration
def self.up
add_column :public_bodies, :api_key, :string
- PublicBody.find_each do |pb|
- pb.api_key = SecureRandom.base64(32)
- pb.save!
+ if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
+ execute <<-SQL
+ update public_bodies
+ set api_key = encode(decode(
+ lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ ||lpad(to_hex(floor(random()*256) :: integer), 2, '0')
+ , 'hex'), 'base64')
+ SQL
+ else
+ PublicBody.find_each do |pb|
+ pb.api_key = SecureRandom.base64(33)
+ pb.save!
+ end
end
change_column_null :public_bodies, :api_key, false