Commit 22fb63564f8bd40e00d39ab4aff68b08aebcd97a
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Merge branch 'rails3' into rails3_stable
Showing
1 changed file
with
30 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,30 @@ |
1 | +class FixYamlEncoding < ActiveRecord::Migration | |
2 | + def self.up | |
3 | + fix_encoding(Block, 'settings') | |
4 | + fix_encoding(Product, 'data') | |
5 | + fix_encoding(Environment, 'settings') | |
6 | + fix_encoding(Profile, 'data') | |
7 | + fix_encoding(ActionTracker::Record, 'params') | |
8 | + fix_encoding(Article, 'setting') | |
9 | + end | |
10 | + | |
11 | + def self.down | |
12 | + puts "Warning: cannot restore original encoding" | |
13 | + end | |
14 | + | |
15 | + private | |
16 | + | |
17 | + def self.fix_encoding(model, param) | |
18 | + result = model.find(:all, :conditions => "#{param} LIKE '%!binary%'") | |
19 | + puts "Fixing #{result.count} rows of #{model} (#{param})" | |
20 | + result.each {|r| r.update_column(param, deep_fix(r.send(param)).to_yaml)} | |
21 | + end | |
22 | + | |
23 | + def self.deep_fix(hash) | |
24 | + hash.each do |value| | |
25 | + value.force_encoding('UTF-8') if value.is_a?(String) && !value.frozen? && value.encoding == Encoding::ASCII_8BIT | |
26 | + deep_fix(value) if value.respond_to?(:each) | |
27 | + end | |
28 | + end | |
29 | + | |
30 | +end | ... | ... |