tidy_i18n 0.0.3 → 0.0.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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MDVhZGJiZGNjMTQ3ZDI4MTFmMTRlZjc3NWEwZmNmOWE4OWYxMGQ1Yg==
4
+ MjU4ZWY4M2VmMGNlMDJjOGNjZWU2OTRiYTI1ZGQ0YmY4ZDdiYmViZA==
5
5
  data.tar.gz: !binary |-
6
- ODIwNjYxMGNlNzhmMjVlMWJlYmMyYzJjNTg3YjZjNTg2YjdmN2EyZA==
6
+ ZWViYmQ5MDRhZmFkYWM1ODNiMzQ3NWU5NzYwYjgyZGQxYWI0MmY4YQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZmM2NWEyZThjZjc5YWUxMjU5NjRkYjg2OWRiZTIxMmViZTRlZDZlZmUyMDRh
10
- YjNlMWI5NjVmOWRmYmJlYTI2ODgwYjQwMzQ5MzgxMmRmMDc4NmNmOWMwZWI0
11
- ZWZkNTE1Y2JjOWY5NTUyNGQ1YjFjYTQ3Mzk1ZjM3YmQyNzk2YzY=
9
+ MWVjNzc3N2M0MzliMTkyMTliMWU3ZWEyYzRhNzNmNWViYTAwNDE3NzgzYWRh
10
+ ZTYwOWQyZGJkMzI2ZGZkNzRmZmE4MGJjYmIzOWZlZjFkZDUzMTFlOGU1MmFh
11
+ M2RjNDU5OGQ5MmZkOGM0YWFjYjY3YjA4ZjU2ZDVmMWQ3ODIxN2U=
12
12
  data.tar.gz: !binary |-
13
- NGMyNDI1ZjUwMmIxMzBkOGRkYjZjMTc2OTY1Njc1M2NjZjdmZWZiMDVkNTc4
14
- ZWJmNzM0MjliMzYxZjc0NDNmMzZkYTBkMGVhODg1N2I5OTVmNDFkYmY1ZDFk
15
- ODBlMTY2N2Q1ZDdkOGI0MjRkMjU4YTE4MDFhZGVlODZmOGRkZmE=
13
+ MDQ0YjZkYTlhMGQ2MDg2NTEwMjE1OGM2Zjg3YWI2MTBhZTA2MDdiZTQ2NDQ1
14
+ MzY1OGZkMTI2NGMyOTMyZmUzMWUyM2VjYmUzZjI0ODI5NjI0NmI1M2JlZDc4
15
+ ZGNhODliZjIxY2EzOWU4MjRkZThhNmNhNTFmMGE4MDMzOTkzNzY=
@@ -0,0 +1,61 @@
1
+ require "i18n"
2
+ require "tidy_i18n/translation_keys"
3
+ require "ostruct"
4
+
5
+ module TidyI18n
6
+ class MissingKeys
7
+
8
+ attr_reader :locale_to_validate
9
+
10
+ def initialize(locale_to_validate, locale_files)
11
+ self.locale_to_validate = locale_to_validate
12
+ self.locale_files = locale_files
13
+ end
14
+
15
+ def default_locale
16
+ I18n.default_locale
17
+ end
18
+
19
+ def all
20
+ default_locale_keys = translation_keys_for_locale(default_locale)
21
+ locale_to_validate_keys = translation_keys_for_locale(locale_to_validate)
22
+ default_locale_keys.each.with_object([]) do |key_in_default_locale, keys|
23
+ if !locale_to_validate_key_names.include?(key_in_default_locale.name)
24
+ keys << OpenStruct.new({
25
+ :name => key_in_default_locale.name,
26
+ :value_in_default_locale => key_in_default_locale.value
27
+ })
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def locale_to_validate_key_names
35
+ @locale_to_validate_key_names ||= translation_keys_for_locale(locale_to_validate).map(&:name)
36
+ end
37
+
38
+ def translation_keys_for_locale(locale)
39
+ all_translation_keys.fetch(locale.to_s, [])
40
+ end
41
+
42
+ def all_translation_keys
43
+ locale_files.each.with_object({}) do |locale_file, locale_to_keys|
44
+ keys = TidyI18n::TranslationKeys.parse(File.read(locale_file))
45
+ if keys.any?
46
+ current_locale = keys.first.name.split(".").first
47
+ locale_to_keys[current_locale.to_s] = keys.collect do |key|
48
+ OpenStruct.new({
49
+ :name => key.name.sub(/^#{current_locale}\./, ""),
50
+ :value => key.value
51
+ })
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ attr_writer :locale_to_validate
58
+ attr_accessor :locale_files
59
+
60
+ end
61
+ end
@@ -0,0 +1,85 @@
1
+ module TidyI18n
2
+ class TranslationKeys
3
+
4
+ def self.parse(yaml)
5
+ new(yaml).keys
6
+ end
7
+
8
+ class RepeatKeyBuilder
9
+
10
+ TranslationKey = Struct.new(:name, :value)
11
+ attr_reader :parsed_keys
12
+
13
+ def initialize
14
+ self.key_parts = []
15
+ self.parsed_keys = []
16
+ end
17
+
18
+ def start_stream(*row)
19
+ # puts "start_stream: #{row.inspect}"
20
+ end
21
+
22
+ def start_document(*row)
23
+ # puts "start_document: #{row.inspect}"
24
+ end
25
+
26
+ def start_mapping(*row)
27
+ @last_scalar = nil
28
+ end
29
+
30
+ def scalar(*row)
31
+ if leaf?
32
+ parsed_keys << TranslationKey.new(key_parts.join("."), row.first)
33
+ @last_scalar = nil
34
+ key_parts.pop
35
+ else
36
+ key_parts << row.first
37
+ @last_scalar = row
38
+ end
39
+ end
40
+
41
+ def end_mapping(*row)
42
+ @key_parts.pop
43
+ end
44
+
45
+ def end_document(*row)
46
+ # puts "end_document: #{row.inspect}"
47
+ end
48
+
49
+ def end_stream(*row)
50
+ # puts "end_stream: #{row.inspect}"
51
+ end
52
+
53
+ private
54
+
55
+ def leaf?
56
+ @last_scalar
57
+ end
58
+
59
+ attr_accessor :key_parts
60
+
61
+ attr_writer :parsed_keys
62
+
63
+ end
64
+
65
+ def initialize(yaml)
66
+ self.yaml = yaml
67
+ end
68
+
69
+ def keys
70
+ @keys ||= build_keys
71
+ end
72
+
73
+ private
74
+
75
+ def build_keys
76
+ builder = RepeatKeyBuilder.new
77
+ parser = Psych::Parser.new builder
78
+ parser.parse(yaml)
79
+ builder.parsed_keys
80
+ end
81
+
82
+ attr_accessor :yaml
83
+
84
+ end
85
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tidy_i18n
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Meyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-02 00:00:00.000000000 Z
11
+ date: 2014-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -35,6 +35,8 @@ files:
35
35
  - lib/tidy_i18n/locales/reverse.rb
36
36
  - lib/tidy_i18n/locales/tilde.rb
37
37
  - lib/tidy_i18n/locales.rb
38
+ - lib/tidy_i18n/missing_keys.rb
39
+ - lib/tidy_i18n/translation_keys.rb
38
40
  - lib/tidy_i18n/translations.rb
39
41
  - lib/tidy_i18n.rb
40
42
  homepage: https://github.com/ericmeyer/tidy_i18n