Class: LocalSkiReport::CLI

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

Overview

Our CLI Controller

Constant Summary collapse

STATES_WITH_RESORTS =
[
    { :midwest => ["Illinois", "Indiana", "Iowa", "Kansas", "Michigan", "Minnesota", "Missouri", "Ohio","Wisconsin"] },
    { :northeast => ["Connecticut", "Maine", "Massachusetts", "New Hampshire", "New Jersey", "New York", "Pennsylvania", "Rhode Island", "Vermont"] },
    { :northwest => ["Alaska", "Idaho", "Oregon", "Washington"] },
    { :rockies => ["Colorado", "Montana", "New Mexico", "Utah", "Wyoming"] },
    { :southeast => ["Alabama", "Georgia", "Maryland", "North Carolina", "Tennessee", "Virginia", "West Virginia"] },
    { :west_coast => ["Arizona", "California", "Nevada"] }
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCLI

Returns a new instance of CLI.



15
16
17
# File 'lib/local_ski_report/cli.rb', line 15

def initialize
    LocalSkiReport::Scraper.scrap_resorts_page("united-states")
end

Instance Attribute Details

#resortObject

Returns the value of attribute resort.



4
5
6
# File 'lib/local_ski_report/cli.rb', line 4

def resort
  @resort
end

Instance Method Details

#callObject



19
20
21
22
23
# File 'lib/local_ski_report/cli.rb', line 19

def call
    greeting
    menu
    exit_msg
end

#display_reportObject



152
153
154
# File 'lib/local_ski_report/cli.rb', line 152

def display_report
    puts @resort.reports.first.report
end

#display_xt_reportObject



146
147
148
149
150
# File 'lib/local_ski_report/cli.rb', line 146

def display_xt_report
    report = resort.reports.first
    LocalSkiReport::Scraper.scrap_report_page(report)
    puts report.xt_report
end

#exit_msgObject



156
157
158
159
160
161
# File 'lib/local_ski_report/cli.rb', line 156

def exit_msg
    separator(60)
    puts "Check back later for the latest Ski reports."
    puts "Thanks for using Local Ski Report gem!"
    separator(60)
end

#get_key(num) ⇒ Object



66
67
68
# File 'lib/local_ski_report/cli.rb', line 66

def get_key(num)
    STATES_WITH_RESORTS[num].keys[0]
end

#get_state(reg_num, user_reg, st_num) ⇒ Object



70
71
72
# File 'lib/local_ski_report/cli.rb', line 70

def get_state(reg_num, user_reg, st_num)
    STATES_WITH_RESORTS[reg_num][user_reg][st_num] + ", USA"
end

#greetingObject



58
59
60
61
62
63
64
# File 'lib/local_ski_report/cli.rb', line 58

def greeting    
    separator(40)
    puts "Welcome to Local Ski Report gem"
    separator(40)
   puts "Let's Get Your Local Ski Report"
    puts " "
end

#list_regionsObject



81
82
83
84
85
86
87
88
89
# File 'lib/local_ski_report/cli.rb', line 81

def list_regions
    i = 1
    STATES_WITH_RESORTS.each do |region|
        region.each_key do |k|
            puts "#{i}. #{k.to_s.gsub("_", " ").upcase}"
            i += 1
        end
    end
end

#list_resorts(state) ⇒ Object



74
75
76
77
78
79
# File 'lib/local_ski_report/cli.rb', line 74

def list_resorts(state)
    resorts = LocalSkiReport::Resort.find_by_location(state)
    # resorts = LocalSkiReport::Scraper.scrap_resorts_page(state)
    resorts.each.with_index(1) { |r, i| puts "#{i}. #{r.name}" }
    resorts
end

#list_states(num) ⇒ Object



91
92
93
94
95
# File 'lib/local_ski_report/cli.rb', line 91

def list_states(num)
    STATES_WITH_RESORTS[num].each_value do |states|
        states.each.with_index(1) { |state, i| puts "#{i}. #{state}" }
    end
end


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
# File 'lib/local_ski_report/cli.rb', line 25

def menu
    region_num = select_region
    user_region = get_key(region_num) 
    separator(50)
    
    state_num = select_state(region_num, user_region)
    user_state = get_state(region_num, user_region, state_num) 
    separator(50)
    
    select_resort(user_state)
    display_report
    
    input = nil
    while input != "exit"
        puts "Type: 'more' for detailed report, 'new' for new search, 'exit' to Quit."
        input = gets.chomp.downcase
        
        case input
        when "new"
            menu
            break
        when "more"
            display_xt_report
        when "exit"
            puts
            puts
            break
        else
            puts "Invalid command entered."
        end
    end
end

#select_regionObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/local_ski_report/cli.rb', line 97

def select_region
    list_regions
    separator(50)
    puts "Select a region to check? type number: "
    input =  gets.chomp.to_i - 1
    if input.between?(0, STATES_WITH_RESORTS.size - 1)
        input
    else
        separator(55)
        puts "Invalid number. Please select a number between 1 - #{STATES_WITH_RESORTS.size}: "
        separator(55)
        select_region
    end
end

#select_resort(state) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/local_ski_report/cli.rb', line 112

def select_resort(state)
    resorts_arr = list_resorts(state)
    separator(50)
    puts "Select a Resort or Ski-Area for the latest Report: "
    input = gets.chomp.to_i - 1
    if input.between?(0, resorts_arr.size - 1)
        @resort = resorts_arr[input]
    else
        separator(60)
        puts "Invalid Choice. Please choose a Resort # between 1 - #{resorts_arr.size}."
        separator(60)
        select_resort(state)
    end
end

#select_state(region_num, region_key) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/local_ski_report/cli.rb', line 127

def select_state(region_num, region_key)
    list_states(region_num)
    separator(50)
    puts "Select a State to check? type number: "
    input = gets.chomp.to_i - 1
    if input.between?(0, STATES_WITH_RESORTS[region_num][region_key].size - 1)
        input
    else
        separator(55)
        puts "Invalid Choice. Please choose a Resort # between 1 - #{STATES_WITH_RESORTS[region_num][region_key].size}."
        separator(55)
        select_state(region_num, region_key)
    end
end

#separator(num) ⇒ Object



142
143
144
# File 'lib/local_ski_report/cli.rb', line 142

def separator(num)
    puts "-" * num
end