i18n_lookup 0.1.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 (3) hide show
  1. data/i18n_lookup.rb +60 -0
  2. data/i18n_lookup_spec.rb +66 -0
  3. metadata +129 -0
data/i18n_lookup.rb ADDED
@@ -0,0 +1,60 @@
1
+ require 'i18n'
2
+ require 'logger'
3
+
4
+ $logger = Logger.new(STDOUT)
5
+
6
+ # if ENV['I18N_DEBUG'] is set to true, all keys are printed on console
7
+ module I18nLookup
8
+ protected
9
+
10
+ def lookup(locale, key, scope = [], options = {})
11
+ result = super(locale, key, scope, options)
12
+ keys = I18n.normalize_keys(locale, key, scope, options[:separator])
13
+
14
+ unless (same_key?(keys) && same_caller?)
15
+ @last_key ||= keys.last
16
+ print_main_key(keys)
17
+ end
18
+
19
+ if result
20
+ print_keys(keys, 33)
21
+ print_result(result)
22
+ @last_key = nil
23
+ else
24
+ print_keys(keys, 31)
25
+ end
26
+ result
27
+ end
28
+
29
+ private
30
+
31
+ def same_caller?
32
+ @@last_caller ||= caller
33
+ current_caller = caller
34
+ lines = current_caller.length
35
+ i18n_index = current_caller.reverse.index{|line| line =~ /i18n/}
36
+ start_line = lines - i18n_index
37
+ result = (current_caller[start_line..-1] - @@last_caller[start_line..-1]).empty?
38
+ @@last_caller = current_caller
39
+ result
40
+ end
41
+
42
+ def same_key?(keys)
43
+ @last_key && @last_key.eql?(keys.last)
44
+ end
45
+
46
+ def print_main_key(keys, color_code = 34)
47
+ $logger.debug %|--|
48
+ $logger.debug %|Key: "\e[1;#{color_code}m#{keys.last}\e[0;0m"|
49
+ end
50
+
51
+ def print_keys(keys, color_code)
52
+ $logger.debug %|\t"\e[1;#{color_code}m#{keys.map(&:to_s).join('.')}\e[0;0m"|
53
+ end
54
+
55
+ def print_result(result, color_code = 35)
56
+ $logger.debug %|\t => "\e[1;#{color_code}m#{result.to_s}\e[0;0m"|
57
+ end
58
+ end
59
+
60
+ I18n::Backend::Simple.send(:include, I18nLookup) if ENV['I18N_DEBUG'].eql?('true')
@@ -0,0 +1,66 @@
1
+ ENV['I18N_DEBUG'] = 'true'
2
+ require File.expand_path('i18n_lookup')
3
+
4
+ class ActiveModelTest
5
+ require 'active_model'
6
+ extend ActiveModel::Translation
7
+ end
8
+
9
+ describe I18nLookup do
10
+ let(:translations) do
11
+ {}
12
+ end
13
+
14
+ before do
15
+ I18n.backend.instance_variable_set(:@translations, translations)
16
+ end
17
+
18
+ subject { I18n::Backend::Simple.any_instance }
19
+
20
+ context 'activemodel' do
21
+ let(:translations) do
22
+ {:en =>{:attributes => {:my_attribute => 'My Attribute'}}}
23
+ end
24
+
25
+ it 'should x' do
26
+ expected_result = translations[:en][:attributes][:my_attribute]
27
+ main_key = [:en, :activemodel, :attributes, :active_model_test, :my_attribute]
28
+ second_key = [:en, :attributes, :my_attribute]
29
+
30
+ subject.should_receive(:print_main_key).with(main_key)
31
+ subject.should_receive(:print_keys).with(main_key, 31)
32
+ subject.should_receive(:print_keys).with(second_key, 33)
33
+ subject.should_receive(:print_result).with(expected_result)
34
+
35
+ ActiveModelTest.human_attribute_name('my_attribute')
36
+ end
37
+
38
+ it 'should y' do
39
+ main_key = [:en, :activemodel, :attributes, :active_model_test, :my_attribute_2]
40
+ second_key = [:en, :attributes, :my_attribute_2]
41
+
42
+ subject.should_receive(:print_main_key).with(main_key)
43
+ subject.should_receive(:print_keys).with(main_key, 31)
44
+ subject.should_receive(:print_keys).with(second_key, 31)
45
+
46
+ ActiveModelTest.human_attribute_name('my_attribute_2')
47
+ end
48
+ end
49
+
50
+ context 'ruby' do
51
+ let(:translations) do
52
+ {:en => {:test => 'My Test'}}
53
+ end
54
+
55
+ it 'should z' do
56
+ expected_result = translations[:en][:test]
57
+ main_key = [:en, :test]
58
+
59
+ subject.should_receive(:print_main_key).with(main_key)
60
+ subject.should_receive(:print_keys).with(main_key, 33)
61
+ subject.should_receive(:print_result).with(expected_result)
62
+
63
+ I18n.t :test
64
+ end
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: i18n_lookup
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Thomas Metzmacher
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: i18n
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.9
22
+ type: :runtime
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: 0.6.9
29
+ prerelease: false
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.0'
38
+ type: :development
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: '2.0'
45
+ prerelease: false
46
+ - !ruby/object:Gem::Dependency
47
+ name: pry-debugger
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0.2'
54
+ type: :development
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '0.2'
61
+ prerelease: false
62
+ - !ruby/object:Gem::Dependency
63
+ name: awesome_print
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.2'
70
+ type: :development
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '1.2'
77
+ prerelease: false
78
+ - !ruby/object:Gem::Dependency
79
+ name: activemodel
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 4.0.2
86
+ type: :development
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ version: 4.0.2
93
+ prerelease: false
94
+ description: Prints out the I18n calls
95
+ email: kontakt@thomet.de
96
+ executables: []
97
+ extensions: []
98
+ extra_rdoc_files: []
99
+ files:
100
+ - i18n_lookup.rb
101
+ - i18n_lookup_spec.rb
102
+ homepage: http://www.thomet.de/
103
+ licenses:
104
+ - MIT
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - .
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 1.8.23
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: I18n Lookup
127
+ test_files:
128
+ - i18n_lookup_spec.rb
129
+ has_rdoc: