splitwise 0.0.1
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/splitwise.rb +15 -0
- data/lib/splitwise/client.rb +79 -0
- data/lib/splitwise/constants.rb +5 -0
- data/lib/splitwise/errors/splitwise_errors.rb +66 -0
- data/lib/splitwise/expenses.rb +38 -0
- data/lib/splitwise/friends.rb +37 -0
- data/lib/splitwise/groups.rb +43 -0
- data/lib/splitwise/notifications.rb +18 -0
- data/lib/splitwise/users.rb +28 -0
- data/lib/splitwise/version.rb +3 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d6ec3e1d1a2bf6f6ffbb59f132b36f21c037b3a4
|
4
|
+
data.tar.gz: 243a6efb3f9fb904468f0a9a5f913264cf821b1d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8dfe402b6a7fc9b255316001d8d16fa918160ca9736dc4aa8cca2feeacffd5f2fd33d280ebf97416042b4f2de6eb8910d3211868c878f6cc91d9a29be0b0a73
|
7
|
+
data.tar.gz: 864a022760c6fb8a24d163e5cfecc36fbf80fbb47541a3e212d06b66a2fc622176b2de9e6e066d1b927a064393b59348302a678aa2570217df630c8a3c0deefc
|
data/lib/splitwise.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "splitwise/version"
|
2
|
+
require "splitwise/constants"
|
3
|
+
require "splitwise/client"
|
4
|
+
require "splitwise/users"
|
5
|
+
require "splitwise/friends"
|
6
|
+
require "splitwise/groups"
|
7
|
+
require "splitwise/expenses"
|
8
|
+
require "splitwise/notifications"
|
9
|
+
|
10
|
+
|
11
|
+
module Splitwise
|
12
|
+
class << self
|
13
|
+
attr_accessor :access_token
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "uri"
|
3
|
+
|
4
|
+
module Splitwise
|
5
|
+
class Request
|
6
|
+
attr_accessor :uri
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@uri = Splitwise::BASE_URL+ "/" + Splitwise::API_VERSION + "/"
|
10
|
+
@accessor_token = Splitwise.access_token
|
11
|
+
end
|
12
|
+
|
13
|
+
def fetch(params)
|
14
|
+
url = get_path(params)
|
15
|
+
if @accessor_token.nil?
|
16
|
+
url = URI.parse(url)
|
17
|
+
response = request(:get, url)
|
18
|
+
else
|
19
|
+
response = request(:get, url)
|
20
|
+
end
|
21
|
+
parse_response(response)
|
22
|
+
response.body
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(params, data)
|
26
|
+
url = get_path(params)
|
27
|
+
response = request(:post, url, data)
|
28
|
+
parse_response(response)
|
29
|
+
response.body
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_path(params)
|
33
|
+
url = @uri + params
|
34
|
+
end
|
35
|
+
|
36
|
+
def request(req_method, uri, post_data=nil)
|
37
|
+
if @accessor_token.nil?
|
38
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
39
|
+
http.use_ssl = (uri.scheme == "https")
|
40
|
+
if http.use_ssl?
|
41
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
42
|
+
else
|
43
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
44
|
+
end
|
45
|
+
if req_method == :get
|
46
|
+
request = Net::HTTP::Get.new(uri)
|
47
|
+
end
|
48
|
+
response = http.request(request)
|
49
|
+
else
|
50
|
+
if req_method == :get
|
51
|
+
response = @accessor_token.get(uri)
|
52
|
+
else
|
53
|
+
header = {'Content-Type' => 'text/json'}
|
54
|
+
response = @accessor_token.post(uri, post_data, header)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
response
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_response(response)
|
61
|
+
response_code = response.code.to_i
|
62
|
+
if valid_response_code?(response_code)
|
63
|
+
begin
|
64
|
+
JSON.parse(response.body)
|
65
|
+
rescue JSON::ParserError => e
|
66
|
+
raise Splitwise::InvalidJSONResponse(response.body)
|
67
|
+
end
|
68
|
+
else
|
69
|
+
error_class = Splitwise::Error.codes[response_code] || Splitwise::UnknownError
|
70
|
+
raise error_class.new(response.body, response_code)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def valid_response_code?(code)
|
75
|
+
[200, 201].include?(code)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Splitwise
|
2
|
+
class Error < StandardError
|
3
|
+
|
4
|
+
attr_reader :code
|
5
|
+
|
6
|
+
def self.codes
|
7
|
+
{
|
8
|
+
400 => Splitwise::InvalidParameters,
|
9
|
+
401 => Splitwise::InvalidAPIKey,
|
10
|
+
403 => Splitwise::AccessForbidden,
|
11
|
+
404 => Splitwise::ResourceNotFound,
|
12
|
+
405 => Splitwise::MethodNotAllowed,
|
13
|
+
406 => Splitwise::FormatNotAcceptable,
|
14
|
+
410 => Splitwise::ResourceRemovedFromServer,
|
15
|
+
429 => Splitwise::RateLimitExceeded,
|
16
|
+
500 => Splitwise::InternalServerError,
|
17
|
+
503 => Splitwise::ServiceTemporarilyUnavailable
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.initialize(message, code=nil)
|
22
|
+
@code = code
|
23
|
+
super(message)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
# Raised when - Missing or invalid parameters in API call
|
29
|
+
class InvalidParameters < Error; end
|
30
|
+
|
31
|
+
# Raised when - Missing or invalid API key
|
32
|
+
class InvalidAPIKey < Error; end
|
33
|
+
|
34
|
+
# Raised when - You don't have any free credits left
|
35
|
+
class NoFreeCreditsLeft < Error; end
|
36
|
+
|
37
|
+
# Raised when - You don’t have permission to access the resource
|
38
|
+
class AccessForbidden < Error; end
|
39
|
+
|
40
|
+
# Raised when - The resource does not exist
|
41
|
+
class ResourceNotFound < Error; end
|
42
|
+
|
43
|
+
# Raised when - You tried to access a resource with an invalid method
|
44
|
+
class MethodNotAllowed < Error; end
|
45
|
+
|
46
|
+
# Raised when - You requested a format that isn’t json
|
47
|
+
class FormatNotAcceptable < Error; end
|
48
|
+
|
49
|
+
# Raised when - The requested resource has been removed from our servers
|
50
|
+
class ResourceRemovedFromServer < Error; end
|
51
|
+
|
52
|
+
# Raised when - You have hit the rate limit for your account
|
53
|
+
class RateLimitExceeded < Error; end
|
54
|
+
|
55
|
+
# Raised when - There was an error on the server and we have been notified. Try again later.
|
56
|
+
class InternalServerError < Error; end
|
57
|
+
|
58
|
+
# Raised when - We are temporarily offline for maintenance. Please try again later.
|
59
|
+
class ServiceTemporarilyUnavailable < Error; end
|
60
|
+
|
61
|
+
# Raised when - We get an unknown response code from the API
|
62
|
+
class UnknownError < Error; end
|
63
|
+
|
64
|
+
# Raised when - We get an invalid JSON in response from API
|
65
|
+
class InvalidJSONResponse < Error; end
|
66
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "splitwise/client"
|
2
|
+
|
3
|
+
module Splitwise
|
4
|
+
class Expenses
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def request
|
8
|
+
Splitwise::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def list_all_expenses
|
12
|
+
params = "get_expenses"
|
13
|
+
request.fetch(params, accessor_token)
|
14
|
+
end
|
15
|
+
|
16
|
+
def expense_info(id)
|
17
|
+
params = "get_expense/" + id
|
18
|
+
request.fetch(params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(data)
|
22
|
+
params = "create_expense"
|
23
|
+
request.update(params, data)
|
24
|
+
end
|
25
|
+
|
26
|
+
def update(id, data)
|
27
|
+
params = "update_expense/" + id
|
28
|
+
request.update(params, data)
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(id)
|
32
|
+
params = "delete_expense/" + id
|
33
|
+
request.update(params, data)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "splitwise/client"
|
2
|
+
|
3
|
+
module Splitwise
|
4
|
+
class Friends
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def request
|
8
|
+
Splitwise::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def list_friends
|
12
|
+
params = "get_friends"
|
13
|
+
request.fetch(params)
|
14
|
+
end
|
15
|
+
|
16
|
+
def friend_info(id)
|
17
|
+
params = "get_friend/" + id
|
18
|
+
request.fetch(params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(data)
|
22
|
+
params = "create_friend"
|
23
|
+
request.update(params, data)
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_friends
|
27
|
+
# to do
|
28
|
+
end
|
29
|
+
|
30
|
+
def unfriend(id)
|
31
|
+
params = "delete_friend/" + id
|
32
|
+
request.update(params, nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "splitwise/client"
|
2
|
+
|
3
|
+
module Splitwise
|
4
|
+
class Groups
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def request
|
8
|
+
Splitwise::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def list_groups
|
12
|
+
params = "get_groups"
|
13
|
+
request.fetch(params, )
|
14
|
+
end
|
15
|
+
|
16
|
+
def group_info(id)
|
17
|
+
params = "get_group/" + id
|
18
|
+
request.fetch(params, )
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(data)
|
22
|
+
params = "create_group"
|
23
|
+
request.update(params, data)
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete(id)
|
27
|
+
params = "delete_group/" + id
|
28
|
+
request.update(params, nil)
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_user(data)
|
32
|
+
params = "add_user_to_group"
|
33
|
+
request.update(params, data)
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_user(data)
|
37
|
+
params = "remove_user_from_group"
|
38
|
+
request.update(params, data)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "splitwise/client"
|
2
|
+
|
3
|
+
module Splitwise
|
4
|
+
class Notifications
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def request
|
8
|
+
Splitwise::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_notifications
|
12
|
+
params = "get_notifications"
|
13
|
+
request.fetch(params)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "splitwise/client"
|
2
|
+
|
3
|
+
module Splitwise
|
4
|
+
class Users
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def request
|
8
|
+
Splitwise::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_current_user
|
12
|
+
params = "get_current_user"
|
13
|
+
request.fetch(params)
|
14
|
+
end
|
15
|
+
|
16
|
+
def user_info(id)
|
17
|
+
params = "get_user/" + id
|
18
|
+
request.fetch(params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_user(id, data)
|
22
|
+
params = "update_user/" + id
|
23
|
+
request.update(params, data)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: splitwise
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Divyum Rastogi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Ruby wrapper around Splitwise API. Refer http://dev.splitwise.com/ for
|
42
|
+
more information.
|
43
|
+
email:
|
44
|
+
- divyumrastogi@gmail.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- lib/splitwise.rb
|
50
|
+
- lib/splitwise/client.rb
|
51
|
+
- lib/splitwise/constants.rb
|
52
|
+
- lib/splitwise/errors/splitwise_errors.rb
|
53
|
+
- lib/splitwise/expenses.rb
|
54
|
+
- lib/splitwise/friends.rb
|
55
|
+
- lib/splitwise/groups.rb
|
56
|
+
- lib/splitwise/notifications.rb
|
57
|
+
- lib/splitwise/users.rb
|
58
|
+
- lib/splitwise/version.rb
|
59
|
+
homepage: ''
|
60
|
+
licenses:
|
61
|
+
- MIT
|
62
|
+
metadata: {}
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
requirements: []
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 2.2.2
|
80
|
+
signing_key:
|
81
|
+
specification_version: 4
|
82
|
+
summary: Ruby gem for using Splitwise API
|
83
|
+
test_files: []
|