Sha256: c1eb636d58d9160f562502b8f643dcd40777aac72e3c264859b05c9b8c99caae

Contents?: true

Size: 1004 Bytes

Versions: 7

Compression:

Stored size: 1004 Bytes

Contents

# Takes care of recoding pages to Shift-JIS for some handsets when required
require 'nkf'
class Galakei::Filter::Recode < Galakei::Filter::Base
  def self.inject(klass)
    this_class = self
    klass.around_filter self, :if => lambda {|c| this_class.condition?(c) }
  end

  def condition?
    request.ssl? && request.au?
  end

  def filter
    deep_apply(controller.params) do |param|
      NKF.nkf('-Sw', param)
    end
    yield
    doc = Nokogiri::HTML(response.body)
    response.body = doc.serialize(:encoding => 'Shift_JIS')
    response.charset = "Shift_JIS"
  end

  private
  def deep_apply(obj, &proc)
    case obj
    when Hash
      obj.each_pair do |key, value|
        obj[key] = deep_apply(value, &proc)
      end
    when Array
      obj.collect!{|value| deep_apply(value, &proc)}
    when String
      obj = obj.to_param if obj.respond_to?(:to_param)
      proc.call(obj)
    else
      # NilClass, TrueClass, FalseClass, Tempfile, StringIO, etc...
      return obj
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
galakei-0.9.1 lib/galakei/filter/recode.rb
galakei-0.9.0 lib/galakei/filter/recode.rb
galakei-0.8.1 lib/galakei/filter/recode.rb
galakei-0.8.0 lib/galakei/filter/recode.rb
galakei-0.7.3 lib/galakei/filter/recode.rb
galakei-0.7.2 lib/galakei/filter/recode.rb
galakei-0.7.1 lib/galakei/filter/recode.rb