salesforceapi-rest 0.0.1
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.
@@ -0,0 +1,95 @@
|
|
1
|
+
module SalesforceApi
|
2
|
+
module Errors
|
3
|
+
|
4
|
+
class ApiError < RuntimeError
|
5
|
+
|
6
|
+
attr_accessor :http_code
|
7
|
+
|
8
|
+
def initialize(message, http_code)
|
9
|
+
super message
|
10
|
+
@http_code = http_code
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class RuntimeError < ApiError
|
15
|
+
def initialize(message, http_code)
|
16
|
+
super(message, http_code)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Error for HTTP code 401, Session ID or Auth token expired
|
21
|
+
class AuthenticationError < ApiError
|
22
|
+
def initialize(message, http_code)
|
23
|
+
super(message, http_code)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Error for HTTP code 400, Request cannot be understood, because the JSON
|
28
|
+
# or XML body has an error
|
29
|
+
class RequestError < ApiError
|
30
|
+
def initialize(message, http_code)
|
31
|
+
super(message, http_code)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Error for HTTP code 403, Request cannot be understood, because the JSON
|
36
|
+
# or XML body has an error
|
37
|
+
class RequestRefusedError < ApiError
|
38
|
+
def initialize(message, http_code)
|
39
|
+
super(message, http_code)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Error for HTTP code 404, Requested resource cannot be found. Check URI for error.
|
44
|
+
class ResourceNotFoundError < ApiError
|
45
|
+
def initialize(message, http_code)
|
46
|
+
super(message, http_code)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Error for HTTP code 405, The method specified in the Request-Line is not allowed.
|
51
|
+
class MethodError < ApiError
|
52
|
+
def initialize(message, http_code)
|
53
|
+
super(message, http_code)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Error for HTTP code 415. The entity specified in the request is in a format
|
58
|
+
# that is supported by the specified resource for the specified method.
|
59
|
+
class EntityError < ApiError
|
60
|
+
def initialize(message, http_code)
|
61
|
+
super(message, http_code)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Error for HTTP code 500, Force.com Internal Server error
|
66
|
+
class Platformrror < ApiError
|
67
|
+
def initialize(message, http_code)
|
68
|
+
super(message, http_code)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class ErrorManager
|
73
|
+
def self.raise_error(message, http_code)
|
74
|
+
case http_code
|
75
|
+
when 400
|
76
|
+
raise SalesforceApi::Errors::RequestError.new(message, http_code)
|
77
|
+
when 401
|
78
|
+
raise SalesforceApi::Errors::AuthenticationError.new(message, http_code)
|
79
|
+
when 403
|
80
|
+
raise SalesforceApi::Errors::RequestError.new(message, http_code)
|
81
|
+
when 404
|
82
|
+
raise SalesforceApi::Errors::ResourceNotFoundError.new(message, http_code)
|
83
|
+
when 405
|
84
|
+
raise SalesforceApi::Errors::MethodError.new(message, http_code)
|
85
|
+
when 415
|
86
|
+
raise SalesforceApi::Errors::EntityError.new(message, http_code)
|
87
|
+
when 500
|
88
|
+
raise SalesforceApi::Errors::PlatformError.new(message, http_code)
|
89
|
+
else
|
90
|
+
raise SalesforceApi::Errors::RuntimeError.new(message, http_code)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module SalesforceApi
|
4
|
+
module Request
|
5
|
+
def self.do_request (verb, target, headers, data=nil)
|
6
|
+
case verb
|
7
|
+
when 'GET'
|
8
|
+
return resp = HTTParty.get(target, :headers => headers)
|
9
|
+
when 'POST'
|
10
|
+
return resp = HTTParty.post(target, :body => data, :headers => headers)
|
11
|
+
when 'DELETE'
|
12
|
+
return resp = HTTParty.delete(target, :headers => headers)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require "salesforceapi-rest/version"
|
2
|
+
require "salesforceapi-rest/sobject"
|
3
|
+
require "salesforceapi-rest/request"
|
4
|
+
require "salesforceapi-rest/errors"
|
5
|
+
require 'net/https'
|
6
|
+
require 'net/http'
|
7
|
+
require 'active_resource'
|
8
|
+
require 'httparty'
|
9
|
+
|
10
|
+
module Salesforceapi
|
11
|
+
module Rest
|
12
|
+
class Client
|
13
|
+
include HTTParty
|
14
|
+
extend SalesforceApi::Request
|
15
|
+
|
16
|
+
base_uri "https://na7.salesforce.com"
|
17
|
+
default_params :output => 'json'
|
18
|
+
format :json
|
19
|
+
@@ssl_port = 443
|
20
|
+
|
21
|
+
# set header for httparty
|
22
|
+
def self.set_headers (auth_setting)
|
23
|
+
headers (auth_setting)
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(oauth_token, instance_uri, api_version = "v21.0")
|
27
|
+
@oauth_token = oauth_token
|
28
|
+
@instance_uri = instance_uri
|
29
|
+
@api_version = api_version ? api_version : "v21.0" #take a dynamic api server version
|
30
|
+
@full_url = instance_uri + "/services/data/#{api_version}/sobjects"
|
31
|
+
@ssl_port = 443 # TODO, right SF use port 443 for all HTTPS traffic.
|
32
|
+
|
33
|
+
|
34
|
+
# To be used by HTTParty
|
35
|
+
@auth_header = {
|
36
|
+
"Authorization" => "OAuth " + @oauth_token,
|
37
|
+
"content-Type" => 'application/json'
|
38
|
+
}
|
39
|
+
# either application/xml or application/json
|
40
|
+
self.class.base_uri @instance_uri
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def save(object, attributes)
|
46
|
+
|
47
|
+
path = "/services/data/#{@api_version}/sobjects/#{object}/"
|
48
|
+
target = @instance_uri + path
|
49
|
+
|
50
|
+
data = ActiveSupport::JSON::encode(attributes)
|
51
|
+
|
52
|
+
resp = SalesforceApi::Request.do_request("POST", target, @auth_header, data)
|
53
|
+
|
54
|
+
# HTTP code 201 means it was successfully saved.
|
55
|
+
if resp.code != 201
|
56
|
+
message = ActiveSupport::JSON.decode(resp.body)[0]["message"]
|
57
|
+
SalesforceApi::Errors::ErrorManager.raise_error("HTTP code " + resp.code.to_s + ": " + message, resp.code)
|
58
|
+
else
|
59
|
+
return ActiveSupport::JSON.decode(resp.body)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
def describe(object)
|
65
|
+
path = "/services/data/#{@api_version}/sobjects/#{object}/describe"
|
66
|
+
target = @instance_uri + path
|
67
|
+
|
68
|
+
resp = SalesforceApi::Request.do_request("GET", target, @auth_header, nil)
|
69
|
+
if (resp.code != 200) || !resp.success?
|
70
|
+
message = ActiveSupport::JSON.decode(resp.body)[0]["message"]
|
71
|
+
SalesforceApi::Errors::ErrorManager.raise_error("HTTP code " + resp.code.to_s + ": " + message, resp.code)
|
72
|
+
else
|
73
|
+
return ActiveSupport::JSON.decode(resp.body)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def resources
|
78
|
+
path = "/services/data/#{@api_version}"
|
79
|
+
target = @instance_uri + path
|
80
|
+
|
81
|
+
resp = SalesforceApi::Request.do_request("GET", target, @auth_header, nil)
|
82
|
+
if (resp.code != 200) || !resp.success?
|
83
|
+
message = ActiveSupport::JSON.decode(resp.body)[0]["message"]
|
84
|
+
SalesforceApi::Errors::ErrorManager.raise_error("HTTP code " + resp.code.to_s + ": " + message, resp.code)
|
85
|
+
else
|
86
|
+
return ActiveSupport::JSON.decode(resp.body)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: salesforceapi-rest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Lucas Allan Amorim
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-05-28 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rforce
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: omniauth
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: httparty
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: active_resource
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
90
|
+
description: Ruby wrapper to access salesforce rest api
|
91
|
+
email:
|
92
|
+
- lucas.allan@gmail.com
|
93
|
+
executables: []
|
94
|
+
|
95
|
+
extensions: []
|
96
|
+
|
97
|
+
extra_rdoc_files: []
|
98
|
+
|
99
|
+
files:
|
100
|
+
- lib/salesforceapi-rest/errors.rb
|
101
|
+
- lib/salesforceapi-rest/request.rb
|
102
|
+
- lib/salesforceapi-rest/sobject.rb
|
103
|
+
- lib/salesforceapi-rest/version.rb
|
104
|
+
- lib/salesforceapi-rest.rb
|
105
|
+
homepage: ""
|
106
|
+
licenses: []
|
107
|
+
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
131
|
+
requirements: []
|
132
|
+
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 1.8.24
|
135
|
+
signing_key:
|
136
|
+
specification_version: 3
|
137
|
+
summary: Ruby wrapper to access salesforce rest api
|
138
|
+
test_files: []
|
139
|
+
|