Commit c2b7115

mo khan <mo@mokhan.ca>
2017-01-27 04:18:33
extract class to insert seed data.
1 parent c39bc89
Changed files (2)
db/seeds.rb
@@ -1,28 +1,50 @@
 require 'json'
 require 'prime'
 
-pool = Concurrent::FixedThreadPool.new(10)
-event_types = (1..5).to_a
+class Seeds
+  attr_reader :database, :event_types
 
-10.times do
-  business_id = DATABASE[:businesses].insert(name: FFaker::Company.name, business_relationship_id: rand(3))
-  puts "Created business: #{business_id}"
-
-  pool.post do
-    rand(100).times do |n|
-      computer_id = DATABASE[:computers].insert(active: rand(100).even?, business_id: business_id.prime? ? business_id * 42 : business_id)
-      puts "Created computer: #{computer_id} on #{Thread.current.object_id}"
+  def initialize(database)
+    @database = database
+    @event_types = (1..5).to_a
+    @threads = []
+  end
 
-      rand(50).times do
-        data = JSON.generate({
-          ip_address: FFaker::Internet.ip_v4_address,
-          mac: FFaker::Internet.mac,
-          url: FFaker::Internet.http_url,
-        })
-        DATABASE[:events].insert(computer_id: computer_id, occurred_at: DateTime.parse(FFaker::Time.datetime), type: event_types.sample, data: data)
+  def run
+    10.times do
+      background_thread do
+        rand(100).times do
+          rand(50).times do
+            puts "creating"
+            database[:events].insert(
+              computer_id: create_computer(business_id: create_business(name: FFaker::Company.name)),
+              occurred_at: DateTime.parse(FFaker::Time.datetime),
+              type: event_types.sample,
+              data: JSON.generate({
+                ip_address: FFaker::Internet.ip_v4_address,
+                mac: FFaker::Internet.mac,
+                url: FFaker::Internet.http_url,
+              })
+            )
+          end
+        end
       end
     end
+  ensure
+    @threads.map(&:join)
+  end
+
+  private
+
+  def background_thread(&block)
+    @threads << Thread.new(&block)
+  end
+
+  def create_computer(active: rand(100).even?, business_id:)
+    database[:computers].insert(active: active, business_id: business_id)
   end
-end
 
-pool.wait_for_termination
+  def create_business(name:)
+    database[:businesses].insert(name: name, business_relationship_id: rand(3))
+  end
+end
Rakefile
@@ -35,6 +35,7 @@ namespace :db do
 
   task :seed do
     require_relative 'db/seeds.rb'
+    Seeds.new(DATABASE).run
   end
 
   desc "drop, create and migrate the database"