i18n-tasks 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dfe7323638e8b9f562528fbe39b95485723ad281
4
- data.tar.gz: e400db0a471a49ef707b2649ce5f61794a8dafae
3
+ metadata.gz: f197d49c3a8d79992339e4ba4a23e1b9f7df23ff
4
+ data.tar.gz: 5f08596a492cfec055aab5425353dc8ec2fda1f8
5
5
  SHA512:
6
- metadata.gz: 89c721ee39ed8d8921ec6b4db5dce0b6392d300e9ec4940f9eeaab0869e186f5019a35a1224c3156777d9d580a1378c4eb4056fdf9b307224bd971a5d524d1c3
7
- data.tar.gz: 6517a687403394655ea9c6e96f057b88c6d49f66fa4249fb2f60d97a2117d865d991e555a41ca839200d927a98cb665e078394301778b4d76d0bcc1ca18742f2
6
+ metadata.gz: caedad036795f4861f8bdc1fff7309af8c1682f8e3d61779cd8aca8ab681cad1d62b922b57a8ec51eb84608d72572873bc49b5f90ee62340fb6b3e2bd53010a9
7
+ data.tar.gz: 4a185853088b92aa109b392f18cd940fb30c1aeafd98e083633034886d5a411a69c3a97f834ce7bacfa4358c00e74dd8dfa052d3b7553e031cb0efea6a19e9e1
data/CHANGES.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v0.1.5
2
+ * Removed get_locale_data, added data configuration options
3
+
1
4
  ## v0.1.4
2
5
 
3
6
  * Fix relative keys in partials (@paulfioravanti)
data/README.md CHANGED
@@ -59,35 +59,29 @@ ignore_unused:
59
59
  ignore:
60
60
  - kaminari.
61
61
 
62
- # grep configuration
62
+ # search configuration (grep arguments)
63
63
  grep:
64
64
  # search these directories (relative to your Rails.root directory, default: 'app/')
65
65
  paths:
66
66
  - 'app/'
67
- - 'vendor/'
68
67
  # include only files matching this glob pattern (default: blank = include all files)
69
68
  include:
70
69
  - '*.rb'
71
70
  - '*.html*'
72
71
  # explicitly exclude files (default: blank = exclude no files)
73
72
  exclude: '*.js'
74
- ```
75
-
76
73
 
77
- By default reports I18n reads locale data from `config/locales/{locale_code}.yml`.
78
- You can customize this, e.g.:
79
-
80
- ```ruby
81
- # load all config/locales/*.locale.yml and config/locales/locale.yml:
82
- I18n::Tasks.get_locale_data = ->(locale) {
83
- (["config/locales/#{locale}.yml"] + Dir["config/locales/*.#{locale}.yml"]).inject({}) { |hash, path|
84
- hash.deep_merge! YAML.load_file(path)
85
- hash
86
- }
87
- }
74
+ # where to read locale data from
75
+ data:
76
+ # file patterns for a given %{locale} (supports globs)
77
+ paths:
78
+ # default:
79
+ - 'config/locales/%{locale}.yml'
80
+ # you can also implement a custom loader, use the default as an example
81
+ class: I18n::Tasks::Data::Yaml
88
82
  ```
89
83
 
90
- ## i18n-tasks HTML report
84
+ ## HTML report
91
85
 
92
86
  While i18n-tasks does not provide an HTML version of the report, it's easy to roll your own, see [the example](https://gist.github.com/glebm/6887030).
93
87
 
@@ -95,3 +89,7 @@ While i18n-tasks does not provide an HTML version of the report, it's easy to ro
95
89
 
96
90
  This was originally developed for [Zuigo](http://zuigo.com/), a platform to organize and discover events.
97
91
 
92
+
93
+
94
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/glebm/i18n-tasks/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
95
+
data/i18n-tasks.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = I18n::Tasks::VERSION
9
9
  spec.authors = ['glebm']
10
10
  spec.email = ['glex.spb@gmail.com']
11
- spec.summary = %q{Rails I18n tasks to find missing / unused translations and more}
11
+ spec.summary = %q{Find all the missing and unused translations!}
12
12
  spec.description = %q{Rails I18n tasks to find missing / unused translations and more}
13
13
  spec.homepage = 'https://github.com/glebm/i18n-tasks'
14
14
  spec.license = 'MIT'
data/lib/i18n/tasks.rb CHANGED
@@ -1,14 +1,11 @@
1
1
  require 'i18n/tasks/version'
2
2
  require 'i18n/tasks/railtie'
3
+ require 'i18n/tasks/data/yaml'
3
4
  require 'active_support/hash_with_indifferent_access'
5
+ require 'active_support/core_ext/string/access'
4
6
 
5
7
  module I18n
6
8
  module Tasks
7
- mattr_accessor :get_locale_data
8
- self.get_locale_data = lambda { |locale|
9
- YAML.load_file("config/locales/#{locale}.yml")
10
- }
11
-
12
9
  CONFIG_FILE = 'config/i18n-tasks.yml'
13
10
  class << self
14
11
  def config
@@ -9,8 +9,21 @@ module I18n
9
9
 
10
10
  # locale data hash, with locale name as root
11
11
  # @return [Hash{String => String,Hash}] locale data in nested hash format
12
- def get_locale_data(locale)
13
- (@locale_data ||= {})[locale] ||= I18n::Tasks.get_locale_data.call(locale)
12
+ def locale_data(locale)
13
+ locale = locale.to_s
14
+ (@locale_data ||= {})[locale] ||= data_source.get(locale)
15
+ end
16
+
17
+ def data_source
18
+ return @source if @source
19
+ conf = config[:data] || {}
20
+ @source = if conf[:class]
21
+ conf[:class].constantize.new(conf.except(:class))
22
+ else
23
+ I18n::Tasks::Data::Yaml.new(
24
+ paths: Array(conf[:paths].presence || ['config/locales/%{locale}.yml'])
25
+ )
26
+ end
14
27
  end
15
28
 
16
29
  # main locale file path (for writing to)
@@ -64,7 +77,7 @@ module I18n
64
77
 
65
78
  # whether the value for key exists in locale (defaults: base_locale)
66
79
  def key_has_value?(key, locale = base_locale)
67
- t(get_locale_data(locale)[locale], key).present?
80
+ t(locale_data(locale)[locale], key).present?
68
81
  end
69
82
 
70
83
  # traverse hash, yielding with full key and value
@@ -72,11 +85,11 @@ module I18n
72
85
  # @yield [full_key, value] yields full key and value for every translation in #hash
73
86
  # @return [nil]
74
87
  def traverse(path = '', hash)
75
- q = [ [path, hash] ]
88
+ q = [[path, hash]]
76
89
  until q.empty?
77
90
  path, value = q.pop
78
91
  if value.is_a?(Hash)
79
- value.each { |k,v| q << ["#{path}.#{k}", v] }
92
+ value.each { |k, v| q << ["#{path}.#{k}", v] }
80
93
  else
81
94
  yield path[1..-1], value
82
95
  end
@@ -86,7 +99,7 @@ module I18n
86
99
  # translation of the key found in the passed hash or nil
87
100
  # @return [String,nil]
88
101
  def t(hash, key)
89
- key.split('.').inject(hash) { |r,seg| r[seg] if r }
102
+ key.split('.').inject(hash) { |r, seg| r[seg] if r }
90
103
  end
91
104
 
92
105
  # @param key [String] relative i18n key (starts with a .)
@@ -94,7 +107,7 @@ module I18n
94
107
  # @return [String] absolute version of the key
95
108
  def absolutize_key(key, path)
96
109
  # normalized path
97
- path = Pathname.new(File.expand_path path).relative_path_from(Pathname.new(Dir.pwd)).to_s
110
+ path = Pathname.new(File.expand_path path).relative_path_from(Pathname.new(Dir.pwd)).to_s
98
111
  # key prefix based on path
99
112
  prefix = path.gsub(%r(app/views/|(\.[^/]+)*$), '').tr('/', '.').gsub(%r(\._), '.')
100
113
  "#{prefix}#{key}"
@@ -124,7 +137,7 @@ module I18n
124
137
 
125
138
  # @return [Hash{String => String,Hash}] default i18n locale data
126
139
  def base_locale_data
127
- get_locale_data(base_locale)[base_locale]
140
+ locale_data(base_locale)[base_locale]
128
141
  end
129
142
 
130
143
  # Run grep searching for source keys and return grep output
@@ -135,7 +148,7 @@ module I18n
135
148
  next unless (val = grep_config[opt]).present?
136
149
  args += Array(val).map { |v| "--#{opt}=#{v}" }
137
150
  end
138
- args += [ %q{\\bt(\\?\\s*['"]\\([^'"]*\\)['"]}, *grep_config[:paths]]
151
+ args += [%q{\\bt(\\?\\s*['"]\\([^'"]*\\)['"]}, *grep_config[:paths]]
139
152
  args.compact!
140
153
  run_command *args
141
154
  end
@@ -0,0 +1,22 @@
1
+ module I18n::Tasks
2
+ module Data
3
+ class Yaml
4
+ attr_reader :paths
5
+
6
+ def initialize(options)
7
+ @paths = options[:paths]
8
+ end
9
+
10
+ def get(locale)
11
+ paths.map do |path|
12
+ Dir.glob path % { locale: locale }
13
+ end.flatten.map do |locale_file|
14
+ YAML.load_file locale_file
15
+ end.inject({}) do |hash, locale_data|
16
+ hash.deep_merge! locale_data
17
+ hash
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -29,7 +29,7 @@ module I18n
29
29
  # present in base locale, but untranslated in another locale
30
30
  # @return Array{Hash}
31
31
  def keys_missing_translation(locale)
32
- trn = get_locale_data(locale)[locale]
32
+ trn = locale_data(locale)[locale]
33
33
  r = []
34
34
  traverse base_locale_data do |key, base_value|
35
35
  value_in_locale = t(trn, key)
@@ -6,7 +6,7 @@ module I18n
6
6
  def perform
7
7
  # Will also rewrite en, good for ordering
8
8
  I18n.available_locales.map(&:to_s).each do |target_locale|
9
- trn = get_locale_data(target_locale)
9
+ trn = locale_data(target_locale)
10
10
  prefilled = { target_locale => base_locale_data }.deep_merge(trn)
11
11
  File.open(locale_file_path(target_locale), 'w'){ |f| f.write prefilled.to_yaml }
12
12
  end
@@ -1,5 +1,5 @@
1
1
  module I18n
2
2
  module Tasks
3
- VERSION = '0.1.4'
3
+ VERSION = '0.1.5'
4
4
  end
5
5
  end
@@ -31,3 +31,11 @@ grep:
31
31
  - '*.file'
32
32
  # explicitly exclude files (default: blank = exclude no files)
33
33
  exclude: '*.js'
34
+
35
+ # how to get the locale data
36
+ data:
37
+ paths:
38
+ # files for a given %{locale}
39
+ - 'config/locales/%{locale}.yml'
40
+ - 'config/locales/*.%{locale}.yml'
41
+ class: I18n::Tasks::Data::Yaml
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-31 00:00:00.000000000 Z
11
+ date: 2013-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -127,6 +127,7 @@ files:
127
127
  - i18n-tasks.gemspec
128
128
  - lib/i18n/tasks.rb
129
129
  - lib/i18n/tasks/base_task.rb
130
+ - lib/i18n/tasks/data/yaml.rb
130
131
  - lib/i18n/tasks/missing.rb
131
132
  - lib/i18n/tasks/output/terminal.rb
132
133
  - lib/i18n/tasks/prefill.rb
@@ -166,10 +167,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
167
  version: '0'
167
168
  requirements: []
168
169
  rubyforge_project:
169
- rubygems_version: 2.0.6
170
+ rubygems_version: 2.1.10
170
171
  signing_key:
171
172
  specification_version: 4
172
- summary: Rails I18n tasks to find missing / unused translations and more
173
+ summary: Find all the missing and unused translations!
173
174
  test_files:
174
175
  - spec/fixtures/app/assets/javascripts/application.js
175
176
  - spec/fixtures/app/controllers/events_controller.rb