ceritium-lost-in-translation 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -58,7 +58,7 @@ http://github.com/newsdesk/translate/tree/master
58
58
 
59
59
  == License
60
60
 
61
- Copyright (c) <year> <copyright holders>
61
+ Copyright (c) 2009 José Galisteo
62
62
 
63
63
  Permission is hereby granted, free of charge, to any person
64
64
  obtaining a copy of this software and associated documentation
data/Rakefile CHANGED
@@ -12,10 +12,10 @@ spec = Gem::Specification.new do |s|
12
12
  s.has_rdoc = true
13
13
  s.extra_rdoc_files = %w(README.rdoc)
14
14
  s.rdoc_options = %w(--main README.rdoc)
15
- s.summary = "This gem does ... "
16
- s.author = 'First Last'
17
- s.email = 'user@example.com'
18
- s.homepage = 'http://my-site.net'
15
+ s.summary = "Encuentra todas las traducciones de la API I18n de rails y las guarda en yaml"
16
+ s.author = 'Jose Galisteo'
17
+ s.email = 'ceritium@gmail.com'
18
+ s.homepage = 'http://ceritium.net'
19
19
  s.files = %w(README.rdoc Rakefile) + Dir.glob("{lib,test}/**/*")
20
20
  # s.executables = ['lost-in-translation']
21
21
 
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'pathname'
4
4
  require 'lost_in_translation/lost_in_translation'
5
-
5
+ require 'lost_in_translation/string_to_hash'
@@ -8,8 +8,12 @@ class LostInTranslation
8
8
  @locale = 'en'
9
9
  @file = "config/locales/#{@locale}.yml"
10
10
  @translations = []
11
- @hash = {}
12
- @path = 'app/'
11
+ @path = 'app'
12
+ @sth = StringToHash.new
13
+ end
14
+
15
+ def hash
16
+ @sth.hash
13
17
  end
14
18
 
15
19
  # Escaneamos la carpeta en busca de todas las cadenas coincidentes con la expresión regular
@@ -26,56 +30,22 @@ class LostInTranslation
26
30
  def store
27
31
  scan if @translations.empty?
28
32
  @translations.each do |translation|
29
- key_value = to_deep_hash({translation => nil})
30
- translation = deep_symbolize_keys(key_value)
31
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
32
- @hash.merge!(translation, &merger)
33
+ @sth.add(translation)
33
34
  end
34
- @hash = deep_stringify_keys({@locale => @hash})
35
+ @sth.add_prefix(@locale)
35
36
  end
36
37
 
37
38
  # Guarda en el .yml las nuevas traducciones encontradas
38
39
  def save
39
- store if @hash.empty?
40
+ store if hash.empty?
40
41
  File.open(@file, "w") do |file|
41
- file.puts @hash.to_yaml
42
+ file.puts hash.to_yaml
42
43
  end
43
44
  end
44
45
 
45
46
 
46
47
  private
47
48
 
48
- def deep_symbolize_keys(hash)
49
- hash.inject({}) { |result, (key, value)|
50
- value = deep_symbolize_keys(value) if value.is_a? Hash
51
- result[(key.to_sym rescue key) || key] = value
52
- result
53
- }
54
- end
55
-
56
- def to_deep_hash(hash)
57
- hash.inject({}) do |deep_hash, (key, value)|
58
- keys = key.split('.').reverse
59
- leaf_key = keys.shift
60
- key_hash = keys.inject({leaf_key.to_sym => value}) { |hash, key| {key.to_sym => hash} }
61
- deep_merge!(deep_hash, key_hash)
62
- deep_hash
63
- end
64
- end
65
-
66
- def deep_merge!(hash1, hash2)
67
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
68
- hash1.merge!(hash2, &merger)
69
- end
70
-
71
- def deep_stringify_keys(hash)
72
- hash.inject({}) { |result, (key, value)|
73
- value = deep_stringify_keys(value) if value.is_a? Hash
74
- result[(key.to_s rescue key) || key] = value
75
- result
76
- }
77
- end
78
-
79
49
  # Convertimos el hash que le pasemos a un array
80
50
  # NOTA: Este método está sacado del plugin translate
81
51
  # http://github.com/newsdesk/translate
@@ -113,5 +83,4 @@ class LostInTranslation
113
83
  end
114
84
  end
115
85
 
116
- end
117
-
86
+ end
@@ -0,0 +1,57 @@
1
+ class StringToHash
2
+
3
+ attr_reader :hash
4
+
5
+ def initialize
6
+ @hash = {}
7
+ end
8
+
9
+ def add(key, value = nil)
10
+ key_value = to_deep_hash({key => value})
11
+ translation = deep_symbolize_keys(key_value)
12
+ merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
13
+ @hash.merge!(translation, &merger)
14
+ end
15
+
16
+ def add_prefix(prefix)
17
+ prefix.split('.').reverse.each do |split|
18
+ @hash = deep_stringify_keys({split => @hash})
19
+ end
20
+ end
21
+
22
+
23
+ private
24
+ def deep_stringify_keys(hash)
25
+ hash.inject({}) { |result, (key, value)|
26
+ value = deep_stringify_keys(value) if value.is_a? Hash
27
+ result[(key.to_s rescue key) || key] = value
28
+ result
29
+ }
30
+ end
31
+
32
+ def deep_symbolize_keys(hash)
33
+ hash.inject({}) { |result, (key, value)|
34
+ value = deep_symbolize_keys(value) if value.is_a? Hash
35
+ result[(key.to_sym rescue key) || key] = value
36
+ result
37
+ }
38
+ end
39
+
40
+ def to_deep_hash(hash)
41
+ hash.inject({}) do |deep_hash, (key, value)|
42
+ keys = key.split('.').reverse
43
+ leaf_key = keys.shift
44
+ key_hash = keys.inject({leaf_key.to_sym => value}) { |hash, key| {key.to_sym => hash} }
45
+ deep_merge!(deep_hash, key_hash)
46
+ deep_hash
47
+ end
48
+ end
49
+
50
+ def deep_merge!(hash1, hash2)
51
+ merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
52
+ hash1.merge!(hash2, &merger)
53
+ end
54
+
55
+ end
56
+
57
+
@@ -2,7 +2,7 @@ module LostInTranslation
2
2
  module Version
3
3
 
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 2
6
6
  TINY = 0
7
7
 
8
8
  def self.to_s # :nodoc:
metadata CHANGED
@@ -1,20 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ceritium-lost-in-translation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - First Last
7
+ - Jose Galisteo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-28 00:00:00 -07:00
12
+ date: 2009-07-04 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description:
17
- email: user@example.com
17
+ email: ceritium@gmail.com
18
18
  executables: []
19
19
 
20
20
  extensions: []
@@ -26,13 +26,14 @@ files:
26
26
  - Rakefile
27
27
  - lib/lost_in_translation
28
28
  - lib/lost_in_translation/lost_in_translation.rb
29
+ - lib/lost_in_translation/string_to_hash.rb
29
30
  - lib/lost_in_translation/version.rb
30
31
  - lib/lost_in_translation.rb
31
32
  - test/test_helper.rb
32
33
  - test/unit
33
34
  - test/unit/lost_in_translation_test.rb
34
35
  has_rdoc: true
35
- homepage: http://my-site.net
36
+ homepage: http://ceritium.net
36
37
  post_install_message:
37
38
  rdoc_options:
38
39
  - --main
@@ -57,6 +58,6 @@ rubyforge_project:
57
58
  rubygems_version: 1.2.0
58
59
  signing_key:
59
60
  specification_version: 2
60
- summary: This gem does ...
61
+ summary: Encuentra todas las traducciones de la API I18n de rails y las guarda en yaml
61
62
  test_files: []
62
63