i18n-tasks 0.1.4 → 0.1.5

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: 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