quicktravel_client 1.1.2 → 2.0.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 +7 -0
- data/.gitignore +5 -0
- data/.ruby-version +1 -1
- data/.travis.yml +14 -2
- data/CHANGELOG.md +34 -3
- data/Gemfile +0 -3
- data/Rakefile +0 -6
- data/examples/login_example.rb +1 -1
- data/gemfiles/rails4.gemfile +9 -0
- data/lib/quick_travel.rb +2 -1
- data/lib/quick_travel/accommodation.rb +1 -15
- data/lib/quick_travel/adapter.rb +98 -67
- data/lib/quick_travel/{adapter_exception.rb → adapter_error.rb} +1 -1
- data/lib/quick_travel/address.rb +2 -7
- data/lib/quick_travel/adjustment.rb +0 -2
- data/lib/quick_travel/bed_configuration.rb +0 -1
- data/lib/quick_travel/bed_requirement.rb +0 -1
- data/lib/quick_travel/booking.rb +22 -46
- data/lib/quick_travel/cache.rb +8 -14
- data/lib/quick_travel/checkout.rb +1 -1
- data/lib/quick_travel/client.rb +2 -4
- data/lib/quick_travel/client_type.rb +2 -1
- data/lib/quick_travel/connection_error.rb +1 -1
- data/lib/quick_travel/constants.rb +0 -1
- data/lib/quick_travel/contact.rb +0 -1
- data/lib/quick_travel/country.rb +0 -3
- data/lib/quick_travel/document.rb +0 -2
- data/lib/quick_travel/document_group.rb +0 -2
- data/lib/quick_travel/location.rb +0 -2
- data/lib/quick_travel/party.rb +7 -12
- data/lib/quick_travel/passenger.rb +0 -1
- data/lib/quick_travel/passenger_price_break.rb +0 -2
- data/lib/quick_travel/passenger_type.rb +0 -2
- data/lib/quick_travel/payment.rb +0 -3
- data/lib/quick_travel/payment_type.rb +4 -13
- data/lib/quick_travel/price_changes.rb +3 -0
- data/lib/quick_travel/price_changes/booking_price_change.rb +30 -0
- data/lib/quick_travel/price_changes/price_change.rb +23 -0
- data/lib/quick_travel/{discounts/discount_tree.rb → price_changes/price_change_tree.rb} +12 -8
- data/lib/quick_travel/product.rb +15 -28
- data/lib/quick_travel/product_type.rb +4 -16
- data/lib/quick_travel/property.rb +4 -20
- data/lib/quick_travel/property_facility.rb +0 -1
- data/lib/quick_travel/property_type.rb +2 -14
- data/lib/quick_travel/region.rb +0 -9
- data/lib/quick_travel/reservation.rb +0 -21
- data/lib/quick_travel/resource.rb +7 -28
- data/lib/quick_travel/room_facility.rb +0 -1
- data/lib/quick_travel/route.rb +9 -25
- data/lib/quick_travel/route_stop.rb +0 -1
- data/lib/quick_travel/service.rb +2 -1
- data/lib/quick_travel/status.rb +23 -0
- data/lib/quick_travel/trip.rb +0 -1
- data/lib/quick_travel/vehicle.rb +2 -4
- data/lib/quick_travel/vehicle_type.rb +0 -3
- data/lib/quick_travel/version.rb +1 -1
- data/quicktravel_client.gemspec +4 -4
- data/spec/booking_spec.rb +24 -0
- data/spec/discounts_spec.rb +69 -69
- data/spec/passenger_type_spec.rb +30 -0
- data/spec/payment_type_spec.rb +10 -0
- data/spec/product_spec.rb +52 -21
- data/spec/product_type_spec.rb +19 -0
- data/spec/property_spec.rb +83 -0
- data/spec/region_spec.rb +1 -1
- data/spec/reservation_spec.rb +3 -2
- data/spec/resource_spec.rb +31 -7
- data/spec/route_spec.rb +118 -0
- data/spec/spec_helper.rb +18 -25
- data/spec/status_spec.rb +9 -0
- data/spec/support/cassettes/booking_create.yml +39 -33
- data/spec/support/cassettes/booking_documents.yml +36 -30
- data/spec/support/cassettes/booking_price_changes.yml +66 -0
- data/spec/support/cassettes/booking_show.yml +38 -32
- data/spec/support/cassettes/booking_update.yml +74 -62
- data/spec/support/cassettes/booking_with_documents.yml +88 -76
- data/spec/support/cassettes/booking_with_nested_attributes.yml +128 -110
- data/spec/support/cassettes/booking_with_price_changes.yml +86 -0
- data/spec/support/cassettes/countries.yml +140 -0
- data/spec/support/cassettes/country_all.yml +36 -30
- data/spec/support/cassettes/create_reservation_fail.yml +32 -27
- data/spec/support/cassettes/create_reservation_with_booking.yml +40 -34
- data/spec/support/cassettes/passenger_all.yml +36 -30
- data/spec/support/cassettes/payment_info.yml +61 -0
- data/spec/support/cassettes/product_date_range_bookability.yml +61 -59
- data/spec/support/cassettes/product_show.yml +42 -32
- data/spec/support/cassettes/product_show_as_agent.yml +63 -0
- data/spec/support/cassettes/product_type_all.yml +53 -0
- data/spec/support/cassettes/property.yml +66 -0
- data/spec/support/cassettes/region_show.yml +36 -30
- data/spec/support/cassettes/reservation_with_extra_picks.yml +137 -110
- data/spec/support/cassettes/resource_fare_bases.yml +47 -78
- data/spec/support/cassettes/resource_product_type.yml +63 -0
- data/spec/support/cassettes/resource_show.yml +37 -31
- data/spec/support/cassettes/resource_with_price.yml +63 -0
- data/spec/support/cassettes/route_all.yml +65 -0
- data/spec/support/cassettes/tenant_switcher.yml +109 -0
- data/spec/support/coverage_loader.rb +26 -0
- data/spec/tenant_spec.rb +28 -0
- metadata +106 -115
- data/bootstrap/boot.rb +0 -4
- data/lib/quick_travel/discounts.rb +0 -3
- data/lib/quick_travel/discounts/booking_discount.rb +0 -18
- data/lib/quick_travel/discounts/discount.rb +0 -21
- data/spec/support/cassettes/booking_create_legacy.yml +0 -50
- data/spec/support/cassettes/booking_discounts.yml +0 -53
- data/spec/support/cassettes/booking_with_discounts.yml +0 -72
- data/spec/support/cassettes/region_index.yml +0 -48
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: badf664a3d19487397626b95ca573f2feb995944
|
4
|
+
data.tar.gz: 11cd881dc671aa773918e21789acbc173ca8f7e6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: be1c4c52240989bcefa2c3a5b9155f9edf11f112fa73f52a9e23bcb15fe8e3d485961f3641865172253377898954f5bf0ea7f611190fe4badc6f80d5aaa1c51b
|
7
|
+
data.tar.gz: a49216933d018771fd9a8f885818d990179a7377c6b71eabf6d4be19b84c481fd6587b083addbc55fdc587c6854ecdfa5d2e5a61ab175f982b42ac523f230ad9
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.2.4
|
data/.travis.yml
CHANGED
@@ -1,12 +1,24 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
3
|
- 1.9
|
4
|
-
|
4
|
+
- 2.2
|
5
|
+
- 2.3.0
|
6
|
+
script: bundle && bundle exec rake spec
|
5
7
|
gemfile:
|
6
8
|
- gemfiles/rails2.gemfile
|
9
|
+
- gemfiles/rails4.gemfile
|
7
10
|
matrix:
|
8
11
|
exclude:
|
12
|
+
- rvm: 1.9
|
13
|
+
gemfile: gemfiles/rails4.gemfile
|
14
|
+
- rvm: 2.2
|
15
|
+
gemfile: gemfiles/rails2.gemfile
|
16
|
+
- rvm: 2.3.0
|
17
|
+
gemfile: gemfiles/rails2.gemfile
|
9
18
|
notifications:
|
10
19
|
email:
|
11
20
|
- support@travellink.com.au
|
12
|
-
flowdock:
|
21
|
+
flowdock:
|
22
|
+
secure: tIc3OVnTl83tGjhjzBSPk7AMRHVta4zAdacBDWOVA3s/YpDoa1wCMaq7xfG7GlEgHtPscvucSKbxoLocBd5d54jQVx3X9q9OrQ91D6h6tbTOK8ZTh1vTdSfMkIoxNjnVJ9KyZYJ3zy44DzfzgmcgqesshqSrXAgcpSvxkEcjAz8=
|
23
|
+
sudo: false
|
24
|
+
cache: bundler
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,36 @@
|
|
1
1
|
# Change Log
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
|
+
This changelog adheres to [Keep a CHANGELOG](http://keepachangelog.com/).
|
2
5
|
|
3
|
-
## [
|
4
|
-
###
|
5
|
-
-
|
6
|
+
## [2.0.0] - 2016-04-08
|
7
|
+
### Added
|
8
|
+
- This changelog
|
9
|
+
- Support for new ProductType API
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
- Discount API renamed Price Change API
|
13
|
+
- Multiple internal refactorings and cleanups
|
14
|
+
- Changes Price Quotes API to support non segment based products
|
15
|
+
|
16
|
+
## [1.1.1] - 2015-06-22
|
17
|
+
### Fixed
|
18
|
+
- Fixed issue with Checkout API
|
19
|
+
|
20
|
+
## [1.1.0] - 2015-06-19
|
21
|
+
### Added
|
22
|
+
- Checkout API
|
23
|
+
|
24
|
+
## [1.0.2] - 2015-06-01
|
25
|
+
### Fixed
|
26
|
+
- Fixed issue with payment type code format
|
27
|
+
|
28
|
+
### Added
|
29
|
+
- Code attribute to passenger type
|
30
|
+
|
31
|
+
## [1.0.1] - 2015-03-04
|
32
|
+
### Fixed
|
33
|
+
- Fixed conflict between active_support and facets underscore method
|
34
|
+
|
35
|
+
## [1.0.0] - 2015-03-03
|
36
|
+
- Initial public release
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -10,9 +10,3 @@ RSpec::Core::RakeTask.new do |t|
|
|
10
10
|
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
11
11
|
# Put spec opts in a file named .rspec in root
|
12
12
|
end
|
13
|
-
|
14
|
-
desc "Generate SimpleCov test coverage and open in your browser"
|
15
|
-
task :coverage do
|
16
|
-
ENV['COVERAGE'] = 'true'
|
17
|
-
Rake::Task['spec'].invoke
|
18
|
-
end
|
data/examples/login_example.rb
CHANGED
data/lib/quick_travel.rb
CHANGED
@@ -8,8 +8,9 @@ module QuickTravel
|
|
8
8
|
require 'quick_travel/cache'
|
9
9
|
require 'quick_travel/config'
|
10
10
|
require 'quick_travel/adapter'
|
11
|
-
require 'quick_travel/
|
11
|
+
require 'quick_travel/adapter_error'
|
12
12
|
require 'quick_travel/connection_error'
|
13
|
+
require 'quick_travel/status'
|
13
14
|
|
14
15
|
# Don't include this guy: pull the pieces into the classes that use it, or ref
|
15
16
|
require 'quick_travel/constants'
|
@@ -4,21 +4,7 @@ require 'quick_travel/room_facility'
|
|
4
4
|
|
5
5
|
module QuickTravel
|
6
6
|
class Accommodation < Adapter
|
7
|
-
|
8
|
-
|
9
|
-
attr_accessor :book_before_level, :book_before_units, :bookable_individually, :bookable_online, :booking_notes, :code, :created_at
|
10
|
-
attr_accessor :days_before_inventory_expires, :default_capacity, :deposit_id, :disclaimer_id, :expiry_level, :expiry_units, :fare_basis_pointer_id
|
11
|
-
attr_accessor :frequent_traveller_points_multiplier, :guardian_minimum_age, :id, :inline_cost_in_cents, :inline_price_in_cents, :inline_pricing
|
12
|
-
attr_accessor :inventory_type, :active, :location_id, :masterpoint_resource_id, :maximum_occupancy, :maximum_passengers, :maximum_passengers_online
|
13
|
-
attr_accessor :maximum_weight, :minimum_age, :minimum_passengers, :name, :no_expiry, :non_commissionable, :on_request_after_inventory_expiration
|
14
|
-
attr_accessor :overriding_passenger_ticket_format_id, :overriding_reservation_ticket_format_id, :overriding_vehicle_ticket_format_id
|
15
|
-
attr_accessor :product_type_id, :property_id, :property_type_id, :reason_required, :report_changes, :required_number_of_vehicles
|
16
|
-
attr_accessor :resource_category_id, :restrict_to_client_types, :star_rating, :type, :unlimited_uses, :updated_at, :uses, :vendor_id
|
17
|
-
attr_accessor :availability, :minimum_bookable_duration, :description,
|
18
|
-
:minimum_price, :nightly_price
|
19
|
-
attr_accessor :on_request
|
20
|
-
attr_accessor :error
|
21
|
-
|
7
|
+
attr_reader :error
|
22
8
|
attr_reader :bed_configurations, :room_facilities
|
23
9
|
|
24
10
|
MAX_DAYS = 8
|
data/lib/quick_travel/adapter.rb
CHANGED
@@ -3,17 +3,14 @@ require 'pp'
|
|
3
3
|
require 'json'
|
4
4
|
require 'active_support/core_ext'
|
5
5
|
require 'money'
|
6
|
-
require 'money_extensions/money_field'
|
7
6
|
|
8
7
|
require 'quick_travel/config'
|
9
|
-
require 'quick_travel/
|
8
|
+
require 'quick_travel/adapter_error'
|
10
9
|
require 'quick_travel/init_from_hash'
|
11
10
|
|
12
11
|
module QuickTravel
|
13
12
|
class Adapter
|
14
|
-
include HTTParty
|
15
13
|
include QuickTravel::InitFromHash
|
16
|
-
include MoneyField
|
17
14
|
|
18
15
|
class_attribute :api_base, :lookup
|
19
16
|
|
@@ -28,10 +25,25 @@ module QuickTravel
|
|
28
25
|
|
29
26
|
def initialize(hash = {})
|
30
27
|
return nil if hash.blank?
|
28
|
+
define_readers(hash.keys)
|
31
29
|
super(Parser.new(hash).parsed_attributes)
|
32
30
|
end
|
33
31
|
|
32
|
+
def define_readers(keys)
|
33
|
+
keys.each do |key|
|
34
|
+
next if respond_to?(key)
|
35
|
+
define_singleton_method(key) { instance_variable_get("@#{key}") }
|
36
|
+
if key.to_s.ends_with? '_cents'
|
37
|
+
name = key.to_s.gsub(/_in_cents$/, '')
|
38
|
+
define_singleton_method(name) {
|
39
|
+
Money.new(instance_variable_get("@#{key}"))
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
34
45
|
def self.find(id, opts = {})
|
46
|
+
check_id!(id)
|
35
47
|
if lookup
|
36
48
|
all.detect { |o| o.id == id.to_i }
|
37
49
|
else
|
@@ -41,9 +53,7 @@ module QuickTravel
|
|
41
53
|
|
42
54
|
def self.all(opts = {})
|
43
55
|
if lookup
|
44
|
-
|
45
|
-
find_all!("#{api_base}.json", opts)
|
46
|
-
}
|
56
|
+
find_all!("#{api_base}.json", opts.merge(cache: "#{name}.all-attrs"))
|
47
57
|
else
|
48
58
|
find_all!("#{api_base}.json", opts)
|
49
59
|
end
|
@@ -54,6 +64,7 @@ module QuickTravel
|
|
54
64
|
end
|
55
65
|
|
56
66
|
def self.update(id, options = {})
|
67
|
+
check_id!(id)
|
57
68
|
put_and_validate("#{api_base}/#{id}.json", options)
|
58
69
|
end
|
59
70
|
|
@@ -72,18 +83,28 @@ module QuickTravel
|
|
72
83
|
|
73
84
|
protected
|
74
85
|
|
75
|
-
|
76
|
-
|
77
|
-
|
86
|
+
def self.check_id!(id)
|
87
|
+
Integer(id)
|
88
|
+
rescue ArgumentError, # if invalid string
|
89
|
+
TypeError # if nil
|
90
|
+
fail ArgumentError, 'id must be an integer'
|
78
91
|
end
|
79
92
|
|
80
93
|
def self.find_all!(request_path, opts = {})
|
81
|
-
response =
|
94
|
+
response = if opts.key? :cache
|
95
|
+
QuickTravel::Cache.cache(opts[:cache], opts[:cache_options]) {
|
96
|
+
get_and_validate(request_path, opts.except(:cache, :cache_options))
|
97
|
+
}
|
98
|
+
else
|
99
|
+
get_and_validate(request_path, opts, return_response_object: true)
|
100
|
+
end
|
101
|
+
full_response = response.respond_to? :parsed_response
|
102
|
+
parsed_response = full_response ? response.parsed_response : response
|
82
103
|
|
83
|
-
deserializer = Deserializer.new(
|
104
|
+
deserializer = Deserializer.new(parsed_response)
|
84
105
|
objects = Array.wrap(deserializer.extract_under_root(self))
|
85
106
|
|
86
|
-
if response.headers['pagination'].present?
|
107
|
+
if full_response && response.headers['pagination'].present?
|
87
108
|
pagination_headers = ::JSON.parse(response.headers['pagination'])
|
88
109
|
WillPaginate::Collection.create(pagination_headers['current_page'], pagination_headers['per_page'], pagination_headers['total_entries']) do |pager|
|
89
110
|
pager.replace(objects)
|
@@ -112,18 +133,16 @@ module QuickTravel
|
|
112
133
|
self.class.extract(collection_data, klass, opts)
|
113
134
|
end
|
114
135
|
|
115
|
-
def self.extract(
|
116
|
-
objects = Array.wrap(
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
# objects = WillPaginate::Collection.create(opts[:page], opts[:per_page], opts).replace(objects)
|
122
|
-
objects
|
136
|
+
def self.extract(raw_objects, klass, opts = {})
|
137
|
+
objects = Array.wrap(raw_objects)
|
138
|
+
if opts[:object_key_name]
|
139
|
+
objects = objects.map { |item| item[opts[:object_key_name]] }
|
140
|
+
end
|
141
|
+
objects.map { |item| klass.new(item) }
|
123
142
|
end
|
124
143
|
end
|
125
144
|
|
126
|
-
# The above
|
145
|
+
# The above find_all and the above find
|
127
146
|
# all suck
|
128
147
|
#
|
129
148
|
# We should make it standard behaviour that objects
|
@@ -171,10 +190,58 @@ module QuickTravel
|
|
171
190
|
call_and_validate(:delete, path, query, opts)
|
172
191
|
end
|
173
192
|
|
193
|
+
def self.call_and_validate(http_method, path, query = {}, opts = {})
|
194
|
+
Api.call_and_validate(http_method, path, query, opts)
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.base_uri(uri = nil)
|
198
|
+
Api.base_uri uri
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
class Parser
|
203
|
+
def initialize(attributes)
|
204
|
+
@attributes = attributes
|
205
|
+
end
|
206
|
+
|
207
|
+
def attributes
|
208
|
+
@attributes ||= {}
|
209
|
+
end
|
210
|
+
|
211
|
+
def parsed_attributes
|
212
|
+
@parsed_attributes ||= parse_attributes
|
213
|
+
end
|
214
|
+
|
215
|
+
private
|
216
|
+
|
217
|
+
def parse_attributes
|
218
|
+
attributes.map.with_object({}) do |(attribute, value), hash|
|
219
|
+
hash[attribute] = parse(attribute, value)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def parse(attribute, value)
|
224
|
+
return nil if value.nil?
|
225
|
+
return convert(value, :to_date) if attribute.to_s.ends_with?('_date')
|
226
|
+
return convert(value, :to_date) if attribute.to_s.ends_with?('_on')
|
227
|
+
# to_datetime as it converts to app time zone, to_time converts to system time zone
|
228
|
+
return convert(value, :to_datetime) if attribute.to_s.ends_with?('_time')
|
229
|
+
return convert(value, :to_datetime) if attribute.to_s.ends_with?('_at')
|
230
|
+
value
|
231
|
+
end
|
232
|
+
|
233
|
+
def convert(value, conversion_method)
|
234
|
+
convertable_value = value.is_a?(Hash) ? value['_value'] : value
|
235
|
+
convertable_value.send(conversion_method)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
class Api
|
240
|
+
include HTTParty
|
241
|
+
|
174
242
|
def self.call_and_validate(http_method, path, query = {}, opts = {})
|
175
243
|
http_params = opts.clone
|
176
244
|
return_response_object = http_params.delete(:return_response_object)
|
177
|
-
klass = self
|
178
245
|
|
179
246
|
# Set default token
|
180
247
|
http_params[:query] ||= query
|
@@ -193,7 +260,7 @@ module QuickTravel
|
|
193
260
|
http_params[:follow_redirects] = false
|
194
261
|
|
195
262
|
begin
|
196
|
-
response =
|
263
|
+
response = self.send(http_method, path, http_params)
|
197
264
|
rescue Errno::ECONNREFUSED
|
198
265
|
raise ConnectionError.new('Connection refused')
|
199
266
|
rescue SocketError
|
@@ -203,7 +270,7 @@ module QuickTravel
|
|
203
270
|
end
|
204
271
|
|
205
272
|
if expect && expect == :json && !response.is_a?(Hash)
|
206
|
-
fail
|
273
|
+
fail AdapterError, <<-FAIL
|
207
274
|
Request expected to be json but failed. Debug information below:
|
208
275
|
http_method: #{http_method.inspect}
|
209
276
|
path: #{path.inspect}
|
@@ -213,7 +280,7 @@ module QuickTravel
|
|
213
280
|
FAIL
|
214
281
|
end
|
215
282
|
|
216
|
-
|
283
|
+
validate!(response)
|
217
284
|
|
218
285
|
if return_response_object
|
219
286
|
response
|
@@ -228,14 +295,14 @@ module QuickTravel
|
|
228
295
|
# Secondly, check for presence of "error" key in returned hash
|
229
296
|
def self.validate!(response)
|
230
297
|
case response.code
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
298
|
+
when 300..399 # redirects
|
299
|
+
fail ConnectionError.new('We were redirected. QT YML configuration appears to be incorrect. Verify your URL and API.')
|
300
|
+
when 400..599 # client and server errors
|
301
|
+
fail AdapterError.new(response)
|
235
302
|
end
|
236
303
|
|
237
304
|
if response_contains_error?(response)
|
238
|
-
fail
|
305
|
+
fail AdapterError, response
|
239
306
|
end
|
240
307
|
end
|
241
308
|
|
@@ -244,40 +311,4 @@ module QuickTravel
|
|
244
311
|
parsed_response.is_a?(Hash) && parsed_response.key?('error')
|
245
312
|
end
|
246
313
|
end
|
247
|
-
|
248
|
-
class Parser
|
249
|
-
def initialize(attributes)
|
250
|
-
@attributes = attributes
|
251
|
-
end
|
252
|
-
|
253
|
-
def attributes
|
254
|
-
@attributes ||= {}
|
255
|
-
end
|
256
|
-
|
257
|
-
def parsed_attributes
|
258
|
-
@parsed_attributes ||= parse_attributes
|
259
|
-
end
|
260
|
-
|
261
|
-
private
|
262
|
-
|
263
|
-
def parse_attributes
|
264
|
-
attributes.map.with_object({}) do |(attribute, value), hash|
|
265
|
-
hash[attribute] = parse(attribute, value)
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
def parse(attribute, value)
|
270
|
-
return nil if value.nil?
|
271
|
-
return convert(value, :to_date) if attribute.to_s.ends_with?('_date')
|
272
|
-
# to_datetime as it converts to app time zone, to_time converts to system time zone
|
273
|
-
return convert(value, :to_datetime) if attribute.to_s.ends_with?('_time')
|
274
|
-
return convert(value, :to_datetime) if attribute.to_s.ends_with?('_at')
|
275
|
-
value
|
276
|
-
end
|
277
|
-
|
278
|
-
def convert(value, conversion_method)
|
279
|
-
convertable_value = value.is_a?(Hash) ? value['_value'] : value
|
280
|
-
convertable_value.send(conversion_method)
|
281
|
-
end
|
282
|
-
end
|
283
314
|
end
|
data/lib/quick_travel/address.rb
CHANGED
@@ -3,13 +3,8 @@ require 'geokit'
|
|
3
3
|
|
4
4
|
module QuickTravel
|
5
5
|
class Address < Adapter
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(hash)
|
9
|
-
super(hash)
|
10
|
-
if @country_id == AUSTRALIA_COUNTRY_ID
|
11
|
-
@country_name = 'Australia'
|
12
|
-
end
|
6
|
+
def country_name
|
7
|
+
QuickTravel::Country.find(@country_id).name
|
13
8
|
end
|
14
9
|
|
15
10
|
def geocode
|