salesforceapi-rest 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,12 @@
1
1
  require "salesforceapi-rest/version"
2
- require "salesforceapi-rest/sobject"
3
2
  require "salesforceapi-rest/request"
4
3
  require "salesforceapi-rest/errors"
5
4
  require 'net/https'
6
5
  require 'net/http'
7
6
  require 'active_resource'
8
7
  require 'httparty'
8
+ require 'builder'
9
+ require 'crack/xml'
9
10
 
10
11
  module Salesforceapi
11
12
  module Rest
@@ -18,14 +19,17 @@ module Salesforceapi
18
19
  format :json
19
20
  @@ssl_port = 443
20
21
 
22
+
23
+
21
24
  # set header for httparty
22
25
  def self.set_headers (auth_setting)
23
26
  headers (auth_setting)
24
27
  end
25
28
 
26
- def initialize(oauth_token, instance_uri, api_version = "v21.0")
29
+ def initialize(oauth_token, instance_uri, metadata_uri, api_version = "v21.0")
27
30
  @oauth_token = oauth_token
28
31
  @instance_uri = instance_uri
32
+ @metadata_uri = metadata_uri
29
33
  @api_version = api_version ? api_version : "v21.0" #take a dynamic api server version
30
34
  @full_url = instance_uri + "/services/data/#{api_version}/sobjects"
31
35
  @ssl_port = 443 # TODO, right SF use port 443 for all HTTPS traffic.
@@ -36,19 +40,20 @@ module Salesforceapi
36
40
  "Authorization" => "OAuth " + @oauth_token,
37
41
  "content-Type" => 'application/json'
38
42
  }
39
- # either application/xml or application/json
43
+
40
44
  self.class.base_uri @instance_uri
41
45
 
42
46
  end
43
47
 
44
48
 
45
- def save(object, attributes)
49
+ def create(object, attributes)
46
50
 
47
51
  path = "/services/data/#{@api_version}/sobjects/#{object}/"
48
52
  target = @instance_uri + path
49
53
 
50
- data = ActiveSupport::JSON::encode(attributes)
54
+ self.class.base_uri @instance_uri
51
55
 
56
+ data = ActiveSupport::JSON::encode(attributes)
52
57
  resp = SalesforceApi::Request.do_request("POST", target, @auth_header, data)
53
58
 
54
59
  # HTTP code 201 means it was successfully saved.
@@ -65,6 +70,8 @@ module Salesforceapi
65
70
  path = "/services/data/#{@api_version}/sobjects/#{object}/describe"
66
71
  target = @instance_uri + path
67
72
 
73
+ self.class.base_uri @instance_uri
74
+
68
75
  resp = SalesforceApi::Request.do_request("GET", target, @auth_header, nil)
69
76
  if (resp.code != 200) || !resp.success?
70
77
  message = ActiveSupport::JSON.decode(resp.body)[0]["message"]
@@ -78,6 +85,8 @@ module Salesforceapi
78
85
  path = "/services/data/#{@api_version}"
79
86
  target = @instance_uri + path
80
87
 
88
+ self.class.base_uri @instance_uri
89
+
81
90
  resp = SalesforceApi::Request.do_request("GET", target, @auth_header, nil)
82
91
  if (resp.code != 200) || !resp.success?
83
92
  message = ActiveSupport::JSON.decode(resp.body)[0]["message"]
@@ -86,6 +95,70 @@ module Salesforceapi
86
95
  return ActiveSupport::JSON.decode(resp.body)
87
96
  end
88
97
  end
98
+
99
+
100
+ def add_custom_field(attributes)
101
+ auth_header = {
102
+ "Authorization" => "OAuth " + @oauth_token,
103
+ 'Connection' => 'Keep-Alive',
104
+ 'Content-Type' => 'text/xml',
105
+ 'SOAPAction' => '""'
106
+ }
107
+ self.class.base_uri @metadata_uri
108
+
109
+ data = (Envelope % [@oauth_token, custom_fields_xml(attributes)])
110
+ resp = SalesforceApi::Request.do_request("POST", @metadata_uri, auth_header, data.lstrip)
111
+
112
+ xml_response = Crack::XML.parse(resp.body)
113
+
114
+ 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
+
118
+ else
119
+ return xml_response
120
+ end
121
+ end
122
+
123
+
124
+ def custom_fields_xml(opts)
125
+ # Create XML text from the arguments.
126
+ expanded = ''
127
+ @builder = Builder::XmlMarkup.new(:target => expanded)
128
+ @builder.tag! :create, :xmlns => "http://soap.sforce.com/2006/04/metadata" do |b|
129
+ b.tag! :metadata, "xsi:type" => "ns2:CustomField", "xmlns:ns2" => "http://soap.sforce.com/2006/04/metadata" do |c|
130
+ opts.each { |k,v| c.tag! k, v }
131
+ end
132
+ end
133
+ expanded
134
+ end
135
+
136
+ Envelope = <<-HERE
137
+ <?xml version="1.0" encoding="utf-8" ?>
138
+ <soapenv:Envelope
139
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
140
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
141
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
142
+ <soapenv:Header>
143
+ <ns1:SessionHeader soapenv:mustUnderstand="0" xsi:type="ns1:SessionHeader"
144
+ xmlns:ns1="http://soap.sforce.com/2006/04/metadata">
145
+ <ns1:sessionId>%s</ns1:sessionId>
146
+ </ns1:SessionHeader>
147
+ <ns2:CallOptions soapenv:mustUnderstand="0" xsi:type="ns2:SessionHeader"
148
+ xmlns:ns2="http://soap.sforce.com/2006/04/metadata">
149
+ <ns2:client>apex_eclipse/16.0.200906151227</ns2:client>
150
+ </ns2:CallOptions>
151
+ <ns3:DebuggingHeader soapenv:mustUnderstand="0" xsi:type="ns3:DebuggingHeader"
152
+ xmlns:ns3="http://soap.sforce.com/2006/04/metadata">
153
+ <ns3:debugLevel xsi:nil="true" />
154
+ </ns3:DebuggingHeader>
155
+ </soapenv:Header>
156
+ <soapenv:Body>
157
+ %s
158
+ </soapenv:Body>
159
+ </soapenv:Envelope>
160
+ HERE
161
+
89
162
  end
90
163
  end
91
164
  end
@@ -63,7 +63,7 @@ module SalesforceApi
63
63
  end
64
64
 
65
65
  # Error for HTTP code 500, Force.com Internal Server error
66
- class Platformrror < ApiError
66
+ class PlatformError < ApiError
67
67
  def initialize(message, http_code)
68
68
  super(message, http_code)
69
69
  end
@@ -1,5 +1,5 @@
1
1
  module Salesforceapi
2
2
  module Rest
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,139 +1,161 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: salesforceapi-rest
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Lucas Allan Amorim
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-05-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rforce
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
38
25
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rforce
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: omniauth
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
52
41
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: omniauth
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
63
  name: httparty
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
64
71
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: activeresource
80
+ requirement: !ruby/object:Gem::Requirement
66
81
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
74
86
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: active_resource
78
87
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: crack
96
+ requirement: !ruby/object:Gem::Requirement
80
97
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
88
102
  type: :development
89
- version_requirements: *id005
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: builder
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
90
126
  description: Ruby wrapper to access salesforce rest api
91
- email:
127
+ email:
92
128
  - lucas.allan@gmail.com
93
129
  executables: []
94
-
95
130
  extensions: []
96
-
97
131
  extra_rdoc_files: []
98
-
99
- files:
132
+ files:
100
133
  - lib/salesforceapi-rest/errors.rb
101
134
  - lib/salesforceapi-rest/request.rb
102
- - lib/salesforceapi-rest/sobject.rb
103
135
  - lib/salesforceapi-rest/version.rb
104
136
  - lib/salesforceapi-rest.rb
105
- homepage: ""
137
+ homepage: ''
106
138
  licenses: []
107
-
108
139
  post_install_message:
109
140
  rdoc_options: []
110
-
111
- require_paths:
141
+ require_paths:
112
142
  - lib
113
- required_ruby_version: !ruby/object:Gem::Requirement
143
+ required_ruby_version: !ruby/object:Gem::Requirement
114
144
  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
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
150
  none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
131
155
  requirements: []
132
-
133
156
  rubyforge_project:
134
- rubygems_version: 1.8.24
157
+ rubygems_version: 1.8.22
135
158
  signing_key:
136
159
  specification_version: 3
137
160
  summary: Ruby wrapper to access salesforce rest api
138
161
  test_files: []
139
-
@@ -1,12 +0,0 @@
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