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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 965d29646f88148511e0b5d10839c54919ed6e24
4
- data.tar.gz: 97bcadce3d7c7f2b4c62e4b6cab3a8b5ea82a302
3
+ metadata.gz: e303ee01d27aa5ce0b71216113452365d496c3d6
4
+ data.tar.gz: 8fc8be8c85e3eebfe40e63afb2c63d2e527e07bc
5
5
  SHA512:
6
- metadata.gz: 64291623e56c7f61074ad368e9e2f0381542e90a64b9a4b627a43531aa678301653f0e80eb14fcda89c9ef7fa24770e117e040a576d5239ef62f45e137003e8b
7
- data.tar.gz: 77d29172cb821b20fb44b5d9d220ea3e43f162ad73c641bc1ac1d63f9db334d8a8d4db801ca599150c51ac42e411dc07190160a116e508844a60ec9a06577eb7
6
+ metadata.gz: d25cc9528e8fb9e441d5b6169bc3c6ac810438ed975bfa404cb3d8d8fb8b61f64915a5bdbc28537d68b2c4cc59cbdefe70a122860d940a788f8ef1920586f285
7
+ data.tar.gz: 443e6940d929f4d5f38cb31887d86362059863a39d6df8bbc570b5947dc419905f6da6cc1184b6ef8fad1feadced490c183646eb14b0041b9184ea7a82ee7146
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- i15r (0.5.3)
4
+ i15r (0.5.4)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
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
@@ -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, file_type, :add_default => config.add_default,
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
@@ -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]
@@ -1,3 +1,3 @@
1
1
  class I15R
2
- VERSION = "0.5.3"
2
+ VERSION = "0.5.4"
3
3
  end
@@ -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.3
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-02-21 00:00:00.000000000 Z
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.0.14
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