В настоящее время я занимаюсь учебным курсом rspec ruby. Одна из проблем требует от меня написать программу book_title, которая использует некоторые правила капитализации на английском языке. Тесты очень долго, но, чтобы дать вам несколько идей о том, что он просит я включил первые последние испытания ниже:Ruby: Метод внутри класса отказывается быть модифицированным по нескольким строкам
require 'book'
describe Book do
before do
@book = Book.new
end
describe 'title' do
it 'should capitalize the first letter' do
@book.title = "inferno"
@book.title.should == "Inferno"
end
specify 'the first word' do
@book.title = "the man in the iron mask"
@book.title.should == "The Man in the Iron Mask"
end
end
end
end
Мой код:
class Book
attr_accessor :title
def initialize(title = nil)
@title = title
end
def title=(book_title = nil)
stop_words = ["and", "in", "the", "of", "a", "an"]
@title = book_title.split(" ").each{ |word|
unless stop_words.include?(word)
word.capitalize!
end}.join(" ").capitalize
end
end
Этот вопрос я имеющий метод def title=
. @title = book_title.split
(... и т. Д.) Все в одной строке, потому что, когда я пытаюсь разбить его, многие из моих предыдущих тестов терпят неудачу.
Пример некоторого кода я пробовал:
@title = book_title.split(" ").each do |word| # attempting to add words to an array
unless stop_words.include?(word) # to capitalize each word
word.capitalize!
end
end
@title.join(" ") # Joining words into one string
@title.capitalize # Capitalizing title's first word
end # to follow the last test
Когда я пытаюсь это тесты не работают (я имею в виду, что он должен делать с вызовом @title еще раз, когда я пытаюсь @ тайтл присоединиться и @title #capitalize).
Некоторые другие мысли: Я думал только о настройке первой части (самая длинная строка, заканчивающаяся на word.capitalize! end end
, на другую переменную (возможно, book_title или new_title), но мне было интересно, какая причина для инициализации или использования @title в первую очередь.
Любой вход, а также редактирует для чистого кода, был бы весьма признателен
Код ломается, или ваши тесты терпят неудачу? –
тесты терпят неудачу после теста inferno –
Я не уверен, когда вы говорите «перерывы кода». если вы хотите, чтобы первая буква заглаждалась, сохраняя остальные заглавные символы, вам просто нужно выставить первый символ с помощью регулярного выражения. см. [Ruby capize first character with spaces] (http://stackoverflow.com/questions/14471511/ruby-capitalize-first-character-with-spaces). Лично я также хотел бы предложить, чтобы с помощью getter можно было настроить строку вместо setter. – shawnzhu