I'm working through some exercises to sharpen my Ruby skills. The following code is how I solved this particular question. I'd like to know what other developers think of this solution. I'm self taught, which means: I'm not getting any feedback as I learn, so I just want to make sure that I'm learning the right way to do things. And I'd like to get a gauge of what professional developers think of my code.
Ranking System
[1-terrible] [2-not good] [3-ok] [4-good] [5-very good]
- Is the answer code elegant? (score and feedback)
- What tips can you suggest to improve the answer?
- How's the readability of the code? (score and feedback)
- Can you suggest a simpler and alternative answer?
Ruby
class Book
def title
@title
end
def title=(title)
special_words = %w(and in the of a an)
formatted_title = []
@title = title.split.each_with_index do |w,i|
case
when i == 0
formatted_title << w.capitalize
when i > 0 && !special_words.include?(w)
formatted_title << w.capitalize
when special_words.include?(w)
formatted_title << w
end
end
@title = formatted_title.join(" ")
end
end
Rspec
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
it 'should capitalize every word' do
@book.title = "stuart little"
@book.title.should == "Stuart Little"
end
describe 'should capitalize every word except...' do
describe 'articles' do
specify 'the' do
@book.title = "alexander the great"
@book.title.should == "Alexander the Great"
end
specify 'a' do
@book.title = "to kill a mockingbird"
@book.title.should == "To Kill a Mockingbird"
end
specify 'an' do
@book.title = "to eat an apple a day"
@book.title.should == "To Eat an Apple a Day"
end
end
specify 'conjunctions' do
@book.title = "war and peace"
@book.title.should == "War and Peace"
end
specify 'prepositions' do
@book.title = "love in the time of cholera"
@book.title.should == "Love in the Time of Cholera"
end
end
describe 'should always capitalize...' do
specify 'I' do
@book.title = "what i wish i knew when i was 20"
@book.title.should == "What I Wish I Knew When I Was 20"
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