Class: CheckList::Menu

Inherits:
Object
  • Object
show all
Defined in:
lib/menu.rb

Overview

Class to build the selection menu

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filepath, opts) ⇒ Menu

Returns a new instance of Menu.



16
17
18
19
20
21
22
23
24
# File 'lib/menu.rb', line 16

def initialize(filepath, opts)
    @opts = opts
    @list = nil
    @task_idx = nil
    @sub_task_idx = nil
    @results = CheckList::Results.new(@opts)
    @json = filepath.fetch_json(CheckList::Config.env)
    show_menu
end

Instance Attribute Details

#resultsObject (readonly)

Returns the value of attribute results.



14
15
16
# File 'lib/menu.rb', line 14

def results
  @results
end

Instance Method Details

#get_list(value) ⇒ Object



103
104
105
# File 'lib/menu.rb', line 103

def get_list(value)
    @json['lists'][value - 1]
end

#nObject



91
92
93
# File 'lib/menu.rb', line 91

def n
    "#{CheckList::Helpers.red}n#{CheckList::Helpers.white}"
end

#naObject



95
96
97
# File 'lib/menu.rb', line 95

def na
    "#{CheckList::Helpers.yellow}na#{CheckList::Helpers.white}"
end

#rec_show_menuObject



42
43
44
# File 'lib/menu.rb', line 42

def rec_show_menu
    show_menu
end

#rec_show_sub_tasksObject



99
100
101
# File 'lib/menu.rb', line 99

def rec_show_sub_tasks
    show_sub_tasks
end

#show_menuObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/menu.rb', line 26

def show_menu
    list_array = @json['lists']
    CheckList::Helpers.log 'Checklists'

    list_array.each_with_index do |list, index|
        CheckList::Helpers.log "#{index + 1}. #{list['name']}"
    end
    value = CheckList::Validations.validate(CheckList::Helpers.ret_value, list_array)
    return CheckList::Helpers.good_bye if !value || value.zero?

    @list = get_list(value) unless value.nil?
    return show_tasks unless @list.nil?

    rec_show_menu
end

#show_sub_tasksObject



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
# File 'lib/menu.rb', line 54

def show_sub_tasks
    # This gaurd clause is neccecary to protect an incorrect value being entered.
    # This causes an extra recrsive call to show_sub_tasks
    return if @task_idx == @list['tasks'].length

    CheckList::Helpers.clear
    CheckList::Helpers.log "#{@task_idx + 1}. #{@list['tasks'][@task_idx]['name']}"

    @sub_task_idx = 0 if @sub_task_idx.nil?
    task = @list['tasks'][@task_idx]
    sub_tasks = @list['tasks'][@task_idx]['subTasks']

    CheckList::Helpers.log "  #{@sub_task_idx + 1}. #{sub_tasks[@sub_task_idx]['name']} #{y}/#{n}/#{na}"

    @sub_task_idx += 1
    value = CheckList::Validations.validate_response(CheckList::Helpers.ret_value)
    return CheckList::Helpers.good_bye if value == 'q'

    # rubocop:disable Style/NumericPredicate:
    if value == 0
        @sub_task_idx -= 1
        return rec_show_sub_tasks
    end
    # rubocop:enable Style/NumericPredicate:

    @results.process_value(@list, value, task, sub_tasks[@sub_task_idx - 1])
    return rec_show_sub_tasks if @sub_task_idx < sub_tasks.length

    @sub_task_idx = 0
    @task_idx += 1
    show_tasks
end

#show_tasksObject



46
47
48
49
50
51
52
# File 'lib/menu.rb', line 46

def show_tasks
    @task_idx = 0 if @task_idx.nil?

    return @results.process_results if @task_idx == @list['tasks'].length

    show_sub_tasks
end

#yObject



87
88
89
# File 'lib/menu.rb', line 87

def y
    "#{CheckList::Helpers.green}y#{CheckList::Helpers.white}"
end