class Ekispert::Course
Attributes
charge[RW]
fare[RW]
pass_status_list[RW]
price_list[RW]
route_list[RW]
serialize_data_list[RW]
teiki1[RW]
teiki12[RW]
teiki3[RW]
teiki6[RW]
Public Class Methods
get(params={})
click to toggle source
# File lib/ekispert/course.rb, line 34 def self.get(params={}) to_course(Ekispert::Client.get('search/course/extreme', params)) end
new(element)
click to toggle source
Calls superclass method
# File lib/ekispert/course.rb, line 6 def initialize(element) @route_list = [] @price_list = [] @pass_status_list = [] @serialize_data_list = [] super(element) define_summary_method relate_line_to_price relate_price_to_line relate_price_and_pass_status end
Private Class Methods
to_course(elem_arr)
click to toggle source
# File lib/ekispert/course.rb, line 38 def self.to_course(elem_arr) elem_arr.xpath('//Course').map { |course_elem| self.new(course_elem) } end
Public Instance Methods
oneway_price()
click to toggle source
# File lib/ekispert/course.rb, line 26 def oneway_price fare.oneway + charge.oneway end
round_price()
click to toggle source
# File lib/ekispert/course.rb, line 30 def round_price fare.round + charge.round end
route()
click to toggle source
# File lib/ekispert/course.rb, line 18 def route @route_list[0] end
serialize_data()
click to toggle source
# File lib/ekispert/course.rb, line 22 def serialize_data @serialize_data_list[0].text end
Private Instance Methods
define_summary_method()
click to toggle source
This method define summary methods. If nothing 'HogeSummary' elements, create and set empty Course::Price
instance. result:
Course#fare Course#charge Course#teiki1 ...
# File lib/ekispert/course.rb, line 54 def define_summary_method %w[fare charge teiki1 teiki3 teiki6 teiki12].each do |summary_type| self.define_singleton_method(summary_type) { price_summary(summary_type) } end end
find_pass_status(price)
click to toggle source
# File lib/ekispert/course.rb, line 118 def find_pass_status(price) return Ekispert::Course::PassStatus.new unless price.respond_to?(:pass_class_index) @pass_status_list.find { |status| status.index == price.pass_class_index } end
find_price(line, price_type)
click to toggle source
# File lib/ekispert/course.rb, line 81 def find_price(line, price_type) index_type = "#{price_type}_index" return Ekispert::Course::Price.new unless line.respond_to?(index_type) kind = price_type.to_s.capitalize @price_list.find { |price| price.kind == kind && price.index == line.send(index_type) } end
price_summary(type)
click to toggle source
# File lib/ekispert/course.rb, line 60 def price_summary(type) @price_list.find { |price| price.kind == "#{type.capitalize}Summary" } || Ekispert::Course::Price.new end
relate_line_to_price()
click to toggle source
This method relate Course::Route::Line
instance to Course::Price
instance. If even without those associated with Line, return Price
instance. Ex.
Course::Route::Line#fare Course::Route::Line#charge Course::Route::Line#teiki1 etc...
# File lib/ekispert/course.rb, line 70 def relate_line_to_price @route_list[0].line_list.each do |line| line.fare = find_price(line, :fare) line.charge = find_price(line, :charge) line.teiki1 = find_price(line, :teiki1) line.teiki3 = find_price(line, :teiki3) line.teiki6 = find_price(line, :teiki6) line.teiki12 = find_price(line, :teiki12) end end
relate_price_and_pass_status()
click to toggle source
This method relate Course::Price
instance and Course::PassStatus
instance. It's judged based on to Price#pass_class_index. result:
Course::Price#pass_status
# File lib/ekispert/course.rb, line 106 def relate_price_and_pass_status price_list.each do |price| next unless price.kind.match?(/^Teiki\d{1}$/) pass_status = find_pass_status(price) # Price to PassStatus price.pass_status = pass_status # PassStatus to Price pass_status.price_list << price end end
relate_price_to_line()
click to toggle source
This method relate Course::Price
instance to Course::Route::Line
instance. It's judged based on to Price#from_line_index and Price#from_line_index. result:
Course::Price#line_list
# File lib/ekispert/course.rb, line 93 def relate_price_to_line @price_list.each do |price| next unless price.respond_to?(:from_line_index) price_range = (price.from_line_index.to_i..price.to_line_index.to_i) price.line_list = @route_list[0].line_list.select { |line| price_range.include?(line.index.to_i) } end end