Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Datamapper Adapter for Salesforce
Failed to load latest commit information.
config Update README and examples to be current with latest library changes.
lib Upgrade to bundler 1.0, use gemspec
spec fix a spec
.gitignore Add bundler 1.0 stuff to .gitignore
Gemfile Upgrade to bundler 1.0, use gemspec
LICENSE Salesforce adapter becomes a gem
README.markdown Update with note about new gem and ongoing DM1 support.
Rakefile Upgrade to bundler 1.0, use gemspec



A gem that provides a Salesforce Adapter for DataMapper 0.10.x, and basic 1.0.x support.

If you're looking for ongoing DM1 support, dm-salesforce-adapter is actively maintained to support it so use that instead.

There are older versions of dm-salesforce specifically for 0.9.x, but they are no longer supported.

What it looks like

class Account
  include DataMapper::Salesforce::Resource

  def self.default_repository_name

  # Old method for declaring which fields are Salesforce-style IDs.  Alternatively,
  # can use the Salesforce-specific Serial custom DM type (see next model).
  def self.salesforce_id_properties

  property :id,          String, :key => true
  property :name,        String
  property :description, String
  property :fax,         String
  property :phone,       String
  property :type,        String
  property :website,     String
  property :is_awesome,  Boolean

  has 0..n, :contacts

class Contact
  include DataMapper::Salesforce::Resource

  def self.default_repository_name

  property :id,         Serial
  property :first_name, String
  property :last_name,  String
  property :email,      String

  belongs_to :account

DataMapper.setup(:salesforce, {:adapter  => 'salesforce',
                               :username => '',
                               :password => 'skateboardsf938915c9cdc36ff5498881b',
                               :path     => '/path/to/wsdl.xml',
                               :host     => ''})

account = Account.first
account.is_awesome = true

See the fixtures for more examples.

How it works

Salesforce provides an XML-based WSDL definition of an existing schema/object model for download. The dm-salesforce adapter uses this WSDL to auto-generate a SOAP-based Ruby driver and classes, which is then used to implement a basic, low-level DataMapper Adapter.

Upon first access, the driver and classes are cached locally on disk in one of the following locations (in order of precedence):

  • In apidir, defined in database.yml (see included database.yml-example)
  • In ENV['HOME']/.salesforce/

Getting set up

  1. Obtain a working account

  2. Get a valid security token (if you don't already have one)

  3. Get the Enterprise WSDL for your object model

    • Login to
    • Click "Setup"
    • Click "App Setup" / "Develop" / "API"
    • Click "Generate Enterprise WSDL", then click the "Generate" button
    • Save that to an .xml file somewhere (path/extension doesn't matter - you specify it in database.yml / DataMapper.setup)
  4. Copy and modify config/example.rb to use your info

    • The :password field is the concatenation of your login password and the API key
    • If your password is 'skateboards' and API key is 'f938915c9cdc36ff5498881b', then the :password field you specify to DataMapper.setup should be 'skateboardsf938915c9cdc36ff5498881b'

Run 'ruby example.rb' and you should have access to the Account and Contact models (schema differences withstanding).

Don't forget to:

  • Retrieve a new copy of your WSDL anytime you make changes to your Salesforce schema
  • Wipe the auto-generated SOAP classes anytime you update your WSDL

Special Thanks to those who helped

  • Yehuda Katz
  • Corey Donohoe
  • Tim Carey-Smith
  • Andy Delcambre
  • Ben Burkert
  • Larry Diehl
  • Jordan Ritter
  • Martin Emde
  • Jason Snell
Something went wrong with that request. Please try again.