ruby - LocalJumpError: no block given -
i keep getting error while running rspec file:
failures: 1) book title should capitalize first letter failure/error: @book.title("inferno") localjumperror: no block given (yield) # ./08_book_titles.rb:7:in `title' here book_title.rb
class :: book attr_accessor :some_title def title(some_title) little_words = %w(of , on under or nor yet @ around after along on without) some_title = yield some_title.split.each_with_index.map{|x, index| little_words.include?(x) && index > 0 ? x : x.capitalize }.join(" ") end #def end and here rspec file (or @ least first spec):
require_relative '08_book_titles' describe book before @book = book.new end describe 'title' 'should capitalize first letter' @book.title("inferno") @book.title.should == "inferno" end end i have included yield in method, , there block in spec...so don't understand why not calling block. have tried think of calling directly on map (instead of using variable assigned to) calling separately on own using on map, trying pass in argument of title in method...to see now. have read through ton of threads. not seeing?
i see future exercises running specs on custom classes love tips (or links) on things need know or out while testing custom classes rspec. thanks!
updated
so have changed book_title.rb this:
class :: book def title little_words = %w(of , on under or nor yet @ around after along on without) self.split.each_with_index.map{|x, index| little_words.include?(x) && index > 0 ? x : x.capitalize }.join(" ") end #def end and because i, incorrectly, edited specs- reverted them this:
require '08_book_titles' describe book before @book = book.new end describe 'title' 'should capitalize first letter' @book.title = "inferno" @book.title.should == "inferno" end end and error this:
failure/error: @book.title = "inferno" nomethoderror: undefined method `title=' #<book:0x007f292a06c6b0> # ./08_book_titles_spec.rb:26:in `block (3 levels) in <top (required)>'
you're mis-using yield , no, there's no block in spec. if there was, spec like...
@book.title("inferno") "inferno" end see block added? don't need block , shouldn't use yield
you seem thinking need yield access argument... don't. title method should use passed argument directly...
def title(new_title) little_words = %w(of , on under or nor yet @ around after along on without) @some_title = new_title.split.each_with_index.map{|x, index| little_words.include?(x) && index > 0 ? x : x.capitalize }.join(" ") end #def finally, test calling title method twice, when should call once , use attr_accessor method test result.
it 'should capitalize first letter' @book.title("inferno") @book.some_title.should == "inferno" end