rbvore 0.1.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/.gitignore +11 -0
- data/.rspec +3 -0
- data/.rubocop.yml +22 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +114 -0
- data/LICENSE.txt +21 -0
- data/README.md +71 -0
- data/Rakefile +8 -0
- data/bin/console +14 -0
- data/bin/rspec +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +8 -0
- data/lib/rbvore.rb +52 -0
- data/lib/rbvore/api.rb +158 -0
- data/lib/rbvore/discount.rb +12 -0
- data/lib/rbvore/employee.rb +12 -0
- data/lib/rbvore/item.rb +16 -0
- data/lib/rbvore/item_modifier.rb +11 -0
- data/lib/rbvore/link.rb +50 -0
- data/lib/rbvore/location.rb +22 -0
- data/lib/rbvore/menu_category.rb +11 -0
- data/lib/rbvore/menu_item.rb +13 -0
- data/lib/rbvore/order_type.rb +11 -0
- data/lib/rbvore/payment.rb +39 -0
- data/lib/rbvore/resource.rb +95 -0
- data/lib/rbvore/resource/fetchers.rb +51 -0
- data/lib/rbvore/resource/names.rb +35 -0
- data/lib/rbvore/resource/parsers.rb +35 -0
- data/lib/rbvore/revenue_center.rb +11 -0
- data/lib/rbvore/table.rb +13 -0
- data/lib/rbvore/tender_type.rb +11 -0
- data/lib/rbvore/ticket.rb +46 -0
- data/lib/rbvore/ticket_discount.rb +12 -0
- data/lib/rbvore/ticket_service_charge.rb +23 -0
- data/lib/rbvore/version.rb +5 -0
- data/rbvore.gemspec +32 -0
- metadata +126 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class Resource
|
5
|
+
module Fetchers
|
6
|
+
def api
|
7
|
+
@api ||= API.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def endpoint(id: nil, location_id: nil, ticket_id: nil) # rubocop:disable Metrics/MethodLength
|
11
|
+
case
|
12
|
+
when self == Location
|
13
|
+
API.endpoint(Location, id || location_id)
|
14
|
+
when self == Ticket
|
15
|
+
check_required("location_id", location_id)
|
16
|
+
API.endpoint(Location, location_id, Ticket, id || ticket_id)
|
17
|
+
when [TenderType, Table, Employee, RevenueCenter].include?(self)
|
18
|
+
check_required("location_id", location_id)
|
19
|
+
API.endpoint(Location, location_id, self, id)
|
20
|
+
else
|
21
|
+
check_required("location_id", location_id)
|
22
|
+
check_required("ticket_id", ticket_id)
|
23
|
+
API.endpoint(Location, location_id, Ticket, ticket_id, self, id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def check_required(name, value)
|
28
|
+
raise Error, "#{name} is required" if value.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def fetch_one(id: nil, location_id: nil, ticket_id: nil, params: {}, api_key: nil)
|
32
|
+
check_required("id", id)
|
33
|
+
api.fetch_one(
|
34
|
+
endpoint(id: id, location_id: location_id, ticket_id: ticket_id),
|
35
|
+
self,
|
36
|
+
params: params,
|
37
|
+
api_key: api_key,
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def fetch_all(location_id: nil, ticket_id: nil, params: {}, api_key: nil)
|
42
|
+
api.fetch_all(
|
43
|
+
endpoint(location_id: location_id, ticket_id: ticket_id),
|
44
|
+
self,
|
45
|
+
params: params,
|
46
|
+
api_key: api_key,
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class Resource
|
5
|
+
module Names
|
6
|
+
def underscore(value)
|
7
|
+
return value unless /[A-Z-]/.match?(value)
|
8
|
+
|
9
|
+
word = value.to_s.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
10
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
11
|
+
word.tr!("-", "_")
|
12
|
+
word.downcase!
|
13
|
+
word
|
14
|
+
end
|
15
|
+
|
16
|
+
def singularize
|
17
|
+
@singularize ||= underscore(name.split("::").last)
|
18
|
+
end
|
19
|
+
|
20
|
+
def list_name
|
21
|
+
@list_name ||= "#{singularize}_list"
|
22
|
+
end
|
23
|
+
|
24
|
+
def pluralize
|
25
|
+
@pluralize ||=
|
26
|
+
case
|
27
|
+
when singularize.end_with?('y')
|
28
|
+
singularize[0..-2] + 'ies'
|
29
|
+
else
|
30
|
+
singularize + "s"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class Resource
|
5
|
+
module Parsers
|
6
|
+
def parse_collection(ary, klass)
|
7
|
+
if ary.is_a? Hash
|
8
|
+
list = ary.dig("_embedded", klass.pluralize)
|
9
|
+
ary = list if list.is_a? Array
|
10
|
+
end
|
11
|
+
ary.map { |obj|
|
12
|
+
parse_object(obj, klass)
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_object(obj, klass)
|
17
|
+
if obj.is_a?(Hash)
|
18
|
+
Rbvore.constantize(klass).new(obj)
|
19
|
+
else
|
20
|
+
obj
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_timestamp(value)
|
25
|
+
return nil if value.nil?
|
26
|
+
|
27
|
+
if value.is_a? Time
|
28
|
+
value
|
29
|
+
else
|
30
|
+
Time.at(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/rbvore/table.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class Table < Resource
|
5
|
+
attr_accessor :id, :available, :name, :number, :pos_id, :seats
|
6
|
+
attr_collections open_tickets: "ticket"
|
7
|
+
attr_objects revenue_center: "revenue_center"
|
8
|
+
|
9
|
+
def initialize(hash)
|
10
|
+
set_attributes(hash)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class Ticket < Resource
|
5
|
+
attr_accessor :id, :pos_id, :guest_count, :name, :open, :ticket_number, :totals,
|
6
|
+
:location_id, :auto_send, :fire_date, :fire_time, :ready_date,
|
7
|
+
:ready_time, :void
|
8
|
+
attr_timestamp_accessor :closed_at, :opened_at
|
9
|
+
attr_collections(
|
10
|
+
items: Item,
|
11
|
+
payments: Payment,
|
12
|
+
service_charges: TicketServiceCharge,
|
13
|
+
discounts: TicketDiscount,
|
14
|
+
voided_items: VoidedItem,
|
15
|
+
)
|
16
|
+
attr_objects(
|
17
|
+
table: Table,
|
18
|
+
employee: Employee,
|
19
|
+
order_type: OrderType,
|
20
|
+
revenue_center: RevenueCenter,
|
21
|
+
)
|
22
|
+
|
23
|
+
def self.fetch_all(location_id:, open: nil, table_id: nil, api_key: nil)
|
24
|
+
super(
|
25
|
+
location_id: location_id,
|
26
|
+
params: build_where_clause(open: open, table_id: table_id),
|
27
|
+
api_key: api_key,
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.build_where_clause(open: nil, table_id: nil) # rubocop:disable Metrics/CyclomaticComplexity
|
32
|
+
case
|
33
|
+
when !open.nil? && table_id.nil?
|
34
|
+
{ where: "eq(open,#{open})" }
|
35
|
+
when open.nil? && !table_id.nil?
|
36
|
+
{ where: "eq(@table.id,'#{table_id}')" }
|
37
|
+
when !open.nil? && !table_id.nil?
|
38
|
+
{ where: "and(eq(open,#{open}),eq(@table.id,'#{table_id}'))" }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(hash)
|
43
|
+
set_attributes(hash)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rbvore
|
4
|
+
class TicketServiceCharge < Resource
|
5
|
+
attr_accessor :id, :name, :price, :comment
|
6
|
+
|
7
|
+
def initialize(hash)
|
8
|
+
set_attributes(hash)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.create(location_id:, ticket_id:, name:, amount:, api_key: nil)
|
12
|
+
response = api.request(
|
13
|
+
:post,
|
14
|
+
API.endpoint(Location, location_id, Ticket, ticket_id, "service_charges"),
|
15
|
+
body: [{ service_charge: name, amount: amount }],
|
16
|
+
api_key: api_key,
|
17
|
+
)
|
18
|
+
raise response.error unless response.success?
|
19
|
+
|
20
|
+
TicketServiceCharge.new(response.json_body)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/rbvore.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "rbvore/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "rbvore"
|
7
|
+
spec.version = Rbvore::VERSION
|
8
|
+
spec.authors = ["Scott Yoder"]
|
9
|
+
spec.email = ["syoder@radiusnetworks.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{Ruby interface to Omnivore's API}
|
12
|
+
spec.description = %q{Ruby interface to Omnivore's API}
|
13
|
+
spec.homepage = "https://github.com/radiusnetworks/rbvore"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
+
spec.metadata["source_code_uri"] = "https://github.com/radiusnetworks/rbvore"
|
18
|
+
spec.metadata["changelog_uri"] = "https://github.com/radiusnetworks/rbvore"
|
19
|
+
|
20
|
+
# Specify which files should be added to the gem when it is released.
|
21
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
22
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
23
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
end
|
25
|
+
spec.bindir = "exe"
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rbvore
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Scott Yoder
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-12-03 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: '2.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: Ruby interface to Omnivore's API
|
56
|
+
email:
|
57
|
+
- syoder@radiusnetworks.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
64
|
+
- ".rubocop.yml"
|
65
|
+
- ".travis.yml"
|
66
|
+
- CODE_OF_CONDUCT.md
|
67
|
+
- Gemfile
|
68
|
+
- Gemfile.lock
|
69
|
+
- LICENSE.txt
|
70
|
+
- README.md
|
71
|
+
- Rakefile
|
72
|
+
- bin/console
|
73
|
+
- bin/rspec
|
74
|
+
- bin/rubocop
|
75
|
+
- bin/setup
|
76
|
+
- lib/rbvore.rb
|
77
|
+
- lib/rbvore/api.rb
|
78
|
+
- lib/rbvore/discount.rb
|
79
|
+
- lib/rbvore/employee.rb
|
80
|
+
- lib/rbvore/item.rb
|
81
|
+
- lib/rbvore/item_modifier.rb
|
82
|
+
- lib/rbvore/link.rb
|
83
|
+
- lib/rbvore/location.rb
|
84
|
+
- lib/rbvore/menu_category.rb
|
85
|
+
- lib/rbvore/menu_item.rb
|
86
|
+
- lib/rbvore/order_type.rb
|
87
|
+
- lib/rbvore/payment.rb
|
88
|
+
- lib/rbvore/resource.rb
|
89
|
+
- lib/rbvore/resource/fetchers.rb
|
90
|
+
- lib/rbvore/resource/names.rb
|
91
|
+
- lib/rbvore/resource/parsers.rb
|
92
|
+
- lib/rbvore/revenue_center.rb
|
93
|
+
- lib/rbvore/table.rb
|
94
|
+
- lib/rbvore/tender_type.rb
|
95
|
+
- lib/rbvore/ticket.rb
|
96
|
+
- lib/rbvore/ticket_discount.rb
|
97
|
+
- lib/rbvore/ticket_service_charge.rb
|
98
|
+
- lib/rbvore/version.rb
|
99
|
+
- rbvore.gemspec
|
100
|
+
homepage: https://github.com/radiusnetworks/rbvore
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata:
|
104
|
+
homepage_uri: https://github.com/radiusnetworks/rbvore
|
105
|
+
source_code_uri: https://github.com/radiusnetworks/rbvore
|
106
|
+
changelog_uri: https://github.com/radiusnetworks/rbvore
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubygems_version: 3.0.6
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: Ruby interface to Omnivore's API
|
126
|
+
test_files: []
|