i18nliner 0.2.4 → 0.3.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. checksums.yaml +4 -4
  2. data/Rakefile +8 -6
  3. data/lib/i18nliner/base.rb +26 -27
  4. data/lib/i18nliner/call_helpers.rb +42 -34
  5. data/lib/i18nliner/commands/basic_formatter.rb +2 -0
  6. data/lib/i18nliner/commands/check.rb +14 -14
  7. data/lib/i18nliner/commands/color_formatter.rb +2 -0
  8. data/lib/i18nliner/commands/dump.rb +6 -6
  9. data/lib/i18nliner/commands/generic_command.rb +4 -2
  10. data/lib/i18nliner/controller_scope.rb +2 -0
  11. data/lib/i18nliner/errors.rb +5 -4
  12. data/lib/i18nliner/erubi.rb +5 -4
  13. data/lib/i18nliner/erubis.rb +2 -0
  14. data/lib/i18nliner/extensions/controller.rb +8 -8
  15. data/lib/i18nliner/extensions/core.rb +16 -18
  16. data/lib/i18nliner/extensions/inferpolation.rb +11 -7
  17. data/lib/i18nliner/extensions/model.rb +11 -10
  18. data/lib/i18nliner/extensions/view.rb +13 -9
  19. data/lib/i18nliner/extractors/ruby_extractor.rb +18 -16
  20. data/lib/i18nliner/extractors/sexp_helper.rb +8 -5
  21. data/lib/i18nliner/extractors/translate_call.rb +31 -26
  22. data/lib/i18nliner/extractors/translation_hash.rb +10 -10
  23. data/lib/i18nliner/pre_processors/erb_pre_processor.rb +63 -49
  24. data/lib/i18nliner/processors/abstract_processor.rb +9 -4
  25. data/lib/i18nliner/processors/erb_processor.rb +10 -8
  26. data/lib/i18nliner/processors/ruby_processor.rb +13 -10
  27. data/lib/i18nliner/processors.rb +2 -0
  28. data/lib/i18nliner/railtie.rb +10 -10
  29. data/lib/i18nliner/reserved_keys.rb +2 -0
  30. data/lib/i18nliner/scope.rb +7 -9
  31. data/lib/i18nliner.rb +8 -6
  32. data/lib/tasks/i18nliner.rake +8 -7
  33. data/spec/fixtures/app/models/invalid.rb +2 -0
  34. data/spec/fixtures/app/models/valid.rb +2 -0
  35. data/spec/{commands → i18nliner/commands}/check_spec.rb +5 -6
  36. data/spec/{commands → i18nliner/commands}/dump_spec.rb +9 -10
  37. data/spec/{extensions → i18nliner/extensions}/controller_spec.rb +9 -8
  38. data/spec/{extensions → i18nliner/extensions}/core_spec.rb +45 -34
  39. data/spec/i18nliner/extensions/inferpolation_spec.rb +51 -0
  40. data/spec/i18nliner/extensions/model_spec.rb +31 -0
  41. data/spec/{extensions → i18nliner/extensions}/view_spec.rb +15 -13
  42. data/spec/{extractors → i18nliner/extractors}/ruby_extractor_spec.rb +24 -15
  43. data/spec/{extractors → i18nliner/extractors}/translate_call_spec.rb +73 -65
  44. data/spec/{extractors → i18nliner/extractors}/translation_hash_spec.rb +13 -12
  45. data/spec/{reserved_keys_spec.rb → i18nliner/i18n_spec.rb} +3 -1
  46. data/spec/{pre_processors → i18nliner/pre_processors}/erb_pre_processor_spec.rb +80 -77
  47. data/spec/i18nliner/processors/erb_processor_spec.rb +45 -0
  48. data/spec/i18nliner/processors/ruby_processor_spec.rb +27 -0
  49. metadata +58 -88
  50. data/spec/extensions/inferpolation_spec.rb +0 -49
  51. data/spec/extensions/model_spec.rb +0 -30
  52. data/spec/processors/erb_processor_spec.rb +0 -45
  53. data/spec/processors/ruby_processor_spec.rb +0 -28
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "i18nliner/processors/ruby_processor"
4
+ require "i18nliner/extractors/translation_hash"
5
+ require "i18nliner/scope"
6
+
7
+ describe I18nliner::Processors::RubyProcessor do
8
+ let(:translations) { I18nliner::Extractors::TranslationHash.new }
9
+ let(:processor) { I18nliner::Processors::RubyProcessor.new(translations) }
10
+
11
+ describe "#scope_for" do
12
+ if defined?(Rails)
13
+ context "with a controller" do
14
+ subject(:scope) { processor.scope_for("app/controllers/foos/bars_controller.rb") }
15
+
16
+ specify { expect(scope).to be_allow_relative }
17
+ specify { expect(scope.scope).to eq "foos.bars." }
18
+ end
19
+ end
20
+
21
+ context "with any old ruby file" do
22
+ subject(:scope) { processor.scope_for("foo.rb") }
23
+
24
+ specify { expect(scope).to be I18nliner::Scope.root }
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18nliner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Jensen
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-06-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -25,148 +24,120 @@ dependencies:
25
24
  - !ruby/object:Gem::Version
26
25
  version: '6.0'
27
26
  - !ruby/object:Gem::Dependency
28
- name: i18n
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.8.6
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 1.8.6
41
- - !ruby/object:Gem::Dependency
42
- name: ruby_parser
27
+ name: erubi
43
28
  requirement: !ruby/object:Gem::Requirement
44
29
  requirements:
45
30
  - - "~>"
46
31
  - !ruby/object:Gem::Version
47
- version: '3.10'
32
+ version: '1.7'
48
33
  type: :runtime
49
34
  prerelease: false
50
35
  version_requirements: !ruby/object:Gem::Requirement
51
36
  requirements:
52
37
  - - "~>"
53
38
  - !ruby/object:Gem::Version
54
- version: '3.10'
39
+ version: '1.7'
55
40
  - !ruby/object:Gem::Dependency
56
- name: sexp_processor
41
+ name: globby
57
42
  requirement: !ruby/object:Gem::Requirement
58
43
  requirements:
59
- - - "~>"
44
+ - - ">="
60
45
  - !ruby/object:Gem::Version
61
- version: '4.10'
46
+ version: 0.1.1
62
47
  type: :runtime
63
48
  prerelease: false
64
49
  version_requirements: !ruby/object:Gem::Requirement
65
50
  requirements:
66
- - - "~>"
51
+ - - ">="
67
52
  - !ruby/object:Gem::Version
68
- version: '4.10'
53
+ version: 0.1.1
69
54
  - !ruby/object:Gem::Dependency
70
- name: ruby2ruby
55
+ name: i18n
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
- - - "~>"
58
+ - - ">="
74
59
  - !ruby/object:Gem::Version
75
- version: '2.4'
60
+ version: 1.8.6
76
61
  type: :runtime
77
62
  prerelease: false
78
63
  version_requirements: !ruby/object:Gem::Requirement
79
64
  requirements:
80
- - - "~>"
65
+ - - ">="
81
66
  - !ruby/object:Gem::Version
82
- version: '2.4'
67
+ version: 1.8.6
83
68
  - !ruby/object:Gem::Dependency
84
- name: globby
69
+ name: nokogiri
85
70
  requirement: !ruby/object:Gem::Requirement
86
71
  requirements:
87
72
  - - ">="
88
73
  - !ruby/object:Gem::Version
89
- version: 0.1.1
74
+ version: 1.5.0
90
75
  type: :runtime
91
76
  prerelease: false
92
77
  version_requirements: !ruby/object:Gem::Requirement
93
78
  requirements:
94
79
  - - ">="
95
80
  - !ruby/object:Gem::Version
96
- version: 0.1.1
81
+ version: 1.5.0
97
82
  - !ruby/object:Gem::Dependency
98
- name: erubi
83
+ name: prism
99
84
  requirement: !ruby/object:Gem::Requirement
100
85
  requirements:
101
86
  - - "~>"
102
87
  - !ruby/object:Gem::Version
103
- version: '1.7'
88
+ version: '1.8'
104
89
  type: :runtime
105
90
  prerelease: false
106
91
  version_requirements: !ruby/object:Gem::Requirement
107
92
  requirements:
108
93
  - - "~>"
109
94
  - !ruby/object:Gem::Version
110
- version: '1.7'
95
+ version: '1.8'
111
96
  - !ruby/object:Gem::Dependency
112
- name: ya2yaml
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - '='
116
- - !ruby/object:Gem::Version
117
- version: '0.31'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '='
123
- - !ruby/object:Gem::Version
124
- version: '0.31'
125
- - !ruby/object:Gem::Dependency
126
- name: nokogiri
97
+ name: ruby2ruby
127
98
  requirement: !ruby/object:Gem::Requirement
128
99
  requirements:
129
- - - ">="
100
+ - - "~>"
130
101
  - !ruby/object:Gem::Version
131
- version: 1.5.0
102
+ version: '2.4'
132
103
  type: :runtime
133
104
  prerelease: false
134
105
  version_requirements: !ruby/object:Gem::Requirement
135
106
  requirements:
136
- - - ">="
107
+ - - "~>"
137
108
  - !ruby/object:Gem::Version
138
- version: 1.5.0
109
+ version: '2.4'
139
110
  - !ruby/object:Gem::Dependency
140
- name: rspec
111
+ name: sexp_processor
141
112
  requirement: !ruby/object:Gem::Requirement
142
113
  requirements:
143
114
  - - "~>"
144
115
  - !ruby/object:Gem::Version
145
- version: '3.6'
146
- type: :development
116
+ version: '4.10'
117
+ type: :runtime
147
118
  prerelease: false
148
119
  version_requirements: !ruby/object:Gem::Requirement
149
120
  requirements:
150
121
  - - "~>"
151
122
  - !ruby/object:Gem::Version
152
- version: '3.6'
123
+ version: '4.10'
153
124
  - !ruby/object:Gem::Dependency
154
- name: rspec-mocks
125
+ name: ya2yaml
155
126
  requirement: !ruby/object:Gem::Requirement
156
127
  requirements:
157
- - - "~>"
128
+ - - '='
158
129
  - !ruby/object:Gem::Version
159
- version: '3.6'
160
- type: :development
130
+ version: '0.31'
131
+ type: :runtime
161
132
  prerelease: false
162
133
  version_requirements: !ruby/object:Gem::Requirement
163
134
  requirements:
164
- - - "~>"
135
+ - - '='
165
136
  - !ruby/object:Gem::Version
166
- version: '3.6'
167
- description: No .yml files. Inline defaults. Optional keys. Inferred interpolation
168
- values. Wrappers and blocks, so your templates look template-y and your translations
169
- stay HTML-free.
137
+ version: '0.31'
138
+ description: |
139
+ No .yml files. Inline defaults. Optional keys. Inferred interpolation values.
140
+ Wrappers and blocks, so your templates look template-y and your translations stay HTML-free.
170
141
  email: jenseng@gmail.com
171
142
  executables: []
172
143
  extensions: []
@@ -205,26 +176,26 @@ files:
205
176
  - lib/i18nliner/reserved_keys.rb
206
177
  - lib/i18nliner/scope.rb
207
178
  - lib/tasks/i18nliner.rake
208
- - spec/commands/check_spec.rb
209
- - spec/commands/dump_spec.rb
210
- - spec/extensions/controller_spec.rb
211
- - spec/extensions/core_spec.rb
212
- - spec/extensions/inferpolation_spec.rb
213
- - spec/extensions/model_spec.rb
214
- - spec/extensions/view_spec.rb
215
- - spec/extractors/ruby_extractor_spec.rb
216
- - spec/extractors/translate_call_spec.rb
217
- - spec/extractors/translation_hash_spec.rb
218
179
  - spec/fixtures/app/models/invalid.rb
219
180
  - spec/fixtures/app/models/valid.rb
220
- - spec/pre_processors/erb_pre_processor_spec.rb
221
- - spec/processors/erb_processor_spec.rb
222
- - spec/processors/ruby_processor_spec.rb
223
- - spec/reserved_keys_spec.rb
181
+ - spec/i18nliner/commands/check_spec.rb
182
+ - spec/i18nliner/commands/dump_spec.rb
183
+ - spec/i18nliner/extensions/controller_spec.rb
184
+ - spec/i18nliner/extensions/core_spec.rb
185
+ - spec/i18nliner/extensions/inferpolation_spec.rb
186
+ - spec/i18nliner/extensions/model_spec.rb
187
+ - spec/i18nliner/extensions/view_spec.rb
188
+ - spec/i18nliner/extractors/ruby_extractor_spec.rb
189
+ - spec/i18nliner/extractors/translate_call_spec.rb
190
+ - spec/i18nliner/extractors/translation_hash_spec.rb
191
+ - spec/i18nliner/i18n_spec.rb
192
+ - spec/i18nliner/pre_processors/erb_pre_processor_spec.rb
193
+ - spec/i18nliner/processors/erb_processor_spec.rb
194
+ - spec/i18nliner/processors/ruby_processor_spec.rb
224
195
  homepage: http://github.com/jenseng/i18nliner
225
196
  licenses: []
226
- metadata: {}
227
- post_install_message:
197
+ metadata:
198
+ rubygems_mfa_required: 'true'
228
199
  rdoc_options: []
229
200
  require_paths:
230
201
  - lib
@@ -232,15 +203,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
203
  requirements:
233
204
  - - ">="
234
205
  - !ruby/object:Gem::Version
235
- version: '2.7'
206
+ version: '3.2'
236
207
  required_rubygems_version: !ruby/object:Gem::Requirement
237
208
  requirements:
238
209
  - - ">="
239
210
  - !ruby/object:Gem::Version
240
- version: 1.3.5
211
+ version: '0'
241
212
  requirements: []
242
- rubygems_version: 3.1.6
243
- signing_key:
213
+ rubygems_version: 3.6.9
244
214
  specification_version: 4
245
215
  summary: I18n made simple
246
216
  test_files: []
@@ -1,49 +0,0 @@
1
- require 'i18nliner/extensions/inferpolation'
2
- require 'ostruct'
3
-
4
- describe I18nliner::Extensions::Inferpolation do
5
-
6
- let(:foo) do
7
- foo = OpenStruct.new(:bar => OpenStruct.new(:baz => "lol"), :bar2 => "foo")
8
- foo.instance_variable_set(:@bar, foo.bar)
9
- foo.instance_variable_set(:@bar2, "foo")
10
- foo.extend I18nliner::Extensions::Inferpolation
11
- foo
12
- end
13
-
14
- it "should inferpolate valid instance methods and chains" do
15
- options = {:default => "hello %{bar.baz} %{bar2}"}
16
- expect(foo.inferpolate(options)).to eq({
17
- :default => "hello %{bar_baz} %{bar2}",
18
- :bar_baz => foo.bar.baz,
19
- :bar2 => foo.bar2
20
- })
21
- end
22
-
23
- it "should inferpolate valid instance variables and chains" do
24
- options = {:default => "hello %{@bar.baz} %{@bar2}"}
25
- expect(foo.inferpolate(options)).to eq({
26
- :default => "hello %{bar_baz} %{bar2}",
27
- :bar_baz => foo.bar.baz,
28
- :bar2 => foo.bar2
29
- })
30
- end
31
-
32
- it "should not inferpolate invalid instance methods and chains" do
33
- options = {:default => "hello %{lol} %{bar.baz.lol}"}
34
- expect(foo.inferpolate(options)).to eq options
35
- end
36
-
37
- it "should not inferpolate invalid instance variables and chains" do
38
- options = {:default => "hello %{@lol} %{@bar.baz.lol}"}
39
- expect(foo.inferpolate(options)).to eq options
40
- end
41
-
42
- it "should work with pluralization hashes" do
43
- options = {:default => {:one => "%{bar2} has 1 item", :other => "%{bar2} has %{count} items"}}
44
- expect(foo.inferpolate(options)).to eq({
45
- :default => {:one => "%{bar2} has 1 item", :other => "%{bar2} has %{count} items"},
46
- :bar2 => foo.bar2
47
- })
48
- end
49
- end
@@ -1,30 +0,0 @@
1
- # encoding: UTF-8
2
- require 'i18nliner/extensions/model'
3
- require 'i18nliner/call_helpers'
4
-
5
- describe I18nliner::Extensions::Model do
6
- let(:i18n) do
7
- Module.new do
8
- extend I18nliner::Extensions::Model
9
- end
10
- end
11
-
12
-
13
- describe "#translate" do
14
- it "should inferpolate" do
15
- allow(i18n).to receive(:foo).and_return("FOO")
16
- allow(I18nliner::CallHelpers).to receive(:infer_key).and_return(:key)
17
-
18
- expect(I18n).to receive(:translate).with(:key, :default => "hello %{foo}", :foo => "FOO", :i18nliner_scope => i18n.i18nliner_scope, :i18nliner_inferred_key => true)
19
- i18n.translate("hello %{foo}")
20
- end
21
-
22
- it "should pass along its scope to I18n.t" do
23
- expect(I18n).to receive(:translate).with(:key, :default => "foo", :i18nliner_scope => i18n.i18nliner_scope)
24
- i18n.translate(:key, "foo")
25
- end
26
- end
27
- end
28
-
29
-
30
-
@@ -1,45 +0,0 @@
1
- require 'i18nliner/processors/erb_processor'
2
- require 'i18nliner/extractors/translation_hash'
3
- require 'i18nliner/scope'
4
-
5
- describe I18nliner::Processors::ErbProcessor do
6
- before do
7
- @translations = I18nliner::Extractors::TranslationHash.new
8
- @processor = I18nliner::Processors::ErbProcessor.new(@translations)
9
- end
10
-
11
- describe "#scope_for" do
12
- context "with an erb template" do
13
- subject { @processor.scope_for("app/views/foos/show.html.erb") }
14
-
15
- specify { expect(subject).to be_allow_relative }
16
- specify { expect(subject).to be_remove_whitespace }
17
- specify { expect(subject.scope).to eq "foos.show." }
18
- end
19
-
20
- context "with anything else" do
21
- subject { @processor.scope_for("foo.erb") }
22
-
23
- specify { expect(subject).to be I18nliner::Scope.root }
24
- end
25
- end
26
-
27
- describe "#check_contents" do
28
- it "should extract valid translation calls" do
29
- @processor.check_contents(<<-SOURCE)
30
- <%= t "Inline!" %>
31
- <%= t do %>
32
- Zomg a block
33
- <a href="/nesting"
34
- title="<%= t do %>what is this?<% end %>"
35
- >with nesting</a>!!!
36
- <% end %>
37
- SOURCE
38
- expect(@translations.values.sort).to eq [
39
- "Inline!",
40
- "Zomg a block *with nesting*!!!",
41
- "what is this?"
42
- ]
43
- end
44
- end
45
- end
@@ -1,28 +0,0 @@
1
- require 'i18nliner/processors/ruby_processor'
2
- require 'i18nliner/extractors/translation_hash'
3
- require 'i18nliner/scope'
4
-
5
- describe I18nliner::Processors::RubyProcessor do
6
- before do
7
- @translations = I18nliner::Extractors::TranslationHash.new
8
- @processor = I18nliner::Processors::RubyProcessor.new(@translations)
9
- end
10
-
11
- describe "#scope_for" do
12
- if defined?(::Rails)
13
- context "with a controller" do
14
- subject { @processor.scope_for("app/controllers/foos/bars_controller.rb") }
15
-
16
- specify { expect(subject).to be_allow_relative }
17
- specify { expect(subject.scope).to eq "foos.bars." }
18
- end
19
- end
20
-
21
- context "with any old ruby file" do
22
- subject { @processor.scope_for("foo.rb") }
23
-
24
- specify { expect(subject).to be I18nliner::Scope.root }
25
- end
26
- end
27
- end
28
-