Method: ActiveResource::Base#load

Defined in:
lib/active_resource/base.rb

#load(attributes, remove_root = false, persisted = false) ⇒ Object

A method to manually load attributes from a \hash. Recursively loads collections of resources. This method is called in initialize and create when a \hash of attributes is provided.

Examples

my_attrs = {:name => 'J&J Textiles', :industry => 'Cloth and textiles'}
my_attrs = {:name => 'Marty', :colors => ["red", "green", "blue"]}

the_supplier = Supplier.find(:first)
the_supplier.name # => 'J&M Textiles'
the_supplier.load(my_attrs)
the_supplier.name('J&J Textiles')

# These two calls are the same as Supplier.new(my_attrs)
my_supplier = Supplier.new
my_supplier.load(my_attrs)

# These three calls are the same as Supplier.create(my_attrs)
your_supplier = Supplier.new
your_supplier.load(my_attrs)
your_supplier.save

Raises:

  • (ArgumentError)


1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
# File 'lib/active_resource/base.rb', line 1387

def load(attributes, remove_root = false, persisted = false)
  raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
  @prefix_options, attributes = split_options(attributes)

  if attributes.keys.size == 1
    remove_root = self.class.element_name == attributes.keys.first.to_s
  end

  attributes = Formats.remove_root(attributes) if remove_root

  attributes.each do |key, value|
    @attributes[key.to_s] =
      case value
        when Array
          resource = nil
          value.map do |attrs|
            if attrs.is_a?(Hash)
              resource ||= find_or_create_resource_for_collection(key)
              resource.new(attrs, persisted)
            else
              attrs.duplicable? ? attrs.dup : attrs
            end
          end
        when Hash
          resource = find_or_create_resource_for(key)
          resource.new(value, persisted)
        else
          value.duplicable? ? value.dup : value
      end
  end
  self
end