rspec-i18n 0.2.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. data/.gitignore +13 -0
  2. data/History.rdoc +17 -2
  3. data/License.txt +1 -1
  4. data/README.rdoc +17 -6
  5. data/Rakefile +6 -4
  6. data/TODO.txt +5 -5
  7. data/VERSION.yml +3 -3
  8. data/examples/i18n/pt/person_spec.rb +117 -12
  9. data/lib/spec-i18n/command_line/language_help_formatter.rb +67 -14
  10. data/lib/spec-i18n/command_line/options.rb +18 -17
  11. data/lib/spec-i18n/dsl/main.rb +1 -1
  12. data/lib/spec-i18n/example/before_and_after_hooks.rb +14 -9
  13. data/lib/spec-i18n/example/example_group_methods.rb +1 -1
  14. data/lib/spec-i18n/example/subject.rb +29 -0
  15. data/lib/spec-i18n/example.rb +2 -1
  16. data/lib/spec-i18n/expectations/extensions/kernel.rb +1 -1
  17. data/lib/spec-i18n/languages.yml +40 -3
  18. data/lib/spec-i18n/matchers/be.rb +19 -0
  19. data/lib/spec-i18n/matchers/method_missing.rb +25 -0
  20. data/lib/spec-i18n/matchers/register_all_matchers.rb +10 -0
  21. data/lib/spec-i18n/matchers/translate_basic_matchers.rb +28 -0
  22. data/lib/spec-i18n/matchers.rb +6 -0
  23. data/lib/spec-i18n/parser/natural_language.rb +19 -27
  24. data/lib/spec-i18n/runner/configuration.rb +3 -0
  25. data/lib/spec-i18n/spec_language.rb +3 -0
  26. data/lib/spec-i18n.rb +2 -1
  27. data/rspec-i18n.gemspec +57 -18
  28. data/spec/spec-i18n/command_line/language_help_formatter_spec.rb +73 -4
  29. data/spec/spec-i18n/dsl/main_spec.rb +1 -1
  30. data/spec/spec-i18n/example/subject_spec.rb +125 -0
  31. data/spec/spec-i18n/expectations/kernel_spec.rb +1 -0
  32. data/spec/spec-i18n/matchers/be_close_spec.rb +40 -0
  33. data/spec/spec-i18n/matchers/be_instance_of_spec.rb +32 -0
  34. data/spec/spec-i18n/matchers/be_kind_of_spec.rb +37 -0
  35. data/spec/spec-i18n/matchers/be_spec.rb +61 -0
  36. data/spec/spec-i18n/matchers/eql_spec.rb +33 -0
  37. data/spec/spec-i18n/matchers/equal_spec.rb +26 -0
  38. data/spec/spec-i18n/matchers/exist_spec.rb +45 -0
  39. data/spec/spec-i18n/matchers/have_spec.rb +61 -0
  40. data/spec/spec-i18n/matchers/include_spec.rb +34 -0
  41. data/spec/spec-i18n/matchers/match_spec.rb +36 -0
  42. data/spec/spec-i18n/matchers/raise_error_spec.rb +25 -0
  43. data/spec/spec-i18n/matchers/register_all_matchers_spec.rb +17 -0
  44. data/spec/spec-i18n/matchers/satisfy_spec.rb +28 -0
  45. data/spec/spec-i18n/parser/natural_language_spec.rb +42 -58
  46. data/spec/spec-i18n/spec_examples/pt/pessoa_spec.rb +153 -0
  47. data/spec/spec-i18n/spec_language_spec.rb +6 -0
  48. data/spec/spec.opts +1 -1
  49. data/spec/spec_helper.rb +44 -0
  50. metadata +66 -13
  51. data/pkg/rspec-i18n-0.1.0.gem +0 -0
  52. data/pkg/rspec-i18n-0.2.0.gem +0 -0
  53. data/spec/spec-i18n/example_spec.rb +0 -47
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ pkg
2
+ pkg/*
3
+ doc
4
+ coverage*
5
+ tmtags
6
+ .DS_Store
7
+ .emacs-project
8
+ *~
9
+ email.txt
10
+ tmp
11
+ *.sw?
12
+ spec/spec_files.txt
13
+ tags
data/History.rdoc CHANGED
@@ -1,3 +1,18 @@
1
+ === Version 1.0.0
2
+
3
+ * enhancements
4
+ * Support for rspec 1.3
5
+ * Add the translation of following matchers: be_close, be_instance_of,
6
+ be_kind_of, eql, equal, exist, have(have_exactly), have_at_least,
7
+ have_at_most, include, match, raise_error(raise_exception), satisfy
8
+ * Add the translation of subject keywords(subject, its, should and should_not)
9
+ * Add the matchers and hooks in executable list keywords
10
+ * Removing the cucumber dependency and add term-ansicolor and
11
+ terminal-table dependency
12
+ * Add the be predicates for the rspec 1.3
13
+ * Refactoring Parser::NaturalLanguage.get(SpecI18n.spec_language)
14
+ duplications
15
+
1
16
  === Version 0.2.1
2
17
 
3
18
  This release has some bugfixes in the command_line executable
@@ -14,8 +29,8 @@ This release has improvements to the commandline and some fixes internals
14
29
 
15
30
  This is the first preview release of Rspec-i18n, a Internacionalization Development library for Ruby.
16
31
 
17
- * Added translation to all the base keywords(describe, it, should, should_not,
32
+ * Added translation to all the base keywords(describe, it, should, should_not,
18
33
  before(:each), before(:all), before(:suite), after(:each), after(:all),
19
34
  after(:suite))
20
35
  * Added a languages.yml. Will be translated to all languages.
21
- * Added a simple parser for the read the languages in languages.yml.
36
+ * Added a simple parser for the read the languages in languages.yml.
data/License.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2009 Tomás D'Stefano
3
+ Copyright (c) 2009-2010 Tomás D'Stefano
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -1,5 +1,9 @@
1
1
  = Rspec-i18n
2
2
 
3
+ * http://github.com/tomas-stefano/rspec-i18n/wikis
4
+ * http://gemcutter.org/gems/rspec-i18n
5
+ * http://rspec-i18n.lighthouseapp.com
6
+
3
7
  == Description
4
8
 
5
9
  The Rspec-i18n gem provide a easy way to write specs in any language you
@@ -11,8 +15,9 @@ But if you don't prefer that, you'll like the Rspec-i18n.
11
15
 
12
16
  == Synopsis
13
17
 
14
- Rspec-i18n will supports any language you want(See languages.yml file). This is
15
- Portuguese(Brazil):
18
+ Rspec-i18n will supports any language you want
19
+ (See http://github.com/tomas-stefano/rspec-i18n/blob/master/lib/spec-i18n/languages.yml file).
20
+ This is Portuguese(Brazil):
16
21
 
17
22
  require 'spec'
18
23
  require 'spec-i18n'
@@ -26,7 +31,7 @@ Portuguese(Brazil):
26
31
 
27
32
  # In spec/pessoa_spec.rb
28
33
 
29
- require 'spec_helper'
34
+ require 'spec_helper'
30
35
 
31
36
  descreva Pessoa do
32
37
  antes(:de_cada) do
@@ -41,11 +46,17 @@ Portuguese(Brazil):
41
46
 
42
47
  == Examples
43
48
 
44
- See more examples in the examples folder
49
+ See more examples in http://github.com/tomas-stefano/rspec-i18n/blob/master/examples/i18n
45
50
 
46
51
  == Listing the available languages
47
52
 
48
- spec-i18n --language help (NOT YET IMPLEMENTED)
53
+ rspec-i18n --language help
54
+
55
+ == Listing the available keywords for the language
56
+
57
+ rspec-i18n --language pt
58
+
59
+ rspec-i18n --language es
49
60
 
50
61
  == Adding a new language or completing a existing one(based on Cucumber implementation)
51
62
 
@@ -53,7 +64,7 @@ See more examples in the examples folder
53
64
  2. Add your language keywords to languages.yml
54
65
  3. Commit and push your changes - then send a pull request at Github
55
66
 
56
- ** OBS: Hints for better words in languages.yml are Welcome =D.
67
+ ** OBS: Hints for better words in languages.yml are Welcome =D.
57
68
 
58
69
  == Install
59
70
 
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ POST_MESSAGE = <<-POST_INSTALL_MESSAGE
12
12
 
13
13
  Thank you for installing rspec-i18n-#{SpecI18n::VERSION}
14
14
  Please be sure to read http://wiki.github.com/tomas-stefano/rspec-i18n/upgrading
15
- for important information about this release.
15
+ for information about this release.
16
16
 
17
17
  Remember: 'TDD is a muscle. You have to exercise it.' =) (Brian Liles)
18
18
 
@@ -29,11 +29,13 @@ begin
29
29
  gemspec.homepage = "http://github.com/tomas-stefano/rspec-i18n"
30
30
  gemspec.authors = ["Tomas D'Stefano"]
31
31
 
32
- gemspec.add_dependency('rspec', '>= 1.2.9')
33
- gemspec.add_dependency('cucumber', '>= 0.5.3')
32
+ gemspec.add_dependency('rspec', '>= 1.3.0')
33
+ gemspec.add_dependency('terminal-table', '>= 1.4.2')
34
+ gemspec.add_dependency('term-ansicolor', '1.0.4')
34
35
 
35
36
  gemspec.add_development_dependency('rspec', '>= 1.2.9')
36
- gemspec.add_development_dependency('cucumber', '>= 0.5.3')
37
+ gemspec.add_development_dependency('terminal-table', '>= 1.4.2')
38
+ gemspec.add_development_dependency('term-ansicolor', '1.0.4')
37
39
 
38
40
  gemspec.post_install_message = POST_MESSAGE
39
41
  end
data/TODO.txt CHANGED
@@ -1,25 +1,24 @@
1
1
  == Refactoring
2
2
 
3
- * The SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language) is duplicated in
4
- some places - check a better way to implement this
5
3
  * Simplified more and more tests!
6
4
  * Find the right module for the example group specs(it/example) (I think =>
7
5
  Spec::Example::ExampleGroupMethods but I think I was wrong)
6
+ * Need better hints for the 'its' word
8
7
 
9
8
  == Future
10
9
 
11
- * Translate all matchers
12
- * Translate subjects
13
10
  * Translate shared examples
11
+ * Translate nil, true, false and empty.
14
12
  * Put a #language header in the spec_helper file (Cucumber Style) instead load from config(maintain the two options)
15
13
  * Create the directory features to test with Cucumber
14
+ * Verifying if it's possible to translate error and success messages
16
15
  * Make the describe/it i18n available from a class
17
16
 
18
17
  Example:
19
18
  # class PilhaSpec < Spec::ExampleGroup
20
19
  # descreva Pilha, "sem nenhum elemento"
21
20
  #
22
- # antes
21
+ # antes do
23
22
  # @pilha = Pilha.new
24
23
  # end
25
24
  #
@@ -30,3 +29,4 @@
30
29
  # end
31
30
 
32
31
  * Check a better way to manipulating the mocks and stubs for i18n (What do you think?)
32
+ * Verify the following matchers: simple_matcher, wrap_expectation, respond_to, change and match_unless_raises.
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
3
- :minor: 2
2
+ :major: 1
3
+ :minor: 0
4
4
  :build:
5
- :patch: 1
5
+ :patch: 0
@@ -1,5 +1,4 @@
1
1
  require 'rubygems'
2
- require 'spec'
3
2
  require 'spec-i18n'
4
3
 
5
4
  Spec::Runner.configure do |config|
@@ -7,23 +6,40 @@ Spec::Runner.configure do |config|
7
6
  end
8
7
 
9
8
  class Pessoa
10
- attr_reader :idade
11
- def initialize(nome, sobrenome, idade=0)
9
+ attr_accessor :idade
10
+ def initialize(nome, sobrenome, opcoes={})
12
11
  @nome = nome
13
12
  @sobrenome = sobrenome
14
- @idade = idade
13
+ @idade = opcoes[:idade]
15
14
  end
16
15
 
17
16
  def nome_completo
18
17
  "#{@nome} #{@sobrenome}"
19
18
  end
19
+
20
+ def maior_de_idade?
21
+ return true if @idade >= 18
22
+ false
23
+ end
24
+
25
+ def pronto_para_votar?
26
+ maior_de_idade?
27
+ end
28
+
29
+ def pronto_para_dirigir?
30
+ maior_de_idade?
31
+ end
32
+
33
+ def autorizado_a_beber?
34
+ maior_de_idade?
35
+ end
20
36
  end
21
37
 
22
- # Silly Tests
38
+ # Silly Tests for show to you how to use this library in portuguese language
23
39
  descreva Pessoa do
24
40
 
25
41
  antes(:de_todos) do
26
- @pessoa = Pessoa.new("Tomás", "D'Stefano")
42
+ @pessoa = Pessoa.new("Homer", "Simpson")
27
43
  end
28
44
 
29
45
  antes(:de_cada) do
@@ -37,13 +53,102 @@ descreva Pessoa do
37
53
  depois(:de_cada) do
38
54
  @outras_pessoas = []
39
55
  end
40
-
41
- exemplo "deve retornar o nome completo" do
42
- @pessoa.nome_completo.deve == "Tomás D'Stefano"
56
+
57
+ depois(:suite) do
58
+ @pessoas = []
43
59
  end
44
-
45
- especificar "a idade é opcional" do
46
- Pessoa.new("Aaromn", "Monkey", 20).idade.deve == 20
60
+
61
+ exemplo 'deve ser uma instancia da classe Pessoa' do
62
+ @pessoa.deve ser_instancia_de(Pessoa)
63
+ end
64
+
65
+ exemplo 'deve incluir uma pessoa' do
66
+ @pessoas.deve incluir(@pessoa)
67
+ end
68
+
69
+ exemplo 'deve ser do tipo Pessoa' do
70
+ @pessoa.deve ser_do_tipo(Pessoa)
71
+ end
72
+
73
+ exemplo 'deve ter pelo menos uma pessoa' do
74
+ @pessoas.deve ter_no_minimo(1).items
75
+ end
76
+
77
+ exemplo 'deve ter exatamente duas pessoas' do
78
+ @pessoas << @pessoa
79
+ @pessoas.deve ter_exatamente(2).items
80
+ end
81
+
82
+ exemplo 'deve ter no maximo tres pessoas' do
83
+ @pessoas = []
84
+ @pessoas.deve ter_no_maximo(3).items
47
85
  end
48
86
 
87
+ contexto "Nome completo" do
88
+
89
+ antes(:de_cada_exemplo) do
90
+ @pessoa = Pessoa.new("Tomás", "D'Stefano")
91
+ end
92
+
93
+ exemplo "deve retornar o nome completo" do
94
+ @pessoa.nome_completo.deve ==("Tomás D'Stefano")
95
+ end
96
+
97
+ exemplo 'nome completo não pode ser nulo' do
98
+ @pessoa.nome_completo.nao_deve ser_igual_a(nil)
99
+ end
100
+
101
+ end
102
+
103
+ contexto "a idade" do
104
+
105
+ antes(:de_todos_exemplos) do
106
+ @pessoa = Pessoa.new("Aaromn", "Monkey", :idade => 20)
107
+ end
108
+
109
+ especificar "deve ser opcional" do
110
+ @pessoa.idade.deve ser_igual_a(20)
111
+ end
112
+ end
113
+
114
+ contexto 'maior de idade' do
115
+ assunto { Pessoa.new('Aaron', 'Monkey', :idade => 18) }
116
+
117
+ exemplo "deve estar pronto para votar" do
118
+ deve estar_pronto_para_votar
119
+ end
120
+
121
+ exemplo "deve ser maior de idade" do
122
+ deve ser_maior_de_idade
123
+ end
124
+
125
+ exemplo "deve estar pronto para dirigir" do
126
+ assunto.deve estar_pronto_para_dirigir
127
+ end
128
+
129
+ exemplo "deve estar autorizado para beber =D" do
130
+ assunto.deve estar_autorizado_a_beber
131
+ end
132
+ end
133
+
134
+ contexto 'menor de idade' do
135
+ assunto { Pessoa.new('Aaron', 'Monkey', :idade => 17) }
136
+
137
+ exemplo "nao deve estar pronto para votar" do
138
+ nao_deve estar_pronto_para_votar
139
+ end
140
+
141
+ exemplo "nao deve ser maior de idade" do
142
+ nao_deve ser_maior_de_idade
143
+ end
144
+
145
+ exemplo "nao deve estar pronto para votar" do
146
+ assunto.nao_deve estar_pronto_para_votar
147
+ end
148
+
149
+ exemplo "nao deve estar autorizado para beber =(" do
150
+ assunto.nao_deve estar_autorizado_a_beber
151
+ end
152
+ end
153
+
49
154
  end
@@ -1,7 +1,5 @@
1
- require 'cucumber'
2
- require 'cucumber/formatter/pretty'
3
- require 'cucumber/formatter/unicode'
4
- require 'cucumber/cli/language_help_formatter'
1
+ require 'term/ansicolor'
2
+ require 'terminal-table/import'
5
3
  require 'spec-i18n/parser'
6
4
 
7
5
  module SpecI18n
@@ -9,26 +7,81 @@ module SpecI18n
9
7
  class LanguageHelpFormatter
10
8
 
11
9
  class << self
10
+ include SpecI18n::Parser
11
+ include Term::ANSIColor
12
+
13
+ String.class_eval do
14
+ include Term::ANSIColor
15
+ end
12
16
 
13
17
  # Cucumber print table is loading
14
18
  # because I don't want reiventing the wheel
15
19
  #
16
20
  def list_languages_and_exit(io)
17
- raw = SpecI18n::Parser::NaturalLanguage.list_languages
18
- print_table io, raw, :check_lang => false
21
+ languages = list_languages
22
+
23
+ languages_table = table do
24
+ self.headings = ['Language', 'Name', 'Native']
25
+ languages.each do |language|
26
+ add_row language
27
+ end
28
+ end
29
+
30
+ print_table io, languages_table, :exit => true
19
31
  end
20
32
 
21
33
  def list_keywords_and_exit(io, lang)
22
- language = SpecI18n::Parser::NaturalLanguage.get(lang)
23
- raw = SpecI18n::Parser::NaturalLanguage.list_keywords(lang)
24
- print_table io, raw, :incomplete => language.incomplete?
34
+
35
+ language = NaturalLanguage.get(lang)
36
+
37
+ keywords = list_basic_keywords(language)
38
+
39
+ print_table io, table(nil, *keywords)
40
+
41
+ advanced_keywords = list_advanced_keywords(io, language)
42
+
43
+ print_table io, advanced_keywords, :exit => true
44
+ end
45
+
46
+ def list_languages
47
+ languages = SpecI18n::SPEC_LANGUAGES.keys.sort.map do |lang|
48
+ [ lang, grep_value(lang, 'name'), grep_value(lang, 'native') ]
49
+ end
50
+ end
51
+
52
+ def grep_value(lang, key)
53
+ SpecI18n::SPEC_LANGUAGES[lang][key]
54
+ end
55
+
56
+ def list_basic_keywords(language)
57
+ NaturalLanguage::BASIC_KEYWORDS.map do |keyword|
58
+ words = language.keywords[keyword]
59
+ [ keyword, words.split('|').join(' / ')]
60
+ end
61
+ end
62
+
63
+ def list_advanced_keywords(io, language)
64
+ NaturalLanguage::ADVANCED_KEYWORDS.map do |keyword|
65
+ language_keywords = [keyword]
66
+ language.keywords[keyword].map do |key, values|
67
+ language_keywords << [key, values.to_s.split('|').join(' / ')]
68
+ end
69
+
70
+ keywords_table = table do
71
+ self.headings = [language_keywords.shift]
72
+ language_keywords.each do |keywords|
73
+ add_row keywords
74
+ end
75
+ end
76
+
77
+ keywords_table
78
+
79
+ end
25
80
  end
26
81
 
27
- def print_table(io, raw, options)
28
- table = Cucumber::Ast::Table.new(raw)
29
- formatter = Cucumber::Cli::LanguageHelpFormatter.new(nil, io, options)
30
- Cucumber::Ast::TreeWalker.new(nil, [formatter]).visit_multiline_arg(table)
31
- Kernel.exit(0)
82
+ def print_table(io, raw, options={})
83
+ io.puts raw.to_s.send(options[:color] || :green).bold
84
+ Kernel.exit(0) if options[:exit]
32
85
  end
33
86
  end
34
87
 
@@ -13,34 +13,35 @@ module SpecI18n
13
13
  def parse!(args)
14
14
  @args = args
15
15
  @args.extend(::OptionParser::Arguable)
16
-
17
16
  @args.options do |opts|
18
- opts.banner = [ "Usage: rspec-i18n [options] [LANGUAGE]", "",
19
- "Examples:",
20
- "rspec-i18n --language help",
21
- "rspec-i18n --language pt"].join("\n")
22
-
23
- opts.on("-l LANGUAGE", "--language LANGUAGE",
24
- "List keywords for a particular language",
17
+ opts.banner = [ "Usage: rspec-i18n [options] [LANGUAGE]", "", "Examples:",
18
+ "rspec-i18n --language help", "rspec-i18n --language pt"].join("\n")
19
+ opts.on("-l LANGUAGE", "--language LANGUAGE", "List keywords for a particular language",
25
20
  %{Run with "--language help" to see all languages}) do |language|
26
- if language == 'help'
27
- LanguageHelpFormatter.list_languages_and_exit(@output_stream)
28
- else
29
- LanguageHelpFormatter.list_keywords_and_exit(@output_stream, language)
30
- end
21
+ print_languages(language)
31
22
  end
32
23
  opts.on_tail("-v", "--version", "Show version.") do
33
- @output_stream.puts SpecI18n::VERSION
34
- Kernel.exit(0)
24
+ print_and_exit(SpecI18n::VERSION)
35
25
  end
36
26
  opts.on_tail("-h", "--help", "You're looking at it.") do
37
- @output_stream.puts opts.help
38
- Kernel.exit(0)
27
+ print_and_exit(opts.help)
39
28
  end
40
29
  end.parse!
41
30
  self
42
31
  end
43
32
 
33
+ def print_languages(language)
34
+ if language == 'help'
35
+ LanguageHelpFormatter.list_languages_and_exit(@output_stream)
36
+ else
37
+ LanguageHelpFormatter.list_keywords_and_exit(@output_stream, language)
38
+ end
39
+ end
40
+
41
+ def print_and_exit(message)
42
+ @output_stream.puts message
43
+ Kernel.exit(0)
44
+ end
44
45
  end
45
46
  end
46
47
  end
@@ -8,7 +8,7 @@ module Spec
8
8
  #
9
9
  # Register alias for the language specified
10
10
  def register_adverbs
11
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
11
+ language = SpecI18n.natural_language
12
12
  @adverbs = language.dsl_keywords
13
13
  @adverbs.each do |key, values|
14
14
  values.map { |value| alias_method value, key }
@@ -3,17 +3,16 @@ module Spec
3
3
  module BeforeAndAfterHooks
4
4
 
5
5
  def register_hooks
6
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
6
+ language = SpecI18n.natural_language
7
7
  language.before_and_after_keywords.each do |key, values|
8
8
  values.map { |value| alias_method value, key }
9
9
  end
10
10
  end
11
11
 
12
12
  def before_parts(scope)
13
- if SpecI18n.spec_language
14
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
15
- scope = grep_the_scope(scope, language.hooks_params_keywords)
16
- end
13
+
14
+ scope = grep_language_and_scope(scope) || scope
15
+
17
16
  case scope
18
17
  when :each; before_each_parts
19
18
  when :all; before_all_parts
@@ -22,16 +21,22 @@ module Spec
22
21
  end
23
22
 
24
23
  def after_parts(scope)
25
- if SpecI18n.spec_language
26
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
27
- scope = grep_the_scope(scope, language.hooks_params_keywords)
28
- end
24
+
25
+ scope = grep_language_and_scope(scope) || scope
26
+
29
27
  case scope
30
28
  when :each; after_each_parts
31
29
  when :all; after_all_parts
32
30
  when :suite; after_suite_parts
33
31
  end
34
32
  end
33
+
34
+ def grep_language_and_scope(scope)
35
+ if SpecI18n.spec_language
36
+ language = SpecI18n.natural_language
37
+ scope = grep_the_scope(scope, language.hooks_params_keywords)
38
+ end
39
+ end
35
40
 
36
41
  # Receive a String Scope and return the scope in english for
37
42
  # the rspec run the right method
@@ -3,7 +3,7 @@ module Spec
3
3
  module ExampleGroupMethods
4
4
 
5
5
  def self.register_example_adverbs
6
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
6
+ language = SpecI18n.natural_language
7
7
  @adverbs = language.example_group_keywords
8
8
  @adverbs.each do |key, values|
9
9
  values.map do |value|
@@ -0,0 +1,29 @@
1
+ module Spec
2
+ module Example
3
+ module Subject
4
+ module ExampleGroupMethods
5
+ # TODO: Removing Duplications
6
+ class << self
7
+ def register_subjects
8
+ language = SpecI18n.natural_language
9
+ subject_and_its_keywords = language.subject_keywords.merge(language.its_keywords)
10
+ subject_and_its_keywords.each do |key, values|
11
+ values.map { |value| alias_method value, key }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ module ExampleMethods
17
+ class << self
18
+ def register_subjects
19
+ language = SpecI18n.natural_language
20
+ subject_and_expectation_keywords = language.subject_keywords.merge(language.expectation_keywords)
21
+ subject_and_expectation_keywords.each do |key, values|
22
+ values.map { |value| alias_method value, key }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,2 +1,3 @@
1
1
  require 'spec-i18n/example/before_and_after_hooks'
2
- require 'spec-i18n/example/example_group_methods'
2
+ require 'spec-i18n/example/example_group_methods'
3
+ require 'spec-i18n/example/subject'
@@ -1,6 +1,6 @@
1
1
  module Kernel
2
2
  def register_expectations_keywords
3
- language = SpecI18n::Parser::NaturalLanguage.get(SpecI18n.spec_language)
3
+ language = SpecI18n.natural_language
4
4
  @adverbs = language.expectation_keywords
5
5
  @adverbs.each do |key, values|
6
6
  values.map { |value| alias_method value, key }