salesforceapi-rest 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,12 @@
1
+ module SalesforceApi
2
+ module Rest
3
+
4
+ class Sobject
5
+
6
+ def initialize(attributes, type)
7
+ @attributes = attributes
8
+ @type = type
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module Salesforceapi
2
+ module Rest
3
+ VERSION = "0.0.1"
4
+ end
5
+ 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
+