I’m trying to figure out why I am getting this error when I run this part of my code: in ‘clean_up_keywords’: undefined method for ‘gsub’ for nil:NilClass (NoMethodError)
However, when I run the full code with Sinatra, I get no errors.
Partial code:
def clean_up_keywords(str)
str.gsub("\n", ",").delete("\r").split(',')
end
def clean_up_list(arr)
arr.reject(&:empty?).each(&:lstrip!)
end
def make_strings_url_friendly(arr)
arr.each do |e|
e.gsub!(" ", "+")
end
end
def make_urls(arr)
arr.map {|e| "http://www.google.com/search?num=100&q=" + e}
end
params = Hash.new#test
params["keyword"] = "red\r\nblue\r\ngreen"
params["url"] = "http://url.com"
dirty_list = clean_up_keywords(params[:keyword])
clean_list = clean_up_list(dirty_list)
url_ready_list = make_strings_url_friendly(clean_list)
url_list = make_urls(url_ready_list)
Full code for use in Sinatra:
require 'sinatra'
require 'rspec'
require 'nokogiri'
require 'open-uri'
get '/serp_checker' do
"<form action='/ranked' method='post'>
<label for='keyword'>Keyword</label>
<textarea name='keyword' id='keyword' type='text' /></textarea>
<label for='url'>URL</label>
<input name='url' id='url' type='text' />
<input type='submit' value='Go!' />
</form>"
end
def clean_up_keywords(str)
str.gsub("\n", ",").delete("\r").split(',')
end
def clean_up_list(arr)
arr.reject(&:empty?).each(&:lstrip!)
end
def make_strings_url_friendly(arr)
arr.each do |e|
e.gsub!(" ", "+")
end
end
def make_urls(arr)
arr.map {|e| "http://www.google.com/search?num=100&q=" + e}
end
post '/ranked' do
#params = Hash.new#test
#params["keyword"] = "red\r\nblue\r\ngreen"#test
#params["url"] = "http://url.com"#test
#serp = Nokogiri::HTML(open("http://www.google.com/search?num=100&q=house"))
#puts serp.to_s
dirty_list = clean_up_keywords(params[:keyword])
clean_list = clean_up_list(dirty_list)
url_ready_list = make_strings_url_friendly(clean_list)
url_list = make_urls(url_ready_list)
end
You define
params["keyword"]but accessparams[:keyword], so it returnsnil, because it could not be found – symbols and strings are different objects as keys.A workaround is to use something like http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html