interpret 0.1.2 → 0.1.3
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.
- data/app/models/interpret/translation.rb +39 -46
- data/interpret.gemspec +1 -0
- data/lib/interpret.rb +1 -1
- data/lib/interpret/version.rb +1 -1
- data/spec/models/translation_spec.rb +178 -8
- metadata +17 -40
- data/lib/interpret/lazy_hash.rb +0 -21
@@ -23,7 +23,7 @@ module Interpret
|
|
23
23
|
tree = LazyHash.build_hash
|
24
24
|
all_trans = all_trans.map{|x| x.key.split(".")[0..-2].join(".")}.uniq
|
25
25
|
all_trans.each do |x|
|
26
|
-
LazyHash.
|
26
|
+
LazyHash.add(tree, x, {})
|
27
27
|
end
|
28
28
|
|
29
29
|
# Generate a new clean hash without the proc's from LazyHash.
|
@@ -38,7 +38,7 @@ module Interpret
|
|
38
38
|
res = LazyHash.build_hash
|
39
39
|
|
40
40
|
translations.each do |e|
|
41
|
-
LazyHash.
|
41
|
+
LazyHash.add(res, "#{e.locale}.#{e.key}", e.value)
|
42
42
|
end
|
43
43
|
if res.keys.size != 1
|
44
44
|
raise IndexError, "Generated hash must have only one root key. Your translation data in datrabase may be corrupted."
|
@@ -61,26 +61,20 @@ module Interpret
|
|
61
61
|
raise ArgumentError, "the YAML file must contain an unique first key representing the locale" unless hash.keys.count == 1
|
62
62
|
|
63
63
|
lang = hash.keys.first
|
64
|
-
|
65
|
-
|
66
|
-
x.destroy
|
67
|
-
end
|
64
|
+
delete_all(:locale => lang)
|
65
|
+
|
68
66
|
records = parse_hash(hash.first[1], lang)
|
69
67
|
# TODO: Replace with activerecord-import bulk inserts
|
70
68
|
transaction do
|
71
|
-
records.each
|
69
|
+
records.each do |x|
|
70
|
+
x.save!
|
71
|
+
end
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
# Dump all contents from *.yml locale files into the database.
|
76
76
|
# CAUTION: All existing data will be erased!
|
77
77
|
#
|
78
|
-
# It will create a "#{locale}.yml.backup" file into config/locales
|
79
|
-
# for each language present in the database, in case you want to
|
80
|
-
# recover some of your just-erased translations.
|
81
|
-
# If you don't want backups, set:
|
82
|
-
#
|
83
|
-
# Interpret.options[:dump_without_backup] = true
|
84
78
|
def dump
|
85
79
|
files = Dir[Rails.root.join("config", "locales", "*.yml").to_s]
|
86
80
|
delete_all
|
@@ -139,18 +133,23 @@ module Interpret
|
|
139
133
|
#
|
140
134
|
# - First of all, get the locale keys for the main language from yml files.
|
141
135
|
# - For all of these locale keys, do:
|
142
|
-
# - If a key is present in the db, but not in the new ones, remove
|
143
|
-
# it. You have removed it from the new content layout, so it's no longer
|
144
|
-
# needed.
|
145
136
|
# - If the key is not present in the db, it's new. So, create a new
|
146
|
-
# entry for that key in
|
147
|
-
#
|
148
|
-
#
|
137
|
+
# entry for that key in the main language. If the key also exists in
|
138
|
+
# some other languages in yml files, also create the entry for that
|
139
|
+
# languages. But, do not create entries for the languages that does
|
140
|
+
# not have this key. Later you will be notified about that missing
|
141
|
+
# translations.
|
149
142
|
# - If the key already exists in the db, do nothing. Maybe somone has
|
150
143
|
# changed that content in production, and you don't want to lose
|
151
144
|
# that. Or maybe you do want to change that content, because you
|
152
145
|
# just added the correct sentence in the yml files. It's up to you to
|
153
146
|
# do the right thing.
|
147
|
+
# Also, if the key is missing in other languages in database but
|
148
|
+
# present in yml files, create the new entry for that language.
|
149
|
+
# - If a key is present in the db, but not in the new ones, remove
|
150
|
+
# it. You have removed it from the new content layout, so it's no longer
|
151
|
+
# needed.
|
152
|
+
#
|
154
153
|
def update
|
155
154
|
files = Dir[Rails.root.join("config", "locales", "*.yml").to_s]
|
156
155
|
|
@@ -165,8 +164,7 @@ module Interpret
|
|
165
164
|
end
|
166
165
|
end
|
167
166
|
|
168
|
-
@
|
169
|
-
sync(@main)
|
167
|
+
sync(@languages[I18n.default_locale.to_s])
|
170
168
|
end
|
171
169
|
|
172
170
|
private
|
@@ -178,16 +176,15 @@ module Interpret
|
|
178
176
|
end
|
179
177
|
|
180
178
|
hash.keys.each do |x|
|
181
|
-
existing.delete(x)
|
182
|
-
|
183
179
|
if hash[x].kind_of?(Hash)
|
184
180
|
sync(hash[x], "#{prefix}#{x}.", existing[x])
|
185
181
|
else
|
182
|
+
existing.delete(x)
|
186
183
|
old = locale(I18n.default_locale).find_by_key("#{prefix}#{x}")
|
187
184
|
|
188
185
|
unless old
|
189
186
|
# Creates the new entry
|
190
|
-
create_new_translation("#{prefix}#{x}")
|
187
|
+
create_new_translation("#{prefix}#{x}", hash[x])
|
191
188
|
else
|
192
189
|
# Check if the entry exists in the other languages
|
193
190
|
check_in_other_langs("#{prefix}#{x}")
|
@@ -200,37 +197,33 @@ module Interpret
|
|
200
197
|
end
|
201
198
|
end
|
202
199
|
|
203
|
-
# Check if the
|
204
|
-
#
|
200
|
+
# Check if the given key exists in @languages for locales other than
|
201
|
+
# I18n.default_locale. Create the existing ones.
|
205
202
|
def check_in_other_langs(key)
|
206
203
|
(@languages.keys - [I18n.default_locale]).each do |lang|
|
207
204
|
trans = locale(lang).find_by_key(key)
|
208
205
|
if trans.nil?
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
206
|
+
if value = get_value_from_hash(@languages[lang], key)
|
207
|
+
create! :locale => lang, :key => key, :value => value
|
208
|
+
Interpret.logger.info "New key created [#{key}] for language [#{lang}]"
|
209
|
+
end
|
213
210
|
end
|
214
211
|
end
|
215
212
|
end
|
216
213
|
|
217
|
-
def
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
missing_key.split(".")[0..-2].each do |key|
|
222
|
-
if origin_hash[key].nil?
|
223
|
-
value = "untranslated"
|
224
|
-
break
|
225
|
-
end
|
226
|
-
origin_hash = origin_hash[key]
|
227
|
-
end
|
228
|
-
value ||= origin_hash[missing_key.split(".").last]
|
229
|
-
create! :locale => lang,
|
230
|
-
:key => missing_key,
|
231
|
-
:value => value
|
214
|
+
def get_value_from_hash(hash, key)
|
215
|
+
key.split(".")[0..-2].each do |k|
|
216
|
+
break if hash.nil?
|
217
|
+
hash = hash[k]
|
232
218
|
end
|
233
|
-
|
219
|
+
hash.nil? ? nil : hash[key.split(".").last]
|
220
|
+
end
|
221
|
+
|
222
|
+
def create_new_translation(missing_key, main_value)
|
223
|
+
create! :locale => I18n.default_locale, :key => missing_key, :value => main_value
|
224
|
+
Interpret.logger.info "New key created [#{missing_key}] for language [#{I18n.default_locale}]"
|
225
|
+
|
226
|
+
check_in_other_langs(missing_key)
|
234
227
|
end
|
235
228
|
|
236
229
|
def remove_unused_keys(hash, prefix = "")
|
data/interpret.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency "ya2yaml", ">= 0.30.0"
|
26
26
|
s.add_dependency "will_paginate", ">= 3.0.pre2"
|
27
27
|
s.add_dependency "best_in_place", ">= 0.1.7"
|
28
|
+
s.add_dependency "lazyhash", ">= 0.1.1"
|
28
29
|
|
29
30
|
s.add_development_dependency "rspec-rails", "~> 2.5"
|
30
31
|
end
|
data/lib/interpret.rb
CHANGED
data/lib/interpret/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Interpret::Translation do
|
@@ -7,6 +8,7 @@ en:
|
|
7
8
|
p1: Hello world!
|
8
9
|
folder1:
|
9
10
|
pr1: Hi
|
11
|
+
content: Some large text content
|
10
12
|
folder2:
|
11
13
|
pr1: Some other text here
|
12
14
|
folder3:
|
@@ -20,19 +22,93 @@ en:
|
|
20
22
|
"""
|
21
23
|
}
|
22
24
|
|
25
|
+
let(:es_yml) {"""
|
26
|
+
es:
|
27
|
+
folder2:
|
28
|
+
pr1: Algun otro texto aqui
|
29
|
+
content: Un largo parrafo con contenido
|
30
|
+
folder3:
|
31
|
+
pr1: Mas frases aleatorias
|
32
|
+
sub:
|
33
|
+
name: Esta es una subcarpeta de segundo nivel
|
34
|
+
subsub:
|
35
|
+
name: Con otra carpeta anidada en su interior
|
36
|
+
other:
|
37
|
+
name: carpeta
|
38
|
+
"""
|
39
|
+
}
|
40
|
+
|
41
|
+
let(:new_en_yml) {"""
|
42
|
+
en:
|
43
|
+
p1: Hello modified world! This new translation should not be copied into database
|
44
|
+
new_key: This new key should be created with this english text
|
45
|
+
new_key_in_en: This new key that only exists in english should be created only in english
|
46
|
+
|
47
|
+
folder1:
|
48
|
+
pr1: Hi
|
49
|
+
folder2:
|
50
|
+
pr1: Some other text here
|
51
|
+
folder3:
|
52
|
+
pr1: More phrases
|
53
|
+
sub:
|
54
|
+
name: This is a 2 level subfolder
|
55
|
+
subsub:
|
56
|
+
name: With another nested folder inside
|
57
|
+
other:
|
58
|
+
name: folder
|
59
|
+
"""
|
60
|
+
}
|
61
|
+
|
62
|
+
let(:new_es_yml) {"""
|
63
|
+
es:
|
64
|
+
p1: Hola mon! Esta nueva traduccion al español deberia copiarse en base de datos porque no existe previamente en :es, aunque si en :en
|
65
|
+
new_key: Esta nueva clave debe crearse con este texto en español
|
66
|
+
|
67
|
+
folder1:
|
68
|
+
pr1: Nueva traduccion que tambien debe copiarse
|
69
|
+
folder2:
|
70
|
+
pr1: Algun otro texto aqui
|
71
|
+
content: Un largo parrafo con contenido
|
72
|
+
folder3:
|
73
|
+
pr1: Mas frases aleatorias
|
74
|
+
sub:
|
75
|
+
name: Esta es una subcarpeta de segundo nivel
|
76
|
+
subsub:
|
77
|
+
name: Con otra carpeta anidada en su interior
|
78
|
+
other:
|
79
|
+
name: carpeta
|
80
|
+
"""
|
81
|
+
}
|
82
|
+
|
83
|
+
# Convert a locale file into database translations
|
23
84
|
def file2db(string_file)
|
24
|
-
|
85
|
+
def parse_hash(dict, locale, prefix = "")
|
86
|
+
res = []
|
87
|
+
dict.keys.each do |x|
|
88
|
+
if dict[x].kind_of?(Hash)
|
89
|
+
res += parse_hash(dict[x], locale, "#{prefix}#{x}.")
|
90
|
+
else
|
91
|
+
res << Interpret::Translation.new(:locale => locale, :key => "#{prefix}#{x}", :value => dict[x])
|
92
|
+
end
|
93
|
+
end
|
94
|
+
res
|
95
|
+
end
|
25
96
|
|
97
|
+
hash = YAML.load string_file
|
26
98
|
lang = hash.keys.first
|
27
|
-
records = Interpret::Translation.send(:parse_hash, hash.first[1], lang)
|
28
99
|
Interpret::Translation.transaction do
|
29
|
-
|
100
|
+
parse_hash(hash.first[1], lang).map{|x| x.save!}
|
30
101
|
end
|
31
102
|
end
|
32
103
|
|
104
|
+
before do
|
105
|
+
I18n.stub!(:default_locale).and_return('en')
|
106
|
+
end
|
107
|
+
|
33
108
|
describe ".get_tree" do
|
34
109
|
it "should return a hash representing a tree folder structure of the i18n keys" do
|
35
110
|
file2db(en_yml)
|
111
|
+
|
36
112
|
Interpret::Translation.get_tree('en').should == {'index' => {
|
37
113
|
'folder1' => {},
|
38
114
|
'folder2' => {},
|
@@ -49,20 +125,114 @@ en:
|
|
49
125
|
describe ".export" do
|
50
126
|
it "should return a hash representing the yml locale file for the given translations" do
|
51
127
|
file2db(en_yml)
|
128
|
+
|
52
129
|
translations = Interpret::Translation.all
|
53
130
|
Interpret::Translation.export(translations).should == YAML.load(en_yml)
|
54
131
|
end
|
55
132
|
end
|
56
133
|
|
57
|
-
describe ".
|
58
|
-
|
134
|
+
describe ".update" do
|
135
|
+
before(:all) do
|
136
|
+
# Supose the database has the default contents, look at the top of this
|
137
|
+
# file for en_yml simulated locale file
|
138
|
+
file2db(en_yml)
|
139
|
+
file2db(es_yml)
|
140
|
+
end
|
141
|
+
|
142
|
+
before do
|
143
|
+
Dir.stub!(:"[]").and_return(['/path/to/en.yml', '/path/to/es.yml'])
|
144
|
+
YAML.should_receive(:load_file).twice.and_return(YAML.load(new_en_yml), YAML.load(new_es_yml))
|
145
|
+
end
|
146
|
+
|
147
|
+
context "when a key exists in database but not in yml files [for I18n.default_locale]" do
|
148
|
+
it "should remove that key from database for I18n.default_locale" do
|
149
|
+
Interpret::Translation.update
|
150
|
+
Interpret::Translation.locale('en').find_by_key("folder1.content").should be_nil
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should remove that key if it exists for any other language in database" do
|
154
|
+
Interpret::Translation.update
|
155
|
+
Interpret::Translation.locale('es').find_by_key("folder1.content").should be_nil
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context "when a key exists in yml files but not in database [for I18.default_locale]" do
|
160
|
+
it "should create the key for I18n.default_locale with the value from yml files" do
|
161
|
+
Interpret::Translation.update
|
162
|
+
translation = Interpret::Translation.locale('en').find_by_key("new_key")
|
163
|
+
translation.value.should == "This new key should be created with this english text"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should not create an entry for a key in a language that do not have it" do
|
167
|
+
Interpret::Translation.update
|
168
|
+
Interpret::Translation.locale('es').find_by_key("new_key_in_en").should be_nil
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should look for that key in other languages from yml files and create the existing ones." do
|
172
|
+
Interpret::Translation.update
|
173
|
+
translation = Interpret::Translation.locale('es').find_by_key("new_key")
|
174
|
+
translation.value.should == "Esta nueva clave debe crearse con este texto en español"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "when a key exists in both yml files and database [for I18n.default_locale]" do
|
179
|
+
it "should not override the contents of the existing database translations" do
|
180
|
+
Interpret::Translation.update
|
181
|
+
translation = Interpret::Translation.locale('en').find_by_key("p1")
|
182
|
+
translation.value.should == "Hello world!"
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should check if there is a language (other than I18n.default_locale) for which that key is new, and create the entry." do
|
186
|
+
Interpret::Translation.update
|
187
|
+
translation = Interpret::Translation.locale('es').find_by_key("p1").should_not be_nil
|
188
|
+
end
|
189
|
+
end
|
59
190
|
end
|
60
191
|
|
61
192
|
describe ".dump" do
|
62
|
-
|
193
|
+
it "should dump all contents from yml files into database" do
|
194
|
+
# Initial database state
|
195
|
+
file2db(en_yml)
|
196
|
+
file2db(es_yml)
|
197
|
+
|
198
|
+
Dir.stub!(:"[]").and_return(['/path/to/en.yml', '/path/to/es.yml'])
|
199
|
+
YAML.should_receive(:load_file).twice.and_return(YAML.load(new_en_yml), YAML.load(new_es_yml))
|
200
|
+
Interpret::Translation.dump
|
201
|
+
|
202
|
+
# We use export to check for the existing database contents, which is
|
203
|
+
# also tested in this spec file
|
204
|
+
en_trans = Interpret::Translation.locale('en').all
|
205
|
+
Interpret::Translation.export(en_trans).should == YAML.load(new_en_yml)
|
206
|
+
|
207
|
+
es_trans = Interpret::Translation.locale('es').all
|
208
|
+
Interpret::Translation.export(es_trans).should == YAML.load(new_es_yml)
|
209
|
+
end
|
63
210
|
end
|
64
211
|
|
65
|
-
describe ".
|
66
|
-
|
212
|
+
describe ".import" do
|
213
|
+
before do
|
214
|
+
@file = new_en_yml
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should dump the contents for the given file into database" do
|
218
|
+
file2db(en_yml)
|
219
|
+
@file.stub!(:content_type).and_return("text/plain")
|
220
|
+
Interpret::Translation.import(@file)
|
221
|
+
|
222
|
+
en_trans = Interpret::Translation.locale('en').all
|
223
|
+
Interpret::Translation.export(en_trans).should == YAML.load(new_en_yml)
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should not modify the database contents for other languages" do
|
227
|
+
Interpret::Translation.delete_all
|
228
|
+
file2db(en_yml)
|
229
|
+
file2db(es_yml)
|
230
|
+
|
231
|
+
@file.stub!(:content_type).and_return("text/plain")
|
232
|
+
Interpret::Translation.import(@file)
|
233
|
+
|
234
|
+
es_trans = Interpret::Translation.locale('es').all
|
235
|
+
Interpret::Translation.export(es_trans).should == YAML.load(es_yml)
|
236
|
+
end
|
67
237
|
end
|
68
238
|
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interpret
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
version: 0.1.2
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.3
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Roger Campos
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-18 00:00:00 +01:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,10 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ~>
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 3
|
30
|
-
- 0
|
31
|
-
- 3
|
32
24
|
version: 3.0.3
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
@@ -40,10 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ~>
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 5
|
46
|
-
- 0
|
47
35
|
version: 0.5.0
|
48
36
|
type: :runtime
|
49
37
|
version_requirements: *id002
|
@@ -55,8 +43,6 @@ dependencies:
|
|
55
43
|
requirements:
|
56
44
|
- - ">="
|
57
45
|
- !ruby/object:Gem::Version
|
58
|
-
segments:
|
59
|
-
- 0
|
60
46
|
version: "0"
|
61
47
|
type: :runtime
|
62
48
|
version_requirements: *id003
|
@@ -68,10 +54,6 @@ dependencies:
|
|
68
54
|
requirements:
|
69
55
|
- - ">="
|
70
56
|
- !ruby/object:Gem::Version
|
71
|
-
segments:
|
72
|
-
- 0
|
73
|
-
- 30
|
74
|
-
- 0
|
75
57
|
version: 0.30.0
|
76
58
|
type: :runtime
|
77
59
|
version_requirements: *id004
|
@@ -83,10 +65,6 @@ dependencies:
|
|
83
65
|
requirements:
|
84
66
|
- - ">="
|
85
67
|
- !ruby/object:Gem::Version
|
86
|
-
segments:
|
87
|
-
- 3
|
88
|
-
- 0
|
89
|
-
- pre2
|
90
68
|
version: 3.0.pre2
|
91
69
|
type: :runtime
|
92
70
|
version_requirements: *id005
|
@@ -98,27 +76,31 @@ dependencies:
|
|
98
76
|
requirements:
|
99
77
|
- - ">="
|
100
78
|
- !ruby/object:Gem::Version
|
101
|
-
segments:
|
102
|
-
- 0
|
103
|
-
- 1
|
104
|
-
- 7
|
105
79
|
version: 0.1.7
|
106
80
|
type: :runtime
|
107
81
|
version_requirements: *id006
|
108
82
|
- !ruby/object:Gem::Dependency
|
109
|
-
name:
|
83
|
+
name: lazyhash
|
110
84
|
prerelease: false
|
111
85
|
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.1.1
|
91
|
+
type: :runtime
|
92
|
+
version_requirements: *id007
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rspec-rails
|
95
|
+
prerelease: false
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
112
97
|
none: false
|
113
98
|
requirements:
|
114
99
|
- - ~>
|
115
100
|
- !ruby/object:Gem::Version
|
116
|
-
segments:
|
117
|
-
- 2
|
118
|
-
- 5
|
119
101
|
version: "2.5"
|
120
102
|
type: :development
|
121
|
-
version_requirements: *
|
103
|
+
version_requirements: *id008
|
122
104
|
description: Manage your app translations with an i18n active_record backend
|
123
105
|
email:
|
124
106
|
- roger@itnig.net
|
@@ -157,7 +139,6 @@ files:
|
|
157
139
|
- lib/interpret/capistrano.rb
|
158
140
|
- lib/interpret/engine.rb
|
159
141
|
- lib/interpret/helpers.rb
|
160
|
-
- lib/interpret/lazy_hash.rb
|
161
142
|
- lib/interpret/logger.rb
|
162
143
|
- lib/interpret/version.rb
|
163
144
|
- lib/tasks/interpret.rake
|
@@ -235,21 +216,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
235
216
|
requirements:
|
236
217
|
- - ">="
|
237
218
|
- !ruby/object:Gem::Version
|
238
|
-
segments:
|
239
|
-
- 0
|
240
219
|
version: "0"
|
241
220
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
221
|
none: false
|
243
222
|
requirements:
|
244
223
|
- - ">="
|
245
224
|
- !ruby/object:Gem::Version
|
246
|
-
segments:
|
247
|
-
- 0
|
248
225
|
version: "0"
|
249
226
|
requirements: []
|
250
227
|
|
251
228
|
rubyforge_project: interpret
|
252
|
-
rubygems_version: 1.
|
229
|
+
rubygems_version: 1.5.2
|
253
230
|
signing_key:
|
254
231
|
specification_version: 3
|
255
232
|
summary: Manage your app translations with an i18n active_record backend
|
data/lib/interpret/lazy_hash.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# Gist from: https://gist.github.com/745617
|
2
|
-
module LazyHash
|
3
|
-
class << self
|
4
|
-
def lazy_add(hash, key, value, pre = nil)
|
5
|
-
skeys = key.split(".")
|
6
|
-
f = skeys.shift
|
7
|
-
if skeys.empty?
|
8
|
-
pre.nil? ? hash.send("[]=", f, value) : pre.send("[]=", f, value)
|
9
|
-
else
|
10
|
-
pre = pre.nil? ? hash.send("[]", f) : pre.send("[]", f)
|
11
|
-
lazy_add(hash, skeys.join("."), value, pre)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def build_hash
|
16
|
-
lazy = lambda { |h,k| h[k] = Hash.new(&lazy) }
|
17
|
-
Hash.new(&lazy)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|