0
@@ -4,6 +4,13 @@ gem "dm-core"
0
+ class CreateError < StandardError; end
0
+ class ReadError < StandardError; end
0
+ class DeleteError < StandardError; end
0
+ class UpdateError < StandardError; end
0
@@ -41,8 +48,15 @@ module DataMapper
0
def equality_operator(value)
0
- when Array then " IN #{quote_value(value)}"
0
- else " = #{quote_value(value)}"
0
+ when Array then "IN #{quote_value(value)}"
0
+ else "= #{quote_value(value)}"
0
+ def inequality_operator(value)
0
+ when Array then "NOT IN #{quote_value(value)}"
0
+ else "!= #{quote_value(value)}"
0
@@ -109,7 +123,12 @@ module DataMapper
0
DataMapper.logger.debug query_string
0
- results = @connection.query(:queryString => query_string).result
0
+ results = @connection.query(:queryString => query_string).result
0
+ rescue SOAP::FaultError => e
0
+ raise SalesforceAPI::ReadError, e.message
0
results = results.size > 0 ? results.records : []
0
results.each do |result|
0
@@ -123,25 +142,62 @@ module DataMapper
0
+ def read(repository, resource, key)
0
+ read_set(repository, DataMapper::Query.new(repository, resource,
0
+ {resource.key(repository.name)[0].name.eql => key[0]})).first
0
def update(repository, resource)
0
properties = resource.dirty_attributes
0
- klass = SalesforceAPI.const_get(resource.class.storage_name(resource.repository.name))
0
- obj.id = resource.key.first
0
- properties.each do |prop|
0
- obj.send("#{soap_attr(prop)}=", resource.instance_variable_get(prop.instance_variable_name))
0
+ obj = make_salesforce_obj(resource, properties, resource.key.first)
0
result = @connection.update([obj])
0
result[0].success == true
0
+ def create(repository, resource)
0
+ properties = resource.dirty_attributes
0
+ obj = make_sforce_obj(resource, properties, nil)
0
+ results = @connection.create([obj])
0
+ key = resource.class.key(repository.name).first
0
+ resource.instance_variable_set(key.instance_variable_name, results[0].id)
0
+ raise SalesforceAPI::CreateError, results[0].errors.map {|e| "#{e.statusCode}: #{e.message}"}.join(", ")
0
+ def delete(repository, resource)
0
+ key = resource.key.first
0
+ results = @connection.delete([key])
0
+ raise SalesforceAPI::DeleteError, results[0].errors.map {|e| "#{e.statusCode}: #{e.message}"}.join(", ")
0
+ def make_sforce_obj(resource, props, key = nil)
0
+ klass = SalesforceAPI.const_get(resource.class.storage_name(resource.repository.name))
0
+ obj.send("#{soap_attr(prop)}=", resource.instance_variable_get(prop.instance_variable_name))
0
prop.field.gsub(/^[A-Z]/) {|m| m.downcase}
Comments
No one has commented yet.