Brilliant! That's exactly what I want. The problem was to organize
controller, view and spec code in a single file. And now it's done. If
you interested in that code what I got, please see below. (It might be
problems with an indentation in email.)

# gems:
# - rack;
# - sinatra;
# - haml;
# - rspec;
# - rack-test.

# controller.rb

# application

require 'sinatra'
require 'haml'

class Controller < Sinatra::Base
  set :environment, ($*[0].to_sym if $*[0].respond_to? :to_sym)
|| :test

  template :layout do
    <<-haml.gsub(/^\s{6}/, '')
      %html
        %head
          %title
        %body
          %div
            = yield
    haml
  end

  template :test do
    <<-haml.gsub(/^\s{6}/, '')
      %div Works!
    haml
  end

  get '/' do
    content_type 'text/html; charset=utf-8'
    haml :test
  end
end

# run code

if Controller.development?
  Controller.run!
end

# spec

require 'spec'
require 'rack/test'

describe 'Sinatra application' do
  include Rack::Test::Methods

  def app
    Controller
  end

  it 'should response to "/"' do
    get '/'
    last_response.status.should == 200
  end

  it 'should return a text/html document' do
    get '/'
    last_response.headers['content-type'].should == 'text/html;
charset=utf-8'
  end

  it 'should return a standart html template' do
    get '/'
    template = /<html>.*<\/html>/m
    last_response.body.should =~ template
  end

  it 'should return a standart html template with a partial included'
do
    get '/'
    template = /<html>.*<div>Works!<\/div>.*<\/html>/m
    last_response.body.should =~ template
  end
end

# how it works

# spec
$ spec controller.rb

# app

$ ruby controller.rb development

Thank you for the help.

On Jan 28, 11:30 pm, Bradley Grzesiak <[email protected]> wrote:
> You could do this:
>
> # dashes are actually spaces, for clarity in email
> template = <<-EOF.gsub(/^\s{4}/, '')
> ----%html
> ------%head
> --------%title
> ------%body
> EOF
>
> I tweeted about this last August. 
> =Phttp://twitter.com/listrophy/status/3382558239
>
> :brad
>
>
>
> On Thu, Jan 28, 2010 at 1:35 PM, Nathan Weizenbaum <[email protected]> wrote:
> > The problem is that, as the error message says, your indentation is
> > inconsistent. Once you strip your template, it looks like this:
> >https://gist.github.com/c50eed9d9965aae844bc. The first indentation Haml
> > sees is for "%head", which is indented 8 spaces. It then expects 8 spaces to
> > be the amount you'll indent by in the future, but "%title" is only indented
> > by 2 spaces beyond "%head". Thus, it raises an error.
>
> > On Thu, Jan 28, 2010 at 7:49 AM, P.A. <[email protected]> wrote:
>
> >> Hi.
>
> >> I have next code.
>
> >> # begin
> >> require 'haml'
>
> >> template = %{
> >> ------%html
> >> --------%head
> >> --------%body
> >> }.strip
>
> >> Haml::Engine.new(template).render
> >> # end
>
> >> It works fine and render the template.
>
> >> But if I add the %title tag inside the %head...
>
> >> # begin
> >> require 'haml'
>
> >> template = %{
> >> ------%html
> >> --------%head
> >> ----------%title
> >> --------%body
> >> }.strip
>
> >> Haml::Engine.new(template).render
> >> # end
>
> >> ...I get the error: "Inconsistent indentation: 10 spaces were used for
> >> indentation, but the rest of the document was indented using 8
> >> spaces."
>
> >> What is the problem of this error? How can I resolve it?
>
> >> Thanks.
>
> >> Debian GNU/Linux 5.0.3;
> >> Ruby 1.9.2;
> >> Haml 2.2.17.
>
> >> --
> >> You received this message because you are subscribed to the Google Groups
> >> "Haml" group.
> >> To post to this group, send email to [email protected].
> >> To unsubscribe from this group, send email to
> >> [email protected] <haml%[email protected]>.
> >> For more options, visit this group at
> >>http://groups.google.com/group/haml?hl=en.
>
> >  --
> > You received this message because you are subscribed to the Google Groups
> > "Haml" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected] <haml%[email protected]>.
> > For more options, visit this group at
> >http://groups.google.com/group/haml?hl=en.
>
> --
> Bradley Grzesiak
> co-founder, bendyworks llchttp://bendyworks.com/

-- 
You received this message because you are subscribed to the Google Groups 
"Haml" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/haml?hl=en.

Reply via email to