simplex-mercadopago-sdk 0.2.2 → 0.3.4
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +104 -41
- data/Rakefile +0 -1
- data/examples/checkout-buttons/basic_preference/button.rb +1 -1
- data/examples/preapproval-payments/button.rb +3 -3
- data/lib/mercadopago.rb +118 -19
- data/lib/ssl_options_patch.rb +15 -0
- data/lib/version.rb +1 -1
- data/mercadopago-sdk-0.3.2.gem +0 -0
- data/mercadopago-sdk-0.3.3.gem +0 -0
- data/tests/tests.rb +8 -1
- metadata +5 -3
- data/lib/cacert.pem +0 -3390
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6d4572d150e5adacbe8cd1fc2dd379b123a7a889
|
|
4
|
+
data.tar.gz: 3fe6ab4a85cd4aaee027f2af94e07aed60ddf81e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e72f803e7326f6c361fec51cb86aa16eab3b17e9971bcf154473c9afca5077bf5a4df9d18ca3a56c9f422c8ae3997c81cdd967152c488e766b02d7e9e9e1e9c4
|
|
7
|
+
data.tar.gz: 06a82441ff2876a45144e9b09bde5f40cc2bb897827b9c3268fd86a45c7497235e9ab1bc540b8e4b925b1348d08f67aa9cb7a1c8a4c9ac2d941ac3d1317bd90a
|
data/Gemfile.lock
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
simplex-mercadopago-sdk (0.
|
|
4
|
+
simplex-mercadopago-sdk (0.3.4)
|
|
5
5
|
json
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
10
|
coderay (1.0.9)
|
|
11
|
-
json (1.8.
|
|
11
|
+
json (1.8.3)
|
|
12
12
|
method_source (0.8.1)
|
|
13
13
|
pry (0.9.12)
|
|
14
14
|
coderay (~> 1.0.5)
|
data/README.md
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
# MercadoPago SDK module for Payments integration
|
|
2
2
|
|
|
3
|
-
* [
|
|
4
|
-
* [
|
|
5
|
-
* [
|
|
3
|
+
* [Install](#install)
|
|
4
|
+
* [Basic checkout](#basic-checkout)
|
|
5
|
+
* [Customized checkout](#custom-checkout)
|
|
6
|
+
* [Generic methods](#generic-methods)
|
|
6
7
|
|
|
7
|
-
<a name="
|
|
8
|
-
##
|
|
8
|
+
<a name="install"></a>
|
|
9
|
+
## Install
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
```gem install mercadopago-sdk```
|
|
12
|
+
|
|
13
|
+
<a name="basic-checkout"></a>
|
|
14
|
+
## Basic checkout
|
|
15
|
+
|
|
16
|
+
### Configure your credentials
|
|
12
17
|
|
|
13
18
|
* Get your **CLIENT_ID** and **CLIENT_SECRET** in the following address:
|
|
14
19
|
* Argentina: [https://www.mercadopago.com/mla/herramientas/aplicaciones](https://www.mercadopago.com/mla/herramientas/aplicaciones)
|
|
@@ -16,6 +21,7 @@
|
|
|
16
21
|
* México: [https://www.mercadopago.com/mlm/herramientas/aplicaciones](https://www.mercadopago.com/mlm/herramientas/aplicaciones)
|
|
17
22
|
* Venezuela: [https://www.mercadopago.com/mlv/herramientas/aplicaciones](https://www.mercadopago.com/mlv/herramientas/aplicaciones)
|
|
18
23
|
* Colombia: [https://www.mercadopago.com/mco/herramientas/aplicaciones](https://www.mercadopago.com/mco/herramientas/aplicaciones)
|
|
24
|
+
* Chile: [https://www.mercadopago.com/mlc/herramientas/aplicaciones](https://www.mercadopago.com/mlc/herramientas/aplicaciones)
|
|
19
25
|
|
|
20
26
|
```ruby
|
|
21
27
|
require 'mercadopago.rb'
|
|
@@ -23,18 +29,9 @@ require 'mercadopago.rb'
|
|
|
23
29
|
$mp = MercadoPago.new('CLIENT_ID', 'CLIENT_SECRET')
|
|
24
30
|
```
|
|
25
31
|
|
|
26
|
-
###
|
|
27
|
-
|
|
28
|
-
```ruby
|
|
29
|
-
$accessToken = $mp.getAccessToken()
|
|
30
|
-
|
|
31
|
-
puts (accessToken)
|
|
32
|
-
```
|
|
32
|
+
### Preferences
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
## Using MercadoPago Checkout
|
|
36
|
-
|
|
37
|
-
### Get an existent Checkout preference:
|
|
34
|
+
#### Get an existent Checkout preference
|
|
38
35
|
|
|
39
36
|
```ruby
|
|
40
37
|
preference = $mp.get_preference('PREFERENCE_ID')
|
|
@@ -42,18 +39,26 @@ preference = $mp.get_preference('PREFERENCE_ID')
|
|
|
42
39
|
puts $preferenceResult
|
|
43
40
|
```
|
|
44
41
|
|
|
45
|
-
|
|
42
|
+
#### Create a Checkout preference
|
|
46
43
|
|
|
47
44
|
```ruby
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
|
|
46
|
+
preference_data = {
|
|
47
|
+
"items": [
|
|
48
|
+
{
|
|
49
|
+
"title": "testCreate",
|
|
50
|
+
"quantity": 1,
|
|
51
|
+
"unit_price": 10.2,
|
|
52
|
+
"currency_id": "ARS"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
preference = $mp.create_preference(preference_data)
|
|
51
57
|
|
|
52
58
|
puts preference
|
|
53
59
|
```
|
|
54
|
-
<a href="http://developers.mercadopago.com/documentacion/recibir-pagos#glossary">Others items to use</a>
|
|
55
60
|
|
|
56
|
-
|
|
61
|
+
#### Update an existent Checkout preference
|
|
57
62
|
|
|
58
63
|
```ruby
|
|
59
64
|
preferenceDataToUpdate = Hash["items" => Array(Array["title"=>"testUpdated", "quantity"=>1, "unit_price"=>2])]
|
|
@@ -63,10 +68,9 @@ preferenceUpdate = $mp.update_preference("PREFERENCE_ID", preferenceDataToUpdate
|
|
|
63
68
|
puts preferenceUpdate
|
|
64
69
|
```
|
|
65
70
|
|
|
66
|
-
|
|
67
|
-
## Using MercadoPago Payment
|
|
71
|
+
### Payments/Collections
|
|
68
72
|
|
|
69
|
-
|
|
73
|
+
#### Search for payments
|
|
70
74
|
|
|
71
75
|
```ruby
|
|
72
76
|
filters = Array["id"=>null, "site_id"=>null, "external_reference"=>null]
|
|
@@ -75,25 +79,16 @@ searchResult = $mp.search_payment(filters)
|
|
|
75
79
|
|
|
76
80
|
puts searchResult
|
|
77
81
|
```
|
|
78
|
-
<a href="http://developers.mercadopago.com/documentacion/busqueda-de-pagos-recibidos">More search examples</a>
|
|
79
|
-
|
|
80
|
-
### Receiving IPN notification:
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
* Argentina: [https://www.mercadopago.com/mla/herramientas/notificaciones](https://www.mercadopago.com/mla/herramientas/notificaciones)
|
|
84
|
-
* Brasil: [https://www.mercadopago.com/mlb/ferramentas/notificacoes](https://www.mercadopago.com/mlb/ferramentas/notificacoes)
|
|
85
|
-
* México: [https://www.mercadopago.com/mlm/herramientas/notificaciones](https://www.mercadopago.com/mlm/herramientas/notificaciones)
|
|
86
|
-
* Venezuela: [https://www.mercadopago.com/mlv/herramientas/notificaciones](https://www.mercadopago.com/mlv/herramientas/notificaciones)
|
|
87
|
-
* Colombia: [https://www.mercadopago.com/mco/herramientas/notificaciones](https://www.mercadopago.com/mco/herramientas/notificaciones)<br />
|
|
83
|
+
#### Get payment data
|
|
88
84
|
|
|
89
85
|
```ruby
|
|
90
|
-
|
|
91
|
-
paymentInfo = $mp.get_payment_info("ID")
|
|
86
|
+
paymentInfo = $mp.get_payment("ID")
|
|
92
87
|
|
|
93
88
|
puts paymentInfo
|
|
94
89
|
```
|
|
95
90
|
|
|
96
|
-
### Cancel (only for pending payments)
|
|
91
|
+
### Cancel (only for pending payments)
|
|
97
92
|
|
|
98
93
|
```ruby
|
|
99
94
|
result = $mp.cancel_payment("ID");
|
|
@@ -102,7 +97,7 @@ result = $mp.cancel_payment("ID");
|
|
|
102
97
|
puts result
|
|
103
98
|
```
|
|
104
99
|
|
|
105
|
-
### Refund (only for accredited payments)
|
|
100
|
+
### Refund (only for accredited payments)
|
|
106
101
|
|
|
107
102
|
```ruby
|
|
108
103
|
result = $mp.refund_payment("ID");
|
|
@@ -110,4 +105,72 @@ result = $mp.refund_payment("ID");
|
|
|
110
105
|
// Show result
|
|
111
106
|
puts result
|
|
112
107
|
```
|
|
113
|
-
|
|
108
|
+
|
|
109
|
+
<a name="custom-checkout"></a>
|
|
110
|
+
## Customized checkout
|
|
111
|
+
|
|
112
|
+
### Configure your credentials
|
|
113
|
+
|
|
114
|
+
* Get your **ACCESS_TOKEN** in the following address:
|
|
115
|
+
* Argentina: [https://www.mercadopago.com/mla/account/credentials](https://www.mercadopago.com/mla/account/credentials)
|
|
116
|
+
* Brazil: [https://www.mercadopago.com/mlb/account/credentials](https://www.mercadopago.com/mlb/account/credentials)
|
|
117
|
+
* Mexico: [https://www.mercadopago.com/mlm/account/credentials](https://www.mercadopago.com/mlm/account/credentials)
|
|
118
|
+
* Venezuela: [https://www.mercadopago.com/mlv/account/credentials](https://www.mercadopago.com/mlv/account/credentials)
|
|
119
|
+
* Colombia: [https://www.mercadopago.com/mco/account/credentials](https://www.mercadopago.com/mco/account/credentials)
|
|
120
|
+
|
|
121
|
+
```ruby
|
|
122
|
+
require 'mercadopago.rb'
|
|
123
|
+
|
|
124
|
+
$mp = MercadoPago.new('ACCESS_TOKEN')
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Create payment
|
|
128
|
+
|
|
129
|
+
```ruby
|
|
130
|
+
$mp.post ("/v1/payments", payment_data);
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Create customer
|
|
134
|
+
|
|
135
|
+
```ruby
|
|
136
|
+
$mp.post ("/v1/customers", Hash["email" => "email@test.com"]);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Get customer
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
$mp.get ("/v1/customers/CUSTOMER_ID");
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
* View more Custom checkout related APIs in Developers Site
|
|
146
|
+
* Argentina: [https://labs.mercadopago.com.ar/developers](https://labs.mercadopago.com.ar/developers)
|
|
147
|
+
* Brazil: [https://labs.mercadopago.com.br/developers](https://labs.mercadopago.com.br/developers)
|
|
148
|
+
* Mexico: [https://labs.mercadopago.com.mx/developers](https://labs.mercadopago.com.mx/developers)
|
|
149
|
+
* Venezuela: [https://labs.mercadopago.com.ve/developers](https://labs.mercadopago.com.ve/developers)
|
|
150
|
+
* Colombia: [https://labs.mercadopago.com.co/developers](https://labs.mercadopago.com.co/developers)
|
|
151
|
+
|
|
152
|
+
<a name="generic-methods"></a>
|
|
153
|
+
## Generic methods
|
|
154
|
+
You can access any other resource from the MercadoPago API using the generic methods:
|
|
155
|
+
|
|
156
|
+
```ruby
|
|
157
|
+
// Get a resource, with optional URL params. Also you can disable authentication for public APIs
|
|
158
|
+
$mp.get ("/resource/uri", [params], [authenticate=true])
|
|
159
|
+
|
|
160
|
+
// Create a resource with "data" and optional URL params.
|
|
161
|
+
$mp.post ("/resource/uri", data, [params])
|
|
162
|
+
|
|
163
|
+
// Update a resource with "data" and optional URL params.
|
|
164
|
+
$mp.put ("/resource/uri", data, [params])
|
|
165
|
+
|
|
166
|
+
// Delete a resource with optional URL params.
|
|
167
|
+
$mp.delete ("/resource/uri", [params])
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
For example, if you want to get the Sites list (no params and no authentication):
|
|
171
|
+
|
|
172
|
+
```ruby
|
|
173
|
+
$sites = $mp.get ("/sites", null, false)
|
|
174
|
+
|
|
175
|
+
puts $sites
|
|
176
|
+
```
|
data/Rakefile
CHANGED
|
@@ -7,7 +7,7 @@ class Button
|
|
|
7
7
|
|
|
8
8
|
def call(env)
|
|
9
9
|
mp = MercadoPago.new('CLIENT_ID', 'CLIENT_SECRET')
|
|
10
|
-
preferenceData =
|
|
10
|
+
preferenceData = {"items" => ["title"=>"testCreate", "quantity"=>1, "unit_price"=>10.2, "currency_id"=>"ARS"]}
|
|
11
11
|
preference = mp.create_preference(preferenceData)
|
|
12
12
|
|
|
13
13
|
html = '<!doctype html>
|
|
@@ -7,7 +7,7 @@ class Button
|
|
|
7
7
|
|
|
8
8
|
def call(env)
|
|
9
9
|
mp = MercadoPago.new('CLIENT_ID', 'CLIENT_SECRET')
|
|
10
|
-
|
|
10
|
+
preapprovalPayment_data = Hash[
|
|
11
11
|
"payer_email" => "my_customer@my_site.com",
|
|
12
12
|
"back_url" => "http://www.my_site.com",
|
|
13
13
|
"reason" => "Monthly subscription to premium package",
|
|
@@ -22,7 +22,7 @@ class Button
|
|
|
22
22
|
]
|
|
23
23
|
]
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
preapprovalPayment = mp.create_preapproval_payment(preapprovalPayment_data)
|
|
26
26
|
|
|
27
27
|
html = '<!doctype html>
|
|
28
28
|
<html>
|
|
@@ -30,7 +30,7 @@ class Button
|
|
|
30
30
|
<title>MercadoPago SDK - Create Preapproval Payment and Show Subscription Example</title>
|
|
31
31
|
</head>
|
|
32
32
|
<body>
|
|
33
|
-
<a href="' +
|
|
33
|
+
<a href="' + preapprovalPayment['response']['init_point'] + '" name="MP-Checkout" class="orange-ar-m-sq-arall">Pay</a>
|
|
34
34
|
<script type="text/javascript" src="http://mp-tools.mlstatic.com/buttons/render.js"></script>
|
|
35
35
|
</body>
|
|
36
36
|
</html>'
|
data/lib/mercadopago.rb
CHANGED
|
@@ -10,12 +10,19 @@ require 'uri'
|
|
|
10
10
|
require 'net/https'
|
|
11
11
|
require 'yaml'
|
|
12
12
|
require File.dirname(__FILE__) + '/version'
|
|
13
|
+
require 'ssl_options_patch'
|
|
13
14
|
|
|
14
15
|
class MercadoPago
|
|
15
|
-
def initialize(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
def initialize(*args)
|
|
17
|
+
if args.size < 1 or args.size > 2
|
|
18
|
+
raise "Invalid arguments. Use CLIENT_ID and CLIENT SECRET, or ACCESS_TOKEN"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
@client_id = args.at(0) if args.size == 2
|
|
22
|
+
@client_secret = args.at(1) if args.size == 2
|
|
23
|
+
@ll_access_token = args.at(0) if args.size == 1
|
|
24
|
+
|
|
25
|
+
@rest_client = RestClient.new()
|
|
19
26
|
@sandbox = false
|
|
20
27
|
end
|
|
21
28
|
|
|
@@ -33,19 +40,23 @@ class MercadoPago
|
|
|
33
40
|
|
|
34
41
|
# Get Access Token for API use
|
|
35
42
|
def get_access_token
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
if @ll_access_token
|
|
44
|
+
@ll_access_token
|
|
45
|
+
else
|
|
46
|
+
app_client_values = {
|
|
47
|
+
'grant_type' => 'client_credentials',
|
|
48
|
+
'client_id' => @client_id,
|
|
49
|
+
'client_secret' => @client_secret
|
|
50
|
+
}
|
|
41
51
|
|
|
42
|
-
|
|
52
|
+
@access_data = @rest_client.post("/oauth/token", build_query(app_client_values), RestClient::MIME_FORM)
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
if @access_data['status'] == "200"
|
|
55
|
+
@access_data = @access_data["response"]
|
|
56
|
+
@access_data['access_token']
|
|
57
|
+
else
|
|
58
|
+
raise @access_data.inspect
|
|
59
|
+
end
|
|
49
60
|
end
|
|
50
61
|
end
|
|
51
62
|
|
|
@@ -184,6 +195,92 @@ class MercadoPago
|
|
|
184
195
|
@rest_client.get("/preapproval/" + id + "?access_token=" + access_token)
|
|
185
196
|
end
|
|
186
197
|
|
|
198
|
+
# Generic resource get
|
|
199
|
+
def get(uri, params = nil, authenticate = true)
|
|
200
|
+
if not params.class == Hash
|
|
201
|
+
params = Hash.new
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
if authenticate
|
|
205
|
+
begin
|
|
206
|
+
access_token = get_access_token
|
|
207
|
+
rescue => e
|
|
208
|
+
return e.message
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
params["access_token"] = access_token
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
if not params.empty?
|
|
215
|
+
uri << (if uri.include? "?" then "&" else "?" end) << build_query(params)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
@rest_client.get(uri)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Generic resource post
|
|
222
|
+
def post(uri, data, params = nil)
|
|
223
|
+
if not params.class == Hash
|
|
224
|
+
params = Hash.new
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
begin
|
|
228
|
+
access_token = get_access_token
|
|
229
|
+
rescue => e
|
|
230
|
+
return e.message
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
params["access_token"] = access_token
|
|
234
|
+
|
|
235
|
+
if not params.empty?
|
|
236
|
+
uri << (if uri.include? "?" then "&" else "?" end) << build_query(params)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
@rest_client.post(uri, data)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Generic resource put
|
|
243
|
+
def put(uri, data, params = nil)
|
|
244
|
+
if not params.class == Hash
|
|
245
|
+
params = Hash.new
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
begin
|
|
249
|
+
access_token = get_access_token
|
|
250
|
+
rescue => e
|
|
251
|
+
return e.message
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
params["access_token"] = access_token
|
|
255
|
+
|
|
256
|
+
if not params.empty?
|
|
257
|
+
uri << (if uri.include? "?" then "&" else "?" end) << build_query(params)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
@rest_client.put(uri, data)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Generic resource delete
|
|
264
|
+
def delete(uri, params = nil)
|
|
265
|
+
if not params.class == Hash
|
|
266
|
+
params = Hash.new
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
begin
|
|
270
|
+
access_token = get_access_token
|
|
271
|
+
rescue => e
|
|
272
|
+
return e.message
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
params["access_token"] = access_token
|
|
276
|
+
|
|
277
|
+
if not params.empty?
|
|
278
|
+
uri << (if uri.include? "?" then "&" else "?" end) << build_query(params)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
@rest_client.delete(uri)
|
|
282
|
+
end
|
|
283
|
+
|
|
187
284
|
def build_query(params)
|
|
188
285
|
URI.escape(params.collect { |k, v| "#{k}=#{v}" }.join('&'))
|
|
189
286
|
end
|
|
@@ -194,16 +291,14 @@ class MercadoPago
|
|
|
194
291
|
|
|
195
292
|
MIME_JSON = 'application/json'
|
|
196
293
|
MIME_FORM = 'application/x-www-form-urlencoded'
|
|
197
|
-
API_BASE_URL = URI.parse('https://api.
|
|
294
|
+
API_BASE_URL = URI.parse('https://api.mercadopago.com')
|
|
198
295
|
|
|
199
296
|
def initialize(debug_logger=nil)
|
|
200
297
|
@http = Net::HTTP.new(API_BASE_URL.host, API_BASE_URL.port)
|
|
201
298
|
|
|
202
299
|
if API_BASE_URL.scheme == "https" # enable SSL/TLS
|
|
203
300
|
@http.use_ssl = true
|
|
204
|
-
@http.
|
|
205
|
-
@http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
206
|
-
@http.ca_file = File.join(File.dirname(__FILE__), "cacert.pem")
|
|
301
|
+
@http.ssl_options = OpenSSL::SSL::OP_NO_SSLv3 # explicitly tell OpenSSL not to use SSL3
|
|
207
302
|
end
|
|
208
303
|
|
|
209
304
|
@http.set_debug_output debug_logger if debug_logger
|
|
@@ -243,5 +338,9 @@ class MercadoPago
|
|
|
243
338
|
def put(uri, data = nil, content_type=MIME_JSON)
|
|
244
339
|
exec("PUT", uri, data, content_type)
|
|
245
340
|
end
|
|
341
|
+
|
|
342
|
+
def delete(uri, content_type=MIME_JSON)
|
|
343
|
+
exec("DELETE", uri, nil, content_type)
|
|
344
|
+
end
|
|
246
345
|
end
|
|
247
346
|
end
|