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,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
+