Sha256: f823928c69a73fd2bee13f5b6533f39531d2d1057e9e9cfd6a7308ff3e6d9966

Contents?: true

Size: 1.49 KB

Versions: 20

Compression:

Stored size: 1.49 KB

Contents

# -*- coding: utf-8 -*-
# 出力変換
require 'scanf'

module Jpmobile
  module Rack
    class Filter
      def initialize(app)
        @app = app
      end

      def call(env)
        # 入力を保存
        mobile = env['rack.jpmobile']

        status, env, response = @app.call(env)

        if mobile and mobile.apply_filter? and env['Content-Type'] =~ %r!text/html|application/xhtml\+xml!
          type, charset = env['Content-Type'].split(/;\s*charset=/)

          body = response_to_body(response)
          body = body.gsub(/<input name="utf8" type="hidden" value="#{[0x2713].pack("U")}"[^>]*?>/, ' ')
          body = body.gsub(/<input name="utf8" type="hidden" value="&#x2713;"[^>]*?>/, ' ')

          response, charset = mobile.to_external(body, type, charset)

          if type and charset
            env['Content-Type'] = "#{type}; charset=#{charset}"
          end
        elsif Jpmobile::Emoticon.pc_emoticon?
          body = response_to_body(response)

          response = Jpmobile::Emoticon.emoticons_to_image(body)
        end

        new_response = ::Rack::Response.new(response, status, env)
        new_response.finish
      end

      private
      def response_to_body(response)
        if response.respond_to?(:to_str)
          response.to_str
        elsif response.respond_to?(:each)
          body = []
          response.each do |part|
            body << response_to_body(part)
          end
          body.join("\n")
        else
          body
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
jpmobile-2.0.11 lib/jpmobile/rack/filter.rb
jpmobile-1.0.12 lib/jpmobile/rack/filter.rb
jpmobile-1.0.11 lib/jpmobile/rack/filter.rb
jpmobile-2.0.10 lib/jpmobile/rack/filter.rb
jpmobile-1.0.10 lib/jpmobile/rack/filter.rb
jpmobile-2.0.9 lib/jpmobile/rack/filter.rb
jpmobile-1.0.9 lib/jpmobile/rack/filter.rb
jpmobile-2.0.8 lib/jpmobile/rack/filter.rb
jpmobile-3.0.4 lib/jpmobile/rack/filter.rb
jpmobile-3.0.3 lib/jpmobile/rack/filter.rb
jpmobile-3.0.2 lib/jpmobile/rack/filter.rb
jpmobile-3.0.1 lib/jpmobile/rack/filter.rb
jpmobile-2.0.7 lib/jpmobile/rack/filter.rb
jpmobile-2.0.6 lib/jpmobile/rack/filter.rb
jpmobile-3.0.0 lib/jpmobile/rack/filter.rb
jpmobile-2.0.5 lib/jpmobile/rack/filter.rb
jpmobile-1.0.8 lib/jpmobile/rack/filter.rb
jpmobile-2.0.4 lib/jpmobile/rack/filter.rb
jpmobile-2.0.3 lib/jpmobile/rack/filter.rb
jpmobile-1.0.7 lib/jpmobile/rack/filter.rb