ruby-booker 0.0.19 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
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: