public
Description: Store translation strings in the database allowing you to update text without requiring a code deploy.
Clone URL: git://github.com/caring/gibberish_db.git
Cache gibberish really hard.
dustin (author)
Fri Mar 28 17:19:15 -0700 2008
dustin (committer)
Mon Apr 21 16:17:11 -0700 2008
commit  67c36a61e8516a9c3644c04e95246f710938e000
tree    b607abeab055d1fab155e79aab2e167e386a163f
parent  257eff06e7765a210934caf678b46d83e68494f9
...
1
2
3
 
 
 
 
 
 
 
 
 
 
 
 
4
...
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
@@ -1,2 +1,13 @@
0
 require 'gibberish_db'
0
-require 'gibberish_db/gibberish_helper'
0
\ No newline at end of file
0
+require 'gibberish_db/gibberish_helper'
0
+
0
+class ActionController::Base
0
+
0
+ protected
0
+
0
+ def reset_gibberish_translations
0
+ Gibberish::Localize::reset_translations
0
+ end
0
+end
0
+
0
+ActionController::Base.send :after_filter, :reset_gibberish_translations
0
\ No newline at end of file
...
5
6
7
 
 
 
 
 
8
9
 
10
11
12
13
 
 
 
 
14
15
 
 
16
17
18
...
28
29
30
31
32
33
34
35
36
 
 
 
37
38
39
40
41
42
43
 
 
44
45
46
47
 
48
49
50
...
116
117
118
 
119
120
121
 
122
123
 
124
125
 
 
 
 
 
 
 
 
126
127
128
...
151
152
153
 
 
 
 
154
155
156
...
5
6
7
8
9
10
11
12
13
 
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
39
40
41
 
 
 
 
 
 
42
43
44
45
 
46
47
 
 
 
48
49
50
51
52
 
53
54
55
56
...
122
123
124
125
126
127
128
129
130
 
131
132
133
134
135
136
137
138
139
140
141
142
143
144
...
167
168
169
170
171
172
173
174
175
176
0
@@ -5,14 +5,25 @@ module Gibberish
0
     acts_as_cached
0
     after_save :invalidate_cache
0
 
0
+ # I'm just going to hold onto these really strongly
0
+ # This will be a bug if we change the actual languages a lot
0
+ @@languages_by_name = {}
0
+ @@languages_by_id = {}
0
+
0
     def self.find_cached_by_name(name)
0
- get_cache("find_by_name:#{name}") do
0
+ @@languages_by_name[name] ||= get_cache("find_by_name:#{name}") do
0
         find(:first, :conditions => {:name => name.to_s})
0
       end
0
     end
0
 
0
+ def self.find_cached_by_id(id)
0
+ @@languages_by_id[id] ||= get_cache id
0
+ end
0
+
0
     def invalidate_cache
0
       clear_cache "find_by_name:#{name}"
0
+ @@languages_by_name = {}
0
+ @@languages_by_id = {}
0
     end
0
 
0
   end
0
@@ -28,23 +39,18 @@ module Gibberish
0
 
0
     attr_accessor :arguments
0
 
0
- def self.find_cached_by_language_and_key(lang, key)
0
- cache_key = cache_key_for_language_and_key(lang,key)
0
- cached = get_cache(cache_key) {nil}
0
- unless cached
0
- cached = Translation.find_by_language_id_and_key(lang.id, key.to_s, :include => :language)
0
- set_cache(cache_key, cached)
0
+ def self.full_cached
0
+ get_cache("everything") do
0
+ Translation.find(:all, :include => :language).group_by{|l| [l.language_id, l.key]}
0
       end
0
- return cached
0
     end
0
 
0
- def self.cache_key_for_language_and_key(lang,key)
0
- lang_id = lang.is_a?(Language) ? lang.id : lang
0
- ['find_by_language_id_and_key', lang_id, key.to_s[0..100]].join(':')
0
+ def self.find_cached_by_language_and_key(lang, key)
0
+ full_cached[[lang.is_a?(Language)?lang.id : lang, key]]
0
     end
0
 
0
     def invalidate_cache
0
- self.class.clear_cache(self.class.cache_key_for_language_and_key(language_id, key))
0
+ self.class.clear_cache "everything"
0
     end
0
     
0
     def method_missing(name, *args, &block)
0
@@ -116,13 +122,23 @@ module Gibberish
0
   # this is an adapter that exposes a Hash access method
0
   # but calls to the model for the correct language.
0
   class Translator
0
+
0
     def initialize(language)
0
       @language = language
0
     end
0
+
0
     def translate(key)
0
- Translation.find_cached_by_language_and_key(@language,key)
0
+ all_translations[[@language.is_a?(Language) ? @language.id : @language, key]]
0
     end
0
     alias_method :[], :translate
0
+
0
+ def all_translations
0
+ @cached ||= Translation.full_cached
0
+ end
0
+
0
+ def reset_translations
0
+ @cached = nil
0
+ end
0
   end
0
   
0
   module Localize
0
@@ -151,6 +167,10 @@ module Gibberish
0
     end
0
     alias_method_chain :translate, :db
0
 
0
+ def self.reset_translations
0
+ @@languages.each { |k,v| v.reset_translations }
0
+ end
0
+
0
     private
0
 
0
       def extract_arguments(args)

Comments

    No one has commented yet.