Критика некоторых рубиновый + код для RSpec для проверки серп


Я нашел шашку серп написан на PHP и я решил, чтобы лучше учиться программировать, я бы переписать его в Ruby.

Все, что я написал до сих пор принимает список ключевых слов, которые пользователь вводит и очищает список и превращает каждого ключевого слова в URL для поиска в Google.

Вот код:

require 'sinatra'
require 'rspec'
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
  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

Вот спецификации:

require_relative '../lib/rankypanky.rb'

describe "#clean_up_keywords" do
  it "should push items separated by a newline into array as separate items" do
    clean_up_keywords("apples\noranges").should == ["apples", "oranges"]
  end
  it "should delete all \r chars" do
    clean_up_keywords("Chat\r").should == ["Chat"]
  end
  it "should push items separated by commas into an array" do
    clean_up_keywords("Chat, Meta, About").should == ["Chat", " Meta", " About"]
  end
  it "should push items separated ONLY by a \s char into array as one item" do
    clean_up_keywords("New York, apples").should == ["New York", " apples"]
  end
end

describe "#clean_up_list" do
  it "should not include empty strings/items in array" do
    clean_up_list(["apples", "", "oranges"]).should == ["apples", "oranges"]
  end
  it "should remove any leading white space from items in array" do
    clean_up_list([" oranges", "apples"]).should == ["oranges", "apples"]
  end
end

describe "#make_strings_url_friendly" do
  it "should replace /s with a +" do
    make_strings_url_friendly(["oranges apples"]).should == ["oranges+apples"]
  end
end

describe "#make_urls" do
  it "should append array items to http://www.google.com/search?num=100&q=" do
    make_urls(["pie"]).should == ["http://www.google.com/search?num=100&q=pie"]
  end
end

В основном я ищу какие-либо более эффективные способы сделать это, а также будет ли мой код соответствует стандартам хммм... немного общей критики. Огромное спасибо!



333
4
задан 11 мая 2011 в 05:05 Источник Поделиться
Комментарии
1 ответ

Я вижу, вы не получили никакого ответа на это долго, поэтому я дам ему попробовать.

Я не вижу ничего, чтобы выбрать, когда речь заходит о стиле или технике. Для меня это выглядит очень хорошо. Несколько вопросов, хотя:


  1. почему вы требуете "вас" в контроллер код? Не должно ли это быть в тестовый код, а?

  2. Вы не делаете любые попытки санировать или убедиться, что код работает с не-английских символов или других знаков, которые могут вызвать проблемы. Что, если кто-то типа "tørris&сообщение=" in the input form? (I guess google will sanitize it, but it would probably be better to do it before passing the url to them.)

3
ответ дан 2 августа 2011 в 01:08 Источник Поделиться