7章
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
class Schedule
def scheduled?(schedulable, start_date, end_date)
puts "This #{schedulable.class} " + "is not scheduled\n" + " between #{start_date} and #{end_date}"
false
end
end
class Bicycle
attr_reader :schedule, :size, :chain, :tire_size
# Scheduleを注入し、初期値を設定する
def initialize(args={})
@schedule = args[:schedule] || Schedule.new
# ...
end
# 与えられた期間(現在はBicycleに固有)の間、
# bicycleが利用可能であればtrueを返す
def schedulable?(start_date, end_date)
!scheduled?(start_date - lead_days, end_date)
end
# scheduleの答えを返す
def scheduled?(start_date, end_date)
schedule.scheduled?(self, start_date, end_date)
end
# bicycleがスケジュール可能となるまでの
# 準備日数を返す
def lead_days
1
end
end
require 'date'
starting = Date.parse("2015/09/04")
ending = Date.parse("2015/09/10")
b = Bicycle.new
b.schedulable?(starting, ending)
# This Bicycle is not scheduled
# between 2015-09-03 and 2015-09-10
# => true
|
これは準備。まだ旅行に行っていないので当然true
を返す。
なんかの話の流れで〜なやつ
include
はmoduleをまるごと入れる
extend
は1methodだけ取り込む
includeは自分クラスのひとつ上にmoduleを足すので、呼んだ順にどんどん上書きされるイメージ
1
2
3
4
|
class Hoge
include ModuleA
include ModuleB
end
|
ModuleA
↑
ModuleB
↑
A
で遡っていく