soapforce 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -387,6 +387,44 @@ module Soapforce
387
387
  sobject ? SObject.new(sobject) : nil
388
388
  end
389
389
 
390
+ # ProcessSubmitRequest
391
+ # request = {objectId: .., comments: ..., nextApproverIds: [...] }
392
+ # ProcessWorkItemRequest
393
+ # request = {action: .., workitemId: .., comments: ..., nextApproverIds: [...] }
394
+ #
395
+ # Returns Hash of process status.
396
+ def process(request)
397
+
398
+ # approverIds is optional if Approval is configured to auto-assign the approver.
399
+ # Ensure approver ids is an array.
400
+ approver_ids = request[:approverIds] || []
401
+ approver_ids = approver_ids.is_a?(Array) ? approver_ids : [approver_ids]
402
+
403
+ request_type = request[:workitemId] ? "ProcessWorkitemRequest" : "ProcessSubmitRequest"
404
+
405
+ # Unfortunately had to use XML since I could not figure out
406
+ # how to get Savon2 to include the proper xsi:type attribute
407
+ # on the actions element.
408
+ xml = "<tns:actions xsi:type=\"tns:#{request_type}\">"
409
+ # Account for Submit or Workitem Request
410
+ if request[:objectId]
411
+ xml << "<tns:objectId>#{request[:objectId]}</tns:objectId>"
412
+ else
413
+ xml << "<tns:action>#{request[:action]}</tns:action>"
414
+ xml << "<tns:workitemId>#{request[:workitemId]}</tns:workitemId>"
415
+ end
416
+
417
+ xml << "<tns:comments>#{request[:comments]}</tns:comments>"
418
+ approver_ids.each do |aid|
419
+ xml << "<tns:nextApproverIds>#{aid}</tns:nextApproverIds>"
420
+ end
421
+ xml << "</tns:actions>"
422
+
423
+ call_soap_api(:process, xml)
424
+ end
425
+
426
+ # Helpers
427
+
390
428
  def field_list(sobject)
391
429
  description = describe(sobject)
392
430
  field_list = description[:fields].collect {|c| c[:name] }
@@ -1,3 +1,3 @@
1
1
  module Soapforce
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/soapforce.gemspec CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.description = %q{A ruby client for the Salesforce SOAP API based on Savon.}
12
12
  gem.summary = %q{Wraps Savon with helper methods and custom types for interacting with the Salesforce SOAP API.}
13
13
  gem.homepage = "https://github.com/TinderBox/soapforce"
14
+ gem.license = 'MIT'
14
15
 
15
16
  ignores = File.readlines('.gitignore').grep(/\S+/).map(&:chomp)
16
17
  dotfiles = %w[.gitignore .travis.yml]
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com">
3
+ <soapenv:Body>
4
+ <processResponse>
5
+ <result>
6
+ <actorIds>005i0000000Fi7vAAC</actorIds>
7
+ <entityId>a00i0000007JBLJAA4</entityId>
8
+ <instanceId>04gi00000009u5ZAAQ</instanceId>
9
+ <instanceStatus>Pending</instanceStatus>
10
+ <newWorkitemIds>04ii000000098uLAAQ</newWorkitemIds>
11
+ <success>true</success>
12
+ </result>
13
+ </processResponse>
14
+ </soapenv:Body>
15
+ </soapenv:Envelope>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com">
3
+ <soapenv:Body>
4
+ <processResponse>
5
+ <result>
6
+ <entityId>a00i0000007JBLJAA4</entityId>
7
+ <instanceId>04gi00000009u5PAAQ</instanceId>
8
+ <instanceStatus>Removed</instanceStatus>
9
+ <success>true</success>
10
+ </result>
11
+ </processResponse>
12
+ </soapenv:Body>
13
+ </soapenv:Envelope>
@@ -376,7 +376,41 @@ describe Soapforce::Client do
376
376
  }.to raise_error(Savon::Error)
377
377
  end
378
378
 
379
+ end
380
+
381
+ describe "process" do
382
+
383
+ it "process submit request without approvers" do
384
+
385
+ @body = '<tns:process><tns:actions xsi:type="tns:ProcessSubmitRequest"><tns:objectId>a00i0000007JBLJAA4</tns:objectId><tns:comments>Submitting for Approval</tns:comments></tns:actions></tns:process>'
386
+
387
+ stub = stub_api_request(endpoint, {with_body: @body, fixture: 'process_submit_request_response'})
388
+ response = subject.process({objectId: "a00i0000007JBLJAA4", comments: "Submitting for Approval"})
389
+
390
+ response[:success].should be_true
391
+ response[:new_workitem_ids].should == "04ii000000098uLAAQ"
392
+ end
393
+
394
+ it "process submit request with approvers" do
379
395
 
396
+ @body = '<tns:process><tns:actions xsi:type="tns:ProcessSubmitRequest"><tns:objectId>a00i0000007JBLJAA4</tns:objectId><tns:comments>Submitting for Approval</tns:comments><tns:nextApproverIds>abcde12345</tns:nextApproverIds></tns:actions></tns:process>'
397
+
398
+ stub = stub_api_request(endpoint, {with_body: @body, fixture: 'process_submit_request_response'})
399
+ response = subject.process({objectId: "a00i0000007JBLJAA4", comments: "Submitting for Approval", approverIds: "abcde12345"})
400
+
401
+ response[:success].should be_true
402
+ response[:new_workitem_ids].should == "04ii000000098uLAAQ"
403
+ end
404
+
405
+ it "process workitem request" do
406
+ @body = '<tns:process><tns:actions xsi:type="tns:ProcessWorkitemRequest"><tns:action>Removed</tns:action><tns:workitemId>a00i0000007JBLJAA4</tns:workitemId><tns:comments>Recalling Request</tns:comments></tns:actions></tns:process>'
407
+
408
+ stub = stub_api_request(endpoint, {with_body: @body, fixture: 'process_workitem_request_response'})
409
+ response = subject.process({action: "Removed", workitemId: "a00i0000007JBLJAA4", comments: "Recalling Request"})
410
+
411
+ response[:success].should be_true
412
+ response[:instance_status].should == "Removed"
413
+ end
380
414
  end
381
415
 
382
416
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soapforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-11 00:00:00.000000000 Z
12
+ date: 2013-10-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -107,6 +107,8 @@ files:
107
107
  - spec/fixtures/get_user_info_response.xml
108
108
  - spec/fixtures/login_response.xml
109
109
  - spec/fixtures/org_id_response.xml
110
+ - spec/fixtures/process_submit_request_response.xml
111
+ - spec/fixtures/process_workitem_request_response.xml
110
112
  - spec/fixtures/query_all_response.xml
111
113
  - spec/fixtures/query_more_response.xml
112
114
  - spec/fixtures/query_response.xml
@@ -123,7 +125,8 @@ files:
123
125
  - spec/support/fixture_helpers.rb
124
126
  - test.rb
125
127
  homepage: https://github.com/TinderBox/soapforce
126
- licenses: []
128
+ licenses:
129
+ - MIT
127
130
  post_install_message:
128
131
  rdoc_options: []
129
132
  require_paths:
@@ -158,6 +161,8 @@ test_files:
158
161
  - spec/fixtures/get_user_info_response.xml
159
162
  - spec/fixtures/login_response.xml
160
163
  - spec/fixtures/org_id_response.xml
164
+ - spec/fixtures/process_submit_request_response.xml
165
+ - spec/fixtures/process_workitem_request_response.xml
161
166
  - spec/fixtures/query_all_response.xml
162
167
  - spec/fixtures/query_more_response.xml
163
168
  - spec/fixtures/query_response.xml