table_check_api 0.1.0
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/README.md +128 -0
- data/Rakefile +10 -0
- data/lib/generators/table_check_api/install_generator.rb +17 -0
- data/lib/generators/templates/table_check_api.rb +11 -0
- data/lib/table_check_api/configuration.rb +27 -0
- data/lib/table_check_api/pos/v1/base_request.rb +55 -0
- data/lib/table_check_api/pos/v1/base_response.rb +42 -0
- data/lib/table_check_api/pos/v1/pos_journals.rb +188 -0
- data/lib/table_check_api/pos/v1/shop.rb +30 -0
- data/lib/table_check_api/pos/v1/table.rb +64 -0
- data/lib/table_check_api/version.rb +3 -0
- data/lib/table_check_api.rb +59 -0
- metadata +103 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 38c84286de9979b1d2cb6defe416b239228bf5eb29a0a279376280f89eee5798
|
|
4
|
+
data.tar.gz: 99f0b7df14de21168415eb64d3ac543ee15a561aa742d1adb18d04613e208b74
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 455c8c9f0b17450edc7cabda07a6cc47811c7a6997be484ecf12438d3d119153d819222ab507f949c8a89ad7a935fed7d337fdf1ecf1efb9a69fe27149c29c0f
|
|
7
|
+
data.tar.gz: 224a77ba6fcf739adedc680e11247a3b27d9b766bd1c2fffa4474427868a3701250496c8897f9b20e12a2ef328202b39a5ed947bd78b52597277bf0a34f975e8
|
data/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# TableCheck API Ruby Gem
|
|
2
|
+
|
|
3
|
+
[](https://github.com/Eresto-Development-Team/table_check_api/actions/workflows/test.yml)
|
|
4
|
+
|
|
5
|
+
A Ruby wrapper for the TableCheck POS v1 API.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Add this line to your application's Gemfile:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
gem 'table_check_api'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
And then execute:
|
|
16
|
+
|
|
17
|
+
$ bundle install
|
|
18
|
+
|
|
19
|
+
## Configuration
|
|
20
|
+
|
|
21
|
+
Run the generator to create the initializer:
|
|
22
|
+
|
|
23
|
+
$ rails generate table_check_api:install
|
|
24
|
+
|
|
25
|
+
Configure it in `config/initializers/table_check_api.rb`:
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
TableCheckApi.configure do |config|
|
|
29
|
+
config.base_url = 'https://api.tablecheck.com/api'
|
|
30
|
+
config.key = 'your_api_key_here'
|
|
31
|
+
end
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
### List shops
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
response = TableCheckApi::Pos::V1::Shop.list
|
|
40
|
+
shops = response.shops
|
|
41
|
+
puts shops.first['id']
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### List tables for a shop
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
response = TableCheckApi::Pos::V1::Table.list('shop_123')
|
|
48
|
+
tables = response.tables
|
|
49
|
+
puts tables.first['name']
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Get table status
|
|
53
|
+
|
|
54
|
+
```ruby
|
|
55
|
+
request = TableCheckApi::Pos::V1::Table::StatusRequest.new(
|
|
56
|
+
table_id: 'ae5355ca1fd337ed5d6893e2',
|
|
57
|
+
time: '2020-01-29T19:00:00Z'
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
response = TableCheckApi::Pos::V1::Table.status('shop_123', request)
|
|
61
|
+
status = response.table_status
|
|
62
|
+
puts status['status']
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Create POS journal
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
request = TableCheckApi::Pos::V1::PosJournals::CreateRequest.new(
|
|
69
|
+
batch_date: '2020-01-01',
|
|
70
|
+
country: 'JP',
|
|
71
|
+
currency: 'JPY',
|
|
72
|
+
receipt_num: 'string',
|
|
73
|
+
pos_orders: [
|
|
74
|
+
{
|
|
75
|
+
id: 'order_1',
|
|
76
|
+
menu_category_name: 'Appetizer',
|
|
77
|
+
menu_item_name: 'Chicken Soup',
|
|
78
|
+
qty: 1,
|
|
79
|
+
unit_price: '1000'
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
response = TableCheckApi::Pos::V1::PosJournals.create('shop_123', request)
|
|
85
|
+
pos_journal = response.pos_journal
|
|
86
|
+
puts pos_journal['id']
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Update POS journal
|
|
90
|
+
|
|
91
|
+
```ruby
|
|
92
|
+
request = TableCheckApi::Pos::V1::PosJournals::UpdateRequest.new(
|
|
93
|
+
receipt_num: 'string',
|
|
94
|
+
pos_payments: [
|
|
95
|
+
{
|
|
96
|
+
id: 'payment_1',
|
|
97
|
+
amt: '2000'
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
response = TableCheckApi::Pos::V1::PosJournals.update('shop_123', 1, request)
|
|
103
|
+
pos_journal = response.pos_journal
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Delete POS journal
|
|
107
|
+
|
|
108
|
+
```ruby
|
|
109
|
+
response = TableCheckApi::Pos::V1::PosJournals.delete('shop_123', 1)
|
|
110
|
+
puts response.body['status']
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Void POS journal
|
|
114
|
+
|
|
115
|
+
```ruby
|
|
116
|
+
request = TableCheckApi::Pos::V1::PosJournals::VoidRequest.new(
|
|
117
|
+
receipt_num: '12345',
|
|
118
|
+
void_reason: 'customer_cancellation',
|
|
119
|
+
voided_at: '2026-01-29T19:30:00Z'
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
response = TableCheckApi::Pos::V1::PosJournals.void('shop_123', request)
|
|
123
|
+
pos_journal = response.pos_journal
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Documentation
|
|
127
|
+
|
|
128
|
+
See the [AGENT.md](AGENT.md) for detailed architecture, endpoints, and usage examples.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails/generators/base'
|
|
4
|
+
|
|
5
|
+
module TableCheckApi
|
|
6
|
+
module Generators
|
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
|
8
|
+
source_root File.expand_path("../../../templates", __FILE__)
|
|
9
|
+
|
|
10
|
+
desc "Creates TableCheck API initializer."
|
|
11
|
+
|
|
12
|
+
def copy_tablecheck_api_initializer
|
|
13
|
+
template "table_check_api.rb", "config/initializers/table_check_api.rb"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
TableCheckApi.configure do |config|
|
|
4
|
+
# ==> TableCheck API Base URL
|
|
5
|
+
# Base URL exclude component and version segments (eg: api.tablecheck.com/api)
|
|
6
|
+
# config.base_url = 'https://api.tablecheck.com/api'
|
|
7
|
+
|
|
8
|
+
# ==> TableCheck API Key
|
|
9
|
+
# Default API Key used when no API Key provided on API call
|
|
10
|
+
# config.key = 'validapikey'
|
|
11
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "version"
|
|
4
|
+
|
|
5
|
+
module TableCheckApi
|
|
6
|
+
# Pure Ruby module-level accessors for gem configuration.
|
|
7
|
+
# No ActiveSupport dependency required.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# TableCheckApi.configure do |config|
|
|
11
|
+
# config.base_url = 'https://api.tablecheck.com/api'
|
|
12
|
+
# config.key = 'your_api_key'
|
|
13
|
+
# end
|
|
14
|
+
module Configuration
|
|
15
|
+
attr_accessor :base_url, :key
|
|
16
|
+
|
|
17
|
+
def configure
|
|
18
|
+
yield self
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
extend Configuration
|
|
23
|
+
|
|
24
|
+
# Set defaults
|
|
25
|
+
self.base_url = 'https://api.tablecheck.com/api'
|
|
26
|
+
self.key = ''
|
|
27
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TableCheckApi
|
|
4
|
+
module Pos
|
|
5
|
+
module V1
|
|
6
|
+
class BaseRequest
|
|
7
|
+
def initialize(attributes = {})
|
|
8
|
+
@attributes = attributes ? attributes.dup : {}
|
|
9
|
+
validate_unknown_keys!
|
|
10
|
+
assign_attributes
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_h
|
|
14
|
+
self.class::ATTRIBUTES.each_with_object({}) do |attribute, payload|
|
|
15
|
+
value = send(attribute)
|
|
16
|
+
next if value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
|
17
|
+
|
|
18
|
+
payload[attribute.to_s] = normalize_payload_value(value)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
attr_reader :attributes
|
|
25
|
+
|
|
26
|
+
def fetch(key)
|
|
27
|
+
attributes.fetch(key.to_s, attributes.fetch(key.to_sym, nil))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def assign_attributes
|
|
31
|
+
self.class::ATTRIBUTES.each do |attribute|
|
|
32
|
+
send("#{attribute}=", fetch(attribute))
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def arrays_as(value, klass)
|
|
37
|
+
Array(value).map { |item| klass.new(item) }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def normalize_payload_value(value)
|
|
41
|
+
return value.map(&:to_h) if value.is_a?(Array) && value.first.respond_to?(:to_h)
|
|
42
|
+
|
|
43
|
+
value
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def validate_unknown_keys!
|
|
47
|
+
return unless defined?(self.class::ATTRIBUTES)
|
|
48
|
+
|
|
49
|
+
unknown_keys = attributes.keys.map(&:to_s) - self.class::ATTRIBUTES.map(&:to_s)
|
|
50
|
+
raise ArgumentError, "Unknown attributes: #{unknown_keys.join(', ')}" if unknown_keys.any?
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module TableCheckApi
|
|
6
|
+
module Pos
|
|
7
|
+
module V1
|
|
8
|
+
class BaseResponse
|
|
9
|
+
def self.from_response(response)
|
|
10
|
+
new(response)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(response)
|
|
14
|
+
raw_body = response.respond_to?(:body) ? response.body : response
|
|
15
|
+
@body = parse_body(raw_body)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def raw
|
|
19
|
+
@body
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
alias body raw
|
|
23
|
+
|
|
24
|
+
def errors
|
|
25
|
+
@body['errors'] || []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def success?
|
|
29
|
+
errors.empty?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def parse_body(raw_body)
|
|
35
|
+
JSON.parse(raw_body.to_s)
|
|
36
|
+
rescue JSON::ParserError
|
|
37
|
+
{}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base_request"
|
|
4
|
+
require_relative "base_response"
|
|
5
|
+
|
|
6
|
+
module TableCheckApi
|
|
7
|
+
module Pos
|
|
8
|
+
module V1
|
|
9
|
+
# Service class for TableCheck POS Journals endpoints.
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
# request = TableCheckApi::Pos::V1::PosJournals::CreateRequest.new(batch_date: '2020-01-01')
|
|
13
|
+
# TableCheckApi::Pos::V1::PosJournals.create(shop_id, request)
|
|
14
|
+
#
|
|
15
|
+
# update_request = TableCheckApi::Pos::V1::PosJournals::UpdateRequest.new(...)
|
|
16
|
+
# TableCheckApi::Pos::V1::PosJournals.update(shop_id, id, update_request)
|
|
17
|
+
#
|
|
18
|
+
# void_request = TableCheckApi::Pos::V1::PosJournals::VoidRequest.new(receipt_num: '12345', void_reason: 'customer_cancellation')
|
|
19
|
+
# TableCheckApi::Pos::V1::PosJournals.void(shop_id, void_request)
|
|
20
|
+
class PosJournals
|
|
21
|
+
RESOURCE_PATH = '/pos/v1/shops'
|
|
22
|
+
|
|
23
|
+
# POST /shops/:shop_id/pos_journals — Create a new POS journal entry.
|
|
24
|
+
def self.create(shop_id, request, headers: {})
|
|
25
|
+
response = TableCheckApi::Client.post(
|
|
26
|
+
"#{RESOURCE_PATH}/#{shop_id}/pos_journals",
|
|
27
|
+
params: build_payload(request),
|
|
28
|
+
headers: headers
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
CreateResponse.from_response(response)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PUT /shops/:shop_id/pos_journals/:id — Update an existing POS journal.
|
|
35
|
+
def self.update(shop_id, id, request, headers: {})
|
|
36
|
+
response = TableCheckApi::Client.put(
|
|
37
|
+
"#{RESOURCE_PATH}/#{shop_id}/pos_journals/#{id}",
|
|
38
|
+
params: build_payload(request),
|
|
39
|
+
headers: headers
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
PosJournalResponse.from_response(response)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# DELETE /shops/:shop_id/pos_journals/:id — Delete a POS journal.
|
|
46
|
+
def self.delete(shop_id, id, headers: {})
|
|
47
|
+
response = TableCheckApi::Client.delete(
|
|
48
|
+
"#{RESOURCE_PATH}/#{shop_id}/pos_journals/#{id}",
|
|
49
|
+
headers: headers
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
DeleteResponse.from_response(response)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# POST /shops/:shop_id/pos_journals/void — Void a POS journal.
|
|
56
|
+
def self.void(shop_id, request, headers: {})
|
|
57
|
+
response = TableCheckApi::Client.post(
|
|
58
|
+
"#{RESOURCE_PATH}/#{shop_id}/pos_journals/void",
|
|
59
|
+
params: build_payload(request),
|
|
60
|
+
headers: headers
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
PosJournalResponse.from_response(response)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def self.build_payload(request)
|
|
67
|
+
raise ArgumentError, 'request must respond to :to_h' unless request.respond_to?(:to_h)
|
|
68
|
+
|
|
69
|
+
request.to_h
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
class CreateRequest < BaseRequest
|
|
73
|
+
ATTRIBUTES = %i[
|
|
74
|
+
batch_date
|
|
75
|
+
change_amt
|
|
76
|
+
country
|
|
77
|
+
coupon_amt
|
|
78
|
+
currency
|
|
79
|
+
customer_name
|
|
80
|
+
discount_amt
|
|
81
|
+
membership_code
|
|
82
|
+
order_at
|
|
83
|
+
original_receipt_num
|
|
84
|
+
pax
|
|
85
|
+
payment_at
|
|
86
|
+
receipt_num
|
|
87
|
+
revenue_center
|
|
88
|
+
room_name
|
|
89
|
+
service_fee_amt
|
|
90
|
+
service_fee_rate
|
|
91
|
+
settle_amt
|
|
92
|
+
site_name
|
|
93
|
+
staff_name
|
|
94
|
+
staff_ref
|
|
95
|
+
subtotal_amt
|
|
96
|
+
system_api_provider
|
|
97
|
+
system_maker
|
|
98
|
+
system_model
|
|
99
|
+
system_version
|
|
100
|
+
table_names
|
|
101
|
+
tax_amt
|
|
102
|
+
tax_included_amt
|
|
103
|
+
tax_rate
|
|
104
|
+
terminal_name
|
|
105
|
+
total_amt
|
|
106
|
+
reservation_ref
|
|
107
|
+
reservation_status
|
|
108
|
+
pos_orders
|
|
109
|
+
pos_payments
|
|
110
|
+
pos_discounts
|
|
111
|
+
].freeze
|
|
112
|
+
|
|
113
|
+
attr_accessor(*ATTRIBUTES)
|
|
114
|
+
|
|
115
|
+
def pos_orders=(value)
|
|
116
|
+
@pos_orders = arrays_as(value, PosOrder)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def pos_payments=(value)
|
|
120
|
+
@pos_payments = arrays_as(value, PosPayment)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def pos_discounts=(value)
|
|
124
|
+
@pos_discounts = arrays_as(value, PosDiscount)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
class UpdateRequest < CreateRequest
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
class VoidRequest < BaseRequest
|
|
132
|
+
ATTRIBUTES = %i[receipt_num void_reason voided_at].freeze
|
|
133
|
+
attr_accessor(*ATTRIBUTES)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
class PosOrder < BaseRequest
|
|
137
|
+
ATTRIBUTES = %i[
|
|
138
|
+
id
|
|
139
|
+
menu_category_name
|
|
140
|
+
menu_category_ref
|
|
141
|
+
menu_item_name
|
|
142
|
+
menu_item_ref
|
|
143
|
+
order_at
|
|
144
|
+
qty
|
|
145
|
+
ref
|
|
146
|
+
sku
|
|
147
|
+
unit_price
|
|
148
|
+
].freeze
|
|
149
|
+
|
|
150
|
+
attr_accessor(*ATTRIBUTES)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
class PosPayment < BaseRequest
|
|
154
|
+
ATTRIBUTES = %i[id amt brand issuer payment_at ref tender].freeze
|
|
155
|
+
attr_accessor(*ATTRIBUTES)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
class PosDiscount < BaseRequest
|
|
159
|
+
ATTRIBUTES = %i[id amt name order_at ref].freeze
|
|
160
|
+
attr_accessor(*ATTRIBUTES)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class CreateResponse < BaseResponse
|
|
164
|
+
def pos_journal
|
|
165
|
+
body['pos_journal']
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def reservations
|
|
169
|
+
body['reservations'] || []
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class PosJournalResponse < BaseResponse
|
|
174
|
+
def pos_journal
|
|
175
|
+
body['pos_journal']
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def reservations
|
|
179
|
+
body['reservations'] || []
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
class DeleteResponse < BaseResponse
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base_response"
|
|
4
|
+
|
|
5
|
+
module TableCheckApi
|
|
6
|
+
module Pos
|
|
7
|
+
module V1
|
|
8
|
+
# Service class for TableCheck Shop endpoints.
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
# TableCheckApi::Pos::V1::Shop.list
|
|
12
|
+
# TableCheckApi::Pos::V1::Shop.list(headers: { 'Authorization' => 'Bearer other_key' })
|
|
13
|
+
class Shop
|
|
14
|
+
RESOURCE_PATH = '/pos/v1/shops'
|
|
15
|
+
|
|
16
|
+
# GET /shops — List accessible restaurant/venue operations.
|
|
17
|
+
def self.list(headers: {})
|
|
18
|
+
response = TableCheckApi::Client.get(RESOURCE_PATH, headers: headers)
|
|
19
|
+
ListResponse.from_response(response)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class ListResponse < BaseResponse
|
|
23
|
+
def shops
|
|
24
|
+
body['shops'] || []
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base_request"
|
|
4
|
+
require_relative "base_response"
|
|
5
|
+
|
|
6
|
+
module TableCheckApi
|
|
7
|
+
module Pos
|
|
8
|
+
module V1
|
|
9
|
+
# Service class for TableCheck Table endpoints.
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
# TableCheckApi::Pos::V1::Table.list(shop_id)
|
|
13
|
+
# request = TableCheckApi::Pos::V1::Table::StatusRequest.new(table_id: 'id', time: '2020-01-29T19:00:00Z')
|
|
14
|
+
# TableCheckApi::Pos::V1::Table.status(shop_id, request)
|
|
15
|
+
# TableCheckApi::Pos::V1::Table.status(shop_id, request, headers: { 'Authorization' => 'Bearer other_key' })
|
|
16
|
+
class Table
|
|
17
|
+
RESOURCE_PATH = '/pos/v1/shops'
|
|
18
|
+
|
|
19
|
+
# GET /shops/:shop_id/tables — List all tables for a specific shop.
|
|
20
|
+
def self.list(shop_id, headers: {})
|
|
21
|
+
response = TableCheckApi::Client.get(
|
|
22
|
+
"#{RESOURCE_PATH}/#{shop_id}/tables",
|
|
23
|
+
headers: headers
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
ListResponse.from_response(response)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# POST /shops/:shop_id/table_status/show — Show the status of a table.
|
|
30
|
+
def self.status(shop_id, request, headers: {})
|
|
31
|
+
response = TableCheckApi::Client.post(
|
|
32
|
+
"#{RESOURCE_PATH}/#{shop_id}/table_status/show",
|
|
33
|
+
params: build_payload(request),
|
|
34
|
+
headers: headers
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
StatusResponse.from_response(response)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.build_payload(request)
|
|
41
|
+
raise ArgumentError, 'request must respond to :to_h' unless request.respond_to?(:to_h)
|
|
42
|
+
request.to_h
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class StatusRequest < BaseRequest
|
|
46
|
+
ATTRIBUTES = %i[table_id time].freeze
|
|
47
|
+
attr_accessor(*ATTRIBUTES)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class ListResponse < BaseResponse
|
|
51
|
+
def tables
|
|
52
|
+
body['tables'] || []
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class StatusResponse < BaseResponse
|
|
57
|
+
def table_status
|
|
58
|
+
body['table_status'] || {}
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'httparty'
|
|
4
|
+
|
|
5
|
+
require_relative "table_check_api/version"
|
|
6
|
+
require_relative "table_check_api/configuration"
|
|
7
|
+
require_relative "table_check_api/pos/v1/base_response"
|
|
8
|
+
require_relative "table_check_api/pos/v1/shop"
|
|
9
|
+
require_relative "table_check_api/pos/v1/table"
|
|
10
|
+
require_relative "table_check_api/pos/v1/pos_journals"
|
|
11
|
+
|
|
12
|
+
module TableCheckApi
|
|
13
|
+
# Central HTTP client for all TableCheck API communication.
|
|
14
|
+
# Service classes (Pos::V1::Shop, etc.) delegate to these methods.
|
|
15
|
+
#
|
|
16
|
+
# Headers can be overridden per-request to support per-call key overrides:
|
|
17
|
+
# Client.get('/path', headers: { 'Authorization' => 'Bearer other_key' })
|
|
18
|
+
module Client
|
|
19
|
+
def self.default_headers
|
|
20
|
+
{
|
|
21
|
+
'User-Agent' => "TableCheckAPIClient-v#{TableCheckApi::VERSION}",
|
|
22
|
+
'Accept' => 'application/json',
|
|
23
|
+
'Content-Type' => 'application/json',
|
|
24
|
+
'Authorization' => "Bearer #{TableCheckApi.key}"
|
|
25
|
+
}.freeze
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.get(path, params: {}, headers: {})
|
|
29
|
+
HTTParty.get(
|
|
30
|
+
"#{TableCheckApi.base_url}#{path}",
|
|
31
|
+
query: params,
|
|
32
|
+
headers: default_headers.dup.merge(headers)
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.post(path, params: {}, headers: {})
|
|
37
|
+
HTTParty.post(
|
|
38
|
+
"#{TableCheckApi.base_url}#{path}",
|
|
39
|
+
body: params.to_json,
|
|
40
|
+
headers: default_headers.dup.merge(headers)
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.put(path, params: {}, headers: {})
|
|
45
|
+
HTTParty.put(
|
|
46
|
+
"#{TableCheckApi.base_url}#{path}",
|
|
47
|
+
body: params.to_json,
|
|
48
|
+
headers: default_headers.dup.merge(headers)
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.delete(path, headers: {})
|
|
53
|
+
HTTParty.delete(
|
|
54
|
+
"#{TableCheckApi.base_url}#{path}",
|
|
55
|
+
headers: default_headers.dup.merge(headers)
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: table_check_api
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Developer [at] Eresto
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-06-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: httparty
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.16'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 0.21.0
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - "~>"
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0.16'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 0.21.0
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: minitest
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '5.0'
|
|
40
|
+
type: :development
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '5.0'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: rake
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '13.0'
|
|
54
|
+
type: :development
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '13.0'
|
|
61
|
+
description: TableCheck API wrapper for Ruby
|
|
62
|
+
email:
|
|
63
|
+
- developer@eresto.co.id
|
|
64
|
+
executables: []
|
|
65
|
+
extensions: []
|
|
66
|
+
extra_rdoc_files: []
|
|
67
|
+
files:
|
|
68
|
+
- README.md
|
|
69
|
+
- Rakefile
|
|
70
|
+
- lib/generators/table_check_api/install_generator.rb
|
|
71
|
+
- lib/generators/templates/table_check_api.rb
|
|
72
|
+
- lib/table_check_api.rb
|
|
73
|
+
- lib/table_check_api/configuration.rb
|
|
74
|
+
- lib/table_check_api/pos/v1/base_request.rb
|
|
75
|
+
- lib/table_check_api/pos/v1/base_response.rb
|
|
76
|
+
- lib/table_check_api/pos/v1/pos_journals.rb
|
|
77
|
+
- lib/table_check_api/pos/v1/shop.rb
|
|
78
|
+
- lib/table_check_api/pos/v1/table.rb
|
|
79
|
+
- lib/table_check_api/version.rb
|
|
80
|
+
homepage: https://github.com/Eresto-Development-Team/table_check_api
|
|
81
|
+
licenses:
|
|
82
|
+
- MIT
|
|
83
|
+
metadata: {}
|
|
84
|
+
post_install_message:
|
|
85
|
+
rdoc_options: []
|
|
86
|
+
require_paths:
|
|
87
|
+
- lib
|
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
|
+
requirements:
|
|
90
|
+
- - ">="
|
|
91
|
+
- !ruby/object:Gem::Version
|
|
92
|
+
version: '0'
|
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
98
|
+
requirements: []
|
|
99
|
+
rubygems_version: 3.0.3.1
|
|
100
|
+
signing_key:
|
|
101
|
+
specification_version: 4
|
|
102
|
+
summary: TableCheck API wrapper for Ruby
|
|
103
|
+
test_files: []
|