salesforceapi-rest 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -26,28 +26,20 @@ module Salesforceapi
26
26
  headers (auth_setting)
27
27
  end
28
28
 
29
- def initialize(oauth_token, instance_uri, metadata_uri, api_version = "v21.0")
30
- @oauth_token = oauth_token
31
- @instance_uri = instance_uri
29
+ def initialize(refresh_token, metadata_uri, client_id, client_secret)
30
+ @refresh_token = refresh_token
31
+ @client_id = client_id
32
+ @client_secret = client_secret
32
33
  @metadata_uri = metadata_uri
33
- @api_version = api_version ? api_version : "v21.0" #take a dynamic api server version
34
- @full_url = instance_uri + "/services/data/#{api_version}/sobjects"
34
+ @api_version = "v21.0"
35
35
  @ssl_port = 443 # TODO, right SF use port 443 for all HTTPS traffic.
36
36
 
37
-
38
- # To be used by HTTParty
39
- @auth_header = {
40
- "Authorization" => "OAuth " + @oauth_token,
41
- "content-Type" => 'application/json'
42
- }
43
-
44
- self.class.base_uri @instance_uri
45
-
46
37
  end
47
38
 
48
39
 
49
40
  def create(object, attributes)
50
41
 
42
+ config_authorization!
51
43
  path = "/services/data/#{@api_version}/sobjects/#{object}/"
52
44
  target = @instance_uri + path
53
45
 
@@ -68,6 +60,7 @@ module Salesforceapi
68
60
 
69
61
  def describe(object)
70
62
  path = "/services/data/#{@api_version}/sobjects/#{object}/describe"
63
+ config_authorization!
71
64
  target = @instance_uri + path
72
65
 
73
66
  self.class.base_uri @instance_uri
@@ -83,6 +76,7 @@ module Salesforceapi
83
76
 
84
77
  def resources
85
78
  path = "/services/data/#{@api_version}"
79
+ config_authorization!
86
80
  target = @instance_uri + path
87
81
 
88
82
  self.class.base_uri @instance_uri
@@ -96,25 +90,42 @@ module Salesforceapi
96
90
  end
97
91
  end
98
92
 
93
+ def config_authorization!
94
+ target = target = "https://login.salesforce.com/services/oauth2/token?grant_type=refresh_token&client_id=#{@client_id}&client_secret=#{@client_secret}&refresh_token=#{@refresh_token}"
95
+ resp = SalesforceApi::Request.do_request("POST", target, {"content-Type" => 'application/json'}, nil)
96
+ if (resp.code != 200) || !resp.success?
97
+ message = ActiveSupport::JSON.decode(resp.body)["error_description"]
98
+ SalesforceApi::Errors::ErrorManager.raise_error(message, 401)
99
+ else
100
+ response = ActiveSupport::JSON.decode(resp.body)
101
+ end
102
+ @instance_uri = response['instance_url']
103
+ @access_token = response['access_token']
104
+ @auth_header = {
105
+ "Authorization" => "OAuth " + @access_token,
106
+ "content-Type" => 'application/json'
107
+ }
108
+ end
109
+
99
110
 
100
111
  def add_custom_field(attributes)
112
+ config_authorization!
101
113
  auth_header = {
102
- "Authorization" => "OAuth " + @oauth_token,
114
+ "Authorization" => "OAuth " + @access_token,
103
115
  'Connection' => 'Keep-Alive',
104
116
  'Content-Type' => 'text/xml',
105
117
  'SOAPAction' => '""'
106
118
  }
119
+
107
120
  self.class.base_uri @metadata_uri
108
121
 
109
- data = (Envelope % [@oauth_token, custom_fields_xml(attributes)])
122
+ data = (Envelope % [@access_token, custom_fields_xml(attributes)])
110
123
  resp = SalesforceApi::Request.do_request("POST", @metadata_uri, auth_header, data.lstrip)
111
124
 
112
125
  xml_response = Crack::XML.parse(resp.body)
113
126
 
114
127
  if resp.code != 200
115
- message = xml_response["soapenv:Envelope"]["soapenv:Body"]["soapenv:Fault"]["faultstring"]
116
- SalesforceApi::Errors::ErrorManager.raise_error("HTTP code " + resp.code.to_s + ": " + message, resp.code)
117
-
128
+ SalesforceApi::Errors::ErrorManager.raise_error("HTTP code " + resp.code.to_s + " xml response: " + resp.body, resp.code)
118
129
  else
119
130
  return xml_response
120
131
  end
@@ -1,5 +1,5 @@
1
1
  module Salesforceapi
2
2
  module Rest
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salesforceapi-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: