module RemoteAttrAccessor::Bulk

Public Class Methods

load_remote_attr(locals) click to toggle source
# File lib/remote_attr_accessor/bulk.rb, line 4
def load_remote_attr(locals)
  id_name = config.id_name
  ids = Array.new
  if locals.class == Array || locals.is_a?(ActiveRecord::Relation)
    locals.each do |local|
      ids << local.send(id_name)
    end
  elsif locals.is_a?(ActiveRecord::Base)
    ids << locals.send(id_name)
  end

  remote_attrs_json = api.get_remote_attrs_with_indifferent_access(ids)
  return if remote_attrs_json == {}
  remote_attrs = remote_attrs_json[config.remote_json_key]

  ((locals.class == Array || locals.is_a?(ActiveRecord::Relation)) ? locals : [locals]).each do |local|
    next unless remote_attrs.dig(local.send(id_name).to_s)

    ignored_attrs = [id_name.to_s, 'created_at', 'updated_at']
    (remote_attrs[local.send(id_name).to_s].keys - ignored_attrs).each do |rattr|
      attr_with_prefix = "@#{config.prefix}#{rattr}"
      local.instance_variable_set(attr_with_prefix, remote_attrs[local.send(id_name).to_s][rattr.to_s])
    end
  end
end

Private Instance Methods

load_remote_attr(locals) click to toggle source
# File lib/remote_attr_accessor/bulk.rb, line 4
def load_remote_attr(locals)
  id_name = config.id_name
  ids = Array.new
  if locals.class == Array || locals.is_a?(ActiveRecord::Relation)
    locals.each do |local|
      ids << local.send(id_name)
    end
  elsif locals.is_a?(ActiveRecord::Base)
    ids << locals.send(id_name)
  end

  remote_attrs_json = api.get_remote_attrs_with_indifferent_access(ids)
  return if remote_attrs_json == {}
  remote_attrs = remote_attrs_json[config.remote_json_key]

  ((locals.class == Array || locals.is_a?(ActiveRecord::Relation)) ? locals : [locals]).each do |local|
    next unless remote_attrs.dig(local.send(id_name).to_s)

    ignored_attrs = [id_name.to_s, 'created_at', 'updated_at']
    (remote_attrs[local.send(id_name).to_s].keys - ignored_attrs).each do |rattr|
      attr_with_prefix = "@#{config.prefix}#{rattr}"
      local.instance_variable_set(attr_with_prefix, remote_attrs[local.send(id_name).to_s][rattr.to_s])
    end
  end
end