rspec-i18n 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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 }