class DeviseUserbin::Import
Attributes
batch_size[R]
resource_class[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/devise_userbin/import.rb, line 7 def initialize(options = {}) begin @resource_class = eval(options[:resource_class]) rescue NameError raise ImportError, "No such class: #{options[:resource_class]}" end unless supported_orm? raise ImportError, "Only ActiveRecord and Mongoid models are supported" end unless Userbin.config.api_secret.present? raise ImportError, "Please add an Userbin API secret to your devise.rb" end @batch_size = [(options[:batch_size] || 100), 100].min end
run(*args)
click to toggle source
# File lib/devise_userbin/import.rb, line 25 def self.run(*args) new(*args).run end
Public Instance Methods
active_record?()
click to toggle source
# File lib/devise_userbin/import.rb, line 72 def active_record? (defined?(ActiveRecord::Base) && (resource_class < ActiveRecord::Base)) end
batches() { |resources_for_wire, resources| ... }
click to toggle source
# File lib/devise_userbin/import.rb, line 44 def batches if active_record? resource_class.where("userbin_id IS NULL").find_in_batches(:batch_size => batch_size) do |resources| resources_for_wire = map_resources_to_userbin_format(resources) yield(resources_for_wire, resources) unless resources.count.zero? end elsif mongoid? 0.step(resource_class.where(:userbin_id => nil).count, batch_size) do |offset| resources_for_wire = map_resources_to_userbin_format(resource_class.limit(batch_size).skip(offset)) yield(resources_for_wire, resources) unless resources.count.zero? end end end
map_resources_to_userbin_format(resources)
click to toggle source
# File lib/devise_userbin/import.rb, line 58 def map_resources_to_userbin_format(resources) resources.map do |resource| format = {} format[:email] = resource.email unless resource.email.blank? format[:id] = resource._userbin_id format[:created_at] = resource.created_at if resource.respond_to? :created_at format end.compact end
mongoid?()
click to toggle source
# File lib/devise_userbin/import.rb, line 76 def mongoid? (defined?(Mongoid::Document) && (resource_class < Mongoid::Document)) end
prepare_batch(batch)
click to toggle source
# File lib/devise_userbin/import.rb, line 68 def prepare_batch(batch) { :users => batch }.to_json end
run()
click to toggle source
# File lib/devise_userbin/import.rb, line 29 def run batches do |batch, resources| begin users = Userbin::User.import(users: batch) rescue Userbin::Error => error raise ImportError, error.message end users.zip(resources).each do |user, resource| resource.userbin_id = user.id resource.save(validate: false) end end end
supported_orm?()
click to toggle source
# File lib/devise_userbin/import.rb, line 80 def supported_orm? active_record? || mongoid? end