Class: KenpoApi::Resort

Inherits:
Object
  • Object
show all
Extended by:
Routines
Defined in:
lib/kenpo_api/resort.rb

Class Method Summary collapse

Methods included from Routines

apply, find_service, request_application_url

Class Method Details

.apply_reservation(application_url, application_data, type: :lottery) ⇒ Object



24
25
26
27
28
29
# File 'lib/kenpo_api/resort.rb', line 24

def self.apply_reservation(application_url, application_data, type: :lottery)
  apply(application_url: application_url) do |html_document|
    reservation_data = self.validate_reservation_data(application_data, html_document, type: type)
    convert_to_reservation_post_params(reservation_data, type: type)
  end
end

.check_reservation_criteria(application_url, type: :lottery) ⇒ Object

Raises:



18
19
20
21
22
# File 'lib/kenpo_api/resort.rb', line 18

def self.check_reservation_criteria(application_url, type: :lottery)
  html_document = Client.instance.fetch_document(path: application_url)
  raise NotAvailableError.new("Application URL is invalid: #{html_document.xpath('//p').first.content}") if html_document.xpath('//form').first.nil?
  reservation_criteria(html_document, type: type)
end

.check_vacant_search_criteria(resort_name:) ⇒ Object

Raises:



31
32
33
34
35
36
# File 'lib/kenpo_api/resort.rb', line 31

def self.check_vacant_search_criteria(resort_name:)
  service = find_service(category_code: :resort_search_vacant, group_name: resort_name)
  html_document = Client.instance.fetch_document(path: service.path)
  raise NotAvailableError.new("Application URL is invalid: #{html_document.xpath('//p').first.content}") if html_document.xpath('//form').first.nil?
  vacant_search_criteria(html_document)
end

.request_reservation_url(resort_name:, email:) ⇒ Object



13
14
15
16
# File 'lib/kenpo_api/resort.rb', line 13

def self.request_reservation_url(resort_name:, email:)
  service = find_service(category_code: :resort_reserve, group_name: resort_name)
  request_application_url(service_path: service.path, email: email)
end

.request_reservation_url_for_vacant_rooms(resort_name:, search_condition:, vacant_room_id:, email:) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/kenpo_api/resort.rb', line 43

def self.request_reservation_url_for_vacant_rooms(resort_name:, search_condition:, vacant_room_id:, email:)
  vacant_rooms_info = prepare_for_vacant_rooms_reservation(resort_name, search_condition)
  params = vacant_rooms_info[:params].merge({"apply[coma[#{vacant_room_id}]]" => vacant_room_id})
  response = Client.instance.access(path: vacant_rooms_info[:path], method: vacant_rooms_info[:method], params: params)
  if response.status == 200
    document = Nokogiri::HTML(response.body)
    raise NotAvailableError.new("Application URL is invalid: #{document.xpath('id("errorExplanation")').first.content}")
  end
  request_application_url(service_path: response.headers['location'], email: email)
end

.resort_namesObject

Raises:



7
8
9
10
11
# File 'lib/kenpo_api/resort.rb', line 7

def self.resort_names
  category = ServiceCategory.find(:resort_reserve)
  raise NotFoundError.new("Service category not found. code: resort_reserve") if category.nil?
  category.service_groups.map {|group| group.name}
end

.search_vacant_rooms(resort_name:, search_condition:) ⇒ Object



38
39
40
41
# File 'lib/kenpo_api/resort.rb', line 38

def self.search_vacant_rooms(resort_name:, search_condition:)
  vacant_rooms_info = prepare_for_vacant_rooms_reservation(resort_name, search_condition)
  vacant_rooms_info[:vacant_rooms]
end