gettext_i18n_rails 0.3.1 → 0.3.2
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/Readme.md +1 -0
- data/VERSION +1 -1
- data/gettext_i18n_rails.gemspec +2 -2
- data/lib/gettext_i18n_rails/model_attributes_finder.rb +73 -17
- metadata +4 -4
data/Readme.md
CHANGED
@@ -210,6 +210,7 @@ lib/tasks/gettext.rake:
|
|
210
210
|
- [ed0h](http://github.com/ed0h)
|
211
211
|
- [Nikos Dimitrakopoulos](http://blog.nikosd.com)
|
212
212
|
- [Ben Tucker](http://btucker.net/)
|
213
|
+
- [Kamil Śliwak](https://github.com/cameel)
|
213
214
|
|
214
215
|
[Michael Grosser](http://grosser.it)<br/>
|
215
216
|
grosser.michael@gmail.com<br/>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/gettext_i18n_rails.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gettext_i18n_rails}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2011-12-
|
12
|
+
s.date = %q{2011-12-04}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.files = [
|
15
15
|
"Gemfile",
|
@@ -2,25 +2,31 @@ module GettextI18nRails
|
|
2
2
|
#write all found models/columns to a file where GetTexts ruby parser can find them
|
3
3
|
def store_model_attributes(options)
|
4
4
|
file = options[:to] || 'locale/model_attributes.rb'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
model = table_name
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
5
|
+
begin
|
6
|
+
File.open(file,'w') do |f|
|
7
|
+
f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
|
8
|
+
ModelAttributesFinder.new.find(options).each do |table_name,column_names|
|
9
|
+
#model name
|
10
|
+
model = table_name_to_namespaced_model(table_name)
|
11
|
+
if model == nil
|
12
|
+
# Some tables are not models, for example: translation tables created by globalize2.
|
13
|
+
puts "[Warning] Model not found for table '#{table_name}'"
|
14
|
+
next
|
15
|
+
end
|
16
|
+
f.puts("_('#{model.human_name_without_translation}')")
|
17
|
+
|
18
|
+
#all columns namespaced under the model
|
19
|
+
column_names.each do |attribute|
|
20
|
+
translation = model.gettext_translation_for_attribute_name(attribute)
|
21
|
+
f.puts("_('#{translation}')")
|
22
|
+
end
|
21
23
|
end
|
24
|
+
f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
|
22
25
|
end
|
23
|
-
|
26
|
+
rescue
|
27
|
+
puts "[Error] Attribute extraction failed. Removing incomplete file (#{file})"
|
28
|
+
File.delete(file)
|
29
|
+
raise
|
24
30
|
end
|
25
31
|
end
|
26
32
|
module_function :store_model_attributes
|
@@ -49,4 +55,54 @@ module GettextI18nRails
|
|
49
55
|
patterns.detect{|p|p.to_s==name.to_s or (p.is_a?(Regexp) and name=~p)}
|
50
56
|
end
|
51
57
|
end
|
58
|
+
|
59
|
+
private
|
60
|
+
# Tries to find the model class corresponding to specified table name.
|
61
|
+
# Takes into account that the model can be defined in a namespace.
|
62
|
+
# Searches only up to one level deep - won't find models nested in two
|
63
|
+
# or more modules.
|
64
|
+
#
|
65
|
+
# Note that if we allow namespaces, the conversion can be ambiguous, i.e.
|
66
|
+
# if the table is named "aa_bb_cc" and AaBbCc, Aa::BbCc and AaBb::Cc are
|
67
|
+
# all defined there's no absolute rule that tells us which one to use.
|
68
|
+
# This method prefers the less nested one and, if there are two at
|
69
|
+
# the same level, the one with shorter module name.
|
70
|
+
def table_name_to_namespaced_model(table_name)
|
71
|
+
# First assume that there are no namespaces
|
72
|
+
model = to_class(table_name.singularize.camelcase)
|
73
|
+
return model if model != nil
|
74
|
+
|
75
|
+
# If you were wrong, assume that the model is in a namespace.
|
76
|
+
# Iterate over the underscores and try to substitute each of them
|
77
|
+
# for a slash that camelcase() replaces with the scope operator (::).
|
78
|
+
underscore_position = table_name.index('_')
|
79
|
+
while underscore_position != nil
|
80
|
+
namespaced_table_name = table_name.dup
|
81
|
+
namespaced_table_name[underscore_position] = '/'
|
82
|
+
model = to_class(namespaced_table_name.singularize.camelcase)
|
83
|
+
return model if model != nil
|
84
|
+
|
85
|
+
underscore_position = table_name.index('_', underscore_position + 1)
|
86
|
+
end
|
87
|
+
|
88
|
+
# The model either is not defined or is buried more than one level
|
89
|
+
# deep in a module hierarchy
|
90
|
+
return nil
|
91
|
+
end
|
92
|
+
|
93
|
+
# Checks if there is a class of specified name and if so, returns
|
94
|
+
# the class object. Otherwise returns nil.
|
95
|
+
def to_class(name)
|
96
|
+
# I wanted to use Module.const_defined?() here to avoid relying
|
97
|
+
# on exceptions for normal program flow but it's of no use.
|
98
|
+
# If class autoloading is enabled, the constant may be undefined
|
99
|
+
# but turn out to be present when we actually try to use it.
|
100
|
+
begin
|
101
|
+
constant = name.constantize
|
102
|
+
rescue NameError
|
103
|
+
return nil
|
104
|
+
end
|
105
|
+
|
106
|
+
return constant.is_a?(Class) ? constant : nil
|
107
|
+
end
|
52
108
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gettext_i18n_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 2
|
10
|
+
version: 0.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Grosser
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-12-
|
18
|
+
date: 2011-12-04 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|