gettext_column_mapping 0.2.2 → 0.2.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/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  test/locale/
4
4
  coverage
5
5
  rdoc
6
+ pkg
data/README.rdoc CHANGED
@@ -73,7 +73,7 @@ All Rails
73
73
  my_label: Label
74
74
 
75
75
 
76
- See a working {gettext_column_mapping rails examples}[http://github.com/hallelujah/gettext_column_mapping_rails_example.git]
76
+ See a working {gettext_column_mapping rails examples}[http://github.com/hallelujah/gettext_column_mapping_example_rails.git]
77
77
 
78
78
  Rails is not mandatory, you can use it in your other project taht satisfies all requirements above !!
79
79
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gettext_column_mapping}
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["hallelujah"]
data/init.rb CHANGED
@@ -1,10 +1,2 @@
1
1
  # coding: utf-8
2
- # Include hook code here
3
- # HOOK inspired by gettext_i18n_rails
4
- begin
5
- require 'config/initializers/session_store'
6
- rescue LoadError
7
- # weird bug, when run with rake rails reports error that session
8
- # store is not configured, this fixes it somewhat...
9
- end
10
2
  require 'gettext_column_mapping'
@@ -4,6 +4,14 @@ module GettextColumnMapping
4
4
  #write all found models/columns to a file where GetTexts ruby parser can find them
5
5
  def self.store_model_attributes(options)
6
6
  file = options[:to] || 'data/model_attributes.rb'
7
+ unless options[:separate_files]
8
+ write_to_unique_file(file,options)
9
+ else
10
+ write_to_separate_files(file,options)
11
+ end
12
+ end
13
+
14
+ def self.write_to_unique_file(file,options)
7
15
  File.open(file,'w') do |f|
8
16
  f.puts "# coding: utf-8"
9
17
  f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
@@ -31,14 +39,47 @@ module GettextColumnMapping
31
39
  end
32
40
  end
33
41
  end
34
- # For each selected class, batch 200 include parents with key
35
- # f.puts(instance.msgid_for_attribute(column))
36
42
  end
37
43
 
38
44
  f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
39
45
  end
40
46
  end
41
47
 
48
+ def self.write_to_separate_files(dir,options)
49
+ ModelAttributesFinder.new.find(options).each do |model,column_names|
50
+ file = File.join(dir,model.name.underscore) + ".rb"
51
+ FileUtils.mkdir_p(File.dirname(file))
52
+ File.open(file,'w') do |f|
53
+ f.puts "# coding: utf-8"
54
+ f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
55
+ #all columns namespaced under the model
56
+ column_names.each do |attribute|
57
+ translation = model.gettext_translation_for_attribute_name(attribute)
58
+ f.puts("s_('#{translation}')")
59
+ end
60
+
61
+ if GettextColumnMapping.config.use_parent_level
62
+ # Select all classes with parent level
63
+ GettextColumnMapping::ParentLevel.item_config(model.name) do |klass_name,columns,parent_association,parent_key,conditions|
64
+ model = klass_name.constantize
65
+ options_hash = {}
66
+ if parent_association
67
+ options_hash.merge!(:conditions => conditions, :include => parent_association)
68
+ end
69
+ model.find_each do |record|
70
+ columns.each do |column|
71
+ f.puts("s_('#{record.msgid_for_attribute(column)}')")
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ f.puts "#DO NOT MODIFY! AUTOMATICALLY GENERATED FILE!"
78
+
79
+ end
80
+ end
81
+ end
82
+
42
83
  class ModelAttributesFinder
43
84
 
44
85
  def initialize
@@ -9,7 +9,7 @@ module GettextColumnMapping
9
9
  self.inherited_without_column_mapping_parent_level(subclass)
10
10
 
11
11
  parent = GettextColumnMapping::ParentLevel.parent_attributes_translation(subclass.to_s)
12
- attributes = GettextColumnMapping::ParentLevel.column_attributes_translation(subclass)
12
+ attributes = GettextColumnMapping::ParentLevel.column_attributes_translation(subclass.to_s)
13
13
  subclass.gettext_column_mapping_accessor(attributes,parent)
14
14
  end
15
15
  alias_method_chain :inherited, :column_mapping_parent_level
@@ -43,20 +43,26 @@ module GettextColumnMapping
43
43
  end
44
44
 
45
45
  def translate_key_for_column?(klass, column)
46
- column_attributes_translation(klass)[column]
46
+ column_attributes_translation(klass.name)[column]
47
47
  end
48
48
 
49
49
  def each_config(&block)
50
50
  @column_attributes_translation.each do |klass_name,columns|
51
- parent = parent_attributes_translation(klass_name)
52
- if parent
53
- parent_key = parent[:key]
54
- parent_association = parent[:association]
55
- conditions = parent[:conditions]
56
- end
57
- yield(klass_name,columns,parent_association, parent_key,conditions)
51
+ yield(*item_config(klass_name))
58
52
  end
53
+ end
59
54
 
55
+ def item_config(klass_name)
56
+ columns = column_attributes_translation(klass_name)
57
+ parent = parent_attributes_translation(klass_name)
58
+ if parent
59
+ parent_key = parent[:key]
60
+ parent_association = parent[:association]
61
+ conditions = parent[:conditions]
62
+ end
63
+ results = [klass_name,columns,parent_association,parent_key,conditions]
64
+ yield(*results) if block_given?
65
+ results
60
66
  end
61
67
 
62
68
  def attributes_translation(klass_name)
@@ -67,8 +73,8 @@ module GettextColumnMapping
67
73
  attributes_translation(klass_name) && attributes_translation(klass_name)[:parent]
68
74
  end
69
75
 
70
- def column_attributes_translation(klass)
71
- @column_attributes_translation[klass.name] ||= (attributes_translation(klass.name) && attributes_translation(klass.name)[:columns]) || []
76
+ def column_attributes_translation(klass_name)
77
+ @column_attributes_translation[klass_name] ||= (attributes_translation(klass_name) && attributes_translation(klass_name)[:columns]) || []
72
78
  end
73
79
 
74
80
  end
@@ -1,132 +1 @@
1
- require 'activesupport'
2
-
3
- def load_gettext
4
- require 'gettext'
5
- require 'gettext/utils'
6
- require 'gettext_column_mapping' # Include this library in order to unable column mapping and untranslating
7
- end
8
-
9
- @application = "aimfar"
10
- @version = ENV['VERSION'] || "0.0.1"
11
- @application_domain = "Adperf Publisher"
12
-
13
- def directory_for_lang(lang)
14
- File.join('po',lang)
15
- end
16
-
17
- task :ensure_environment_defined do
18
- @po_dir = 'po'
19
- @lang = ENV['GLANG']
20
-
21
- if @lang.blank?
22
- puts "*** The 'GLANG' environment variable must be precised. E.g. rake gettext:create_lang GLANG=es_ES ***"
23
- exit
24
- else
25
- @lang.split('_').first
26
- end
27
- end
28
-
29
- task :create_directory => :ensure_environment_defined do
30
- dir =directory_for_lang(@lang)
31
- unless File.exist?(dir)
32
- puts "### Creating directory #{dir} ###"
33
- FileUtils.mkdir_p(dir)
34
- else
35
- puts "### Directory #{dir} already exists! Not creating. ###"
36
- end
37
- end
38
-
39
- def out_file(f)
40
- File.join(@po_dir,@lang,File.basename(f,'.pot') + '.po')
41
- end
42
-
43
- namespace :gettext do
44
-
45
- desc "Update pot/po files."
46
- task :updatepo => [:environment] do
47
- load_gettext
48
- require 'gettext_i18n_rails/haml_parser'
49
-
50
-
51
- unless ENV['NO_EXTRACT_DB']
52
- Rake::Task['gettext:store_model_columns'].invoke
53
- end
54
- puts "### Updating po/pot files. ###"
55
- FileUtils.rm_f("po/#{@application}.pot")
56
-
57
- if GetText.respond_to? :update_pofiles_org
58
- GetText.update_pofiles_org(@application, Dir.glob("{app,lib,bin,data,static_data}/**/*.{builder,rb,erb,rjs}"), "#{@application_domain} #{@version}", :msgmerge => [:no_wrap,:sort_by_file, :no_fuzzy_matching, :previous],:verbose => true)
59
- else
60
- puts "install new GetText with gettext:install to gain more features..."
61
- #kill ar parser...
62
- require 'gettext/parser/active_record'
63
- module GetText
64
- module ActiveRecordParser
65
- module_function
66
- def init(x);end
67
- end
68
- end
69
-
70
- GetText.update_pofiles(@application, Dir.glob("{app,lib,bin,data,static_data}/**/*.{builder,rb,erb,rjs}"), "#{@application_domain} #{@version}")#, :msgmerge => [:no_wrap,:sort_by_file, :no_fuzzy_matching, :previous],:verbose => true)
71
- end
72
- end
73
-
74
- desc "Create mo-files"
75
- task :makemo => [:environment] do
76
- load_gettext
77
- puts "### Creating mo-files. ###"
78
- GetText.create_mofiles(true, "po", "locale")
79
- # GetText.create_mofiles(true, "po", "locale")
80
- end
81
-
82
- desc "Create a language file for lang GLANG (fr_FR,en_US etc..)."
83
- task :create_lang => :create_directory do
84
-
85
- # LANG=es_ES msginit -i ../site.pot -o site.po
86
- pot_files = Dir.glob(File.join(@po_dir,'*.pot'))
87
- if pot_files.blank?
88
- puts 'Unable to find pot files'
89
- exit 1
90
- end
91
- pot_files.each do |f|
92
- out_f = out_file(f)
93
- unless File.exist?(out_f) # Prevent from erasing the old .po
94
- puts "### Creating #{out_f} ! ###"
95
- exec "`msginit -i #{f} -o #{out_f} -l #{@lang} --no-wrap`"
96
- else
97
- puts "### #{out_f} already present! Not created. ###"
98
- end
99
- end
100
-
101
- end
102
-
103
- desc "Extract needed data from DB for gettext"
104
- task :extract_db do
105
- puts "Extracting data from databases"
106
- # don't require this file since it loads all rails framework.
107
- # Also use system because exec exits as finished
108
- system("ruby utils/extract_data_from_db_for_gettext.rb")
109
-
110
- end
111
-
112
- # This is just an example
113
- # Please be inspired!!! :D
114
-
115
- desc "write the data/model_attributes.rb"
116
- task :store_model_columns => [:extract_db,:environment] do # => [ :extract_db] do
117
- require 'gettext_column_mapping/model_attributes_finder'
118
- FastGettext.silence_errors
119
- storage_file = 'data/model_attributes.rb'
120
- puts "writing model translations to: #{storage_file}"
121
- ignore_tables = [/^sitemap_/, /_versions$/, 'schema_migrations', 'sessions']
122
-
123
- # GettextColumnMapping::ModelAttributesFinder.new
124
- # puts ActiveRecord::Base.send(:subclasses).size
125
- GettextColumnMapping.store_model_attributes(
126
- :to => storage_file,
127
- :ignore_columns => ['id', 'type', 'created_at', 'updated_at'],
128
- :ignore_tables => ignore_tables
129
- )
130
-
131
- end
132
- end
1
+ require 'gettext_column_mapping/tasks'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - hallelujah