Class: RR::Answer

Inherits:
Object
  • Object
show all
Defined in:
lib/refined-refinements/cli/prompt.rb

Instance Method Summary collapse

Constructor Details

#initializeAnswer

Returns a new instance of Answer.



19
20
21
# File 'lib/refined-refinements/cli/prompt.rb', line 19

def initialize
  @callbacks = Hash.new { Proc.new { true } }
end

Instance Method Details

#clean_value(&block) ⇒ Object



35
36
37
# File 'lib/refined-refinements/cli/prompt.rb', line 35

def clean_value(&block)
  @callbacks[:get_clean_value] = block
end

#convert_money_to_cents(raw_value) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/refined-refinements/cli/prompt.rb', line 72

def convert_money_to_cents(raw_value)
  if raw_value.match(/\./)
    raw_value.delete('.').to_i
  else
    "#{raw_value}00".to_i
  end
end

#retrieve_by_index_or_self_if_on_the_list(list, raw_value, default_value = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/refined-refinements/cli/prompt.rb', line 60

def retrieve_by_index_or_self_if_on_the_list(list, raw_value, default_value = nil)
  if raw_value.match(/^\d+$/)
    list[raw_value.to_i - 1]
  elsif list.include?(raw_value)
    raw_value
  elsif raw_value.empty? && default_value
    default_value
  else
    raise InvalidResponse.new(raw_value)
  end
end

#run(raw_value) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/refined-refinements/cli/prompt.rb', line 39

def run(raw_value)
  @callbacks[:validate_raw_value].call(raw_value)
  clean_value = @callbacks[:get_clean_value].call(raw_value)

  unless @callbacks[:validate_clean_value].call(clean_value)
    raise InvalidResponse.new("validate_clean_value failed")
  end

  clean_value
end

#self_or_retrieve_by_index(list, raw_value, default_value = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/refined-refinements/cli/prompt.rb', line 50

def self_or_retrieve_by_index(list, raw_value, default_value = nil)
  if raw_value.match(/^\d+$/)
    list[raw_value.to_i - 1]
  elsif raw_value.empty?
    default_value
  else
    raw_value
  end
end

#validate_clean_value(&block) ⇒ Object



31
32
33
# File 'lib/refined-refinements/cli/prompt.rb', line 31

def validate_clean_value(&block)
  @callbacks[:validate_clean_value] = block
end

#validate_raw_value(*regexps, allow_empty: nil) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/refined-refinements/cli/prompt.rb', line 23

def validate_raw_value(*regexps, allow_empty: nil)
  @callbacks[:validate_raw_value] = Proc.new do |raw_value|
    unless (allow_empty && raw_value.empty?) || regexps.any? { |regexp| raw_value.match(regexp) }
      raise InvalidResponse.new("Doesn't match any of the regexps.")
    end
  end
end