i15r 0.5.3 → 0.5.4
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/bin/i15r +3 -0
- data/lib/i15r.rb +7 -1
- data/lib/i15r/locale_creator.rb +67 -0
- data/lib/i15r/pattern_matcher.rb +10 -3
- data/lib/i15r/version.rb +1 -1
- data/spec/i15r_spec.rb +2 -2
- metadata +18 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e303ee01d27aa5ce0b71216113452365d496c3d6
|
4
|
+
data.tar.gz: 8fc8be8c85e3eebfe40e63afb2c63d2e527e07bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d25cc9528e8fb9e441d5b6169bc3c6ac810438ed975bfa404cb3d8d8fb8b61f64915a5bdbc28537d68b2c4cc59cbdefe70a122860d940a788f8ef1920586f285
|
7
|
+
data.tar.gz: 443e6940d929f4d5f38cb31887d86362059863a39d6df8bbc570b5947dc419905f6da6cc1184b6ef8fad1feadced490c183646eb14b0041b9184ea7a82ee7146
|
data/Gemfile.lock
CHANGED
data/bin/i15r
CHANGED
@@ -30,6 +30,9 @@ def parse_options(args)
|
|
30
30
|
opts.on("--override_i18n_method METHOD", "Replace I18n.t with METHOD") do |m|
|
31
31
|
options[:override_i18n_method] = m
|
32
32
|
end
|
33
|
+
opts.on("--create-locale-file FILE_NAME", "Create a locale file with the given name.") do |m|
|
34
|
+
options[:create_locale_file] = m
|
35
|
+
end
|
33
36
|
|
34
37
|
opts.on_tail("-h", "--help", "Show this message") do
|
35
38
|
puts opts
|
data/lib/i15r.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'i15r/pattern_matcher'
|
2
|
+
require 'i15r/locale_creator'
|
2
3
|
|
3
4
|
class I15R
|
4
5
|
class AppFolderNotFound < Exception; end
|
@@ -35,6 +36,7 @@ class I15R
|
|
35
36
|
@reader = reader
|
36
37
|
@writer = writer
|
37
38
|
@printer = printer
|
39
|
+
@locale_creator = I15R::LocaleCreator.new(config[:create_locale_file])
|
38
40
|
@config = I15R::Config.new(config)
|
39
41
|
end
|
40
42
|
|
@@ -79,7 +81,10 @@ class I15R
|
|
79
81
|
end
|
80
82
|
|
81
83
|
def sub_plain_strings(text, prefix, file_type)
|
82
|
-
pm = I15R::PatternMatcher.new(prefix,
|
84
|
+
pm = I15R::PatternMatcher.new(prefix,
|
85
|
+
file_type,
|
86
|
+
@locale_creator,
|
87
|
+
:add_default => config.add_default,
|
83
88
|
:override_i18n_method => config.override_i18n_method)
|
84
89
|
transformed_text = pm.run(text) do |old_line, new_line|
|
85
90
|
@printer.print_diff(old_line, new_line)
|
@@ -92,6 +97,7 @@ class I15R
|
|
92
97
|
path = "app" if path.nil?
|
93
98
|
files = File.directory?(path) ? Dir.glob("#{path}/**/*.{erb,haml}") : [path]
|
94
99
|
files.each { |file| internationalize_file(file) }
|
100
|
+
@locale_creator.save_file
|
95
101
|
end
|
96
102
|
|
97
103
|
def include_path?
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class I15R
|
4
|
+
class LocaleCreator
|
5
|
+
def initialize(file_name = nil)
|
6
|
+
@file_name = file_name
|
7
|
+
@structure = LocaleStructure.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(path, value)
|
11
|
+
if @file_name
|
12
|
+
@structure.add(path, value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def save_file
|
17
|
+
if @file_name
|
18
|
+
yaml = @structure.to_yaml(:en)
|
19
|
+
File.write("#{@file_name}.yml", yaml)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class LocaleStructure
|
24
|
+
attr_reader :structure
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
@structure = {}
|
28
|
+
end
|
29
|
+
|
30
|
+
def add(path, value)
|
31
|
+
keys = path.dup.split('.')
|
32
|
+
|
33
|
+
h = nested_hash_for(keys, value)
|
34
|
+
|
35
|
+
@structure = deep_merge(self.structure, h)
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_yaml(language)
|
39
|
+
{ language.to_s => @structure }.to_yaml
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def nested_hash_for(keys, value)
|
45
|
+
if keys.size == 1
|
46
|
+
{ keys.delete_at(0) => value }
|
47
|
+
else
|
48
|
+
{ keys.delete_at(0) => nested_hash_for(keys, value) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def deep_merge(hash, other_hash)
|
53
|
+
other_hash.each_pair do |current_key, other_value|
|
54
|
+
this_value = hash[current_key]
|
55
|
+
|
56
|
+
hash[current_key] = if this_value.is_a?(Hash) && other_value.is_a?(Hash)
|
57
|
+
deep_merge(this_value, other_value)
|
58
|
+
else
|
59
|
+
other_value
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
hash
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/i15r/pattern_matcher.rb
CHANGED
@@ -26,11 +26,15 @@ class I15R
|
|
26
26
|
]
|
27
27
|
}
|
28
28
|
|
29
|
-
def initialize(prefix, file_type, options={})
|
29
|
+
def initialize(prefix, file_type, locale_creator = I15R::LocaleCreator.new, options={})
|
30
|
+
if locale_creator.is_a? Hash
|
31
|
+
options = locale_creator
|
32
|
+
locale_creator = I15R::LocaleCreator.new
|
33
|
+
end
|
30
34
|
@prefix = prefix
|
31
35
|
@file_type = file_type
|
32
36
|
transformer_class = self.class.const_get("#{file_type.to_s.capitalize}Transformer")
|
33
|
-
@transformer = transformer_class.new(options[:add_default], options[:override_i18n_method] || 'I18n.t')
|
37
|
+
@transformer = transformer_class.new(options[:add_default], options[:override_i18n_method] || 'I18n.t', locale_creator)
|
34
38
|
end
|
35
39
|
|
36
40
|
def translation_key(text)
|
@@ -66,13 +70,16 @@ class I15R
|
|
66
70
|
end
|
67
71
|
|
68
72
|
class Transformer
|
69
|
-
def initialize(add_default, i18n_method)
|
73
|
+
def initialize(add_default, i18n_method, locale_creator)
|
70
74
|
@add_default = add_default
|
71
75
|
@i18n_method = i18n_method
|
76
|
+
@locale_creator = locale_creator
|
72
77
|
end
|
73
78
|
|
74
79
|
private
|
75
80
|
def i18n_string(key, original)
|
81
|
+
@locale_creator.add(key, original)
|
82
|
+
|
76
83
|
if @add_default
|
77
84
|
if original.to_s[0] == ':'
|
78
85
|
original = original.to_s[1..-1]
|
data/lib/i15r/version.rb
CHANGED
data/spec/i15r_spec.rb
CHANGED
@@ -118,7 +118,7 @@ describe I15R do
|
|
118
118
|
end
|
119
119
|
specify do
|
120
120
|
I15R::PatternMatcher.should_receive(:new)
|
121
|
-
.with(anything, anything, hash_including(:add_default => true))
|
121
|
+
.with(anything, anything, anything, hash_including(:add_default => true))
|
122
122
|
.and_return(patter_matcher)
|
123
123
|
subject.internationalize_file(path)
|
124
124
|
end
|
@@ -130,7 +130,7 @@ describe I15R do
|
|
130
130
|
end
|
131
131
|
specify do
|
132
132
|
I15R::PatternMatcher.should_receive(:new)
|
133
|
-
.with(anything, anything, hash_including(:add_default => false))
|
133
|
+
.with(anything, anything, anything, hash_including(:add_default => false))
|
134
134
|
.and_return(patter_matcher)
|
135
135
|
subject.internationalize_file(path)
|
136
136
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i15r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Balint Erdi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 10.0.3
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 10.0.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.12.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.12.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: guard
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 1.5.4
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.5.4
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard-rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.3.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.3.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rb-fsevent
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.9.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.9.1
|
83
83
|
description: The internationalizer. Replaces plain text strings in your views and
|
@@ -89,8 +89,8 @@ executables:
|
|
89
89
|
extensions: []
|
90
90
|
extra_rdoc_files: []
|
91
91
|
files:
|
92
|
-
- .gitignore
|
93
|
-
- .travis.yml
|
92
|
+
- ".gitignore"
|
93
|
+
- ".travis.yml"
|
94
94
|
- CHANGELOG.md
|
95
95
|
- CONTRIBUTING.md
|
96
96
|
- Gemfile
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/i15r/console_printer.rb
|
108
108
|
- lib/i15r/file_reader.rb
|
109
109
|
- lib/i15r/file_writer.rb
|
110
|
+
- lib/i15r/locale_creator.rb
|
110
111
|
- lib/i15r/pattern_matcher.rb
|
111
112
|
- lib/i15r/version.rb
|
112
113
|
- spec/i15r_spec.rb
|
@@ -127,17 +128,17 @@ require_paths:
|
|
127
128
|
- lib
|
128
129
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
130
|
requirements:
|
130
|
-
- -
|
131
|
+
- - ">="
|
131
132
|
- !ruby/object:Gem::Version
|
132
133
|
version: '0'
|
133
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
135
|
requirements:
|
135
|
-
- -
|
136
|
+
- - ">="
|
136
137
|
- !ruby/object:Gem::Version
|
137
138
|
version: '0'
|
138
139
|
requirements: []
|
139
140
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.4.6
|
141
142
|
signing_key:
|
142
143
|
specification_version: 4
|
143
144
|
summary: Eases the pain of moving to I18n view templates
|