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