-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhomework_3.rb
89 lines (67 loc) · 1.67 KB
/
homework_3.rb
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
class Developer
attr_reader :task_list, :name
MAX_TASKS = 10
MESSAGES = {
add_task: '%s: add task "%s". Count of tasks in list: %i',
work: '%s: task is done "%s". Left to do tasks: %i'
}
attr_reader :dev_name
def initialize dev_name
@dev_name = dev_name
@task_list = []
end
def add_task(task_name)
can_add_task? or raise 'Too much tasks!'
@task_list << task_name
puts messages[:add_task] % [dev_name, task_name, @task_list.count]
end
def tasks
@task_list.map.with_index{ |a, i| "#{i+1}. #{a}"}
end
def work!
task_name = @task_list.shift or raise 'Нечего делать!'
do_task(task_name)
end
def status
case
when !can_work? then 'свободен'
when !can_add_task? then 'занят'
else 'работаю'
end
end
def can_add_task?
@task_list.count < self.class::MAX_TASKS
end
def can_work?
!@task_list.empty?
end
private
def messages
self.class::MESSAGES
end
def do_task(task_name)
puts messages[:work] % [dev_name, task_name, @task_list.count]
end
end
class JuniorDeveloper < Developer
MAX_TASKS = 5
MAX_TASK_LENGTH = 20
MESSAGES = Developer::MESSAGES.merge(
work: '%s: пытаюсь делать задачу "%s". Осталось задач: %i'
)
def add_task(task_name)
raise 'Слишком сложно!' if task_name.length > MAX_TASK_LENGTH
super
end
end
class SeniorDeveloper < Developer
MAX_TASKS = 15
def work!
can_work? or raise 'Нечего делать!'
if rand > 0.5
puts 'laziness :('
else
[2, @task_list.count].min.times{|t| do_task(@task_list.shift)}
end
end
end