Блог у синатри, епизода једанаеста

Да објасним мало о овом пројекту, да ставим кратак опис о њему:

emacs README.md

и додам:

Једноставни блог у Синатри за [http://ruby.rs](http://ruby.rs)

Simple blog in Sinatra for [http://ruby.rs](http://ruby.rs)

па то ставим у гит:

$ git add README.md 
$ git commit -m "додајем README.md"
[master 67807a9] додајем README.md
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 README.md

Било би добро да када посетим неку страницу која не постоји, да прикажем грешку, попут: Nothing to see here, move along.

Отворим нови огранак у гиту:

$ git checkout -b 404
Switched to a new branch '404'

У blurgh_spec.rb, додам следећу спецификацију:

describe "error page" do
  it "should display a pre defined 404 message" do
    get '/non-existent-page'
    last_response.body.should match("Nothing to see here")
  end
end    

покренем тест који наравно не пролази:

Failures:

  1) blurgh routes and content error page should display a pre defined 404 message
     Failure/Error: get '/non-existent-page'
     Errno::ENOENT:
       No such file or directory - spec/fixtures/non-existent-page.md
     # ./blurgh.rb:50:in `readlines'
     # ./blurgh.rb:50:in `get_post'
     # ./blurgh.rb:61:in `block in <top (required)>'
     # ./spec/blurgh_spec.rb:67:in `block (4 levels) in <top (required)>'

Да бих то исправио, морам да променим get_post методу из овога:

def get_post(post)
  header, body = File.readlines(Config.options['store'] + "/" + post + ".md", "")
end

у ово:

def get_post(post)
  begin
    header, body = File.readlines(Config.options['store'] + "/" + post + ".md", "")
  rescue Errno::ENOENT
    not_found
  end
end

not_found do
  "Nothing to see here"
end

Да објасним шта се овде изменило: beginrescue омогућава да се изврши File.readlines метода, али ако се види грешка коју се приказала предходно: Errno::ENOENT онда да се покрене not_found метода. not_found метода је специфична, јер је већ унапред дефинисана у самом sinatra пројекту за употребу у оваквим случајевима, када се појављује грешка. И уместо да се види грешка, путем ње, може да се прикаже пожељно упозорење.

Покренем тестирање и све пролази.

Па да испробам и саму апликацију, додам:

store: spec/fixtures

у setup.yaml. И покренем:

$ shotgun blurgh.rb     

Видим два чланка који се налазе под spec/fixtures, као што се видело и пре. И да би испробао нову методу укуцам http://localhost:9393/let2 на којој се види порука: Nothing to see here.

Да то сада додам у гит:

$ git status
# On branch 404
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   blurgh.rb
#   modified:   setup.yaml
#   modified:   spec/blurgh_spec.rb
#

$ git add blurgh.rb setup.yaml spec/blurgh_spec.rb

$ git commit -m "приказивање грешке за непостојећу страну"
[404 fb7e5c8] приказивање грешке за непостојећу страну
 3 files changed, 19 insertions(+), 2 deletions(-)

И да додам то у главно стабло гита:

$ git checkout master
Switched to branch 'master'

$ git merge 404
Updating 67807a9..fb7e5c8
Fast forward
 blurgh.rb           |   11 ++++++++++-
 setup.yaml          |    3 ++-
 spec/blurgh_spec.rb |    7 +++++++
 3 files changed, 19 insertions(+), 2 deletions(-)

Сада има сисем за блоговање, написан у 75 линија рубија. Који је тестиран. Може још шта да се дода, систем није комплетан. Али има добру основу.

Сав овај рад, окачен је овде.