golf_switch 1.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.
Files changed (50) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +127 -0
  5. data/Rakefile +1 -0
  6. data/examples/area_test.rb +15 -0
  7. data/examples/book_golf.rb +74 -0
  8. data/examples/cancel_booking.rb +78 -0
  9. data/examples/course_avail.rb +26 -0
  10. data/examples/course_avail_list.rb +33 -0
  11. data/examples/course_info.rb +15 -0
  12. data/examples/course_list.rb +15 -0
  13. data/examples/course_policy_test.rb +15 -0
  14. data/golf_switch.gemspec +20 -0
  15. data/lib/golf_switch.rb +42 -0
  16. data/lib/golf_switch/alt_rate_type.rb +28 -0
  17. data/lib/golf_switch/area.rb +52 -0
  18. data/lib/golf_switch/area_response.rb +27 -0
  19. data/lib/golf_switch/available_course.rb +53 -0
  20. data/lib/golf_switch/book_golf.rb +41 -0
  21. data/lib/golf_switch/book_golf_item.rb +50 -0
  22. data/lib/golf_switch/cancel_golf.rb +49 -0
  23. data/lib/golf_switch/cancel_golf_response.rb +16 -0
  24. data/lib/golf_switch/configuration.rb +28 -0
  25. data/lib/golf_switch/country.rb +30 -0
  26. data/lib/golf_switch/country_region.rb +29 -0
  27. data/lib/golf_switch/course.rb +28 -0
  28. data/lib/golf_switch/course_avail.rb +73 -0
  29. data/lib/golf_switch/course_avail_date.rb +25 -0
  30. data/lib/golf_switch/course_avail_list.rb +85 -0
  31. data/lib/golf_switch/course_avail_request.rb +56 -0
  32. data/lib/golf_switch/course_avail_time.rb +31 -0
  33. data/lib/golf_switch/course_info.rb +38 -0
  34. data/lib/golf_switch/course_info_course.rb +90 -0
  35. data/lib/golf_switch/course_list.rb +62 -0
  36. data/lib/golf_switch/course_list_course.rb +27 -0
  37. data/lib/golf_switch/course_policy.rb +14 -0
  38. data/lib/golf_switch/course_policy_response.rb +18 -0
  39. data/lib/golf_switch/get_alt_rate_type.rb +42 -0
  40. data/lib/golf_switch/get_course_policy.rb +50 -0
  41. data/lib/golf_switch/get_golf_booking.rb +49 -0
  42. data/lib/golf_switch/golf_book.rb +42 -0
  43. data/lib/golf_switch/golf_book_info.rb +17 -0
  44. data/lib/golf_switch/payment.rb +39 -0
  45. data/lib/golf_switch/player.rb +35 -0
  46. data/lib/golf_switch/region_area.rb +13 -0
  47. data/lib/golf_switch/request.rb +62 -0
  48. data/lib/golf_switch/score_card.rb +5 -0
  49. data/lib/golf_switch/version.rb +3 -0
  50. metadata +110 -0
@@ -0,0 +1,29 @@
1
+ module GolfSwitch
2
+ class CountryRegion < AreaResponse
3
+ attr_accessor :region_areas
4
+ def initialize(area_id=nil,name=nil)
5
+ super(area_id,name)
6
+ @region_areas = []
7
+ end
8
+
9
+ def self.parse_region(region)
10
+ golfswitch_region = CountryRegion.new(region[:id],region[:nm])
11
+ golfswitch_region.parse_region_areas(region[:areas])
12
+ golfswitch_region
13
+ end
14
+
15
+ def areas
16
+ @region_areas
17
+ end
18
+
19
+ def parse_region_areas(areas)
20
+ if areas[:area] && areas[:area].is_a?(Array)
21
+ areas[:area].each do |area|
22
+ @region_areas << RegionArea.parse_region_area(area)
23
+ end
24
+ elsif areas[:area] && areas[:area].is_a?(Hash)
25
+ @region_areas << RegionArea.parse_region_area(areas[:area])
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+
2
+ module GolfSwitch
3
+ class Course
4
+ attr_accessor :id,:xid,:on_req,:nm,:cty,:st,:cou,:s_cou,:s_reg,:s_ar,:lat,:lon,:adv_days,:inside_days,:dist,:promo,:rating,:img,:img_base
5
+ # insideDays Max days within tee time bookings are allowed.
6
+ # Eg 0 = bookings for today are allowed
7
+ # 1 = bookings allowed for tomorrow, but not today
8
+ alias :name :nm
9
+ alias :country :cou
10
+ alias :state :st
11
+ alias :city :cty
12
+ alias :country_id :s_cou
13
+ alias :regon_id :s_reg
14
+ alias :area_id :s_ar
15
+
16
+
17
+
18
+ def img_url(protocol="https")
19
+ if @img
20
+ "#{protocol}://#{img_base.to_s}/#{self.id}/#{img.to_s}".gsub("\/\/",'/')
21
+ else
22
+ ""
23
+ end
24
+ end
25
+
26
+
27
+ end
28
+ end
@@ -0,0 +1,73 @@
1
+ module GolfSwitch
2
+ class CourseAvail < GolfSwitch::Request
3
+ attr_accessor :course_id,:play_beg_date,:play_end_date,:time,:players,:alt_rate_type,:promo_code
4
+ attr_accessor :member_no,:member_no2,:member_no3,:member_no4
5
+ attr_accessor :show_all_times,:barter_only,:charging_only,:specials_only,:regular_rate_only,:profile_id,:api_response
6
+
7
+ def initialize(attributes = {})
8
+ attributes.each do |name, value|
9
+ begin
10
+ send("#{name}=", value)
11
+ end
12
+ end
13
+ @play_end_date||= @play_beg_date
14
+ end
15
+
16
+ def option_attributes
17
+ options = {}
18
+ options.merge!("CourseId"=>@course_id) unless @course_id.blank?
19
+ options.merge!("PlayBegDate"=>(DateTime.parse(@play_beg_date).strftime("%Y-%m-%dT00:00:00"))) unless @play_beg_date.blank?
20
+ options.merge!("PlayEndDate"=>(DateTime.parse(@play_end_date).strftime("%Y-%m-%dT00:00:00"))) unless @play_end_date.blank?
21
+
22
+ options.merge!("MemberNo"=>@member_no) unless @member_no.blank?
23
+ options.merge!("MemberNo2"=>@member_no2) unless @member_no2.blank?
24
+ options.merge!("MemberNo3"=>@member_no3) unless @member_no3.blank?
25
+ options.merge!("MemberNo4"=>@member_no4) unless @member_no4.blank?
26
+
27
+ options.merge!("Time"=>@time) unless @time.blank?
28
+ options.merge!("Players"=>@players) unless @players.blank?
29
+ options.merge!("AltRateType"=>@alt_rate_type) unless @alt_rate_type.blank?
30
+ options.merge!("PromoCode"=>@promo_code) unless @promo_code.blank?
31
+ options.merge!("ShowAllTimes"=>@show_all_times) unless @show_all_times.blank?
32
+ options.merge!("BarterOnly"=>@barter_only) unless @barter_only.blank?
33
+ options.merge!("ChargingOnly"=>@charging_only) unless @charging_only.blank?
34
+ options.merge!("SpecialsOnly"=>@specials_only) unless @specials_only.blank?
35
+ options.merge!("RegularRateOnly"=>@regular_rate_only) unless @regular_rate_only.blank?
36
+ options.merge!("ProfileId"=>@profile_id) unless @profile_id.blank?
37
+ options
38
+ end
39
+
40
+ def commit
41
+ super("course_avail")
42
+ end
43
+
44
+ def get_options
45
+ {
46
+ "Req"=>{
47
+ "CourseAvailRequest"=>option_attributes
48
+ }
49
+
50
+ }
51
+ end
52
+
53
+ def parse_error
54
+ begin
55
+ @response[:course_avail_response][:course_avail_result]
56
+ rescue
57
+ "Error on Parsing error messsage"
58
+ end
59
+ end
60
+
61
+ def parse_response
62
+ begin
63
+ unless error?
64
+ @api_response = AvailableCourse.parse_courses(@response[:course_avail_response][:course_avail_result])
65
+ else
66
+ puts "Error #{error_message}"
67
+ end
68
+ rescue
69
+
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ module GolfSwitch
2
+ class CourseAvailDate
3
+ attr_accessor :dt,:al_times
4
+ alias :date :dt
5
+
6
+ def initialize
7
+ @al_times = []
8
+ end
9
+
10
+ def self.parse_date_info(al_date)
11
+
12
+ avail_date = CourseAvailDate.new
13
+ avail_date.dt= al_date[:dt]
14
+ if al_date[:times] && al_date[:times][:al_time].is_a?(Array)
15
+ al_date[:times][:al_time].each do |al_time|
16
+ avail_date.al_times << CourseAvailTime.new(al_time)
17
+ end
18
+ elsif al_date[:times] && al_date[:times][:al_time].is_a?(Hash)
19
+ avail_date.al_times << CourseAvailTime.new(al_date[:times][:al_time])
20
+ end
21
+ avail_date
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,85 @@
1
+ module GolfSwitch
2
+ class CourseAvailList < GolfSwitch::Request
3
+ attr_accessor :country_id,:region_id,:area
4
+ attr_accessor :play_beg_date,:play_end_date,:time,:players,:alt_rate_type,:promo_code
5
+ attr_accessor :latitude,:longitude,:postal_code,:max_distance,:max_distance_type,:featured_only
6
+ attr_accessor :show_all_times,:show_if_no_times,:barter_only,:charging_only,:specials_only,:regular_rate_only
7
+ attr_accessor :profile_id,:api_response
8
+ # play_beg_date,play_end_date is "yyyy-mm-dd" format
9
+ # Time HHMM format
10
+ def initialize(attributes = {})
11
+
12
+ attributes.each do |name, value|
13
+ begin
14
+ send("#{name}=", value)
15
+ end
16
+ end
17
+ @max_distance_type = "M" unless ["M","K"].include?(@max_distance_type)
18
+ @country_id ||= "USA"
19
+ @play_end_date||= @play_beg_date
20
+ end
21
+
22
+ def option_attributes
23
+ options = {}
24
+ options.merge!("CountryId"=>@country_id) unless @country_id.blank?
25
+ options.merge!("RegionId"=>@region_id) unless @region_id.blank?
26
+ options.merge!("Area"=>@area) unless @area.blank?
27
+
28
+ options.merge!("PlayBegDate"=>(DateTime.parse(@play_beg_date).strftime("%Y-%m-%dT00:00:00"))) unless @play_beg_date.blank?
29
+
30
+ options.merge!("PlayEndDate"=>(DateTime.parse(@play_end_date).strftime("%Y-%m-%dT00:00:00"))) unless @play_end_date.blank?
31
+
32
+ options.merge!("Time"=>@time) unless @time.blank?
33
+ options.merge!("Players"=>@players) unless @players.blank?
34
+ options.merge!("AltRateType"=>@alt_rate_type) unless @alt_rate_type.blank?
35
+ options.merge!("PromoCode"=>@promo_code) unless @promo_code.blank?
36
+
37
+ options.merge!("Latitude"=>@latitude) unless @latitude.blank?
38
+ options.merge!("Longitude"=>@longitude) unless @longitude.blank?
39
+ options.merge!("PostalCode"=>@postal_code) unless @postal_code.blank?
40
+ options.merge!("MaxDistance"=>@max_distance) unless @max_distance.blank?
41
+ options.merge!("MaxDistanceType"=>@max_distance_type) if !@max_distance.blank? && !@max_distance_type.blank?
42
+ options.merge!("FeaturedOnly"=>@featured_only) unless @featured_only.blank?
43
+
44
+ options.merge!("ShowAllTimes"=>@show_all_times) unless @show_all_times.blank?
45
+ options.merge!("ShowIfNoTimes"=>@show_if_no_times) unless @show_if_no_times.blank?
46
+ options.merge!("BarterOnly"=>@barter_only) unless @barter_only.blank?
47
+ options.merge!("ChargingOnly"=>@charging_only) unless @charging_only.blank?
48
+ options.merge!("SpecialsOnly"=>@specials_only) unless @specials_only.blank?
49
+ options.merge!("RegularRateOnly"=>@regular_rate_only) unless @regular_rate_only.blank?
50
+ options.merge!("ProfileId"=>@profile_id) unless @profile_id.blank?
51
+
52
+
53
+ options
54
+ end
55
+
56
+ def get_options
57
+ {
58
+ "Req"=>
59
+ option_attributes
60
+ }
61
+ end
62
+
63
+ def commit
64
+ super("course_avail_list")
65
+ end
66
+
67
+ def parse_error
68
+ @response[:course_avail_list_response][:course_avail_list_result]
69
+ end
70
+
71
+ def parse_response
72
+ begin
73
+ unless error?
74
+ @api_response = AvailableCourse.parse_courses(@response[:course_avail_list_response][:course_avail_list_result])
75
+ else
76
+ puts "Error #{error_message}"
77
+ end
78
+ rescue
79
+
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,56 @@
1
+ # avail_course = GolfSwitch::CourseAvailRequest.new
2
+ # avail_course.course_avails << GolfSwitch::CourseAvail.new(options)
3
+ # avail_course.course_avails << GolfSwitch::CourseAvail.new(options)
4
+ # avail_course.commit
5
+
6
+ module GolfSwitch
7
+ class CourseAvailRequest < GolfSwitch::Request
8
+ attr_accessor :course_avails,:api_response
9
+
10
+ def initialize
11
+ @course_avails = []
12
+ end
13
+
14
+ def commit
15
+ super("course_avail")
16
+ end
17
+
18
+ def course_avail_attributes
19
+ option_attributes = []
20
+ Array(@course_avails).flatten.compact.each do |avail|
21
+ if avail.is_a?(GolfSwitch::CourseAvail)
22
+ option_attributes << avail.option_attributes
23
+ else
24
+ # Raise an error it should be an object of course Avail
25
+ end
26
+ end
27
+ option_attributes
28
+ end
29
+
30
+ def get_options
31
+ {
32
+ "Req"=>{
33
+ "CourseAvailRequest"=>course_avail_attributes
34
+ }
35
+
36
+ }
37
+ end
38
+
39
+ def parse_error
40
+ @response[:course_avail_response][:course_avail_result]
41
+ end
42
+
43
+ def parse_response
44
+ begin
45
+ unless error?
46
+ @api_response = AvailableCourse.parse_courses(@response[:course_avail_response][:course_avail_result])
47
+ else
48
+ puts "Error #{error_message}"
49
+ end
50
+ rescue
51
+
52
+ end
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,31 @@
1
+ module GolfSwitch
2
+ class CourseAvailTime
3
+ attr_accessor :tm,:allow,:pp_price,:pp_reg_price,:pp_txn_fee,:curr,:pp_txn_free,:pp_charge,:chrg_curr,:pp_non_ref,:pp_net_rt,:pp_rew_pts,:inc,:info,:flags
4
+ alias :per_person_price :pp_price
5
+ alias :per_person_charge :pp_charge
6
+ def initialize(attributes={})
7
+ attributes.each do |name, value|
8
+ begin
9
+ send("#{name}=", value)
10
+ end
11
+ end
12
+ end
13
+ def no_of_allowed_player
14
+ @allow.split("").count{|p| p=='Y'}
15
+ end
16
+
17
+ def min_player
18
+ min_index = @allow.split("").index("N")
19
+ min_index.blank? ? 1 : min_index+2
20
+ end
21
+
22
+ def max_player
23
+ begin
24
+ @allow.split("").rindex("Y")+1
25
+ rescue
26
+ no_of_allowed_player
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ module GolfSwitch
2
+ class CourseInfo < GolfSwitch::Request
3
+ attr_accessor :course_id,:api_response
4
+
5
+ def initialize(course_id)
6
+ @course_id = course_id
7
+ end
8
+
9
+ def get_options
10
+ {
11
+ "Req"=>{
12
+ "CourseId"=>@course_id
13
+ }
14
+ }
15
+ end
16
+
17
+ def commit
18
+ super("course_info")
19
+ end
20
+
21
+ def parse_error
22
+ @response[:course_info_response][:course_info_result]
23
+ end
24
+
25
+ def parse_response
26
+ begin
27
+ unless error?
28
+ @api_response = CourseInfoCourse.parse_course(@response[:course_info_response][:course_info_result])
29
+ else
30
+ puts "Error #{error_message}"
31
+ end
32
+ rescue
33
+ puts "Error On Parsing Response"
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,90 @@
1
+ module GolfSwitch
2
+ class CourseInfoCourse < GolfSwitch::Course
3
+ attr_accessor :from_price,:to_price,:curr,:note,:short_promo,:rating_cnt,:max_reward_points,:addr1,:zip
4
+ attr_accessor :cc_allow,:allow_players,:year_built,:holes,:designer,:greens,:imgs,:services
5
+ attr_accessor :has_net_rates,:has_trade,:cxl_policy,:payment_terms,:score_card,:dress_code
6
+ attr_accessor :yard_ages,:pars,:handicaps
7
+
8
+ def initialize(attributes={})
9
+ @yard_ages= []
10
+ @pars = []
11
+ @handicaps = []
12
+ @imgs = []
13
+ attributes.each do |name, value|
14
+ begin
15
+ if name.to_s=="imgs"
16
+ parse_images(value)
17
+ elsif name.to_s =="cxl_policy"
18
+ @cxl_policy = GolfSwitch::CoursePolicy.new(value)
19
+ elsif name.to_s == "score_card"
20
+ @yard_ages = parse_score_card((value[:yardages][:yardage] rescue nil))
21
+ @pars = parse_score_card((value[:pars][:par] rescue nil))
22
+ @handicaps =parse_score_card((value[:handicaps][:handicap] rescue nil))
23
+ else
24
+ send("#{name}=", value)
25
+ end
26
+ rescue
27
+ puts "Add #{name} as accessor in Corse Info Course"
28
+ end
29
+ end
30
+ set_course_image
31
+
32
+ end
33
+ def set_course_image
34
+ unless @imgs.grep(/overview/).blank?
35
+ @img = @imgs.grep(/overview/).first
36
+ else
37
+ @img = @imgs[0]
38
+ end
39
+
40
+ end
41
+
42
+ def parse_score_card(scores)
43
+ score_card =[]
44
+ if scores.is_a?(Array)
45
+ scores.each do |score|
46
+ score_card << GolfSwitch::ScoreCard.new(score)
47
+ end
48
+ elsif scores.is_a?(Hash)
49
+ score_card << GolfSwitch::ScoreCard.new(scores)
50
+ end
51
+ score_card
52
+ end
53
+
54
+ def parse_images(imgs)
55
+ if imgs[:img].is_a?(Array)
56
+ imgs[:img].each do |img|
57
+ @imgs << img
58
+ end
59
+ elsif imgs[:img].is_a?(String)
60
+ @imgs << imgs[:img]
61
+ end
62
+ end
63
+
64
+ def no_of_allowed_player
65
+ @allow_players.split("").count{|p| p=='Y'}
66
+ end
67
+
68
+ def self.parse_course(response_hash)
69
+ CourseInfoCourse.new(response_hash[:course].merge(:img_base=>response_hash[:img_base]))
70
+ end
71
+
72
+ def images(protocol="https")
73
+ images = []
74
+ self.imgs.each do |img|
75
+ images << build_url(img,protocol)
76
+ end
77
+ images
78
+ end
79
+
80
+ protected
81
+ def build_url(img,protocol="https")
82
+ if img
83
+ "#{protocol}://#{self.img_base.to_s}/#{self.id}/#{img.to_s}".gsub("\/\/",'/')
84
+ else
85
+ ""
86
+ end
87
+ end
88
+
89
+ end
90
+ end