venmo-api 0.0.3
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 +7 -0
- data/lib/venmo-api.rb +1 -0
- data/lib/venmo/client.rb +79 -0
- data/lib/venmo/helper.rb +11 -0
- data/lib/venmo/payment.rb +43 -0
- data/lib/venmo/user.rb +91 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1e4c1c69b907fdf2b085db9c668f710f4a3212f4
|
4
|
+
data.tar.gz: f17b9b8aef65c44abfd155b2e942a5c6dd6c8e94
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 80d0827e46f9cf3cdf5f763928132c2f9d64314f3f33f0f184a61dfd3561fd0e9fb2c6f2a486cd68ce4fa1f9b592c02164f3812842fd79cc5b3405f7c4b31d54
|
7
|
+
data.tar.gz: fdccdec24f0cee8b08450b0c8cfe6b5915d6b1ccad929c4def6778e2fe55b86fcdb482e2d1b399b33480346ae05f54928add0a924f845b421e3f65ee5974ea4f
|
data/lib/venmo-api.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'venmo/client'
|
data/lib/venmo/client.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'venmo/helper'
|
3
|
+
require 'venmo/user'
|
4
|
+
|
5
|
+
module VenmoAPI
|
6
|
+
class Client
|
7
|
+
attr_accessor :client_id, :secret, :scope, :response_type
|
8
|
+
|
9
|
+
def initialize (options = {})
|
10
|
+
yield(self) if block_given?
|
11
|
+
validate_credentials
|
12
|
+
end
|
13
|
+
|
14
|
+
def auth_link
|
15
|
+
return VenmoAPI::Helper::VENMO_BASE_URL + 'oauth/authorize?client_id=' + client_id.to_s + '&scope=' + scope.join(' ') + '&response_type=' + response_type
|
16
|
+
end
|
17
|
+
|
18
|
+
def authenticate (key)
|
19
|
+
if self.response_type == 'code'
|
20
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'oauth/access_token')
|
21
|
+
res = Net::HTTP.post_form(uri, 'client_id' => self.client_id, 'client_secret' => self.secret, 'code' => key)
|
22
|
+
res_data = JSON.parse(res.body)
|
23
|
+
puts res_data.inspect
|
24
|
+
if res_data['access_token']
|
25
|
+
user = User.new(VenmoAPI::Helper::recursive_symbolize_keys!(res_data), self.response_type);
|
26
|
+
else
|
27
|
+
user = nil;
|
28
|
+
end
|
29
|
+
return user;
|
30
|
+
else
|
31
|
+
user = User.new({:access_token => key}, self.response_type)
|
32
|
+
return user;
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def credentials
|
37
|
+
{
|
38
|
+
:client_id => client_id,
|
39
|
+
:secret => secret,
|
40
|
+
:scope => scope,
|
41
|
+
:response_type => response_type
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_user(id, access_token)
|
46
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'users/' + id.to_s + '?access_token=' + access_token)
|
47
|
+
res = Net::HTTP.get(uri)
|
48
|
+
return JSON.parse(res)
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_payment (id, access_token)
|
52
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'payments/' + id.to_s + '?access_token=' + access_token)
|
53
|
+
res = Net::HTTP.get(uri)
|
54
|
+
return JSON.parse(res)
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_recent_payments access_token
|
58
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'payments?access_token=' + access_token)
|
59
|
+
res = Net::HTTP.get(uri)
|
60
|
+
return JSON.parse(res)
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
def validate_credentials
|
65
|
+
credentials.each do |credential, value|
|
66
|
+
if credential == :client_id && !value.is_a?(Fixnum)
|
67
|
+
raise "Client ID must be a number"
|
68
|
+
elsif credential == :secret && !value.is_a?(String)
|
69
|
+
raise "Secret must be a string"
|
70
|
+
elsif credential == :scope && !value.is_a?(Array)
|
71
|
+
raise "Scope must be an array"
|
72
|
+
elsif credential == :response_type && !value.is_a?(String) && (value == 'code' || value == 'token')
|
73
|
+
raise "Response Type must be equal to 'code' or 'token'"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
data/lib/venmo/helper.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module VenmoAPI
|
2
|
+
class Payment
|
3
|
+
attr_accessor :data, :phone, :email, :user_id, :note, :amount, :audience, :sent
|
4
|
+
def initialize(options = {})
|
5
|
+
self.phone = options[:phone]
|
6
|
+
self.email = options[:email]
|
7
|
+
self.user_id = options[:user_id]
|
8
|
+
self.note = options[:note]
|
9
|
+
self.amount = options[:amount]
|
10
|
+
self.audience = options[:audience] ? options[:audience] : 'friends'
|
11
|
+
validate_properties
|
12
|
+
end
|
13
|
+
|
14
|
+
def send (access_token)
|
15
|
+
uri = URI('https://sandbox-api.venmo.com/v1/' + 'payments')
|
16
|
+
res = Net::HTTP.post_form(uri, 'access_token' => access_token,
|
17
|
+
'phone' => self.phone,
|
18
|
+
'email' => self.email,
|
19
|
+
'user_id' => self.user_id,
|
20
|
+
'note' => self.note,
|
21
|
+
'amount' => self.amount,
|
22
|
+
'audience' => self.audience)
|
23
|
+
res_data = JSON.parse(res.body)
|
24
|
+
if res_data["data"]
|
25
|
+
self.data = VenmoAPI::Helper::recursive_symbolize_keys! res_data["data"]
|
26
|
+
end
|
27
|
+
return self
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def validate_properties
|
33
|
+
if !(self.user_id || self.phone || self.email)
|
34
|
+
raise "make_payment requires a target. Please provide a user_id, phone, or email in options hash"
|
35
|
+
elsif !self.note
|
36
|
+
raise "make_payment requires a note in options hash"
|
37
|
+
elsif !self.amount
|
38
|
+
raise "make_payment requires an amount in options hash"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/lib/venmo/user.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'venmo/helper'
|
3
|
+
require 'venmo/payment'
|
4
|
+
|
5
|
+
module VenmoAPI
|
6
|
+
class User
|
7
|
+
attr_accessor :access_token, :expires_in, :refresh_token, :token_updated, :response_type, :token_type, :data
|
8
|
+
def initialize(obj, response_type)
|
9
|
+
self.access_token = obj[:access_token]
|
10
|
+
self.response_type = response_type
|
11
|
+
if response_type == 'code'
|
12
|
+
self.expires_in = obj[:expires_in]
|
13
|
+
self.refresh_token = obj[:refresh_token]
|
14
|
+
self.token_type = obj[:bearer]
|
15
|
+
self.token_updated = Time.now
|
16
|
+
self.data = obj[:user]
|
17
|
+
end
|
18
|
+
VenmoAPI::Helper::recursive_symbolize_keys! self.data
|
19
|
+
validate_properties response_type
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_info
|
23
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'me?access_token=' + self.access_token)
|
24
|
+
res = Net::HTTP.get(uri)
|
25
|
+
res_data = JSON.parse(res)
|
26
|
+
if res_data["data"]
|
27
|
+
self.data = VenmoAPI::Helper::recursive_symbolize_keys! res_data["data"]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_info(update = true)
|
32
|
+
if update
|
33
|
+
update_info
|
34
|
+
end
|
35
|
+
return self.data
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_friends (options = {})
|
39
|
+
if options[:id]
|
40
|
+
url = VenmoAPI::Helper::VENMO_BASE_URL + 'users/' + options[:id] + '/friends?access_token=' + self.access_token
|
41
|
+
else
|
42
|
+
if self.data[:user][:id]
|
43
|
+
url = VenmoAPI::Helper::VENMO_BASE_URL + 'users/' + self.data[:user][:id] + '/friends?access_token=' + self.access_token
|
44
|
+
else
|
45
|
+
raise "get_friends must be called with an id if there is no id present on the current user"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
url += options[:before] ? "&before=" + options[:before] : ''
|
49
|
+
url += options[:after] ? "&after=" + options[:after] : ''
|
50
|
+
url += options[:limit] ? "&limit=" + options[:limit] : ''
|
51
|
+
res = Net::HTTP.get(URI(url))
|
52
|
+
return JSON.parse(res)
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_user(id)
|
56
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'users/' + id.to_s + '?access_token=' + self.access_token)
|
57
|
+
res = Net::HTTP.get(uri)
|
58
|
+
return JSON.parse(res)
|
59
|
+
end
|
60
|
+
|
61
|
+
def make_payment (options = {})
|
62
|
+
payment = Payment.new(options)
|
63
|
+
return payment.send self.access_token
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_payment (id)
|
67
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'payments/' + id.to_s + '?access_token=' + self.access_token)
|
68
|
+
res = Net::HTTP.get(uri)
|
69
|
+
return JSON.parse(res)
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_recent_payments
|
73
|
+
uri = URI(VenmoAPI::Helper::VENMO_BASE_URL + 'payments?access_token=' + self.access_token)
|
74
|
+
res = Net::HTTP.get(uri)
|
75
|
+
return JSON.parse(res)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
def validate_properties (response_type)
|
80
|
+
if !self.access_token
|
81
|
+
raise "Missing access token"
|
82
|
+
elsif !self.expires_in && response_type == 'code'
|
83
|
+
raise "Missing expires_in"
|
84
|
+
elsif !self.refresh_token && response_type == 'code'
|
85
|
+
raise "Missing refresh token"
|
86
|
+
elsif !self.token_updated && response_type == 'code'
|
87
|
+
raise "Missing token_updated"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: venmo-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Khor
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Manages the interaction with the Venmo API on your behalf
|
14
|
+
email: akhor93@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/venmo-api.rb
|
20
|
+
- lib/venmo/client.rb
|
21
|
+
- lib/venmo/helper.rb
|
22
|
+
- lib/venmo/payment.rb
|
23
|
+
- lib/venmo/user.rb
|
24
|
+
homepage: http://rubygems.org/gems/venmo-api
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.4.1
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Interact with the Venmo API
|
48
|
+
test_files: []
|