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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/booker.rb +87 -14
  3. data/lib/booker/helpers.rb +12 -2
  4. metadata +27 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7457cde43dc028bf90df25a64684631805221f66
4
- data.tar.gz: a48fae502f63f1586234dae303ca2c65a12abf9d
3
+ metadata.gz: 8786e301acd857e3c4e26f5483eb77452f9a3839
4
+ data.tar.gz: 9a9786ffde7e0ae8f9da4ee110e8f435b86a3345
5
5
  SHA512:
6
- metadata.gz: fa4c0de8a4da4325917cd9dca3ad7b87956e2f7be009b8eafd6c718ebfc1539ded8554ad17151a10bd1e945328f72851b7d085b37a07e308f5437d8cf7a309fd
7
- data.tar.gz: 0565a7ab868ea7f6ef542fdfc0bc66cceccf8857390004dbbd6b2729f05ac1a3fef725d845ac45ccf7911d1b150233e0830645a871b4fffe18008f113bd9f7d0
6
+ metadata.gz: 17214da7d4cecaf4b9c991915a45ee793ada0f225da78a24d7d4390eb00431d7bd4595afd0c24cd35930f469f775bdd741df6e3d1adfc53fbf1d860fce3534ad
7
+ data.tar.gz: 490681b619f05f316f8dc8a37b3e7d85f42084d67541489c837beaf0d75b8feb680b1974b0879ee21a8e8ee11ef34de2eb4be099f11f99cccbc28a7479d1bcad
@@ -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
- VERSION = "0.0.19"
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
- return_post_response url, defaults, options
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
- return_post_response url, defaults, options
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
- return_post_response url, defaults, options
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
- p "-----------------------"
327
- p "Ruby-Booker Options:"
328
- p options
329
- p "-----------------------"
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
 
@@ -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, offset = -5
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(offset)).to_i * 1000})/"
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.19
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.1
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: