Class: AstrologicalForecast::Type

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

Constant Summary collapse

TYPES =
AstrologicalForecast::Facts::TYPES
PERIODS =
AstrologicalForecast::Facts::PERIOD

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type:, period:) ⇒ Type

Returns a new instance of Type.



10
11
12
13
14
15
16
17
18
# File 'lib/astrological_forecast/type.rb', line 10

def initialize(type:, period:)
  @type = correct(type)

  @period = correct(period)

  @user_type = @type.nil? ? type_console : manual_check(@type, TYPES, IncorrectType)

  @user_period = @period.nil? ? period_console : manual_check(@period, PERIODS, IncorrectPeriod)
end

Instance Attribute Details

#user_periodObject (readonly)

Returns the value of attribute user_period.



8
9
10
# File 'lib/astrological_forecast/type.rb', line 8

def user_period
  @user_period
end

#user_typeObject (readonly)

Returns the value of attribute user_type.



8
9
10
# File 'lib/astrological_forecast/type.rb', line 8

def user_type
  @user_type
end

Instance Method Details

#correct(feature) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/astrological_forecast/type.rb', line 20

def correct(feature)
  return nil if feature.nil?

  feature = feature.is_a?(String) ? feature : feature.to_s

  feature.strip.downcase.capitalize
end

#manual_check(opt, const, error) ⇒ Object

Проверка на корректность заданного типа прогноза и периода прогнозирования



65
66
67
68
69
70
71
72
73
# File 'lib/astrological_forecast/type.rb', line 65

def manual_check(opt, const, error)
  types = const.each_with_index.with_object({}) do |(var, i), result|
    result[var[0]] = i + 1
  end

  raise error if types[opt].nil?

  types[opt]
end

#period_consoleObject

Выбор периода прогнозирования для определенного знака зодиака через консоль



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/astrological_forecast/type.rb', line 47

def period_console
  puts "Выберите период прогнозирования? Введите число от 1 до #{PERIODS.size}:\n\n"

  AstrologicalForecast::Facts.give_period

  user_period = $stdin.gets.to_i
  puts

  until user_period.between?(1, PERIODS.size)
    print "Введите число от 1 до #{PERIODS.size}: "
    user_period = $stdin.gets.to_i
    puts
  end

  user_period
end

#type_consoleObject

Выбор разновидности(типа) гороскопа для определенного знака зодиака через консоль



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/astrological_forecast/type.rb', line 29

def type_console
  puts "\nВыберите разновидность гороскопа? Введите число от 1 до #{TYPES.size}:\n\n"

  AstrologicalForecast::Facts.give_types

  user_type = $stdin.gets.to_i
  puts

  until user_type.between?(1, TYPES.size)
    print "Введите номер от 1 до #{TYPES.size}: "
    user_type = $stdin.gets.to_i
    puts
  end

  user_type
end