rails_db_localize 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c25cc17c7090ec4fb582e7b218e31d250ce4d5ae
4
- data.tar.gz: 00db1f61ce8fdbd786b1ba8ff794529150746b92
3
+ metadata.gz: 5ffe7275fcadc410cdb449128a78f0fcda3f8a25
4
+ data.tar.gz: 549306712cdcfc50321a5d1838adfbe6f683253f
5
5
  SHA512:
6
- metadata.gz: ce2d3536b7dbeb3577fb9c0be67aabc23530017b2624896441709eb6025e87126c79ad6debb821517dc882c23533a128c8471fe1e2ff63d6c50c834a7884a97c
7
- data.tar.gz: 7791e979ef7f93d9a7e71f4770e6145ce06172c1a3493b4986eb9bf14805669ef7f071b10734347da7eb3f7234c7563a3ed21763d9bf7addd8effe74c50432ec
6
+ metadata.gz: 541b730cce0772dbf5ba8cffe78808d66aef4b55f1d49a7dc1dbae7ddafdf95832f442e66fb537f850b8c9b350805f42f19fef89dea3ce30c8f6ed8ca27618dd
7
+ data.tar.gz: 772a936d176975a6a0d9eddeab8de5c70b0299c33854da622c3bd30210878a7a9691a1ff4055800199ffa95147d517fbb433f56490f572df747c9f8162b3dbe1
@@ -18,7 +18,7 @@ class RailsDbLocalize::Translation < ActiveRecord::Base
18
18
 
19
19
  def self.generate_ck resource_type, resource_id
20
20
  hash_long = [resource_type.to_s.underscore, resource_id].join("|").chars.map(&:ord).inject(5381) do |h, v|
21
- h = ((h<<5)+h)+v
21
+ h += ((h<<5)+h)+v
22
22
  end
23
23
 
24
24
  #Keep it signed 32bits.
@@ -2,88 +2,91 @@ class ActiveRecord::Base
2
2
  class << self
3
3
 
4
4
  def has_translations *fields
5
+ class_eval do
6
+
7
+ unless respond_to?(:missing_translation)
8
+ # Register it mostly to remove the translations once you delete an object
9
+ has_many :translations, class_name: "RailsDbLocalize::Translation", as: :resource, dependent: :destroy
10
+
11
+ scope :__rails_db_translations_sub_query, lambda{ |lang|
12
+ ttable = RailsDbLocalize::Translation.arel_table.name
13
+ number_of_fields_to_translates = RailsDbLocalize.schema[self.to_s].count
14
+
15
+ # We can unscope, but problems tend to appears
16
+ # with some gems like paranoid.
17
+ table = respond_to?(:klass) ? table.klass : self
18
+
19
+ table.select(:id).joins("INNER JOIN \"#{ttable}\"
20
+ ON (\"#{ttable}\".resource_id = \"#{arel_table.name}\".id
21
+ AND \"#{ttable}\".resource_type = '#{to_s}')")
22
+ .group(:resource_type, :resource_id)
23
+ .having("COUNT(*) == #{number_of_fields_to_translates}")
24
+ .where(:"rails_db_localize_translations.lang" => lang)
25
+ }
26
+
27
+ # Return all rows with missing translation for a selected language.
28
+ scope :missing_translation, lambda{ |lang|
29
+ where("\"#{arel_table.name}\".id NOT IN (#{__rails_db_translations_sub_query(lang).to_sql})")
30
+ }
31
+
32
+ # Return all rows with translation OK for a selected language.
33
+ scope :having_translation, lambda{ |lang|
34
+ where("\"#{arel_table.name}\".id IN (#{__rails_db_translations_sub_query(lang).to_sql})")
35
+ }
36
+
37
+ def self.preload_translations
38
+ RailsDbLocalize::TranslationCache.instance.prefetch_collections(self)
39
+ self
40
+ end
41
+ end
5
42
 
6
- unless respond_to?(:missing_translation)
7
-
8
- # Register it mostly to remove the translations once you delete an object
9
- self.has_many :translations, class_name: "RailsDbLocalize::Translation", as: :resource, dependent: :destroy
10
-
11
- scope :__rails_db_translations_sub_query, lambda{ |lang|
12
- ttable = RailsDbLocalize::Translation.arel_table.name
13
- number_of_fields_to_translates = RailsDbLocalize.schema[self.to_s].count
14
43
 
15
- # We can unscope, but problems tend to appears
16
- # with some gems like paranoid.
17
- table = respond_to?(:klass) ? table.klass : self
44
+ fields.each do |field|
45
+ # Add a marker to the schema of the application translations.
46
+ RailsDbLocalize::add_to_schema(self, field)
18
47
 
19
- table.select(:id).joins("INNER JOIN \"#{ttable}\"
20
- ON (\"#{ttable}\".resource_id = \"#{arel_table.name}\".id
21
- AND \"#{ttable}\".resource_type = '#{to_s}')")
22
- .group(:resource_type, :resource_id)
23
- .having("COUNT(*) == #{number_of_fields_to_translates}")
24
- .where(:"rails_db_localize_translations.lang" => lang)
25
- }
48
+ # Not sure if I would have to put dependent: :destroy here.
49
+ self.has_many :"#{field}_translations", -> { where(field: field) }, as: :resource
26
50
 
27
- # Return all rows with missing translation for a selected language.
28
- self.scope :missing_translation, lambda{ |lang|
29
- where("\"#{arel_table.name}\".id NOT IN (#{__rails_db_translations_sub_query(lang).to_sql})")
30
- }
51
+ # Making the magic happends.
52
+ # I should really learn how to use the Reflection helpers in ActiveRecord, because
53
+ # ruby eval is not the most readable stuff... :o)
54
+ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
55
+ def #{field}_translated_exists?(lang=nil)
56
+ lang ||= I18n.locale
57
+ !!RailsDbLocalize::TranslationCache.instance.get_translation_for(self.class, self.id, "#{field}", lang, nil )
58
+ end
31
59
 
32
- # Return all rows with translation OK for a selected language.
33
- self.scope :having_translation, lambda{ |lang|
34
- where("\"#{arel_table.name}\".id IN (#{__rails_db_translations_sub_query(lang).to_sql})")
35
- }
60
+ def #{field}_translated (lang=nil)
61
+ lang ||= I18n.locale
62
+ RailsDbLocalize::TranslationCache.instance.get_translation_for(self.class, self.id, "#{field}", lang, self.#{field} )
63
+ end
36
64
 
37
- def self.preload_translations
38
- RailsDbLocalize::TranslationCache.instance.prefetch_collections(self)
39
- self
65
+ def #{field}_translated= args
66
+ if args.is_a?(Array)
67
+ value, lang = args
68
+ else
69
+ value = args
70
+ lang = I18n.locale
71
+ end
72
+
73
+ if self.id
74
+ translated = RailsDbLocalize::Translation.where(
75
+ resource_type: self.class.to_s, resource_id: self.id, field: "#{field}", lang: lang
76
+ ).first_or_create
77
+
78
+ translated.content = value
79
+
80
+ translated.save!
81
+ else
82
+ translations.build field: "#{field}", lang: lang, content: value
83
+ end
84
+ end
85
+ RUBY
40
86
  end
41
87
 
42
88
  end
43
89
 
44
- fields.each do |field|
45
- # Add a marker to the schema of the application translations.
46
- RailsDbLocalize::add_to_schema(self, field)
47
-
48
- # Not sure if I would have to put dependent: :destroy here.
49
- self.has_many :"#{field}_translations", -> { where(field: field) }, as: :resource
50
-
51
- # Making the magic happends.
52
- # I should really learn how to use the Reflection helpers in ActiveRecord, because
53
- # ruby eval is not the most readable stuff... :o)
54
- self.class_eval <<-CODE, __FILE__, __LINE__ + 1
55
- def #{field}_translated_exists?(lang=nil)
56
- lang ||= I18n.locale
57
- !!RailsDbLocalize::TranslationCache.instance.get_translation_for(self.class, self.id, "#{field}", lang, nil )
58
- end
59
-
60
- def #{field}_translated (lang=nil)
61
- lang ||= I18n.locale
62
- RailsDbLocalize::TranslationCache.instance.get_translation_for(self.class, self.id, "#{field}", lang, self.#{field} )
63
- end
64
-
65
- def #{field}_translated= args
66
- if args.is_a?(Array)
67
- value, lang = args
68
- else
69
- value = args
70
- lang = I18n.locale
71
- end
72
-
73
- if self.id
74
- translated = RailsDbLocalize::Translation.where(
75
- resource_type: self.class.to_s, resource_id: self.id, field: "#{field}", lang: lang
76
- ).first_or_create
77
-
78
- translated.content = value
79
-
80
- translated.save!
81
- else
82
- translations.build field: "#{field}", lang: lang, content: value
83
- end
84
- end
85
- CODE
86
- end
87
90
  end
88
91
  end
89
92
  end
@@ -1,3 +1,3 @@
1
1
  module RailsDbLocalize
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_db_localize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yacine PETITPREZ
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-09 00:00:00.000000000 Z
11
+ date: 2015-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails