localbitcoins 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +13 -5
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +16 -19
  4. data/README.md +319 -35
  5. data/Rakefile +1 -1
  6. data/lib/localbitcoins/client/ads.rb +45 -9
  7. data/lib/localbitcoins/client/contacts.rb +66 -0
  8. data/lib/localbitcoins/client/escrows.rb +8 -12
  9. data/lib/localbitcoins/client/markets.rb +27 -0
  10. data/lib/localbitcoins/client/public.rb +78 -0
  11. data/lib/localbitcoins/client/users.rb +16 -0
  12. data/lib/localbitcoins/client/wallet.rb +28 -0
  13. data/lib/localbitcoins/client.rb +13 -1
  14. data/lib/localbitcoins/request.rb +11 -15
  15. data/lib/localbitcoins/version.rb +1 -1
  16. data/localbitcoins.gemspec +3 -3
  17. data/spec/client_spec.rb +397 -8
  18. data/spec/fixtures/account_info.json +14 -0
  19. data/spec/fixtures/ad_create.json +5 -0
  20. data/spec/fixtures/ad_list.json +103 -0
  21. data/spec/fixtures/ad_single.json +55 -0
  22. data/spec/fixtures/ad_update.json +5 -0
  23. data/spec/fixtures/ads.json +103 -0
  24. data/spec/fixtures/contact_message.json +5 -0
  25. data/spec/fixtures/contacts.json +52 -0
  26. data/spec/fixtures/contacts_active.json +165 -0
  27. data/spec/fixtures/contacts_active_buyers.json +60 -0
  28. data/spec/fixtures/contacts_active_sellers.json +111 -0
  29. data/spec/fixtures/contacts_cancel.json +5 -0
  30. data/spec/fixtures/contacts_canceled_contacts.json +162 -0
  31. data/spec/fixtures/contacts_closed_contacts.json +109 -0
  32. data/spec/fixtures/contacts_contact_info.json +52 -0
  33. data/spec/fixtures/contacts_contacts_info.json +111 -0
  34. data/spec/fixtures/contacts_create.json +10 -0
  35. data/spec/fixtures/contacts_messages.json +43 -0
  36. data/spec/fixtures/contacts_released_contacts.json +60 -0
  37. data/spec/fixtures/currencies.json +505 -0
  38. data/spec/fixtures/currency_ticker.json +236 -0
  39. data/spec/fixtures/escrow_release.json +5 -0
  40. data/spec/fixtures/escrows.json +24 -22
  41. data/spec/fixtures/local_buy_ads.json +93 -0
  42. data/spec/fixtures/local_sell_ads.json +93 -0
  43. data/spec/fixtures/logout.json +0 -0
  44. data/spec/fixtures/myself.json +14 -0
  45. data/spec/fixtures/online_buy_ads.json +637 -0
  46. data/spec/fixtures/online_sell_ads.json +2160 -0
  47. data/spec/fixtures/orderbook.json +1739 -0
  48. data/spec/fixtures/payment_methods.json +95 -0
  49. data/spec/fixtures/places.json +15 -0
  50. data/spec/fixtures/ticker.json +254 -0
  51. data/spec/fixtures/trades.json +3002 -0
  52. data/spec/fixtures/wallet.json +34 -0
  53. data/spec/fixtures/wallet_addr.json +6 -0
  54. data/spec/fixtures/wallet_balance.json +16 -0
  55. data/spec/fixtures/wallet_send.json +5 -0
  56. data/spec/spec_helper.rb +26 -29
  57. metadata +51 -7
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f32b2111b3e627e2cdadc083e665f9d9af54d4c8
4
- data.tar.gz: aaa3523f0a7c6cbb944d6047f361df38261bbbb0
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTcyMzNjNTJjYWU2OTM0YmJhNjZlNGViM2RiYmM5ODk4ZjkxZTQ5OQ==
5
+ data.tar.gz: !binary |-
6
+ OTA5Mzk3ZGQ3MTdmYTg0ZGYxNmM2ZTU2OTYyMDI1Mjk5MDgwZjY4Ng==
5
7
  SHA512:
6
- metadata.gz: f1b20d3836f2eb810bbccf0eca763dd88ee929bd456bbd25e95386b76c00fac5cdb4bb94a8149a4916f31ae47cea52de87623bf8b46f88433cabc4879d1bdc6d
7
- data.tar.gz: d4e2c991028a547274adeb72c636fd1f764fcfc312f28f57a82a21e0fc07722bcf53ace2750f50a29ac5257b0f4f01323b21c482a5ce72f62eb885ad586cb656
8
+ metadata.gz: !binary |-
9
+ NzI4ZWZhMWI4YWFiNTdlYzk2Y2UwMDcxYWE4Nzc1MmE5N2NhYTU2M2Y4NTEx
10
+ MTQ4YjIyNThiNzVjMzY5OTFmYzFhNjM4NzBjYjBiODE1YmYxNWJhOWFiNTQ5
11
+ NTNjY2VhMjExYzU2MWJhMDYwZGQyNzVjZWZkOTViOTgwYTAxNWE=
12
+ data.tar.gz: !binary |-
13
+ MzYzODlmZWUyY2U3Mjg2MWFlMmI4ODRmMzE0NjhhNzc1OTRmZjMyMmE0NGVi
14
+ MmU0MjQyM2IxNzYzODhhZDU3YWU2ZmI2ZWEwNGE1Y2UzNGVjMTEwNGMwODc0
15
+ ZTU0MmJmMmIwOWYzYzgyNzM3NDdhYmIyOTdjOTc4ZTNiNDgzMjk=
data/.gitignore CHANGED
@@ -23,3 +23,5 @@ doc/
23
23
 
24
24
  # Gems
25
25
  *.gem
26
+
27
+ .idea/
data/Gemfile.lock CHANGED
@@ -5,36 +5,33 @@ PATH
5
5
  activesupport (~> 3)
6
6
  hashie (~> 2.0.2)
7
7
  json (~> 1.8.0)
8
- oauth2 (~> 0.9.2)
8
+ oauth2 (~> 0.9.4)
9
9
  rest-client (~> 1.6)
10
10
 
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activesupport (3.2.13)
15
- i18n (= 0.6.1)
14
+ activesupport (3.2.18)
15
+ i18n (~> 0.6, >= 0.6.4)
16
16
  multi_json (~> 1.0)
17
17
  addressable (2.3.5)
18
18
  crack (0.4.0)
19
19
  safe_yaml (~> 0.9.0)
20
20
  diff-lcs (1.2.4)
21
- faraday (0.8.7)
22
- multipart-post (~> 1.1)
21
+ faraday (0.9.0)
22
+ multipart-post (>= 1.2, < 3)
23
23
  hashie (2.0.5)
24
- httpauth (0.2.0)
25
- i18n (0.6.1)
26
- json (1.8.0)
27
- jwt (0.1.8)
28
- multi_json (>= 1.5)
29
- mime-types (1.23)
30
- multi_json (1.7.7)
31
- multi_xml (0.5.4)
32
- multipart-post (1.2.0)
33
- oauth2 (0.9.2)
34
- faraday (~> 0.8)
35
- httpauth (~> 0.2)
36
- jwt (~> 0.1.4)
37
- multi_json (~> 1.0)
24
+ i18n (0.6.9)
25
+ json (1.8.1)
26
+ jwt (1.0.0)
27
+ mime-types (2.3)
28
+ multi_json (1.10.1)
29
+ multi_xml (0.5.5)
30
+ multipart-post (2.0.0)
31
+ oauth2 (0.9.4)
32
+ faraday (>= 0.8, < 0.10)
33
+ jwt (~> 1.0)
34
+ multi_json (~> 1.3)
38
35
  multi_xml (~> 0.5)
39
36
  rack (~> 1.2)
40
37
  rack (1.5.2)
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # LocalBitcoins API Gem 0.0.3
1
+ # LocalBitcoins API Gem 1.0.0
2
2
 
3
3
  This gem provides a simple, extensible Ruby wrapper to access the [LocalBitcoins API](https://localbitcoins.com/api-docs/).
4
4
 
5
- ## Installation
5
+ ## Installation & Setup
6
6
 
7
7
  Install the gem:
8
8
  ```
@@ -11,22 +11,36 @@ gem install localbitcoins
11
11
 
12
12
  Or include it in your Gemfile:
13
13
  ```
14
- gem 'openlibrary'
14
+ gem 'localbitcoins'
15
15
  ```
16
16
 
17
- ## Setting Up Your OAuth Client
17
+ You can use the gem with or without OAuth2 for authentication. Without authentication the API only allows access to the public endpoints documented [here (Ad Listings)](https://localbitcoins.com/api-docs/public/) and [here (Market Data)](https://localbitcoins.com/api-docs/#toc7)
18
18
 
19
- First, you need to [register your application](https://localbitcoins.com/accounts/api/) with LocalBitcoins to get your API keys. You will get a Client ID and a Client Secret, which you will use to get your OAuth access token. An OAuth access token is required for all requests to the LocalBitcoins API.
19
+ ### Setting Up The Client
20
20
 
21
- There are a number of ways to implement OAuth, and it is largely left up to you to decide how to do it. If you've never used OAuth before, reading [this tutorial](http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified) is a good place to start!
21
+ For authenticated requests to the LocalBitcoins API, you must [register your application](https://localbitcoins.com/accounts/api/) and get your API credentials. Use the Client ID and Client Secret to receive an access token via OAuth2. There are a number of ways to implement OAuth2, and it is largely left up to you to decide how to do it. If you've never used OAuth2 before, reading [this tutorial](http://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified) is a good place to start!
22
22
 
23
- Once you have your token, you can set up your client with the following code:
23
+ Once you have your token, you can get to setting up the LocalBitcoins client.
24
24
 
25
25
  ``` ruby
26
+ # Authenticated
27
+
26
28
  # long version
27
- client = LocalBitcoins::Client.new(oauth_token: 'OAUTH_TOKEN')
28
- # short version
29
- client = LocalBitcoins.new(oauth_token: 'OAUTH_TOKEN')
29
+ client = LocalBitcoins::Client.new(
30
+ client_id: 'CLIENT_ID',
31
+ client_secret: 'CLIENT_SECRET',
32
+ oauth_token: 'OAUTH_TOKEN'
33
+ )
34
+ # slightly shorter version
35
+ client = LocalBitcoins.new(
36
+ client_id: 'CLIENT_ID',
37
+ client_secret: 'CLIENT_SECRET',
38
+ oauth_token: 'OAUTH_TOKEN'
39
+ )
40
+
41
+ # Unauthenticated
42
+ client = LocalBitcoins.new
43
+
30
44
  ```
31
45
 
32
46
  ### Global Configuration
@@ -36,12 +50,12 @@ To make things easier, you can define your client credentials at a global level:
36
50
  ``` ruby
37
51
  # Set the configuration
38
52
  LocalBitcoins.configure(
39
- client_id: 'ID',
40
- client_secret: 'SECRET'
53
+ client_id: 'CLIENT_ID',
54
+ client_secret: 'CLIENT_SECRET'
41
55
  )
42
56
 
43
57
  # Get the configuration
44
- LocalBitcoins.configuration # => { client_id => 'ID', client_secret => 'SECRET' }
58
+ LocalBitcoins.configuration # => { client_id => 'CLIENT_ID', client_secret => 'CLIENT_SECRET' }
45
59
 
46
60
  # Reset the configuration
47
61
  LocalBitcoins.reset_configuration
@@ -55,47 +69,317 @@ There are several ways to solve the problem of keeping your credentials secret.
55
69
 
56
70
  ## Usage
57
71
 
58
- You can get a list of the token owner's releaseable escrows through the OAuth client. You can also use the client to release an escrow.
72
+ Nearly every endpoint found in both the [logged in](https://localbitcoins.com/api-docs) and [public](https://localbitcoins.com/api-docs/public/) documentation is supported by this gem.
73
+
74
+ ### Ads
59
75
 
60
- ### View Releaseable Escrows
76
+ Return a list of the token owner's ads with the following method:
61
77
 
62
78
  ``` ruby
63
- escrows = client.escrows
79
+ ads = client.ads
64
80
 
65
- escrows.escrow_list.each do |e|
66
- e.data.created_at # => UTC datetime escrow was created at
67
- e.data.buyer_username # => username of the buyer
68
- e.data.reference_code # => reference code for the escrow
69
-
70
- e.actions.release_url # => url to release to escrow
81
+ ads.ad_list.each do |a|
82
+ a.data.visible # => boolean value of the ad's visibility
83
+ a.data.email # => valid e-mail string or null
84
+ a.data.location_string # => human-readable location
85
+ # and many more pieces of data!
71
86
  end
72
87
  ```
88
+ Create a new ad for the token owner:
89
+
90
+ ``` ruby
91
+ # - Required fields -
92
+ # min_amount - minimum amount for sale in fiat [string]
93
+ # max_amount - maximum amount for sale in fiat [string]
94
+ # price_equation - price using price equation operators [string]
95
+ # lat - latitude of location [float]
96
+ # lon - longitude of location [float]
97
+ # city - city of listing [string]
98
+ # location_string - text representation of location [string]
99
+ # countrycode - two letter countrycode [string]
100
+ # account_info - [string]
101
+ # bank_name - [string]
102
+ # sms_verification_required - only receive contacts with verified phone numbers [boolean]
103
+ # track_max_amount - decrease max sell amount in relation to liquidity [boolean]
104
+ # trusted_required - only allow trusted contacts [boolean]
105
+ # currency - three letter fiat representation [string]
106
+ #
107
+ # pass a hash of the above fields
108
+ # returns a message on success
109
+ client.create_ad(params)
110
+ ```
73
111
 
74
- Use the release_url from `escrows` method in the `escrow_release` method below:
112
+ Update existing ad for the token owner.
75
113
 
76
- ### Release An Escrow
114
+ ``` ruby
115
+ # - Required Fields -
116
+ # id - id of the ad you want to update
117
+ # visibility - the ad's visibility [boolean]
118
+ # price_equation - equation to calculate price [string]
119
+ #
120
+ # NOTE 1: Setting min_amount or max_amount to nil will unset them.
121
+ # NOTE 2: "Floating price" must be false in you ad's edit form for price_equation to go through
122
+ #
123
+ # pass a hash of the above fields, plus any other editable fields
124
+ # returns a message on success
125
+ client.update_ad(id,params)
126
+ ```
127
+
128
+ List of ads from a comma separated string of ids
129
+ ``` ruby
130
+ # pass a comma separated string of ids
131
+ ads = client.ad_list("12345,123456,1234567")
132
+ ```
133
+ Gets a single ad from its id
134
+
135
+ ``` ruby
136
+ ad = client.ad(12345)
137
+ ```
138
+ ### Escrows
139
+
140
+ View token owner's releasable escrows
141
+ NOTE: This endpoint is not documented by LocalBitcoins and may or may not work.
142
+ ``` ruby
143
+ escrows = client.escrows
144
+ # escrows are listed in escrows.escrow_list
145
+ ```
146
+ Release an escrow
77
147
 
78
148
  ``` ruby
149
+ # pass the id of the contact which the escrow is associated with
79
150
  # returns a complimentary message if the escrow successfully released
80
- release = client.escrow_release(release_url)
151
+ release = client.escrow_release(contact_id)
81
152
  ```
82
153
 
83
- ### List Ads
154
+ ### Contacts
84
155
 
85
- You can get a list of the token owner's ads with the following method:
156
+ List of active contacts
157
+ ``` ruby
158
+ # This method can filter contacts by contact_type, which can be "buyer" or "seller"
159
+ #
160
+ # buyers and sellers
161
+ contacts = client.active_contacts
162
+ # buyers only
163
+ contacts = client.active_contacts('buyer')
164
+ # sellers only
165
+ contacts = client.active_contacts('seller')
166
+ ```
86
167
 
168
+ Released, canceled, and closed contacts have their own methods as well, which can be filtered the same as above.
87
169
  ``` ruby
88
- ads = client.ads
170
+ released = client.released_contacts
171
+ closed = client.closed_contacts
172
+ canceled = client.canceled_contacts
173
+ ```
89
174
 
90
- ads.ad_list.each do |a|
91
- a.data.visible # => boolean value of the ad's visibility
92
- a.data.email # => valid e-mail string or null
93
- a.data.location_string # => human-readable location
94
- # and many more pieces of data!
95
- end
175
+ Get a contact based on the id
176
+ ``` ruby
177
+ released = client.released_contacts
178
+ closed = client.closed_contacts
179
+ canceled = client.canceled_contacts
180
+ ```
181
+
182
+ Get a contact based on the id
183
+ ``` ruby
184
+ contact = client.contact_info(1234)
185
+ ```
186
+
187
+ Get a list of contacts from a comma separated string of ids
188
+ ``` ruby
189
+ contacts = client.contacts_info("1234,12345,1234567")
190
+ # access list at contacts.contact_list
96
191
  ```
97
192
 
98
- For a full list of info you can get with this method, view the [API documentation](https://localbitcoins.com/api-docs/).
193
+ Create a new contact for the token owner
194
+ ``` ruby
195
+ client.create_contact(ad_id, amount, message)
196
+ ```
197
+
198
+ Fund an active contact for the token owner
199
+ ``` ruby
200
+ client.fund_contact(contact_id)
201
+ ```
202
+
203
+ Cancel an active contact for the token owner
204
+ ``` ruby
205
+ client.cancel_contact(contact_id)
206
+ ```
207
+
208
+ Initiate a dispute with on a contact for the token owner
209
+ ``` ruby
210
+ client.dispute_contact(contact_id)
211
+ ```
212
+
213
+ Send a message to a contact for the token owner
214
+ ``` ruby
215
+ client.message_contact(contact_id, message)
216
+ ```
217
+
218
+ Return all messages from a contact
219
+ ``` ruby
220
+ messages = client.messages_from_contact(contact_id)
221
+ ```
222
+
223
+ Mark a contact as paid for the token owner
224
+ ``` ruby
225
+ client.mark_contact_as_paid(contact_id)
226
+ ```
227
+
228
+ ### Users
229
+
230
+ Return info on the token owner
231
+ ``` ruby
232
+ myself = client.myself
233
+ ```
234
+
235
+ Return an account based on the username.
236
+ ``` ruby
237
+ user = client.account_info(username)
238
+ ```
239
+
240
+ Immediately expire the currently authorized access_token.
241
+ NOTE: This method may not work. We're looking into it.
242
+ ``` ruby
243
+ client.logout
244
+ ```
245
+
246
+ ### Wallet
247
+
248
+ Return info on the token owner's wallet
249
+ ``` ruby
250
+ wallet = client.wallet
251
+ ```
252
+
253
+ Return the token owner's wallet balance
254
+ ``` ruby
255
+ balance = client.wallet_balance
256
+ ```
257
+
258
+ Return the address of the token owner's wallet
259
+ ``` ruby
260
+ address = client.wallet_addr
261
+ ```
262
+
263
+ Send bitcoin from the token owner's wallet
264
+ ``` ruby
265
+ # returns message on success
266
+ client.wallet_send(address, amount)
267
+ ```
268
+ NOTE: The LocalBitcoins documentation does not specify where pins can be acquired, though use of a pin requires the 'money_pin' token scope.
269
+
270
+ Send bitcoin from token owner's wallet using pin code
271
+ ``` ruby
272
+ #returns message no success
273
+ client.wallet_pin_send(address, amount, pin)
274
+ ```
275
+
276
+ Check if a pin is valid
277
+ ``` ruby
278
+ client.valid_pin?(pin)
279
+ ```
280
+
281
+ ## Public API
282
+
283
+ ### Markets
284
+ Return a ticker of bitcoin prices in various currencies.
285
+ ``` ruby
286
+ ticker = client.ticker
287
+ ```
288
+
289
+ Return a batch of 500 trades in the specifed currency
290
+ ``` ruby
291
+ # currency is the 3 letter currency code
292
+ trades = client.trades(currency)
293
+
294
+ # since is an optional trade id - will return the next 500 trades after the specifed id
295
+ trades = client.trades(currency, 12345)
296
+ ```
297
+
298
+ Return the LocalBitcoins online orderbook ( Bids and Asks ) in a specified currency
299
+ ``` ruby
300
+ # currency is the 3 letter currency code
301
+ orderbook = client.orderbook(currency)
302
+ ```
303
+
304
+ ### Ad Listings
305
+
306
+ Return a list of online buy ads pertaining to specified parameters
307
+ ``` ruby
308
+ # Accepts a hash of parameters, with a valid subset of the following keys: countrycode, currency, country_name, payment_method
309
+ #
310
+ # Valid API endpoints include:
311
+ # /buy-bitcoins-online/{countrycode}/{country_name}/{payment_method}/.json
312
+ # /buy-bitcoins-online/{countrycode}/{country_name}/.json
313
+ # /buy-bitcoins-online/{currency}/{payment_method}/.json
314
+ # /buy-bitcoins-online/{currency}/.json
315
+ # /buy-bitcoins-online/{payment_method}/.json
316
+ # /buy-bitcoins-online/.json
317
+ #
318
+ # NOTE: countrycode must be 2 characters and currency must be 3 characters
319
+ online_buy_ads_lookup = client.online_buy_ads_lookup(params)
320
+ ```
321
+
322
+ Return a list of online sell ads pertaining to specified parameters
323
+ ``` ruby
324
+ # Accepts a hash of parameters, with a valid subset of the following keys: countrycode, currency, country_name, payment_method
325
+ #
326
+ # NOTE: see valid API endpoints in online_buy_ads_lookup method above
327
+ online_sell_ads_lookup = client.online_sell_ads_lookup(params)
328
+ ```
329
+
330
+ Returns a list of local buy ads in a certain place
331
+ ``` ruby
332
+ # - Required fields -
333
+ # location_id - id for location found using places method
334
+ # location_slug - slug name for location found using places method
335
+ #
336
+ # - Optional fields -
337
+ # lat - latitude of location [float]
338
+ # lon - longitude of location [float]
339
+ #
340
+ # pass a hash of the above fields
341
+ local_buy_ad = client.local_buy_ad(params)
342
+ ```
343
+
344
+ Return a list of local sell ads in a certain place
345
+ ``` ruby
346
+ # pass a hash with the same fields as local_buy_ad
347
+ local_sell_ad = client.local_sell_ad(params)
348
+ ```
349
+
350
+ ### Additional Public Methods
351
+
352
+ Return all payment methods accepted on LocalBitcoins, with an option to limit the search to a specific country
353
+ ``` ruby
354
+ # countrycode is the 2 character countrycode
355
+ payment_methods = client.payment_methods(countrycode)
356
+ ```
357
+
358
+ Return all currencies accepted by the LocalBitcoins platform
359
+ ``` ruby
360
+ currencies = client.currencies
361
+ ```
362
+
363
+ Return information about the place at or near a specified latitude and longitude
364
+ ``` ruby
365
+ # - Required fields -
366
+ # lat - latitude of location [float]
367
+ # lon - longitude of location [float]
368
+ #
369
+ # - Optional fields -
370
+ # countrycode - 2 letter countrycode
371
+ # location_string - location name in string form
372
+ #
373
+ # pass a hash of the above fields
374
+ places = client.places(params)
375
+ ```
376
+
377
+ ## Contributors
378
+
379
+ * [John Shutt](http://shutt.in)
380
+ * [Will Newman](http://willnewman.me)
381
+ * [Albert Brown](https://www.linkedin.com/pub/albert-brown/36/515/a2)
382
+ * [Coincove](https://coincove.co)
99
383
 
100
384
  ## License
101
385
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
  RSpec::Core::RakeTask.new('spec')
4
4
 
5
- RSpec::Core::RakeTask.new(:test) do |t|
5
+ RSpec::Core::RakeTask.new(:test) do |t|
6
6
  t.pattern = 'spec/*_spec.rb'
7
7
  t.verbose = false
8
8
  end
@@ -1,24 +1,60 @@
1
1
  module LocalBitcoins
2
2
  module Ads
3
3
  # Get a list of the token owner's ads
4
- #
5
- def ads()
6
- data = oauth_request(:get, '/api/ads')
7
- Hashie::Mash.new(data['ad_list'])
4
+ def ads
5
+ oauth_request(:get, '/api/ads/').data
8
6
  end
9
7
 
10
8
  # Update one of the token owner's ads
11
9
  #
12
10
  # id - id of the ad you want to update
13
11
  # visibility - the ad's visibility [boolean]
14
- # min_amount - minimum selling price [string or nil]
15
- # max_amount - maximum buying price [string or nil]
12
+ # min_amount - minimum selling price [string]
13
+ # max_amount - maximum buying price [string]
16
14
  # price_equation - equation to calculate price [string]
17
15
  #
18
- # NOTE: Omitting min_amount or max_amount will unset them.
16
+ # NOTE 1: Setting min_amount or max_amount to nil will unset them.
17
+ # NOTE 2: "Floating price" must be false in you ad's edit form for price_equation to go through
18
+ #
19
+ def update_ad(id, params={})
20
+ old_ad = ad(id).data
21
+ updated_params = {
22
+ :min_amount => old_ad.min_amount,
23
+ :max_amount => old_ad.max_amount,
24
+ :visible => old_ad.visible
25
+ }.merge(params)
26
+ oauth_request(:post, "/api/ad/#{id}/", updated_params).data
27
+ end
28
+
29
+ # Create a new ad for the token owner
30
+ #
31
+ # - Required fields -
32
+ # min_amount - minimum amount for sale in fiat [string]
33
+ # max_amount - maximum amount for sale in fiat [string]
34
+ # price_equation - price using price equation operators [string]
35
+ # lat - latitude of location [float]
36
+ # lon - longitude of location [float]
37
+ # city - city of listing [string]
38
+ # location_string - text representation of location [string]
39
+ # countrycode - two letter countrycode [string]
40
+ # account_info - [string]
41
+ # bank_name - [string]
42
+ # sms_verification_required - only receive contacts with verified phone numbers [boolean]
43
+ # track_max_amount - decrease max sell amount in relation to liquidity [boolean]
44
+ # trusted_required - only allow trusted contacts [boolean]
45
+ # currency - three letter fiat representation [string]
19
46
  #
20
- def update_ad(id, visibility, min_amount, max_amount, price_equation)
21
- # Can't use this method until the Ads API is complete!
47
+ def create_ad(params={})
48
+ oauth_request(:post, '/api/ad-create/', params).data
49
+ end
50
+
51
+ # ads - comma separated list of ad ids [string]
52
+ def ad_list(ads)
53
+ oauth_request(:get, "/api/ad-get/", {:ads=>ads}).data
54
+ end
55
+
56
+ def ad(ad_id)
57
+ oauth_request(:get, "/api/ad-get/#{ad_id}/").data.ad_list[0]
22
58
  end
23
59
  end
24
60
  end
@@ -0,0 +1,66 @@
1
+ module LocalBitcoins
2
+ module Contacts
3
+ # Contact interaction endpoints
4
+ # contact_id - id number associated with the contact
5
+
6
+ def mark_contact_as_paid(contact_id)
7
+ oauth_request(:post, "/api/contact_mark_as_paid/#{contact_id}/")
8
+ end
9
+
10
+ def messages_from_contact(contact_id)
11
+ oauth_request(:get, "/api/contact_messages/#{contact_id}/").data
12
+ end
13
+
14
+ def message_contact(contact_id, msg)
15
+ oauth_request(:post, "/api/contact_message_post/#{contact_id}/", {:msg=>msg}).data
16
+ end
17
+
18
+ def dispute_contact(contact_id)
19
+ oauth_request(:post, "/api/contact_dispute/#{contact_id}/")
20
+ end
21
+
22
+ def cancel_contact(contact_id)
23
+ oauth_request(:post, "/api/contact_cancel/#{contact_id}/").data
24
+ end
25
+
26
+ def fund_contact(contact_id)
27
+ oauth_request(:post, "/api/contact_fund/#{contact_id}/")
28
+ end
29
+
30
+ def create_contact(ad_id, amount, message=nil)
31
+ oauth_request(:post, "/api/contact_create/#{ad_id}/", {:amount=>amount, :message=>message})
32
+ end
33
+
34
+ def contact_info(contact_id)
35
+ oauth_request(:get, "/api/contact_info/#{contact_id}/")
36
+ end
37
+
38
+ # contacts - comma separated list of contact ids [string]
39
+ def contacts_info(contacts)
40
+ oauth_request(:get, '/api/contact_info/', {:contacts=>contacts}).data
41
+ end
42
+
43
+ # Dashboard contact endpoints
44
+ # contact_type - optional filter 'buyer' or 'seller' [string]
45
+ #
46
+ def active_contacts(contact_type = nil)
47
+ contact_type<<'/' unless contact_type.nil?
48
+ oauth_request(:get, "/api/dashboard/#{contact_type}").data
49
+ end
50
+
51
+ def released_contacts(contact_type = nil)
52
+ contact_type<<'/' unless contact_type.nil?
53
+ oauth_request(:get, "/api/dashboard/released/#{contact_type}").data
54
+ end
55
+
56
+ def canceled_contacts(contact_type = nil)
57
+ contact_type<<'/' unless contact_type.nil?
58
+ oauth_request(:get, "/api/dashboard/canceled/#{contact_type}").data
59
+ end
60
+
61
+ def closed_contacts(contact_type = nil)
62
+ contact_type<<'/' unless contact_type.nil?
63
+ oauth_request(:get, "/api/dashboard/closed/#{contact_type}").data
64
+ end
65
+ end
66
+ end
@@ -1,21 +1,17 @@
1
1
  module LocalBitcoins
2
2
  module Escrows
3
3
  # Get a list of the token owner's releaseable escrows
4
- #
5
- def escrows()
6
- data = oauth_request(:get, '/api/escrows')
7
- Hashie::Mash.new(data)
4
+ # NOTE: This endpoint is not documented so it may or may not work
5
+ def escrows
6
+ oauth_request(:get, '/api/escrows/').data
8
7
  end
9
8
 
10
9
  # Release an escrow
11
- #
12
- # release_url => the url of the escrow you want to release,
13
- # probably found by running the `escrows`
14
- # method above
15
- #
16
- def escrow_release(release_url)
17
- data = oauth_request(:post, release_url)
18
- data['data']['message']
10
+ # id - the contact number
11
+ # NOTE: LocalBitcoins documentation calls this the "escrow_id",
12
+ # it is actually just the contact number the escrow is associated with
13
+ def escrow_release(id)
14
+ oauth_request(:post, "/api/escrow_release/#{id}/").data
19
15
  end
20
16
  end
21
17
  end