Skip to content

Instantly share code, notes, and snippets.

@timuruski
Created November 14, 2013 16:49
Show Gist options
  • Save timuruski/7470161 to your computer and use it in GitHub Desktop.
Save timuruski/7470161 to your computer and use it in GitHub Desktop.
class UserEmitter
include Enumerable
def initialize(path)
@table = CSV.table(path, skip_blanks: true)
@enumerator = Fiber.new do
@table.each do |row|
Fiber.yield UserImporter.import(merchant, row)
end
end
end
attr_reader :table
def length
@table.length
end
def next
@enumerator.resume
end
def each
loop do
yield self.next
end
rescue StopIteration
return self
end
end
class UserImporter
def self.import(row)
new(row).to_user
end
def initialize(merchant, row)
@row = row
end
attr_reader :row
def to_user
Customer.new do |user|
user.first_name = row[:first_name] || row[:last_name]
user.last_name = row[:last_name] || row[:first_name]
user.email = row[:email_address]
user.phone_number = temporary_phone_number
user.password = temporary_password
end
end
def temporary_password
SecureRandom.urlsafe_base64(12)
end
def temporary_phone_number
'555-111-1111'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment