Class: DeviseCastle::Import
- Inherits:
-
Object
- Object
- DeviseCastle::Import
- Defined in:
- lib/devise_castle/import.rb
Instance Attribute Summary collapse
-
#batch_size ⇒ Object
readonly
Returns the value of attribute batch_size.
-
#resource_class ⇒ Object
readonly
Returns the value of attribute resource_class.
Class Method Summary collapse
Instance Method Summary collapse
- #active_record? ⇒ Boolean
- #batches ⇒ Object
-
#initialize(options = {}) ⇒ Import
constructor
A new instance of Import.
- #map_resources_to_castle_format(resources) ⇒ Object
- #mongoid? ⇒ Boolean
- #prepare_batch(batch) ⇒ Object
- #run ⇒ Object
- #supported_orm? ⇒ Boolean
Constructor Details
#initialize(options = {}) ⇒ Import
Returns a new instance of Import.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/devise_castle/import.rb', line 7 def initialize( = {}) begin @resource_class = eval([:resource_class]) rescue NameError raise ImportError, "No such class: #{[:resource_class]}" end unless supported_orm? raise ImportError, "Only ActiveRecord and Mongoid models are supported" end unless Castle.config.api_secret.present? raise ImportError, "Please add an Castle API secret to your devise.rb" end @batch_size = [([:batch_size] || 100), 100].min end |
Instance Attribute Details
#batch_size ⇒ Object (readonly)
Returns the value of attribute batch_size.
5 6 7 |
# File 'lib/devise_castle/import.rb', line 5 def batch_size @batch_size end |
#resource_class ⇒ Object (readonly)
Returns the value of attribute resource_class.
5 6 7 |
# File 'lib/devise_castle/import.rb', line 5 def resource_class @resource_class end |
Class Method Details
.run(*args) ⇒ Object
25 26 27 |
# File 'lib/devise_castle/import.rb', line 25 def self.run(*args) new(*args).run end |
Instance Method Details
#active_record? ⇒ Boolean
72 73 74 |
# File 'lib/devise_castle/import.rb', line 72 def active_record? (defined?(ActiveRecord::Base) && (resource_class < ActiveRecord::Base)) end |
#batches ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/devise_castle/import.rb', line 44 def batches if active_record? resource_class.where("castle_id IS NULL").find_in_batches(:batch_size => batch_size) do |resources| resources_for_wire = map_resources_to_castle_format(resources) yield(resources_for_wire, resources) unless resources.count.zero? end elsif mongoid? 0.step(resource_class.where(:castle_id => nil).count, batch_size) do |offset| resources_for_wire = map_resources_to_castle_format(resource_class.limit(batch_size).skip(offset)) yield(resources_for_wire, resources) unless resources.count.zero? end end end |
#map_resources_to_castle_format(resources) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/devise_castle/import.rb', line 58 def map_resources_to_castle_format(resources) resources.map do |resource| format = {} format[:email] = resource.email unless resource.email.blank? format[:id] = resource._castle_id format[:created_at] = resource.created_at if resource.respond_to? :created_at format end.compact end |
#mongoid? ⇒ Boolean
76 77 78 |
# File 'lib/devise_castle/import.rb', line 76 def mongoid? (defined?(Mongoid::Document) && (resource_class < Mongoid::Document)) end |
#prepare_batch(batch) ⇒ Object
68 69 70 |
# File 'lib/devise_castle/import.rb', line 68 def prepare_batch(batch) { :users => batch }.to_json end |
#run ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/devise_castle/import.rb', line 29 def run batches do |batch, resources| begin users = Castle::User.import(users: batch) rescue Castle::Error => error raise ImportError, error. end users.zip(resources).each do |user, resource| resource.castle_id = user.id resource.save(validate: false) end end end |
#supported_orm? ⇒ Boolean
80 81 82 |
# File 'lib/devise_castle/import.rb', line 80 def supported_orm? active_record? || mongoid? end |