1class MountainBike
2
3 TIRE_WIDTH_FACTOR = 250
4 FRONT_SUSPENSION_FACTOR = 100
5 REAR_SUSPENSION_FACTOR = 150
6
7 def initialize(params)
8 params.each { |key, value| instance_variable_set "@#{key}", value }
9
10 @commission = 0.25
11 @front_suspension_price = 95.0
12 @rear_suspension_price = 67.0
13 @base_price = 490.00
14 end
15
16 def off_road_ability
17 result = @tire_width * TIRE_WIDTH_FACTOR
18 if @type_code == :front_suspension || @type_code == :full_suspension
19 result += @front_fork_travel * FRONT_SUSPENSION_FACTOR
20 end
21 if @type_code == :full_suspension
22 result += @rear_fork_travel * REAR_SUSPENSION_FACTOR
23 end
24 result
25 end
26
27 def price
28 case @type_code
29 when :rigid
30 (1 + @commission) * @base_price
31 when :front_suspension
32 (1 + @commission) * @base_price + @front_suspension_price
33 when :full_suspension
34 (1 + @commission) * @base_price + @front_suspension_price +
35 @rear_suspension_price
36 end
37 end
38
39 def owner
40 @owner
41 end
42
43 def to_s
44 "Mountain bike - owner: #{owner}, off road ability: #{off_road_ability()}, price: #{price}"
45 end
46
47end
48
49pitos_bike = MountainBike.new(:owner => "Pito", :type_code => :rigid, :tire_width => 2.5)
50puts pitos_bike
51
52ricks_bike = MountainBike.new(:owner => "Rick", :type_code => :front_suspension, :tire_width => 2, :front_fork_travel => 3)
53puts ricks_bike
54