I am studying ruby and somehow, I define some methods as private and I get the error: "undefined method private for class ...". I Post tmy code below. Any help or suggestion will do! Thank you :)
Code:
class Bot
attr_reader :name
def initialize(options)
@name = options[:name] || "Unnamed Bot"
begin
@data = YAML.load(File.read(options[:data_file]))
rescue
raise "Could not load bot data"
end
private
def random_response(key)
random_index = rand(@data[:responses][key].length)
@data[:responses][key][random_index].gsub(/\[name\]/, @name)
end
def greeting
random_response :greeting
end
def farewell
radnom_response :farewell
end
def response_to(input)
prepared_input = preprocess(input).downcase
end
def preprocess(input)
perform_substitutions input
end
end
end
Error:
While indenting isn't critical in Ruby, keeping track of it is very useful when looking for problems in your code, so make it a habit to do it consistently. Use two-spaces per indent and set your tabstops to 2.
Here's your code indented consistently:
class Bot
attr_reader :name
def initialize(options)
@name = options[:name] || "Unnamed Bot"
begin
@data = YAML.load(File.read(options[:data_file]))
rescue
raise "Could not load bot data"
end
private
def random_response(key)
random_index = rand(@data[:responses][key].length)
@data[:responses][key][random_index].gsub(/\[name\]/, @name)
end
def greeting
random_response :greeting
end
def farewell
radnom_response :farewell
end
def response_to(input)
prepared_input = preprocess(input).downcase
end
def preprocess(input)
perform_substitutions input
end
end
Notice that you're missed end
for your def initialize
method due to the closing end
to your rescue
block. Also, that your methods are embedded inside initialize
and how that stands out?