levelup 0.9.4 → 0.9.5

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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +32 -305
  3. data/Gemfile.lock +1 -1
  4. data/README.md +131 -38
  5. data/levelup.gemspec +1 -1
  6. data/lib/levelup.rb +4 -0
  7. data/lib/levelup/api.rb +1 -2
  8. data/lib/levelup/configuration.rb +1 -1
  9. data/lib/levelup/endpoints/access_tokens.rb +7 -10
  10. data/lib/levelup/endpoints/app_locations.rb +4 -6
  11. data/lib/levelup/endpoints/app_users.rb +1 -7
  12. data/lib/levelup/endpoints/credit_cards.rb +3 -4
  13. data/lib/levelup/endpoints/location_credit.rb +6 -8
  14. data/lib/levelup/endpoints/location_merchant_funded_credit.rb +23 -0
  15. data/lib/levelup/endpoints/location_orders.rb +8 -14
  16. data/lib/levelup/endpoints/merchant_funded_credits.rb +4 -6
  17. data/lib/levelup/endpoints/merchant_locations.rb +8 -13
  18. data/lib/levelup/endpoints/merchant_orders.rb +6 -8
  19. data/lib/levelup/endpoints/orders.rb +3 -3
  20. data/lib/levelup/endpoints/permissions_requests.rb +1 -2
  21. data/lib/levelup/endpoints/qr_codes.rb +3 -4
  22. data/lib/levelup/endpoints/specific_app.rb +1 -2
  23. data/lib/levelup/endpoints/specific_location.rb +13 -8
  24. data/lib/levelup/endpoints/specific_merchant.rb +4 -5
  25. data/lib/levelup/endpoints/specific_order.rb +4 -8
  26. data/lib/levelup/endpoints/specific_permissions_request.rb +3 -5
  27. data/lib/levelup/endpoints/user_addresses.rb +6 -7
  28. data/lib/levelup/endpoints/user_orders.rb +2 -3
  29. data/lib/levelup/endpoints/users.rb +5 -0
  30. data/lib/levelup/requests/authenticate_merchant.rb +1 -2
  31. data/lib/levelup/requests/create_address.rb +3 -4
  32. data/lib/levelup/requests/create_card.rb +2 -3
  33. data/lib/levelup/requests/create_order.rb +1 -2
  34. data/lib/levelup/requests/create_user.rb +4 -13
  35. data/lib/levelup/requests/get_location_credit.rb +1 -2
  36. data/lib/levelup/requests/get_location_merchant_funded_credit.rb +16 -0
  37. data/lib/levelup/requests/get_order.rb +1 -2
  38. data/lib/levelup/requests/give_merchant_credit.rb +1 -2
  39. data/lib/levelup/requests/list_addresses.rb +3 -4
  40. data/lib/levelup/requests/list_app_locations.rb +1 -2
  41. data/lib/levelup/requests/list_locations.rb +2 -3
  42. data/lib/levelup/requests/list_orders.rb +2 -3
  43. data/lib/levelup/requests/list_user_orders.rb +3 -4
  44. data/lib/levelup/requests/show_permissions_request.rb +1 -2
  45. data/lib/levelup/responses/success_paginated.rb +1 -2
  46. data/lib/levelup/templates/app_authenticated.rb +1 -3
  47. data/lib/levelup/templates/merchant_and_user_authenticated.rb +4 -9
  48. data/lib/levelup/templates/merchant_authenticated.rb +2 -5
  49. data/lib/levelup/utils/payment_calculator.rb +83 -0
  50. data/spec/endpoints/access_tokens_spec.rb +2 -4
  51. data/spec/endpoints/app_users_spec.rb +6 -22
  52. data/spec/endpoints/location_credit_spec.rb +1 -2
  53. data/spec/endpoints/location_merchant_funded_credit_spec.rb +12 -0
  54. data/spec/endpoints/location_orders_spec.rb +3 -4
  55. data/spec/endpoints/merchant_funded_credits_spec.rb +1 -2
  56. data/spec/endpoints/merchant_locations_spec.rb +4 -4
  57. data/spec/endpoints/qr_codes_spec.rb +1 -2
  58. data/spec/endpoints/specific_order_spec.rb +3 -4
  59. data/spec/endpoints/specific_permissions_request_spec.rb +1 -2
  60. data/spec/endpoints/user_addresses_spec.rb +1 -2
  61. data/spec/endpoints/user_orders_spec.rb +1 -2
  62. data/spec/endpoints/users_spec.rb +22 -0
  63. data/spec/{data_objects/requests → requests}/authenticate_app_spec.rb +0 -0
  64. data/spec/{data_objects/requests → requests}/authenticate_merchant_spec.rb +0 -0
  65. data/spec/{data_objects/requests → requests}/create_order_spec.rb +0 -0
  66. data/spec/{data_objects/requests → requests}/get_order_spec.rb +0 -0
  67. data/spec/{data_objects/requests → requests}/list_locations_spec.rb +0 -0
  68. data/spec/{data_objects/requests → requests}/list_orders_spec.rb +0 -0
  69. data/spec/{data_objects/requests → requests}/refund_order_spec.rb +0 -0
  70. data/spec/{data_objects/requests → requests}/request_permissions_spec.rb +1 -2
  71. data/spec/{data_objects/responses → responses}/error_spec.rb +0 -0
  72. data/spec/{data_objects/responses → responses}/response_spec.rb +0 -0
  73. data/spec/{data_objects/responses → responses}/success_paginated_spec.rb +1 -2
  74. data/spec/utils/payment_calculator/payment_calculator_spec.rb +164 -0
  75. metadata +36 -26
@@ -1,18 +1,16 @@
1
1
  module Levelup
2
2
  module Endpoints
3
- # The endpoint holding all functions relating to managing merchant-funded
4
- # credit.
3
+ # The endpoint holding all functions relating to managing merchant-funded credit.
5
4
  class MerchantFundedCredits < Base
6
5
  def give(give_credit_request)
7
- request = build_request(give_credit_request,
8
- Requests::GiveMerchantCredit)
9
- request.send_to_api(:post, endpoint_path)
6
+ build_request(give_credit_request, Requests::GiveMerchantCredit).
7
+ send_to_api(:post, endpoint_path)
10
8
  end
11
9
 
12
10
  private
13
11
 
14
12
  def path
15
- "merchant_funded_credits"
13
+ 'merchant_funded_credits'
16
14
  end
17
15
  end
18
16
  end
@@ -1,28 +1,23 @@
1
1
  module Levelup
2
2
  module Endpoints
3
- # The endpoint holding all functions relating to a single merchant's
4
- # locations. This is a v14 endpoint and should not be expected to remain
5
- # functional indefinitely.
3
+ # The endpoint holding all functions relating to a single merchant's locations. This is a v14
4
+ # endpoint and should not be expected to remain functional indefinitely.
6
5
  class MerchantLocations < Base
7
6
  def initialize(merchant_id)
8
7
  @id = merchant_id
9
8
  end
10
9
 
11
- # Provides a list of locations controlled by this merchant. This list is
12
- # not paginated.
10
+ # Provides a list of locations controlled by this merchant. This list is not paginated.
13
11
  #
14
- # [merchant_auth_token]
15
- # An authorization token with permission to view
16
- # this merchant.
17
- def list(merchant_auth_token)
18
- request = Requests::ListLocations.new(
19
- merchant_access_token: merchant_auth_token)
20
- request.send_to_api(:get, endpoint_path(:v14))
12
+ # @param merchant_access_token [string] An access token for a user that manages this location.
13
+ def list(merchant_access_token)
14
+ Requests::ListLocations.new(merchant_access_token: merchant_access_token).
15
+ send_to_api(:get, endpoint_path(:v14))
21
16
  end
22
17
 
23
18
  private
24
19
 
25
- attr_reader :id
20
+ attr_accessor :id
26
21
 
27
22
  def path
28
23
  "merchants/#{id}/locations"
@@ -1,24 +1,22 @@
1
1
  module Levelup
2
2
  module Endpoints
3
3
  # The endpoint holding all functions relating to a single merchant's orders.
4
- # This is a v14 endpoint and should not be expected to remain functional
5
- # indefinitely.
4
+ # This is a v14 endpoint and should not be expected to remain functional indefinitely.
6
5
  class MerchantOrders < Base
7
6
  def initialize(merchant_id)
8
- @id = merchant_id
7
+ self.id = merchant_id
9
8
  end
10
9
 
11
10
  # Provides merchant-facing details about a specific order. For more
12
- # information about the parameters, see OrderDetailsRequest.
11
+ # information about the parameters, @see Requests::CreateOrderDetails.
13
12
  def details(uuid, merchant_access_token)
14
- request = Requests::CreateOrderDetails.new(
15
- merchant_access_token: merchant_access_token)
16
- request.send_to_api(:get, endpoint_path(:v14) + "/#{uuid}")
13
+ Requests::CreateOrderDetails.new(merchant_access_token: merchant_access_token).
14
+ send_to_api(:get, endpoint_path(:v14) + "/#{uuid}")
17
15
  end
18
16
 
19
17
  private
20
18
 
21
- attr_reader :id
19
+ attr_accessor :id
22
20
 
23
21
  def path
24
22
  "merchants/#{id}/orders"
@@ -3,10 +3,10 @@ module Levelup
3
3
  # The class holding all functions related to orders that do not specify a
4
4
  # specific order. For single-order functions, see SpecificOrder.
5
5
  class Orders < Base
6
- # Creates an order. See OrderRequest for more info about the parameters.
6
+ # Creates an order. See Requests::CreateOrder for more info about the parameters.
7
7
  def create(order_request)
8
- request = build_request(order_request, Requests::CreateOrder)
9
- request.send_to_api(:post, endpoint_path)
8
+ build_request(order_request, Requests::CreateOrder).
9
+ send_to_api(:post, endpoint_path)
10
10
  end
11
11
 
12
12
  private
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Endpoints
3
- # The endpoint holding all functions related to managing permissions
4
- # requests.
3
+ # The endpoint holding all functions related to managing permissions requests.
5
4
  class PermissionsRequests < Base
6
5
  def initialize(app_access_token)
7
6
  self.app_access_token = app_access_token
@@ -8,11 +8,10 @@ module Levelup
8
8
  self.tip_percent = options[:tip_percent] || 0
9
9
  end
10
10
 
11
- # Retrieves the specified user's QR code using parameters specified
12
- # in the endpoint.
11
+ # Retrieves the specified user's QR code using parameters specified in the endpoint.
13
12
  def get(user_access_token)
14
- request = Requests::GetQrCode.new(user_access_token: user_access_token)
15
- request.send_to_api(:get, endpoint_path)
13
+ Requests::GetQrCode.new(user_access_token: user_access_token).
14
+ send_to_api(:get, endpoint_path)
16
15
  end
17
16
 
18
17
  private
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Endpoints
3
- # The endpoint serving as a bucket for all functions related to a specific
4
- # app.
3
+ # The endpoint serving as a bucket for all functions related to a specific app.
5
4
  class SpecificApp < Base
6
5
  def initialize(id)
7
6
  self.id = id
@@ -1,25 +1,30 @@
1
1
  module Levelup
2
2
  module Endpoints
3
3
  # The endpoint holding all functions relating to a specific location.
4
- # This is a v14 endpoint and should not be expected to remain functional
5
- # indefinitely.
4
+ # This is a v14 endpoint and should not be expected to remain functional indefinitely.
6
5
  class SpecificLocation < Base
7
- attr_reader :id
6
+ attr_accessor :id
8
7
 
9
8
  def initialize(location_id)
10
- @id = location_id
11
- end
12
-
13
- def orders
14
- LocationOrders.new(id)
9
+ self.id = location_id
15
10
  end
16
11
 
17
12
  def credit
18
13
  LocationCredit.new(id)
19
14
  end
20
15
 
16
+ def merchant_funded_credit
17
+ LocationMerchantFundedCredit.new(id)
18
+ end
19
+
20
+ def orders
21
+ LocationOrders.new(id)
22
+ end
23
+
21
24
  private
22
25
 
26
+ attr_accessor :id
27
+
23
28
  def path
24
29
  "locations/#{id}"
25
30
  end
@@ -1,13 +1,10 @@
1
1
  module Levelup
2
2
  module Endpoints
3
3
  # The endpoint holding all functions relating to a single merchant. This is
4
- # a v14 endpoint and should not be expected to remain functional
5
- # indefinitely.
4
+ # a v14 endpoint and should not be expected to remain functional indefinitely.
6
5
  class SpecificMerchant < Base
7
- attr_reader :id
8
-
9
6
  def initialize(merchant_id)
10
- @id = merchant_id
7
+ self.id = merchant_id
11
8
  end
12
9
 
13
10
  def locations
@@ -20,6 +17,8 @@ module Levelup
20
17
 
21
18
  private
22
19
 
20
+ attr_accessor :id
21
+
23
22
  def path
24
23
  "merchants/#{id}"
25
24
  end
@@ -7,14 +7,10 @@ module Levelup
7
7
  end
8
8
 
9
9
  # Refunds the order specified by this endpoint.
10
- #
11
- # [merchant_auth_token]
12
- # A merchant access token with permissions to
13
- # refund orders made at the location where this order was placed.
14
- def refund(merchant_auth_token)
15
- request = Requests::RefundOrder.new(
16
- merchant_access_token: merchant_auth_token)
17
- request.send_to_api(:post, endpoint_path + '/refund')
10
+ # @param merchant_access_token [string] An access token for a user that manages this location.
11
+ def refund(merchant_access_token)
12
+ Requests::RefundOrder.new(merchant_access_token: merchant_access_token).
13
+ send_to_api(:post, endpoint_path + '/refund')
18
14
  end
19
15
 
20
16
  private
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Endpoints
3
- # The endpoint holding all functions related to accessing a specified
4
- # permissions request.
3
+ # The endpoint holding all functions related to accessing a specified permissions request.
5
4
  class SpecificPermissionsRequest < Base
6
5
  def initialize(request_id, app_access_token)
7
6
  self.app_access_token = app_access_token
@@ -9,9 +8,8 @@ module Levelup
9
8
  end
10
9
 
11
10
  def show(app_token = nil)
12
- request = Requests::ShowPermissionsRequest.
13
- new(app_access_token: app_access_token || app_token)
14
- request.send_to_api(:get, endpoint_path)
11
+ Requests::ShowPermissionsRequest.new(app_access_token: app_access_token || app_token).
12
+ send_to_api(:get, endpoint_path)
15
13
  end
16
14
 
17
15
  private
@@ -2,17 +2,16 @@ module Levelup
2
2
  module Endpoints
3
3
  # Endpoint holding all functions relating to user addresses.
4
4
  class UserAddresses < Base
5
- # Creates a specified user address. For more information on parameters,
6
- # see UserAddressRequest.
5
+ # Creates a specified user address. For more information on parameters, see
6
+ # UserAddressRequest.
7
7
  def create(user_address_request)
8
- request = build_request(user_address_request,
9
- Requests::CreateAddress)
10
- request.send_to_api(:post, endpoint_path)
8
+ build_request(user_address_request, Requests::CreateAddress).
9
+ send_to_api(:post, endpoint_path)
11
10
  end
12
11
 
13
12
  def list(user_access_token)
14
- request = Requests::ListAddresses(user_access_token: user_access_token)
15
- request.send_to_api(:get, endpoint_path)
13
+ Requests::ListAddresses(user_access_token: user_access_token).
14
+ send_to_api(:get, endpoint_path)
16
15
  end
17
16
 
18
17
  private
@@ -3,9 +3,8 @@ module Levelup
3
3
  # The endpoint holding all functions related to orders for a specified user.
4
4
  class UserOrders < Base
5
5
  def list(user_access_token)
6
- request = Requests::ListUserOrders.
7
- new(user_access_token: user_access_token)
8
- request.send_to_api(:get, endpoint_path)
6
+ Requests::ListUserOrders.new(user_access_token: user_access_token).
7
+ send_to_api(:get, endpoint_path)
9
8
  end
10
9
 
11
10
  private
@@ -2,6 +2,11 @@ module Levelup
2
2
  module Endpoints
3
3
  # The endpoint serving as a bucket for all user-related functions.
4
4
  class Users < Base
5
+ def get(user_access_token)
6
+ Requests::GetUser.new(user_access_token: user_access_token).
7
+ send_to_api(:get, endpoint_path)
8
+ end
9
+
5
10
  def orders
6
11
  UserOrders.new
7
12
  end
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to generate a merchant access
4
- # token.
3
+ # Represents a request to generate a merchant access token.
5
4
  class AuthenticateMerchant < Base
6
5
  # Your merchant's API key (accepts app API key as well)
7
6
  attr_accessor :api_key
@@ -1,8 +1,7 @@
1
- module Levelup
1
+ module Levelup
2
2
  module Requests
3
- # Represents a request to create an address for a
4
- # specific user. For information about its parameters, see UserAddressData
5
- # and UserAuthenticated.
3
+ # Represents a request to create an address for a specific user.
4
+ # For information about its parameters, see UserAddressData and UserAuthenticated.
6
5
  class CreateAddress < Base
7
6
  include Templates::UserAddressData
8
7
  include Templates::UserAuthenticated
@@ -1,8 +1,7 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to add the first credit card to a specified user
4
- # account. User access token must have the create_first_credit_card
5
- # permission.
3
+ # Represents a request to add the first credit card to a specified user account.
4
+ # User access token must have the create_first_credit_card permission.
6
5
  class CreateCard < Base
7
6
  include Templates::UserAuthenticated
8
7
 
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to create an order for the specified user at the
4
- # specified merchant.
3
+ # Represents a request to create an order for the specified user at the specified merchant.
5
4
  class CreateOrder < Base
6
5
  include Templates::MerchantAndUserAuthenticated
7
6
  # An array of Item objects (or hashes representing them) representing all
@@ -1,23 +1,14 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to create a new user with the specified list of
4
- # permissions.
3
+ # Represents a request to create a new user with the specified list of permissions.
5
4
  class CreateUser < Base
6
5
  include Templates::AppAuthenticated
7
- # An array of Item objects (or hashes representing them) representing all
8
- # items purchased by this order.
9
- attr_accessor :email
10
- attr_accessor :first_name
11
- attr_accessor :last_name
12
6
  attr_accessor :permission_keynames
7
+ attr_accessor :api_key
8
+ attr_accessor :user
13
9
 
14
10
  def body
15
- user_hash = {
16
- email: email,
17
- first_name: first_name,
18
- last_name: last_name
19
- }
20
- { user: user_hash, permission_keynames: permission_keynames }
11
+ { api_key: api_key, user: user, permission_keynames: permission_keynames }
21
12
  end
22
13
 
23
14
  def response_from_hash(hash)
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to access information about a
4
- # specific order under a merchant.
3
+ # Represents a request to access information about a specific order under a merchant.
5
4
  class GetLocationCredit < Base
6
5
  include Templates::UserAuthenticated
7
6
 
@@ -0,0 +1,16 @@
1
+ module Levelup
2
+ module Requests
3
+ # Represents a request to access information about a specific order under a merchant.
4
+ class GetLocationMerchantFundedCredit < Base
5
+ include Templates::MerchantAuthenticated
6
+
7
+ def auth_type
8
+ :merchant_v14
9
+ end
10
+
11
+ def response_from_hash(hash)
12
+ Responses::Success.new hash['merchant_funded_credit']
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to access information about a
4
- # specific order under a merchant.
3
+ # Represents a request to access information about a specific order under a merchant.
5
4
  class GetOrder < Base
6
5
  include Templates::MerchantAuthenticated
7
6
 
@@ -1,8 +1,7 @@
1
1
  module Levelup
2
2
  module Requests
3
3
  # Represents a request to grant merchant-funded credit to a user.
4
- # Merchant access token must have the give_merchant_funded_credit
5
- # permission.
4
+ # Merchant access token must have the give_merchant_funded_credit permission.
6
5
  class GiveMerchantCredit < Base
7
6
  include Templates::MerchantAuthenticated
8
7
  attr_accessor :email, :value_amount
@@ -1,8 +1,7 @@
1
- module Levelup
1
+ module Levelup
2
2
  module Requests
3
- # Represents a request to create an address for a
4
- # specific user. For information about its parameters, see UserAddressData
5
- # and UserAuthenticated.
3
+ # Represents a request to create an address for a specific user.
4
+ # For information about its parameters, see UserAddressData and UserAuthenticated.
6
5
  # User access token must have the manage_user_addresses permission.
7
6
  class ListAddresses < Base
8
7
  include Templates::UserAuthenticated
@@ -1,7 +1,6 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to list all locations under
4
- # a specified app. The list is paginated.
3
+ # Represents a request to list all locations under a specified app. The list is paginated.
5
4
  class ListAppLocations < Base
6
5
  def auth_type
7
6
  :none
@@ -1,8 +1,7 @@
1
1
  module Levelup
2
2
  module Requests
3
- # Represents a request to list all locations under
4
- # a specified merchant. This is a v14 endpoint and should not be expected to
5
- # remain functional indefinitely.
3
+ # Represents a request to list all locations under a specified merchant.
4
+ # This is a v14 endpoint and should not be expected to remain functional indefinitely.
6
5
  class ListLocations < Base
7
6
  include Templates::MerchantAuthenticated
8
7