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.
@@ -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
@@ -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,5 @@
1
+ # Version and other constants are defined here
2
+ module Splitwise
3
+ BASE_URL = "https://secure.splitwise.com/api"
4
+ API_VERSION = "v3.0"
5
+ 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
@@ -0,0 +1,3 @@
1
+ module Splitwise
2
+ VERSION = "0.0.1"
3
+ 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: []