The call to 'strip' is unnecessary.

Also, I suggest this instead, since you don't want to change the
'number_of_spaces' parameter when you refactor:

module Shamaoke
  module StringAdditions
    def lcolstrip
      spaces = self.lines.select do |l|
        l.match /\S/
      end.reduce(self.length) do |m, l|
        (x = l.length - l.lstrip.length) < m ? x : m
      end
      self.gsub /^ {#{spaces}}/, ''
    end
  end
end
String.send(:include, Shamaoke::StringAdditions)


Cheers!
:brad

On Fri, Jan 29, 2010 at 8:24 AM, P.A. <[email protected]> wrote:

> I've found another solution combining your idiom and my method.
>
> # begin
> require 'haml'
>
> template = %{
> ----%html
> ------%head
> --------%title
> ------%body
> --------%div
> }.strip.gsub(/^\s{4}/, '')
>
> Haml.Engine.new(template).render
>
> # end
>
> Of course, you feel free to make a helper method to improve this
> awkwardness.
>
> # begin
> class String
> --def adtemp(number_of_spaces) # adjust_template
> ----self.strip.gsub(/^\s{#{number_of_spaces}}/, '')
> --end
> end
>
> new_template = %{
> ----%html
> ------%head
> --------%title
> ------%body
> --------%div
> }.adtemp(4)
>
> # end
>
> Of course, we can improve it further. We need to add the adtemp method
> in the HAML code and use it in a begin-rescue block which will watch
> over the Inconsistent Indentation error.
>
> On Jan 29, 4:13 pm, "P.A." <[email protected]> wrote:
> > 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]><
> haml%[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]><
> haml%[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] <haml%[email protected]>.
> For more options, visit this group at
> http://groups.google.com/group/haml?hl=en.
>
>


-- 
Bradley Grzesiak
co-founder, bendyworks llc
http://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