[rspec-devel] Stories in other languages
fernando.garcia at the-cocktail.com
fernando.garcia at the-cocktail.com
Sat Feb 2 07:43:48 EST 2008
Yes, of course. Here it is:
http://rspec.lighthouseapp.com/projects/5645-rspec/tickets/269
Danke!
Nando
----- Original Message -----
From: "David Chelimsky" <dchelimsky at gmail.com>
To: rspec-devel <rspec-devel at rubyforge.org>
Sent: Fri, 1 Feb 2008 15:40:05 -0600
Subject: Re: [rspec-devel] Stories in other languages
> Would you please submit this to our tracker at http://rspec.lighthouseapp.com?
>
> Gracias,
> David
>
> On Feb 1, 2008 2:43 PM, Fernando García Samblas
> <fernando.garcia at the-cocktail.com> wrote:
> >
> > Hello,
> >
> > I've just subscribed to the RSpec lists and first of all I'd like to
> > thank you all for such a great work. I'm really having a great time
> > developing with RSpec.
> >
> > I think it would be nice for developers with non-english clients to open
> > the possibility for writing RSpec Stories in other languages.
> >
> > Currently the story template words ("Story", "Scenario", "Given", etc.)
> > are hard coded, but it shouldn't be difficult to manage them as a
> > configurable hash.
> >
> > I don't have a good knowledge of the code behind RSpec but I've managed
> > to modify 1.1.3 (r3281) code to achieve that goal. Now I can run my
> > brand-new spanish stories!
> >
> > I send the differences with the 3281 revision attached. Before I run the
> > stories I set the value of the words:
> >
> > Spec::Runner.configure do |config|
> > config.with_story_template_words({
> > :story => "Relato",
> > :scenario => 'Escenario',
> > :given => 'Dado',
> > :given_scenario => 'DadoElEscenario',
> > :when => 'Cuando',
> > :then => 'Entonces',
> > :and => 'Y'
> > })
> > end
> >
> > I'm sure it's not the best way to implement the functionality, but I
> > just want to let you know the desire and a (very) simple way to get it
> > (partially, I only use PlainText output) done.
> >
> > Thanks for listening ;)
> >
> > Cheers!
> > Nando
> >
> > --
> > Fernando García Samblas
> > fernando.garcia at the-cocktail.com
> >
> > The Cocktail
> > C/ Salamanca 17
> > 28020 Madrid
> > +34 91 567 06 05
> >
> >
> > Index: lib/spec/story/runner/story_parser.rb
> > ===================================================================
> > --- lib/spec/story/runner/story_parser.rb (revision 7)
> > +++ lib/spec/story/runner/story_parser.rb (working copy)
> > @@ -26,13 +26,20 @@
> > def process_line(line)
> > line.strip!
> > case line
> > - when /^Story: / then @state.story(line)
> > - when /^Scenario: / then @state.scenario(line)
> > - when /^Given:? / then @state.given(line)
> > - when /^GivenScenario:? / then @state.given_scenario(line)
> > - when /^When:? / then @state.event(line)
> > - when /^Then:? / then @state.outcome(line)
> > - when /^And:? / then @state.one_more_of_the_same(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:story]}: /:
> > + @state.story(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:scenario]}: /:
> > + @state.scenario(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:given]}:? /:
> > + @state.given(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:given_scenario]}:? /:
> > + @state.given_scenario(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:when]}:? /:
> > + @state.event(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:then]}:? /:
> > + @state.outcome(line)
> > + when /^#{Spec::Runner.configuration.story_template_words[:and]}:? /:
> > + @state.one_more_of_the_same(line)
> > else @state.other(line)
> > end
> > end
> > @@ -48,13 +55,17 @@
> >
> > def create_story()
> > unless @current_story_lines.empty?
> > - @story_mediator.create_story(@current_story_lines[0].gsub("Story: ",""), @current_story_lines[1..-1].join("\n"))
> > + @story_mediator.create_story(
> > + @current_story_lines[0].gsub(
> > + "#{Spec::Runner.configuration.story_template_words[:story]}: ",""),
> > + @current_story_lines[1..-1].join("\n"))
> > @current_story_lines.clear
> > end
> > end
> >
> > def create_scenario(title)
> > - @story_mediator.create_scenario(title.gsub("Scenario: ",""))
> > + @story_mediator.create_scenario(title.gsub(
> > + "#{Spec::Runner.configuration.story_template_words[:scenario]}: ",""))
> > end
> >
> > def create_given(name)
> > @@ -126,8 +137,9 @@
> > def remove_tag_from(tag, line)
> > tokens = line.split
> > # validation of tag can go here
> > - tokens[0].downcase.match(/#{tag.to_s}:?/) ?
> > - (tokens[1..-1].join(' ')) : line
> > + tokens[0].downcase.match(
> > + /#{Spec::Runner.configuration.story_template_words[tag].downcase}:?/) ?
> > + (tokens[1..-1].join(' ')) : line
> > end
> >
> > def eof
> > Index: lib/spec/example/configuration.rb
> > ===================================================================
> > --- lib/spec/example/configuration.rb (revision 7)
> > +++ lib/spec/example/configuration.rb (working copy)
> > @@ -124,7 +124,56 @@
> > )
> > example_group.append_after(scope, &proc)
> > end
> > +
> >
> > + # Let you write your stories in other languages. Example:
> > + #
> > + # Spec::Runner.configure do |config|
> > + # config.with_story_template_words({
> > + # :story => "Relato",
> > + # :scenario => 'Escenario',
> > + # :given => 'Dado',
> > + # :given_scenario => 'DadoElEscenario',
> > + # :when => 'Cuando',
> > + # :then => 'Entonces',
> > + # :and => 'Y'
> > + # })
> > + # end
> > + #
> > + # And then write your story in spanish, for example:
> > + #
> > + # Relato: La portada de Mi Sitio en La Red
> > + #
> > + # Como un usuario de La Red
> > + # Quiero ver la portada de Mi Sitio
> > + # Para ver que contenidos y servicios me ofrece
> > + #
> > + # Escenario: usuario sin sesión
> > + # Dado un usuario sin sesión iniciada
> > + #
> > + # Cuando visita http://www.example.com/
> > + #
> > + # Entonces puede ver el formulario para iniciar sesión
> > + # Y el enlace para crear su cuenta
> > + #
> > +
> > + STORY_TEMPLATE_WORDS = {
> > + :story => 'Story',
> > + :scenario => 'Scenario',
> > + :given => 'Given',
> > + :given_scenario => 'GivenScenario',
> > + :when => 'When',
> > + :then => 'Then',
> > + :and => 'And'
> > + }
> > + def with_story_template_words(template_words)
> > + @template_words = STORY_TEMPLATE_WORDS.merge(template_words)
> > + end
> > +
> > + def story_template_words
> > + @template_words ||= STORY_TEMPLATE_WORDS
> > + end
> > +
> > private
> >
> > def scope_and_options(*args)
> > Index: lib/spec/runner/formatter/story/plain_text_formatter.rb
> > ===================================================================
> > --- lib/spec/runner/formatter/story/plain_text_formatter.rb (revision 7)
> > +++ lib/spec/runner/formatter/story/plain_text_formatter.rb (working copy)
> > @@ -21,7 +21,7 @@
> >
> > def story_started(title, narrative)
> > @current_story_title = title
> > - @output.puts "Story: #{title}\n\n"
> > + @output.puts "#{Spec::Runner.configuration.story_template_words[:story]}: #{title}\n\n"
> > narrative.each_line do |line|
> > @output.print " "
> > @output.print line
> > @@ -36,7 +36,7 @@
> > def scenario_started(story_title, scenario_name)
> > @current_scenario_name = scenario_name
> > @scenario_already_failed = false
> > - @output.print "\n\n Scenario: #{scenario_name}"
> > + @output.print "\n\n #{Spec::Runner.configuration.story_template_words[:scenario]}: #{scenario_name}"
> > @scenario_ok = true
> > end
> >
> > @@ -110,9 +110,9 @@
> > desc_string = description.step_name
> > arg_regexp = description.arg_regexp
> > text = if(type == @previous_type)
> > - "\n And "
> > + "\n #{Spec::Runner.configuration.story_template_words[:and]} "
> > else
> > - "\n\n #{type.to_s.capitalize} "
> > + "\n\n #{Spec::Runner.configuration.story_template_words[type]} "
> > end
> > i = -1
> > text << desc_string.gsub(arg_regexp) { |param| args[i+=1] }
> >
> > _______________________________________________
> > rspec-devel mailing list
> > rspec-devel at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-devel
> >
> _______________________________________________
> rspec-devel mailing list
> rspec-devel at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-devel
>
More information about the rspec-devel
mailing list