square-ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +73 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/square.rb +206 -0
- data/lib/square/api_operations/create.rb +30 -0
- data/lib/square/api_operations/delete.rb +24 -0
- data/lib/square/api_operations/list.rb +21 -0
- data/lib/square/api_operations/retrieve.rb +21 -0
- data/lib/square/api_operations/update.rb +25 -0
- data/lib/square/api_resource.rb +55 -0
- data/lib/square/bank_accounts.rb +10 -0
- data/lib/square/category.rb +12 -0
- data/lib/square/data_type.rb +7 -0
- data/lib/square/data_types/bank_account.rb +32 -0
- data/lib/square/data_types/category.rb +12 -0
- data/lib/square/data_types/coordinates.rb +12 -0
- data/lib/square/data_types/device.rb +12 -0
- data/lib/square/data_types/discount.rb +36 -0
- data/lib/square/data_types/fee.rb +39 -0
- data/lib/square/data_types/global_address.rb +67 -0
- data/lib/square/data_types/inventory_entry.rb +12 -0
- data/lib/square/data_types/item.rb +79 -0
- data/lib/square/data_types/item_image.rb +12 -0
- data/lib/square/data_types/item_variation.rb +49 -0
- data/lib/square/data_types/merchant.rb +61 -0
- data/lib/square/data_types/merchant_location_details.rb +11 -0
- data/lib/square/data_types/modifier_list.rb +19 -0
- data/lib/square/data_types/modifier_option.rb +30 -0
- data/lib/square/data_types/money.rb +40 -0
- data/lib/square/data_types/payment.rb +87 -0
- data/lib/square/data_types/payment_discount.rb +17 -0
- data/lib/square/data_types/payment_item_detail.rb +18 -0
- data/lib/square/data_types/payment_itemization.rb +53 -0
- data/lib/square/data_types/payment_modifier.rb +16 -0
- data/lib/square/data_types/payment_tax.rb +23 -0
- data/lib/square/data_types/phone_number.rb +13 -0
- data/lib/square/data_types/refund.rb +31 -0
- data/lib/square/data_types/settlement.rb +28 -0
- data/lib/square/data_types/settlement_entry.rb +21 -0
- data/lib/square/data_types/tender.rb +50 -0
- data/lib/square/discount.rb +12 -0
- data/lib/square/fee.rb +49 -0
- data/lib/square/inventory.rb +26 -0
- data/lib/square/item.rb +40 -0
- data/lib/square/list_response.rb +79 -0
- data/lib/square/merchant.rb +13 -0
- data/lib/square/payment.rb +10 -0
- data/lib/square/refund.rb +10 -0
- data/lib/square/settlement.rb +10 -0
- data/lib/square/variation.rb +12 -0
- data/lib/square/version.rb +3 -0
- data/lib/square/webhook.rb +10 -0
- data/square-ruby.gemspec +31 -0
- metadata +219 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module Square
|
2
|
+
module DataTypes
|
3
|
+
# https://docs.connect.squareup.com/api/connect/v1/#datatype-phonenumber
|
4
|
+
class PhoneNumber < Square::DataType
|
5
|
+
# The phone number's international calling code. For US phone numbers,
|
6
|
+
# this value is +1.
|
7
|
+
property :calling_code
|
8
|
+
|
9
|
+
# The phone number.
|
10
|
+
property :number
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Square
|
2
|
+
module DataTypes
|
3
|
+
# https://docs.connect.squareup.com/api/connect/v1/#datatype-refund
|
4
|
+
class Refund < DataType
|
5
|
+
# The type of refund (FULL or PARTIAL).
|
6
|
+
property :type # Refund.Type
|
7
|
+
|
8
|
+
# The merchant-specified reason for the refund.
|
9
|
+
property :reason
|
10
|
+
|
11
|
+
# The amount of money refunded. This amount is always negative.
|
12
|
+
property :refunded_money, coerce: Square::DataTypes::Money
|
13
|
+
|
14
|
+
# The time when the merchant initiated the refund for Square to process,
|
15
|
+
# in ISO 8601 format.
|
16
|
+
property :created_at
|
17
|
+
|
18
|
+
# The time when Square processed the refund on behalf of the merchant,
|
19
|
+
# in ISO 8601 format.
|
20
|
+
property :processed_at
|
21
|
+
|
22
|
+
# The Square-issued ID of the payment the refund is applied to.
|
23
|
+
property :payment_id
|
24
|
+
|
25
|
+
# undocumented
|
26
|
+
property :merchant_id
|
27
|
+
property :refunded_processing_fee_money
|
28
|
+
property :refunded_additive_tax_money
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Square
|
2
|
+
module DataTypes
|
3
|
+
# https://docs.connect.squareup.com/api/connect/v1/#datatype-settlement
|
4
|
+
class Settlement < Square::DataType
|
5
|
+
# The settlement's unique identifier.
|
6
|
+
property :id
|
7
|
+
|
8
|
+
# The settlement's current status.
|
9
|
+
property :status # Settlement.Status
|
10
|
+
|
11
|
+
# The time when the settlement was submitted for deposit or withdrawal,
|
12
|
+
# in ISO 8601 format.
|
13
|
+
property :initiated_at
|
14
|
+
|
15
|
+
# The Square-issued unique identifier for the bank account associated
|
16
|
+
# with the settlement.
|
17
|
+
property :bank_account_id
|
18
|
+
|
19
|
+
# The amount of money involved in the settlement. A positive amount
|
20
|
+
# indicates a deposit, and a negative amount indicates a withdrawal.
|
21
|
+
# This amount is never zero.
|
22
|
+
property :total_money, coerce: Square::DataTypes::Money
|
23
|
+
|
24
|
+
# The entries included in this settlement.
|
25
|
+
property :entries, coerce: Array[Square::DataTypes::SettlementEntry]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Square
|
2
|
+
module DataTypes
|
3
|
+
# https://docs.connect.squareup.com/api/connect/v1/#datatype-settlemententry
|
4
|
+
class SettlementEntry < Square::DataType
|
5
|
+
# The type of activity this entry represents.
|
6
|
+
property :type # SettlementEntry.Type
|
7
|
+
|
8
|
+
# The payment associated with the settlement entry, if any.
|
9
|
+
property :payment_id
|
10
|
+
|
11
|
+
# The total amount of money this entry contributes to the total
|
12
|
+
# settlement amount.
|
13
|
+
property :amount_money, coerce: Square::DataTypes::Money
|
14
|
+
|
15
|
+
# The amount of all Square fees associated with this settlement entry.
|
16
|
+
# This value is always negative or zero.
|
17
|
+
# This amount has already been applied to amount_money.
|
18
|
+
property :fee_money, coerce: Square::DataTypes::Money
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Square
|
2
|
+
module DataTypes
|
3
|
+
class Tender < DataType
|
4
|
+
# The tender's unique ID.
|
5
|
+
property :id
|
6
|
+
|
7
|
+
# The type of tender.
|
8
|
+
property :type # Tender.Type
|
9
|
+
|
10
|
+
# A human-readable description of the tender.
|
11
|
+
property :name
|
12
|
+
|
13
|
+
# The ID of the employee that processed the tender.
|
14
|
+
# This field is included only if the associated merchant had employee
|
15
|
+
# management features enabled at the time the tender was processed.
|
16
|
+
property :employee_id
|
17
|
+
|
18
|
+
# The URL of the receipt for the tender.
|
19
|
+
property :receipt_url
|
20
|
+
|
21
|
+
# The brand of credit card provided.
|
22
|
+
# Only present if the tender's type is CREDIT_CARD.
|
23
|
+
property :card_brand # Tender.CardBrand
|
24
|
+
|
25
|
+
# The last four digits of the provided credit card's account number.
|
26
|
+
# Only present if the tender's type is CREDIT_CARD.
|
27
|
+
property :pan_suffix
|
28
|
+
|
29
|
+
# The method with which the tender was entered.
|
30
|
+
property :entry_method # Tender.EntryMethod
|
31
|
+
|
32
|
+
# Notes entered by the merchant about the tender at the time of payment,
|
33
|
+
# if any. Typically only present for tender with the type OTHER.
|
34
|
+
property :payment_note
|
35
|
+
|
36
|
+
# The total amount of money provided in this form of tender.
|
37
|
+
property :total_money, coerce: Square::DataTypes::Money
|
38
|
+
|
39
|
+
# The amount of total_money applied to the payment.
|
40
|
+
property :tendered_money, coerce: Square::DataTypes::Money
|
41
|
+
|
42
|
+
# The amount of total_money returned to the buyer as change.
|
43
|
+
property :change_back_money, coerce: Square::DataTypes::Money
|
44
|
+
|
45
|
+
# The total of all refunds applied to this tender.
|
46
|
+
# This amount is always negative or zero.
|
47
|
+
property :refunded_money, coerce: Square::DataTypes::Money
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-discounts
|
3
|
+
class Discount < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Create
|
6
|
+
extend Square::APIOperations::Update
|
7
|
+
extend Square::APIOperations::Delete
|
8
|
+
|
9
|
+
endpoint_base 'discounts'
|
10
|
+
data_type Square::DataTypes::Discount
|
11
|
+
end
|
12
|
+
end
|
data/lib/square/fee.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-fees
|
3
|
+
class Fee < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Retrieve
|
6
|
+
extend Square::APIOperations::Create
|
7
|
+
extend Square::APIOperations::Update
|
8
|
+
extend Square::APIOperations::Delete
|
9
|
+
|
10
|
+
endpoint_base 'fees'
|
11
|
+
data_type Square::DataTypes::Fee
|
12
|
+
|
13
|
+
# Adjust inventory for a varation.
|
14
|
+
#
|
15
|
+
# @param item_id [String] Item ID.
|
16
|
+
# @param fee_id [String] Fee ID.
|
17
|
+
# @param params [Hash] Params hash. Optional.
|
18
|
+
#
|
19
|
+
# @return [Square::DataType]
|
20
|
+
def self.apply(item_id, fee_id, params = {})
|
21
|
+
response = Square.make_request(
|
22
|
+
method: 'PUT',
|
23
|
+
endpoint: "items/#{item_id}/fees/#{fee_id}",
|
24
|
+
params: params
|
25
|
+
)
|
26
|
+
|
27
|
+
response = Square.parse_response(response)
|
28
|
+
Square::DataTypes::Item.new(response)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Adjust inventory for a varation.
|
32
|
+
#
|
33
|
+
# @param item_id [String] Item ID.
|
34
|
+
# @param fee_id [String] Fee ID.
|
35
|
+
# @param params [Hash] Params hash. Optional.
|
36
|
+
#
|
37
|
+
# @return [Square::DataType]
|
38
|
+
def self.remove(item_id, fee_id, params = {})
|
39
|
+
response = Square.make_request(
|
40
|
+
method: 'DELETE',
|
41
|
+
endpoint: "items/#{item_id}/fees/#{fee_id}",
|
42
|
+
params: params
|
43
|
+
)
|
44
|
+
|
45
|
+
response = Square.parse_response(response)
|
46
|
+
Square::DataTypes::Item.new(response)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-inventory
|
3
|
+
class Inventory < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
|
6
|
+
endpoint_base 'inventory'
|
7
|
+
data_type Square::DataTypes::InventoryEntry
|
8
|
+
|
9
|
+
# Adjust inventory for a varation.
|
10
|
+
#
|
11
|
+
# @param variation_id [String] Variation ID.
|
12
|
+
# @param params [Hash] Params hash. Optional.
|
13
|
+
#
|
14
|
+
# @return [Square::DataType]
|
15
|
+
def self.adjust(variation_id, params = {})
|
16
|
+
response = Square.make_request(
|
17
|
+
method: 'POST',
|
18
|
+
endpoint: self.generate_endpoint_url(variation_id),
|
19
|
+
payload: params
|
20
|
+
)
|
21
|
+
|
22
|
+
response = Square.parse_response(response)
|
23
|
+
@data_type.new(response)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/square/item.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-itemmanagement
|
3
|
+
class Item < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Retrieve
|
6
|
+
extend Square::APIOperations::Create
|
7
|
+
extend Square::APIOperations::Update
|
8
|
+
extend Square::APIOperations::Delete
|
9
|
+
|
10
|
+
endpoint_base 'items'
|
11
|
+
data_type Square::DataTypes::Item
|
12
|
+
|
13
|
+
# Upload an image for an item.
|
14
|
+
# https://docs.connect.squareup.com/api/connect/v1/#post-image
|
15
|
+
#
|
16
|
+
# @param image_url [String] Image URL.
|
17
|
+
# @param item_id [String] Square item id.
|
18
|
+
#
|
19
|
+
# @return [Net::HTTPResponse] API response.
|
20
|
+
def self.upload_image(image_url, item_id)
|
21
|
+
image = open(image_url)
|
22
|
+
filename = File.basename(image_url)
|
23
|
+
|
24
|
+
uri = URI.parse("#{Square.api_host}/v1/me/#{instance_variable_get('@endpoint_base')}/#{item_id}/image")
|
25
|
+
connection = Net::HTTP.new(uri.host, uri.port)
|
26
|
+
connection.use_ssl = (uri.scheme == 'https')
|
27
|
+
|
28
|
+
# Making this request here because RestClient doesn't do multipart
|
29
|
+
# requests the way Square wants it.
|
30
|
+
request = Net::HTTP::Post::Multipart.new(
|
31
|
+
uri.path,
|
32
|
+
image_data: UploadIO.new(image, 'image/jpeg', filename)
|
33
|
+
)
|
34
|
+
|
35
|
+
# Copy the auth header.
|
36
|
+
request['Authorization'] = Square.request_headers(Square.access_token)[:authorization]
|
37
|
+
connection.request(request)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Square
|
2
|
+
class ListResponse
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_accessor :response
|
6
|
+
|
7
|
+
# RegExp used for parsing Link headers when the API paginates data. Don't
|
8
|
+
# care about rel attributes right now because this is the only thing this is
|
9
|
+
# used for.
|
10
|
+
LINK_REGEXP = /^<([ -~]+)>;/i
|
11
|
+
|
12
|
+
# Initialize.
|
13
|
+
#
|
14
|
+
# @param response [RestClient::Response] Raw resonse object.
|
15
|
+
# @param data_type [Square::DataType] Data type to new up records.
|
16
|
+
#
|
17
|
+
# @return [ListResponse]
|
18
|
+
def initialize(response, data_type)
|
19
|
+
@response = response
|
20
|
+
@data_type = data_type
|
21
|
+
@values = {}
|
22
|
+
parse_response(@response)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Each.
|
26
|
+
#
|
27
|
+
# @param block [Block]
|
28
|
+
def each(&block)
|
29
|
+
@values.each(&block)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get more records.
|
33
|
+
#
|
34
|
+
# @return [Array] parsed records.
|
35
|
+
def more
|
36
|
+
if !has_more?
|
37
|
+
return nil
|
38
|
+
end
|
39
|
+
|
40
|
+
@response = Square.make_request(url: @next_link)
|
41
|
+
self.class.new(@response, @data_type)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Check if there are more pages.
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
def has_more?
|
48
|
+
!@next_link.nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
# Pass through methods to the original response object.
|
52
|
+
def method_missing(name, *args, &block)
|
53
|
+
@response.send(name, *args, &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# Parse a response.
|
59
|
+
#
|
60
|
+
# @return [Array] parsed records.
|
61
|
+
def parse_response(response)
|
62
|
+
# Detect a Link header.
|
63
|
+
if !response.headers[:link].nil?
|
64
|
+
match = LINK_REGEXP.match(response.headers[:link])
|
65
|
+
|
66
|
+
if match.nil?
|
67
|
+
@next_link = nil
|
68
|
+
else
|
69
|
+
@next_link = match.captures[0]
|
70
|
+
end
|
71
|
+
else
|
72
|
+
@next_link = nil
|
73
|
+
end
|
74
|
+
|
75
|
+
parsed_response = JSON.parse(response)
|
76
|
+
@values = parsed_response.map {|record| @data_type.new(record)}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-merchant
|
3
|
+
class Merchant < APIResource
|
4
|
+
extend Square::APIOperations::Retrieve
|
5
|
+
|
6
|
+
data_type Square::DataTypes::Merchant
|
7
|
+
|
8
|
+
def self.retrieve(merchant_id = nil)
|
9
|
+
response = Square.get(merchant_id)
|
10
|
+
@data_type.new(response)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-payments
|
3
|
+
class Payment < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Retrieve
|
6
|
+
|
7
|
+
endpoint_base 'payments'
|
8
|
+
data_type Square::DataTypes::Payment
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-refunds
|
3
|
+
class Refund < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Create
|
6
|
+
|
7
|
+
endpoint_base 'refunds'
|
8
|
+
data_type Square::DataTypes::Refund
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-settlements
|
3
|
+
class Settlement < APIResource
|
4
|
+
extend Square::APIOperations::List
|
5
|
+
extend Square::APIOperations::Retrieve
|
6
|
+
|
7
|
+
endpoint_base 'settlements'
|
8
|
+
data_type Square::DataTypes::Settlement
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Square
|
2
|
+
# https://docs.connect.squareup.com/api/connect/v1/#navsection-variations
|
3
|
+
class Variation < APIResource
|
4
|
+
extend Square::APIOperations::Create
|
5
|
+
extend Square::APIOperations::Update
|
6
|
+
extend Square::APIOperations::Delete
|
7
|
+
|
8
|
+
endpoint_base 'variations'
|
9
|
+
nested_under 'items'
|
10
|
+
data_type Square::DataTypes::ItemVariation
|
11
|
+
end
|
12
|
+
end
|
data/square-ruby.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'square/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'square-ruby'
|
8
|
+
spec.version = Square::VERSION
|
9
|
+
spec.authors = ['Brian Wm. McAllister', 'David Michael', 'Brianne King']
|
10
|
+
spec.email = ['brian.mcallister@giantmachines.com', 'david.michael@giantmachines.com', 'brianne.king@giantmachines.com']
|
11
|
+
|
12
|
+
spec.summary = 'Square Connect API library'
|
13
|
+
spec.description = 'Square Connect API'
|
14
|
+
spec.homepage = 'https://github.com/giantmachines/square-ruby'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
# spec.bindir = "exe"
|
19
|
+
# spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.3'
|
25
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
|
26
|
+
spec.add_development_dependency 'awesome_print', '~> 1.6'
|
27
|
+
|
28
|
+
spec.add_runtime_dependency 'hashie', '~> 3.4'
|
29
|
+
spec.add_runtime_dependency 'rest-client', '~> 1.8'
|
30
|
+
spec.add_runtime_dependency 'multipart-post', '~> 2.0'
|
31
|
+
end
|