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.
@@ -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
@@ -0,0 +1 @@
1
+ require 'venmo/client'
@@ -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
@@ -0,0 +1,11 @@
1
+ module VenmoAPI
2
+ class Helper
3
+ VENMO_BASE_URL = 'https://api.venmo.com/v1/'
4
+ def self.recursive_symbolize_keys! hash
5
+ hash.symbolize_keys!
6
+ hash.values.select{|v| v.is_a? Hash}.each{|h| recursive_symbolize_keys!(h)}
7
+ return hash
8
+ end
9
+
10
+ end
11
+ end
@@ -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
@@ -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: []