booker_ruby 1.3.0 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbfd30226af31b9499a607d386cd7c311cb57148
4
- data.tar.gz: 48a5cb542aa8b66dc4c5f459ff7f4c9c7ba37795
3
+ metadata.gz: c32d18a501108616082cfd6f1c4d9a9bb77c4acf
4
+ data.tar.gz: 1b518f4e5395d7a9221d34e36cb23c2cdcf42db5
5
5
  SHA512:
6
- metadata.gz: 7a1a633bbc694abbd188920579c2916da443a68a36d17cb9f54084c21029e10803d99e69b4265925da6fba4054026707796ed73d95ba67ffd59727d96508eff3
7
- data.tar.gz: d369adaa852672298b240f520bc5edd8df180a5e8f428e098a01dc1cff59934cd8fad282084be9f5da8d090df9dff460c507508088b0d55a4453662a63a394a5
6
+ metadata.gz: 5c8fe78924f6479548746e2b428b97beed68012a8f4baebd628c382dc1738d31a1294cfc63ad46a881967ca8487cdf52e38aa8b0e48ce4ff1fa8a356e8b11860
7
+ data.tar.gz: c3882ef8de57340214414ccdc1dd19605ea73c94ec1ba6e666fde98f4f910f1b1e9115e50c00a2bede580d692ff26c0ab6c9b6cfd66217e4d5ced3adbbf9c9be
@@ -15,6 +15,16 @@ module Booker
15
15
  Booker::Models::Location.from_hash(response)
16
16
  end
17
17
 
18
+ def get_location_day_schedules(booker_location_id:, params: {})
19
+ # Booker requires fromDate and toDate for JSON API, but does not use them when getDefaultDaySchedule is true
20
+ # So datetime used for these fields does not matter
21
+ random_datetime = Booker::Models::Model.time_to_booker_datetime(Time.now)
22
+
23
+ additional_params = {'getDefaultDaySchedule' => true, 'fromDate' => random_datetime, 'toDate' => random_datetime}
24
+ response = get("/location/#{booker_location_id}/schedule", build_params(additional_params, params))
25
+ response['LocationDaySchedules'].map { |sched| Booker::Models::LocationDaySchedule.from_hash(sched) }
26
+ end
27
+
18
28
  def find_locations(params: {})
19
29
  paginated_request(
20
30
  method: :post,
data/lib/booker/client.rb CHANGED
@@ -65,12 +65,6 @@ module Booker
65
65
  end
66
66
  end
67
67
 
68
- def log_issue(message, extra_info = {})
69
- if (log_message_block = Booker.config[:log_message])
70
- log_message_block.call(message, extra_info)
71
- end
72
- end
73
-
74
68
  def get_booker_resources(http_method, path, params=nil, body=nil, booker_model=nil)
75
69
  http_options = request_options(params, body)
76
70
  puts "BOOKER REQUEST: #{http_method} #{path} #{http_options}" if ENV['BOOKER_API_DEBUG'] == 'true'
@@ -0,0 +1,102 @@
1
+ module Booker
2
+ module Helpers
3
+ module ActiveSupport
4
+ BOOKER_TO_ACTIVE_SUPPORT_TIMEZONE = {
5
+ '(GMT-12:00) International Date Line West' => 'International Date Line West',
6
+ '(GMT-11:00) Midway Island, Samoa' => 'Samoa',
7
+ '(GMT-10:00) Hawaii' => 'Hawaii',
8
+ '(GMT-09:00) Alaska' => 'Alaska',
9
+ '(GMT-08:00) Tijuana, Baja California' => 'Tijuana',
10
+ '(GMT-08:00) Pacific Time (US & Canada)' => 'Pacific Time (US & Canada)',
11
+ '(GMT-07:00) Chihuahua, La Paz, Mazatlan - New' => 'Chihuahua',
12
+ '(GMT-07:00) Arizona' => 'Arizona',
13
+ '(GMT-07:00) Mountain Time (US & Canada)' => 'Mountain Time (US & Canada)',
14
+ '(GMT-07:00) Chihuahua, La Paz, Mazatlan - Old' => 'Chihuahua',
15
+ '(GMT-06:00) Guadalajara, Mexico City, Monterrey - New' => 'Guadalajara',
16
+ '(GMT-06:00) Central Time (US & Canada)' => 'Central Time (US & Canada)',
17
+ '(GMT-06:00) Central America' => 'Central America',
18
+ '(GMT-06:00) Guadalajara, Mexico City, Monterrey - Old' => 'Guadalajara',
19
+ '(GMT-06:00) Saskatchewan' => 'Saskatchewan',
20
+ '(GMT-05:00) Bogota, Lima, Quito, Rio Branco' => 'Bogota',
21
+ '(GMT-05:00) Indiana (East)' => 'Indiana (East)',
22
+ '(GMT-05:00) Eastern Time (US & Canada)' => 'Eastern Time (US & Canada)',
23
+ '(GMT-04:00) Santiago' => 'Santiago',
24
+ '(GMT-04:00) Caracas, La Paz' => 'Caracas',
25
+ '(GMT-04:00) Atlantic Time (Canada)' => 'Atlantic Time (Canada)',
26
+ '(GMT-04:00) Manaus' => 'Atlantic Time (Canada)',
27
+ '(GMT-03:30) Newfoundland' => 'Newfoundland',
28
+ '(GMT-03:00) Brasilia' => 'Brasilia',
29
+ '(GMT-03:00) Greenland' => 'Greenland',
30
+ '(GMT-03:00) Montevideo' => 'Montevideo',
31
+ '(GMT-03:00) Buenos Aires, Georgetown' => 'Buenos Aires',
32
+ '(GMT-02:00) Mid-Atlantic' => 'Mid-Atlantic',
33
+ '(GMT-01:00) Cape Verde Is.' => 'Cape Verde Is.',
34
+ '(GMT-01:00) Azores' => 'Azores',
35
+ '(GMT) Casablanca, Monrovia, Reykjavik' => 'Casablanca',
36
+ '(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London' => 'Dublin',
37
+ '(GMT+01:00) West Central Africa' => 'West Central Africa',
38
+ '(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb' => 'Sarajevo',
39
+ '(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna' => 'Amsterdam',
40
+ '(GMT+01:00) Brussels, Copenhagen, Madrid, Paris' => 'Brussels',
41
+ '(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague' => 'Belgrade',
42
+ '(GMT+02:00) Windhoek' => 'Harare',
43
+ '(GMT+02:00) Jerusalem' => 'Jerusalem',
44
+ '(GMT+02:00) Amman' => 'Jerusalem',
45
+ '(GMT+02:00) Beirut' => 'Jerusalem',
46
+ '(GMT+02:00) Harare, Pretoria' => 'Harare',
47
+ '(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius' => 'Helsinki',
48
+ '(GMT+02:00) Cairo' => 'Cairo',
49
+ '(GMT+02:00) Minsk' => 'Minsk',
50
+ '(GMT+02:00) Athens, Bucharest, Istanbul' => 'Athens',
51
+ '(GMT+03:00) Moscow, St. Petersburg, Volgograd' => 'Moscow',
52
+ '(GMT+03:00) Nairobi' => 'Nairobi',
53
+ '(GMT+03:00) Kuwait, Riyadh' => 'Kuwait',
54
+ '(GMT+03:00) Tbilisi' => 'Tbilisi',
55
+ '(GMT+03:00) Baghdad' => 'Baghdad',
56
+ '(GMT+03:30) Tehran' => 'Tehran',
57
+ '(GMT+04:00) Caucasus Standard Time' => 'Yerevan',
58
+ '(GMT+04:00) Yerevan' => 'Yerevan',
59
+ '(GMT+04:00) Abu Dhabi, Muscat' => 'Abu Dhabi',
60
+ '(GMT+04:00) Baku' => 'Baku',
61
+ '(GMT+04:30) Kabul' => 'Kabul',
62
+ '(GMT+05:00) Ekaterinburg' => 'Ekaterinburg',
63
+ '(GMT+05:00) Islamabad, Karachi, Tashkent' => 'Islamabad',
64
+ '(GMT+05:30) Sri Jayawardenepura' => 'Sri Jayawardenepura',
65
+ '(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi' => 'Chennai',
66
+ '(GMT+05:45) Kathmandu' => 'Kathmandu',
67
+ '(GMT+06:00) Almaty, Novosibirsk' => 'Almaty',
68
+ '(GMT+06:00) Astana, Dhaka' => 'Astana',
69
+ '(GMT+06:30) Yangon (Rangoon)' => 'Rangoon',
70
+ '(GMT+07:00) Bangkok, Hanoi, Jakarta' => 'Bangkok',
71
+ '(GMT+07:00) Krasnoyarsk' => 'Krasnoyarsk',
72
+ '(GMT+08:00) Taipei' => 'Taipei',
73
+ '(GMT+08:00) Kuala Lumpur, Singapore' => 'Kuala',
74
+ '(GMT+08:00) Irkutsk, Ulaan Bataar' => 'Irkutsk',
75
+ '(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi' => 'Beijing',
76
+ '(GMT+08:00) Perth' => 'Perth',
77
+ '(GMT+09:00) Osaka, Sapporo, Tokyo' => 'Osaka',
78
+ '(GMT+09:00) Seoul' => 'Seoul',
79
+ '(GMT+09:00) Yakutsk' => 'Yakutsk',
80
+ '(GMT+09:30) Darwin' => 'Darwin',
81
+ '(GMT+09:30) Adelaide' => 'Adelaide',
82
+ '(GMT+10:00) Hobart' => 'Hobart',
83
+ '(GMT+10:00) Brisbane' => 'Brisbane',
84
+ '(GMT+10:00) Vladivostok' => 'Vladivostok',
85
+ '(GMT+10:00) Guam, Port Moresby' => 'Guam',
86
+ '(GMT+10:00) Canberra, Melbourne, Sydney' => 'Canberra',
87
+ '(GMT+11:00) Magadan, Solomon Is., New Caledonia' => 'Magadan',
88
+ '(GMT+12:00) Fiji, Kamchatka, Marshall Is.' => 'Fiji',
89
+ '(GMT+12:00) Auckland, Wellington' => 'Auckland',
90
+ "(GMT+13:00) Nuku'alofa" => "Nuku'alofa"
91
+ }.freeze
92
+
93
+ def self.to_active_support(booker_timezone_name)
94
+ BOOKER_TO_ACTIVE_SUPPORT_TIMEZONE[booker_timezone_name]
95
+ end
96
+
97
+ def self.booker_timezone_names
98
+ BOOKER_TO_ACTIVE_SUPPORT_TIMEZONE.keys
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,11 @@
1
+ module Booker
2
+ module Helpers
3
+ module LoggingHelper
4
+ def self.log_issue(message, extra_info = {})
5
+ if (log_message_block = Booker.config[:log_message])
6
+ log_message_block.call(message, extra_info)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Booker
2
+ module Models
3
+ class LocationDaySchedule < Model
4
+ attr_accessor 'Weekday',
5
+ 'StartTime',
6
+ 'EndTime'
7
+
8
+ def self.from_hash(hash)
9
+ model = super
10
+ model.Weekday = to_wday(model.Weekday)
11
+ strftime_format = '%T'
12
+ model.StartTime = model.StartTime.try(:strftime, strftime_format)
13
+ model.EndTime = model.EndTime.try(:strftime, strftime_format)
14
+ model
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,11 +1,8 @@
1
1
  module Booker
2
2
  module Models
3
3
  class Model
4
-
5
4
  def initialize(options = {})
6
- options.each do |key, value|
7
- send(:"#{key}=", value)
8
- end
5
+ options.each { |key, value| send(:"#{key}=", value) }
9
6
  end
10
7
 
11
8
  def to_hash
@@ -29,9 +26,7 @@ module Booker
29
26
  hash
30
27
  end
31
28
 
32
- def to_json
33
- Oj.dump(to_hash, mode: :compat)
34
- end
29
+ def to_json; Oj.dump(to_hash, mode: :compat); end
35
30
 
36
31
  def self.from_hash(hash)
37
32
  model = self.new
@@ -58,9 +53,7 @@ module Booker
58
53
  model
59
54
  end
60
55
 
61
- def self.from_list(array)
62
- array.map{|item| self.from_hash(item)}
63
- end
56
+ def self.from_list(array); array.map { |item| self.from_hash(item) }; end
64
57
 
65
58
  def self.constantize(key)
66
59
  begin
@@ -105,8 +98,42 @@ module Booker
105
98
  "/Date(#{timestamp})/"
106
99
  end
107
100
 
108
- private
101
+ def self.timezone_from_booker_timezone(booker_timezone_name)
102
+ normalized_booker_timezone_name = Booker::Helpers::ActiveSupport.to_active_support(booker_timezone_name)
103
+ return normalized_booker_timezone_name if normalized_booker_timezone_name.present?
104
+
105
+ begin
106
+ Booker::Helpers::LoggingHelper.log_issue(
107
+ 'Unable to find time zone name using Booker::Helpers::ActiveSupport.to_active_support',
108
+ booker_timezone_name: booker_timezone_name
109
+ )
110
+ rescue
111
+ end
112
+
113
+ timezone_from_booker_offset!(booker_timezone_name)
114
+ end
115
+
116
+ def self.timezone_from_booker_offset!(booker_timezone_name)
117
+ booker_offset_match = booker_timezone_name.scan(/(\A)(.*)(?=\))/).first
109
118
 
119
+ if booker_offset_match.present?
120
+ booker_offset = booker_offset_match.delete_if { |match| match.blank? }.first
121
+
122
+ if booker_offset
123
+ booker_timezone_map_key = Booker::Helpers::ActiveSupport.booker_timezone_names.find do |key|
124
+ key.start_with?(booker_offset)
125
+ end
126
+
127
+ return Booker::Helpers::ActiveSupport.to_active_support(booker_timezone_map_key) if booker_timezone_map_key
128
+ end
129
+ end
130
+
131
+ raise Booker::Error
132
+ end
133
+
134
+ def self.to_wday(booker_wday); Date.parse(booker_wday).wday; end
135
+
136
+ private
110
137
  def hash_list(array)
111
138
  array.map do |item|
112
139
  if item.is_a? Array
@@ -1,3 +1,3 @@
1
1
  module Booker
2
- VERSION = '1.3.0'
2
+ VERSION = '1.4.0'
3
3
  end
data/lib/booker_ruby.rb CHANGED
@@ -69,6 +69,7 @@ require 'booker/models/available_time'
69
69
  require 'booker/models/class_instance'
70
70
  require 'booker/models/online_booking_settings'
71
71
  require 'booker/models/user'
72
+ require 'booker/models/location_day_schedule'
72
73
 
73
74
  # Base Client
74
75
  require 'booker/client'
@@ -84,3 +85,7 @@ require 'booker/generic_token_store'
84
85
  # Client Subclasses
85
86
  require 'booker/business_client'
86
87
  require 'booker/customer_client'
88
+
89
+ # Helpers
90
+ require 'booker/helpers/logging_helper'
91
+ require 'booker/helpers/active_support_helper'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: booker_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frederick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-18 00:00:00.000000000 Z
11
+ date: 2016-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -124,6 +124,8 @@ files:
124
124
  - lib/booker/customer_rest.rb
125
125
  - lib/booker/errors.rb
126
126
  - lib/booker/generic_token_store.rb
127
+ - lib/booker/helpers/active_support_helper.rb
128
+ - lib/booker/helpers/logging_helper.rb
127
129
  - lib/booker/models/address.rb
128
130
  - lib/booker/models/appointment.rb
129
131
  - lib/booker/models/appointment_treatment.rb
@@ -142,6 +144,7 @@ files:
142
144
  - lib/booker/models/final_total.rb
143
145
  - lib/booker/models/gender.rb
144
146
  - lib/booker/models/location.rb
147
+ - lib/booker/models/location_day_schedule.rb
145
148
  - lib/booker/models/model.rb
146
149
  - lib/booker/models/online_booking_settings.rb
147
150
  - lib/booker/models/original_price.rb