youcanbookme 0.0.1.alpha → 0.0.6.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/{.rubocom.yml → .rubocop.yml} +12 -9
  3. data/CHANGELOG.md +37 -2
  4. data/README.md +22 -25
  5. data/lib/youcanbookme/client.rb +235 -13
  6. data/lib/youcanbookme/error.rb +1 -1
  7. data/lib/youcanbookme/http_command.rb +6 -1
  8. data/lib/youcanbookme/{common_module.rb → loggable.rb} +2 -2
  9. data/lib/youcanbookme/models/account.rb +153 -13
  10. data/lib/youcanbookme/models/account_allocation.rb +22 -0
  11. data/lib/youcanbookme/models/account_child.rb +20 -0
  12. data/lib/youcanbookme/models/{caligraph_safe_local_account.rb → account_parent.rb} +3 -2
  13. data/lib/youcanbookme/models/action.rb +5 -0
  14. data/lib/youcanbookme/models/answer.rb +0 -1
  15. data/lib/youcanbookme/models/booking.rb +8 -4
  16. data/lib/youcanbookme/models/booking_lobby.rb +2 -1
  17. data/lib/youcanbookme/models/calendar.rb +1 -1
  18. data/lib/youcanbookme/models/card.rb +0 -1
  19. data/lib/youcanbookme/models/event.rb +6 -9
  20. data/lib/youcanbookme/models/{participant.rb → event_participant.rb} +3 -2
  21. data/lib/youcanbookme/models/{reminder.rb → event_reminder.rb} +3 -3
  22. data/lib/youcanbookme/models/link.rb +0 -1
  23. data/lib/youcanbookme/models/model_utils.rb +8 -6
  24. data/lib/youcanbookme/models/name_and_address.rb +0 -1
  25. data/lib/youcanbookme/models/permission.rb +17 -5
  26. data/lib/youcanbookme/models/profile.rb +4 -3
  27. data/lib/youcanbookme/models/{profile_local_account.rb → profile_account.rb} +1 -2
  28. data/lib/youcanbookme/models/profile_afterwards.rb +0 -1
  29. data/lib/youcanbookme/models/profile_appointment_type.rb +0 -1
  30. data/lib/youcanbookme/models/profile_appointment_types.rb +0 -1
  31. data/lib/youcanbookme/models/profile_calendar.rb +6 -1
  32. data/lib/youcanbookme/models/profile_calendars.rb +0 -1
  33. data/lib/youcanbookme/models/profile_cancel_or_reschedule.rb +0 -1
  34. data/lib/youcanbookme/models/profile_display.rb +0 -1
  35. data/lib/youcanbookme/models/profile_payments.rb +1 -1
  36. data/lib/youcanbookme/models/profile_remote_account.rb +3 -2
  37. data/lib/youcanbookme/models/profile_remote_reminder.rb +0 -1
  38. data/lib/youcanbookme/models/profile_team_member.rb +0 -1
  39. data/lib/youcanbookme/models/profile_team_members.rb +1 -1
  40. data/lib/youcanbookme/models/profile_tentative.rb +0 -2
  41. data/lib/youcanbookme/models/profile_times.rb +1 -1
  42. data/lib/youcanbookme/models/profile_vouchers.rb +0 -1
  43. data/lib/youcanbookme/models/provider.rb +0 -1
  44. data/lib/youcanbookme/models/purchase.rb +8 -4
  45. data/lib/youcanbookme/models/purchases_sync_changes.rb +0 -1
  46. data/lib/youcanbookme/models/question.rb +1 -0
  47. data/lib/youcanbookme/models/remote_account.rb +8 -4
  48. data/lib/youcanbookme/models/template_event.rb +0 -1
  49. data/lib/youcanbookme/models/transaction.rb +6 -3
  50. data/lib/youcanbookme/models/warning.rb +0 -1
  51. data/lib/youcanbookme/version.rb +1 -1
  52. metadata +11 -20
  53. data/lib/youcanbookme/models/appointment_type.rb +0 -7
  54. data/lib/youcanbookme/models/caligraph_calendar.rb +0 -29
  55. data/lib/youcanbookme/models/caligraph_event.rb +0 -8
  56. data/lib/youcanbookme/models/caligraph_link.rb +0 -17
  57. data/lib/youcanbookme/models/caligraph_local_account.rb +0 -47
  58. data/lib/youcanbookme/models/caligraph_permission.rb +0 -32
  59. data/lib/youcanbookme/models/caligraph_remote_account.rb +0 -23
  60. data/lib/youcanbookme/models/instant.rb +0 -9
  61. data/lib/youcanbookme/models/local_account.rb +0 -180
  62. data/lib/youcanbookme/models/query.rb +0 -8
  63. data/lib/youcanbookme/models/team_member.rb +0 -8
@@ -3,7 +3,7 @@
3
3
  module YouCanBookMe
4
4
  # YouCanBookMe module's base error object
5
5
  class Error < StandardError
6
- include CommonModule
6
+ include Loggable
7
7
 
8
8
  def initialize(message = nil)
9
9
  msg = "#{self.class} occured."
@@ -6,7 +6,7 @@ require 'faraday_middleware'
6
6
  module YouCanBookMe
7
7
  # Command for HTTP request.
8
8
  class HttpCommand
9
- include CommonModule
9
+ include Loggable
10
10
 
11
11
  def initialize(account_id, password_or_token, host = nil)
12
12
  @account_id = account_id
@@ -19,6 +19,7 @@ module YouCanBookMe
19
19
  #
20
20
  # @param [String] path String or URI to access.
21
21
  # @param [Hash] params Hash of URI query unencoded key/value pairs.
22
+ # @since 0.0.1
22
23
  def get(path, params = {})
23
24
  debug_log "GET #{connection.build_url("#{@host}#{path}", params)}"
24
25
  res = connection.get path, params
@@ -32,6 +33,7 @@ module YouCanBookMe
32
33
  # @param [String] path String or URI to access.
33
34
  # @param [Hash] body_params
34
35
  # The request body that will eventually be converted to JSON.
36
+ # @since 0.0.1
35
37
  def post(path, body_params = {})
36
38
  debug_log "POST #{@host}#{path} body:#{body_params}"
37
39
  headers = { 'Content-Type' => 'application/json' }
@@ -46,6 +48,7 @@ module YouCanBookMe
46
48
  # @param [String] path String or URI to access.
47
49
  # @param [Hash] body_params
48
50
  # The request body that will eventually be converted to JSON.
51
+ # @since 0.0.1
49
52
  def put(path, body_params = {})
50
53
  debug_log "PUT #{@host}#{path} body:#{body_params}"
51
54
  headers = { 'Content-Type' => 'application/json' }
@@ -60,6 +63,7 @@ module YouCanBookMe
60
63
  # @param [String] path String or URI to access.
61
64
  # @param [Hash] body_params
62
65
  # The request body that will eventually be converted to JSON.
66
+ # @since 0.0.1
63
67
  def patch(path, body_params = {})
64
68
  debug_log "PATCH #{@host}#{path} body:#{body_params}"
65
69
  headers = { 'Content-Type' => 'application/json' }
@@ -73,6 +77,7 @@ module YouCanBookMe
73
77
  #
74
78
  # @param [String] path String or URI to access.
75
79
  # @param [Hash] params Hash of URI query unencoded key/value pairs.
80
+ # @since 0.0.1
76
81
  def delete(path, params = {})
77
82
  debug_log "DELETE #{@host}#{path} params:#{params}"
78
83
  res = connection.delete path, params
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YouCanBookMe
4
- # YouCanBook.me utility module.
5
- module CommonModule
4
+ # YouCanBook.me logger utility module.
5
+ module Loggable
6
6
  def error_log(msg)
7
7
  log msg, :error
8
8
  end
@@ -1,23 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YouCanBookMe
4
- # YouCanBookMe's Account model.
5
- class Account
4
+ class Account # rubocop:disable Metrics/ClassLength
6
5
  include ModelUtils
7
6
 
8
7
  ASSOCIATION = {
9
- children: Account,
10
- localAccount: CaligraphLocalAccount,
11
- parent: Account,
8
+ allocations: AccountAllocation,
9
+ billingNameAndAddress: NameAndAddress,
10
+ cards: Card,
11
+ children: AccountChild,
12
+ loggedIn: Account,
13
+ nextPurchase: Purchase,
14
+ parent: AccountParent,
15
+ parentForBilling: AccountParent,
16
+ permissionsIn: Permission,
17
+ permissionsOut: Permission,
12
18
  profiles: Profile,
19
+ purchases: Purchase,
20
+ remoteAccounts: RemoteAccount,
21
+ syncToPurchasesChanges: PurchasesSyncChanges,
13
22
  warnings: Warning
14
23
  }.freeze
15
24
 
16
25
  # @return [String]
17
- attr_accessor :caligraphKey
18
- # @return [Array<YouCanBookMe::Account>]
26
+ # ['standard', 'master', 'administrator', 'editor', 'contributor', 'child', 'booker']
27
+ attr_accessor :accountType
28
+ # @return [String]
29
+ attr_accessor :addressHibernate
30
+ # @return [Array<YouCanBookMe::AccountAllocation>]
31
+ attr_accessor :allocations
32
+ # @return [String]
33
+ attr_accessor :apiKey
34
+ # @return [YouCanBookMe::NameAndAddress]
35
+ attr_accessor :billingNameAndAddress
36
+ # @return [boolean]
37
+ attr_accessor :blocked
38
+ # @return [String]
39
+ attr_accessor :caligraphId
40
+ # @return [Array<YouCanBookMe::Card>]
41
+ attr_accessor :cards
42
+ # @return [Array<YouCanBookMe::AccountChild>]
19
43
  attr_accessor :children
20
44
  # @return [String]
45
+ attr_accessor :cityHibernate
46
+ # @return [String]
21
47
  attr_accessor :clientState
22
48
  # @return [Boolean]
23
49
  attr_accessor :contactHigh
@@ -28,8 +54,24 @@ module YouCanBookMe
28
54
  # @return [String]
29
55
  attr_accessor :contactMobile
30
56
  # @return [String]
57
+ attr_accessor :countryHibernate
58
+ # @return [String]
59
+ attr_accessor :covidStatus
60
+ # @return [String]
31
61
  attr_accessor :createdAt
32
62
  # @return [Integer]
63
+ attr_accessor :credit
64
+ # @return [Integer]
65
+ attr_accessor :creditEUR
66
+ # @return [Integer]
67
+ attr_accessor :creditGBP
68
+ # @return [Integer]
69
+ attr_accessor :creditUSD
70
+ # @return [String]
71
+ attr_accessor :currency
72
+ # @return [String]
73
+ attr_accessor :debugModeUntil
74
+ # @return [Integer]
33
75
  attr_accessor :deleteBookingsAfterDays
34
76
  # @return [Integer]
35
77
  attr_accessor :deletedBookingsCount
@@ -37,11 +79,17 @@ module YouCanBookMe
37
79
  attr_accessor :email
38
80
  # @return [String]
39
81
  attr_accessor :familyName
82
+ # @return [String]
83
+ attr_accessor :familyNameHibernate
40
84
  # @return [Integer]
41
85
  attr_accessor :feeCredit
86
+ # @return [Boolean]
87
+ attr_accessor :ghost
42
88
  # @return [String]
43
89
  attr_accessor :givenName
44
90
  # @return [String]
91
+ attr_accessor :givenNameHibernate
92
+ # @return [String]
45
93
  attr_accessor :gmailAccessToken
46
94
  # @return [String]
47
95
  attr_accessor :gmailAccessTokenExpires
@@ -57,27 +105,99 @@ module YouCanBookMe
57
105
  attr_accessor :hasBookings
58
106
  # @return [String]
59
107
  attr_accessor :id
60
- # @return [YouCanBookMe::CaligraphLocalAccount]
61
- attr_accessor :localAccount
108
+ # @return [Boolean]
109
+ attr_accessor :inDebugMode
110
+ # @return [String]
111
+ attr_accessor :killBillId
112
+ # @return [String]
113
+ attr_accessor :lastWarningPushAt
114
+ # @return [Integer]
115
+ attr_accessor :lastWarningPushLevel
116
+ # @return [String]
117
+ # ['free', 'trial', 'subscriber', 'churning', 'paused', 'churned', 'deleted']
118
+ attr_accessor :lifecycle
62
119
  # @return [String]
63
120
  attr_accessor :locale
64
- # @return [Account]
121
+ # @return [YouCanBookMe::Account]
65
122
  attr_accessor :loggedIn
123
+ # @return [Boolean]
124
+ attr_accessor :needsSyncToPurchases
125
+ # @return [Integer]
126
+ attr_accessor :negotiatedDiscountPermyriad
127
+ # @return [YouCanBookMe::Purchase]
128
+ attr_accessor :nextPurchase
129
+ # @return [String]
130
+ attr_accessor :oneTimeToken
131
+ # @return [String]
132
+ attr_accessor :oneTimeTokenExpiresAt
66
133
  # @return [String]
67
134
  attr_accessor :organisation
68
- # @return [YouCanBookMe::Account]
135
+ # @return [String]
136
+ attr_accessor :organizationNameHibernate
137
+ # @return [YouCanBookMe::AccountParent]
69
138
  attr_accessor :parent
70
139
  # @return [String]
71
- attr_accessor :parentId
140
+ attr_accessor :parentEmail
141
+ # @return [YouCanBookMe::AccountParent]
142
+ attr_accessor :parentForBilling
143
+ # @return [Integer]
144
+ attr_accessor :parentQuantityPaidFor
145
+ # @return [String]
146
+ attr_accessor :password
147
+ # @return [String]
148
+ attr_accessor :passwordHash
149
+ # @return [Boolean]
150
+ attr_accessor :pastDue
151
+ # @return [Integer]
152
+ attr_accessor :pausePlanMonths
153
+ # @return [Integer]
154
+ attr_accessor :pauseQuantity
155
+ # @return [Integer]
156
+ attr_accessor :pauseRemainingSeconds
72
157
  # @return [Boolean]
73
- attr_accessor :privilegedLogin
158
+ attr_accessor :paused
159
+ # @return [Array<YouCanBookMe::Permission>]
160
+ attr_accessor :permissionsIn
161
+ # @return [Array<YouCanBookMe::Permission>]
162
+ attr_accessor :permissionsOut
163
+ # @return [String]
164
+ attr_accessor :plan
165
+ # @return [String]
166
+ attr_accessor :planExpiresAt
167
+ # @return [Integer]
168
+ attr_accessor :planMonths
169
+ # @return [Integer]
170
+ attr_accessor :planMonthsWas
171
+ # @return [String]
172
+ attr_accessor :postalCodeHibernate
74
173
  # @return [Array<YouCanBookMe::Profile>]
75
174
  attr_accessor :profiles
175
+ # @return [Array<YouCanBookMe::Purchase>]
176
+ attr_accessor :purchases
177
+ # @return [Integer]
178
+ attr_accessor :quantityAllocated
179
+ # @return [Integer]
180
+ attr_accessor :quantityForFree
181
+ # @return [Integer]
182
+ attr_accessor :quantityFreeTrial
183
+ # @return [Integer]
184
+ attr_accessor :quantityPaidFor
76
185
  # @return [String]
77
186
  attr_accessor :realtimeTopic
78
187
  # @return [String]
188
+ attr_accessor :regionHibernate
189
+ # @return [Array<YouCanBookMe::RemoteAccount>]
190
+ attr_accessor :remoteAccounts
191
+ # @return [String]
192
+ # ['churn', 'pause', 'resetApiKey', 'resetOneTimeToken', 'resetQuota', 'resetSessionToken',
193
+ # 'resetZapierIntegration', review', 'revokeGmailAddon', 'revokeOneTimeToken',
194
+ # 'revokeSalesforceIntegration', 'revokeSessionToken', 'revokeStripeIntegration',
195
+ # 'revokeParentPermissions', 'revokeTermsDate', 'revokeZapierIntegration', 'revokeZoomIntegration',
196
+ # 'startTrial', 'syncToPurchases']
79
197
  attr_accessor :requestedAction
80
198
  # @return [String]
199
+ attr_accessor :reviewAt
200
+ # @return [String]
81
201
  attr_accessor :salesforceAccessToken
82
202
  # @return [String]
83
203
  attr_accessor :salesforceEmailAddress
@@ -87,18 +207,30 @@ module YouCanBookMe
87
207
  attr_accessor :salesforceRefreshToken
88
208
  # @return [String]
89
209
  attr_accessor :sector
210
+ # @return [String]
211
+ attr_accessor :sessionToken
212
+ # @return [String]
213
+ attr_accessor :sessionTokenExpiresAt
90
214
  # @return [Integer]
91
215
  attr_accessor :smsCredits
92
216
  # @return [String]
217
+ attr_accessor :source
218
+ # @return [String]
93
219
  attr_accessor :stripeAccessToken
94
220
  # @return [String]
221
+ attr_accessor :stripeId
222
+ # @return [String]
95
223
  attr_accessor :stripePublishableKey
96
224
  # @return [String]
97
225
  attr_accessor :stripeRefreshToken
98
226
  # @return [String]
99
227
  attr_accessor :stripeUserId
228
+ # @return [YouCanBookMe::PurchasesSyncChanges]
229
+ attr_accessor :syncToPurchasesChanges
100
230
  # @return [String]
101
231
  attr_accessor :tags
232
+ # @return [String]
233
+ attr_accessor :taxNumber
102
234
  # @return [Boolean]
103
235
  attr_accessor :terms
104
236
  # @return [String]
@@ -106,12 +238,20 @@ module YouCanBookMe
106
238
  # @return [String]
107
239
  attr_accessor :timeZone
108
240
  # @return [String]
241
+ attr_accessor :trialEndsAt
242
+ # @return [String]
243
+ attr_accessor :type
244
+ # @return [String]
245
+ attr_accessor :updatedAt
246
+ # @return [String]
109
247
  attr_accessor :uploadCode
110
248
  # @return [Array<YouCanBookMe::Warning>]
111
249
  attr_accessor :warnings
112
250
  # @return [Boolean]
113
251
  attr_accessor :welcomed
114
252
  # @return [String]
253
+ attr_accessor :xeroId
254
+ # @return [String]
115
255
  attr_accessor :zapierKey
116
256
  # @return [String]
117
257
  attr_accessor :zoomAccessToken
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YouCanBookMe
4
+ class AccountAllocation
5
+ include ModelUtils
6
+
7
+ # @return [String]
8
+ attr_accessor :caligraphId
9
+ # @return [String]
10
+ attr_accessor :email
11
+ # @return [Boolean]
12
+ attr_accessor :ghost
13
+ # @return [String]
14
+ attr_accessor :id
15
+ # @return [String]
16
+ attr_accessor :parentCaligraphId
17
+ # @return [String]
18
+ attr_accessor :parentId
19
+ # @return [Integer]
20
+ attr_accessor :quantityAllocated
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YouCanBookMe
4
+ class AccountChild
5
+ include ModelUtils
6
+
7
+ ASSOCIATION = {
8
+ profiles: Profile
9
+ }.freeze
10
+
11
+ # @return [String]
12
+ attr_accessor :email
13
+ # @return [String]
14
+ attr_accessor :id
15
+ # @return [Boolean]
16
+ attr_accessor :parentId
17
+ # @return [Array<Profile>]
18
+ attr_accessor :profiles
19
+ end
20
+ end
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YouCanBookMe
4
- # YouCanBookMe's CaligraphSafeLocalAccount model.
5
- class CaligraphSafeLocalAccount
4
+ class AccountParent
6
5
  include ModelUtils
7
6
 
8
7
  # @return [String]
9
8
  attr_accessor :email
10
9
  # @return [String]
11
10
  attr_accessor :id
11
+ # @return [Integer]
12
+ attr_accessor :quantityPaidFor
12
13
  end
13
14
  end
@@ -8,6 +8,9 @@ module YouCanBookMe
8
8
  # @return [String]
9
9
  attr_accessor :accountId
10
10
  # @return [String]
11
+ # ['BOOKING_CREATED', 'BOOKING_RESCHEDULED', 'BOOKING_CANCELLED', 'BOOKING_RESCHEDULED_BY_OWNER',
12
+ # 'BOOKING_RESCHEDULED_BY_BOOKER', 'BOOKING_CANCELLED_BY_OWNER', 'BOOKING_CANCELLED_BY_BOOKER', 'BOOKING_ACCEPTED',
13
+ # 'BOOKING_REJECTED', 'BOOKING_STARTS', 'BOOKING_ENDS', 'booked', 'rescheduled', 'cancelled', 'start', 'end']
11
14
  attr_accessor :anchor
12
15
  # @return [Boolean]
13
16
  attr_accessor :attachIcs
@@ -66,6 +69,7 @@ module YouCanBookMe
66
69
  # @return [String]
67
70
  attr_accessor :profileId
68
71
  # @return [String]
72
+ # ['PREDICTION', 'TEMPLATE', 'OVERRIDEN', 'SKIPPED', 'SUCCEEDED', 'FAILED']
69
73
  attr_accessor :status
70
74
  # @return [String]
71
75
  attr_accessor :stylingTemplate
@@ -80,6 +84,7 @@ module YouCanBookMe
80
84
  # @return [String]
81
85
  attr_accessor :to
82
86
  # @return [String]
87
+ # ['ZAP', 'WEBHOOK', 'EMAIL', 'SMS', 'SALESFORCE_TASK', 'SALESFORCE_UPSERT']
83
88
  attr_accessor :type
84
89
  # @return [String]
85
90
  attr_accessor :updated
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YouCanBookMe
4
- # YouCanBookMe's Answer model.
5
4
  class Answer
6
5
  include ModelUtils
7
6
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YouCanBookMe
4
- # YouCanBookMe's Booking model.
5
4
  class Booking
6
5
  include ModelUtils
7
6
 
@@ -9,8 +8,8 @@ module YouCanBookMe
9
8
  actions: Action,
10
9
  answers: Answer,
11
10
  appointmentTypes: ProfileAppointmentType,
12
- caligraphEvent: CaligraphEvent,
13
11
  databaseVersion: Booking,
12
+ event: Event,
14
13
  lobby: BookingLobby,
15
14
  profile: Profile,
16
15
  services: ProfileAppointmentType,
@@ -33,8 +32,6 @@ module YouCanBookMe
33
32
  attr_accessor :appointmentTypesIds
34
33
  # @return [String]
35
34
  attr_accessor :bookerSecret
36
- # @return [YouCanBookMe::CaligraphEvent]
37
- attr_accessor :caligraphEvent
38
35
  # @return [Boolean]
39
36
  attr_accessor :cancelReasonRequired
40
37
  # @return [Boolean]
@@ -48,6 +45,7 @@ module YouCanBookMe
48
45
  # @return [String]
49
46
  attr_accessor :cancelledAt
50
47
  # @return [String]
48
+ # ['BOOKER', 'OWNER']
51
49
  attr_accessor :cancelledBy
52
50
  # @return [String]
53
51
  attr_accessor :createdAt
@@ -87,6 +85,8 @@ module YouCanBookMe
87
85
  attr_accessor :endsAt
88
86
  # @return [String]
89
87
  attr_accessor :endsAtUTC
88
+ # @return [YouCanBookMe::Event]
89
+ attr_accessor :event
90
90
  # @return [Integer]
91
91
  attr_accessor :expectedPrice
92
92
  # @return [String]
@@ -132,6 +132,7 @@ module YouCanBookMe
132
132
  # @return [String]
133
133
  attr_accessor :rescheduledAt
134
134
  # @return [String]
135
+ # ['BOOKER', 'OWNER']
135
136
  attr_accessor :rescheduledBy
136
137
  # @return [String]
137
138
  attr_accessor :reviewAt
@@ -154,6 +155,7 @@ module YouCanBookMe
154
155
  # @return [String]
155
156
  attr_accessor :teamMemberId
156
157
  # @return [String]
158
+ # ['NOT_USED', 'UNDECIDED', 'REJECTED', 'ACCEPTED']
157
159
  attr_accessor :tentative
158
160
  # @return [String]
159
161
  attr_accessor :timeZone
@@ -163,5 +165,7 @@ module YouCanBookMe
163
165
  attr_accessor :title
164
166
  # @return [Integer]
165
167
  attr_accessor :units
168
+ # @return [String]
169
+ attr_accessor :updatedAt
166
170
  end
167
171
  end