ruby-booker 0.0.19 → 0.0.24
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 +4 -4
- data/lib/booker.rb +87 -14
- data/lib/booker/helpers.rb +12 -2
- metadata +27 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8786e301acd857e3c4e26f5483eb77452f9a3839
|
4
|
+
data.tar.gz: 9a9786ffde7e0ae8f9da4ee110e8f435b86a3345
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17214da7d4cecaf4b9c991915a45ee793ada0f225da78a24d7d4390eb00431d7bd4595afd0c24cd35930f469f775bdd741df6e3d1adfc53fbf1d860fce3534ad
|
7
|
+
data.tar.gz: 490681b619f05f316f8dc8a37b3e7d85f42084d67541489c837beaf0d75b8feb680b1974b0879ee21a8e8ee11ef34de2eb4be099f11f99cccbc28a7479d1bcad
|
data/lib/booker.rb
CHANGED
@@ -1,19 +1,28 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
require 'booker/helpers'
|
3
|
-
|
3
|
+
require 'booker/version'
|
4
|
+
require 'logger'
|
4
5
|
module Booker
|
5
|
-
|
6
|
-
STAGING_BASE_HOST = "stable-app.secure-booker.com"
|
6
|
+
STAGING_BASE_HOST = "apicurrent-app.booker.ninja"
|
7
7
|
PRODUCTION_BASE_HOST = "app.secure-booker.com"
|
8
8
|
BASE_PATH = "/WebService4/json/customerService.svc"
|
9
9
|
|
10
10
|
class Client
|
11
11
|
attr_reader :url, :access_token, :expires_in, :server_time_offset
|
12
|
+
def logger
|
13
|
+
@logger ||= Logger.new STDOUT
|
14
|
+
end
|
15
|
+
|
16
|
+
def logger=logger
|
17
|
+
@logger = logger
|
18
|
+
end
|
12
19
|
|
13
20
|
def initialize(key, secret, options = {})
|
14
21
|
@production = options.fetch(:production) { false }
|
22
|
+
@log_level = options.fetch(:log_level) { Logger::DEBUG }
|
15
23
|
@key = key
|
16
24
|
@secret = secret
|
25
|
+
set_log_level!
|
17
26
|
set_access_token!
|
18
27
|
set_server_time_offset!
|
19
28
|
end
|
@@ -40,12 +49,13 @@ module Booker
|
|
40
49
|
results << last_result[result_name]
|
41
50
|
results.flatten!
|
42
51
|
|
52
|
+
|
43
53
|
if last_result['TotalResultsCount']
|
44
54
|
total_results = last_result['TotalResultsCount']
|
45
55
|
else
|
46
56
|
total_results = 0
|
47
57
|
end
|
48
|
-
|
58
|
+
logger.debug "#{results.length} / #{total_results}"
|
49
59
|
page_number+=1
|
50
60
|
end while results.length < total_results-1
|
51
61
|
|
@@ -54,7 +64,7 @@ module Booker
|
|
54
64
|
})
|
55
65
|
end
|
56
66
|
|
57
|
-
def run_service_availability options = {}
|
67
|
+
def run_service_availability options = {}, pass_response = false
|
58
68
|
url = build_url '/availability/service'
|
59
69
|
defaults = {
|
60
70
|
"EndDateTime" => Time.now.to_i + 60 * 60 * 5,
|
@@ -66,11 +76,15 @@ module Booker
|
|
66
76
|
"access_token" => @access_token
|
67
77
|
}
|
68
78
|
convert_time_to_booker_format! options
|
69
|
-
|
79
|
+
if pass_response
|
80
|
+
request_params url, defaults, options
|
81
|
+
else
|
82
|
+
return_post_response url, defaults, options
|
83
|
+
end
|
70
84
|
end
|
71
85
|
|
72
86
|
#http://apidoc.booker.com/Method/Detail/129
|
73
|
-
def run_multi_service_availability options = {}
|
87
|
+
def run_multi_service_availability options = {}, pass_response = false
|
74
88
|
raise Booker::ArgumentError, 'Itineraries is required' unless options['Itineraries']
|
75
89
|
url = build_url "/availability/multiservice"
|
76
90
|
defaults =
|
@@ -94,10 +108,14 @@ module Booker
|
|
94
108
|
"EndDateTime" => Time.now.to_i + 60 * 60 * 5,
|
95
109
|
}
|
96
110
|
convert_time_to_booker_format! options
|
97
|
-
|
111
|
+
if pass_response
|
112
|
+
request_params url, defaults, options
|
113
|
+
else
|
114
|
+
return_post_response url, defaults, options
|
115
|
+
end
|
98
116
|
end
|
99
117
|
|
100
|
-
def run_multi_spa_availability options = {}
|
118
|
+
def run_multi_spa_availability options = {}, pass_response = false
|
101
119
|
# TODO: Assert required fields are present
|
102
120
|
url = build_url '/availability/multispa'
|
103
121
|
defaults = {
|
@@ -122,7 +140,11 @@ module Booker
|
|
122
140
|
"access_token" => @access_token
|
123
141
|
}
|
124
142
|
convert_time_to_booker_format! options
|
125
|
-
|
143
|
+
if pass_response
|
144
|
+
request_params url, defaults, options
|
145
|
+
else
|
146
|
+
return_post_response url, defaults, options
|
147
|
+
end
|
126
148
|
end
|
127
149
|
|
128
150
|
# http://apidoc.booker.com/Method/Detail/123
|
@@ -173,6 +195,29 @@ module Booker
|
|
173
195
|
return_post_response url, defaults, options
|
174
196
|
end
|
175
197
|
|
198
|
+
def find_employees options = {}
|
199
|
+
url = build_url '/employees'
|
200
|
+
|
201
|
+
defaults = {
|
202
|
+
"IgnoreFreelancers" => true,
|
203
|
+
"LocationID" => nil,
|
204
|
+
"OnlyIncludeActiveEmployees" => true,
|
205
|
+
"PageNumber" => 1,
|
206
|
+
"PageSize" => 10,
|
207
|
+
"SortBy" => [
|
208
|
+
{
|
209
|
+
"SortBy" => "LastName",
|
210
|
+
"SortDirection" => 0
|
211
|
+
}
|
212
|
+
],
|
213
|
+
"TreatmentID" => nil,
|
214
|
+
"UsePaging" => true,
|
215
|
+
"access_token" => @access_token
|
216
|
+
}
|
217
|
+
|
218
|
+
return_post_response url, defaults, options
|
219
|
+
end
|
220
|
+
|
176
221
|
# http://apidoc.booker.com/Method/Detail/853
|
177
222
|
def find_locations_partial options = {}
|
178
223
|
url = build_url "/locations/partial"
|
@@ -202,6 +247,21 @@ module Booker
|
|
202
247
|
return_post_response url, defaults, options
|
203
248
|
end
|
204
249
|
|
250
|
+
def create_customer options = {}
|
251
|
+
url = build_url "/customer"
|
252
|
+
|
253
|
+
defaults = {
|
254
|
+
'FirstName' => '',
|
255
|
+
'LastName' => '',
|
256
|
+
'HomePhone' => '',
|
257
|
+
'LocationID' => '',
|
258
|
+
'Email' => '',
|
259
|
+
"access_token" => @access_token,
|
260
|
+
}
|
261
|
+
|
262
|
+
return_post_response url, defaults, Booker::Helpers.new_client_params(options)
|
263
|
+
end
|
264
|
+
|
205
265
|
#http://apidoc.booker.com/Method/Detail/124
|
206
266
|
def get_treatment treatment_id
|
207
267
|
url = build_url "/treatment/#{treatment_id}", "?access_token=#{@access_token}"
|
@@ -256,6 +316,14 @@ module Booker
|
|
256
316
|
parse_body response.body
|
257
317
|
end
|
258
318
|
|
319
|
+
def request_params url, defaults, options
|
320
|
+
options = defaults.merge(options)
|
321
|
+
{
|
322
|
+
url: url,
|
323
|
+
options: options
|
324
|
+
}
|
325
|
+
end
|
326
|
+
|
259
327
|
def return_get_response url
|
260
328
|
response = get url
|
261
329
|
parse_body response.body
|
@@ -279,6 +347,10 @@ module Booker
|
|
279
347
|
HTTParty.get url
|
280
348
|
end
|
281
349
|
|
350
|
+
def set_log_level!
|
351
|
+
logger.level = @log_level
|
352
|
+
end
|
353
|
+
|
282
354
|
def set_access_token!
|
283
355
|
url = build_url '/access_token', "?client_id=#{@key}&client_secret=#{@secret}&grant_type=client_credentials"
|
284
356
|
response = HTTParty.get(url)
|
@@ -323,10 +395,11 @@ module Booker
|
|
323
395
|
end
|
324
396
|
|
325
397
|
def log_options options
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
398
|
+
msg = "-----------------------\n"
|
399
|
+
msg << "Ruby-Booker Options:\n"
|
400
|
+
msg << "#{options}"
|
401
|
+
msg << "\n-----------------------"
|
402
|
+
logger.debug msg
|
330
403
|
end
|
331
404
|
end
|
332
405
|
|
data/lib/booker/helpers.rb
CHANGED
@@ -3,10 +3,10 @@ require 'active_support/core_ext/date/zones'
|
|
3
3
|
module Booker
|
4
4
|
module Helpers
|
5
5
|
# Formats a ruby date into the format the Booker wants it in their json API
|
6
|
-
def self.format_date time,
|
6
|
+
def self.format_date time, zone = 'Eastern Time (US & Canada)'
|
7
7
|
return nil unless time
|
8
8
|
|
9
|
-
"/Date(#{(time.in_time_zone(
|
9
|
+
"/Date(#{(time.in_time_zone(zone)).to_i * 1000})/"
|
10
10
|
end
|
11
11
|
|
12
12
|
# Turn date given by booker api into ruby datetime
|
@@ -15,5 +15,15 @@ module Booker
|
|
15
15
|
|
16
16
|
Time.at( time.scan(/\d+/).first.to_i / 1000 ).to_datetime
|
17
17
|
end
|
18
|
+
|
19
|
+
def self.new_client_params(opts)
|
20
|
+
{
|
21
|
+
'FirstName' => opts[:first_name],
|
22
|
+
'LastName' => opts[:last_name],
|
23
|
+
'HomePhone' => opts[:phone],
|
24
|
+
'LocationID' => opts[:location_id],
|
25
|
+
'Email' => opts[:email]
|
26
|
+
}
|
27
|
+
end
|
18
28
|
end
|
19
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-booker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Craige
|
@@ -14,56 +14,70 @@ dependencies:
|
|
14
14
|
name: httparty
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: awesome_print
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - '>='
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
description: Interact with Booker API through Ruby
|
@@ -86,18 +100,19 @@ require_paths:
|
|
86
100
|
- lib
|
87
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
102
|
requirements:
|
89
|
-
- -
|
103
|
+
- - '>='
|
90
104
|
- !ruby/object:Gem::Version
|
91
105
|
version: '0'
|
92
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - '>='
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
requirements: []
|
98
112
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.2.
|
113
|
+
rubygems_version: 2.2.2
|
100
114
|
signing_key:
|
101
115
|
specification_version: 4
|
102
116
|
summary: Ruby interface to Booker API
|
103
117
|
test_files: []
|
118
|
+
has_rdoc:
|