gettext_i18n_rails 0.9.4 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gettext_i18n_rails (0.9.4)
4
+ gettext_i18n_rails (0.10.0)
5
5
  fast_gettext (>= 0.4.8)
6
6
 
7
7
  GEM
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ require 'bundler/setup'
1
2
  require 'bundler/gem_tasks'
2
3
  require 'appraisal'
3
4
  require 'bump/tasks'
@@ -7,5 +8,5 @@ task :spec do
7
8
  end
8
9
 
9
10
  task :default do
10
- sh "bundle exec rake appraisal:install && bundle exec rake appraisal spec"
11
+ sh "rake appraisal:install && rake appraisal spec"
11
12
  end
data/Readme.md CHANGED
@@ -233,6 +233,8 @@ If want to use your .PO files on client side javascript you should have a look a
233
233
  - [Ivan Necas](https://github.com/iNecas)
234
234
  - [Andrey Chernih](https://github.com/AndreyChernyh)
235
235
  - [Imre Farkas](https://github.com/ifarkas)
236
+ - [Trong Tran](https://github.com/trongrg)
237
+ - [Dmitri Dolguikh](https://github.com/witlessbird)
236
238
 
237
239
  [Michael Grosser](http://grosser.it)<br/>
238
240
  grosser.michael@gmail.com<br/>
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/gettext_i18n_rails
3
3
  specs:
4
- gettext_i18n_rails (0.9.2)
4
+ gettext_i18n_rails (0.9.4)
5
5
  fast_gettext (>= 0.4.8)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/gettext_i18n_rails
3
3
  specs:
4
- gettext_i18n_rails (0.9.2)
4
+ gettext_i18n_rails (0.9.4)
5
5
  fast_gettext (>= 0.4.8)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/gettext_i18n_rails
3
3
  specs:
4
- gettext_i18n_rails (0.9.2)
4
+ gettext_i18n_rails (0.9.4)
5
5
  fast_gettext (>= 0.4.8)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/gettext_i18n_rails
3
3
  specs:
4
- gettext_i18n_rails (0.9.2)
4
+ gettext_i18n_rails (0.9.4)
5
5
  fast_gettext (>= 0.4.8)
6
6
 
7
7
  GEM
@@ -10,10 +10,16 @@ module ActiveModel
10
10
  if attribute.ends_with?('_id')
11
11
  humanize_class_name(attribute)
12
12
  else
13
- "#{self}|#{attribute.split('.').map! {|a| a.humanize }.join('|')}"
13
+ "#{inheritance_tree_root(self)}|#{attribute.split('.').map! {|a| a.humanize }.join('|')}"
14
14
  end
15
15
  end
16
16
 
17
+ def inheritance_tree_root(aclass)
18
+ return aclass unless aclass.respond_to?(:base_class)
19
+ base = aclass.base_class
20
+ base.superclass.abstract_class? ? base.superclass : base
21
+ end
22
+
17
23
  def humanize_class_name(name=nil)
18
24
  name ||= self.to_s
19
25
  name.underscore.humanize
@@ -34,27 +34,40 @@ module GettextI18nRails
34
34
  # current connection ---> {'cars'=>['model_name','type'],...}
35
35
  def find(options)
36
36
  found = ActiveSupport::OrderedHash.new([])
37
-
38
37
  models.each do |model|
39
- next if model.abstract_class
40
- table_name = model.table_name
41
- next if ignored?(table_name,options[:ignore_tables])
42
- model.columns.each do |column|
43
- found[model] += [column.name] unless ignored?(column.name,options[:ignore_columns])
44
- end
45
- found[model].sort!
38
+ attributes = model_attributes(model, options[:ignore_tables], options[:ignore_columns])
39
+ found[model] = attributes.sort if attributes.any?
46
40
  end
47
-
48
41
  found
49
42
  end
50
43
 
44
+ # Rails < 3.0 doesn't have DescendantsTracker.
45
+ # Instead of iterating over ObjectSpace (slow) the decision was made NOT to support
46
+ # class hierarchies with abstract base classes in Rails 2.x
47
+ def model_attributes(model, ignored_tables, ignored_cols)
48
+ return [] if model.abstract_class? && Rails::VERSION::MAJOR < 3
49
+
50
+ if model.abstract_class?
51
+ model.direct_descendants.reject {|m| ignored?(m.table_name, ignored_tables)}.inject([]) do |attrs, m|
52
+ attrs.push(model_attributes(m, ignored_tables, ignored_cols)).flatten.uniq
53
+ end
54
+ elsif !ignored?(model.table_name, ignored_tables)
55
+ model.columns.reject { |c| ignored?(c.name, ignored_cols) }.collect { |c| c.name }
56
+ else
57
+ []
58
+ end
59
+ end
60
+
51
61
  def models
52
62
  if Rails::VERSION::MAJOR > 2
53
63
  Rails.application.eager_load! # make sure that all models are loaded so that direct_descendants works
54
64
  ::ActiveRecord::Base.direct_descendants
55
65
  else
56
- ::ActiveRecord::Base.connection.tables.map {|t| table_name_to_namespaced_model(t) }
57
- end.compact.sort {|c1, c2| c1.name <=> c2.name}
66
+ ::ActiveRecord::Base.connection.tables \
67
+ .map { |t| table_name_to_namespaced_model(t) } \
68
+ .compact \
69
+ .collect { |c| c.superclass.abstract_class? ? c.superclass : c }
70
+ end.uniq.sort_by(&:name)
58
71
  end
59
72
 
60
73
  def ignored?(name,patterns)
@@ -1,3 +1,3 @@
1
1
  module GettextI18nRails
2
- Version = VERSION = '0.9.4'
2
+ Version = VERSION = '0.10.0'
3
3
  end
@@ -23,6 +23,16 @@ describe ActiveRecord::Base do
23
23
  CarSeat.should_receive(:s_).with('CarSeat|Parts|Name').and_return('Handle')
24
24
  CarSeat.human_attribute_name(:"parts.name").should == 'Handle'
25
25
  end
26
+
27
+ it "translates attributes of STI classes through FastGettext" do
28
+ StiChild.should_receive(:s_).with('StiParent|Child attribute').and_return('Kinderattribut')
29
+ StiChild.human_attribute_name(:child_attribute).should == 'Kinderattribut'
30
+ end
31
+
32
+ it "translates attributes of concrete children of abstract parent classes" do
33
+ ConcreteChildClass.should_receive(:s_).with('AbstractParentClass|Child attribute').and_return('Kinderattribut')
34
+ ConcreteChildClass.human_attribute_name(:child_attribute).should == 'Kinderattribut'
35
+ end
26
36
  end
27
37
 
28
38
  describe :gettext_translation_for_attribute_name do
@@ -16,13 +16,16 @@ describe GettextI18nRails::ModelAttributesFinder do
16
16
  Rails.application rescue nil
17
17
  end
18
18
 
19
+ # Rails < 3.0 doesn't have DescendantsTracker.
20
+ # Instead of iterating over ObjectSpace (slow) the decision was made NOT to support
21
+ # class hierarchies with abstract base classes in Rails 2.x
19
22
  describe :find do
20
23
  it "returns all AR models" do
21
24
  keys = finder.find({}).keys
22
25
  if Rails::VERSION::MAJOR > 2
23
- keys.should == [CarSeat, NotConventional, Part]
26
+ keys.should == [AbstractParentClass, CarSeat, NotConventional, Part, StiParent]
24
27
  else
25
- keys.should == [CarSeat, Part]
28
+ keys.should == [CarSeat, Part, StiParent]
26
29
  end
27
30
  end
28
31
 
@@ -31,6 +34,9 @@ describe GettextI18nRails::ModelAttributesFinder do
31
34
  attributes[CarSeat].should == ['id', 'seat_color']
32
35
  attributes[NotConventional].should == ['id', 'name'] if Rails::VERSION::MAJOR > 2
33
36
  attributes[Part].should == ['car_seat_id', 'id', 'name']
37
+ attributes[StiParent].should == ['child_attribute', 'id', 'type']
38
+ attributes[AbstractParentClass].should ==
39
+ ['another_child_attribute', 'child_attribute', 'id'] if Rails::VERSION::MAJOR > 2
34
40
  end
35
41
  end
36
42
  end
data/spec/spec_helper.rb CHANGED
@@ -66,6 +66,19 @@ ActiveRecord::Schema.define(:version => 1) do
66
66
  create_table :not_at_all_conventionals, :force=>true do |t|
67
67
  t.string :name
68
68
  end
69
+
70
+ create_table :sti_parents, :force => true do |t|
71
+ t.string :type
72
+ t.string :child_attribute
73
+ end
74
+
75
+ create_table :concrete_child_classes, :force => true do |t|
76
+ t.string :child_attribute
77
+ end
78
+
79
+ create_table :other_concrete_child_classes, :force => true do |t|
80
+ t.string :another_child_attribute
81
+ end
69
82
  end
70
83
 
71
84
  class CarSeat < ActiveRecord::Base
@@ -78,6 +91,15 @@ class Part < ActiveRecord::Base
78
91
  belongs_to :car_seat
79
92
  end
80
93
 
94
+ class StiParent < ActiveRecord::Base; end
95
+ class StiChild < StiParent; end
96
+
97
+ class AbstractParentClass < ActiveRecord::Base
98
+ self.abstract_class = true
99
+ end
100
+ class ConcreteChildClass < AbstractParentClass; end
101
+ class OtherConcreteChildClass < AbstractParentClass; end
102
+
81
103
  class NotConventional < ActiveRecord::Base
82
104
  if ActiveRecord::VERSION::MAJOR == 3
83
105
  self.table_name = :not_at_all_conventionals
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gettext_i18n_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.10.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-12 00:00:00.000000000 Z
12
+ date: 2013-06-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fast_gettext
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
103
  version: '0'
104
104
  segments:
105
105
  - 0
106
- hash: 3233874037614167619
106
+ hash: -2644697753242804887
107
107
  required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  version: '0'
113
113
  segments:
114
114
  - 0
115
- hash: 3233874037614167619
115
+ hash: -2644697753242804887
116
116
  requirements: []
117
117
  rubyforge_project:
118
118
  rubygems_version: 1.8.25