トップ «前の日記(2006-10-31) 最新 次の日記(2006-11-08)» 編集

3 日坊主日記


2006-11-05 [長年日記]

_ [Rails] Rails1.2

Rails1.2preを試し中。

$ cat vendor/rails/railties/lib/initializer.rb
...
    # This initialzation sets $KCODE to 'u' to enable the multibyte safe operations.
    # Plugin authors supporting other encodings should override this behaviour and
    # set the relevant +default_charset+ on ActionController::Base
    def initialize_encoding
      $KCODE='u'
    end
...
$ cat vendor/rails/activesupport/lib/active_support/core_ext/string/iterators.rb
require 'strscan'

module ActiveSupport #:nodoc:
  module CoreExtensions #:nodoc:
    module String #:nodoc:
      # Custom string iterators
      module Iterators
        # Yields a single-character string for each character in the string.
        # When $KCODE = 'UTF8', multi-byte characters are yielded appropriately.
        def each_char
          scanner, char = StringScanner.new(self), /./mu
          loop { yield(scanner.scan(char) || break) }
        end
      end
    end
  end
end
$ cat vendor/rails/activesupport/lib/active_support/multibyte/handlers/passthru_handler.rb
# Chars uses this handler when $KCODE is not set to 'UTF8'. Because this handler doesn't define any methods all call
# will be forwarded to String.
class ActiveSupport::Multibyte::Handlers::PassthruHandler

  # Return the original byteoffset
  def self.translate_offset(string, byte_offset) #:nodoc:
    byte_offset
  end
end

$KCODE='u'とか/./muとかSJIS茨の道度が上がってるなあ。どうしよう。

  • SJISステ
  • いやいやSJISやEUCでも動くようにしていくべきでしょう

perform_filter(仮)が動かない。テスト重要。

_ [Rails] Rails1.2 Shift_JIS

$ cat config/environment.rb
...
Rails::Initializer.run do |config|
...
  # See Rails::Configuration for more options
end
$KCODE = 'SJIS'
...
# Include your application configuration below
ActionController::Base.default_charset = 'Shift_JIS'

とりあえずこれでmongrel (win32)でも動く。

$ ruby script/server

よしよし。

_ [Rails] Rails1.2 deprecation warning

Rails1.2ではRails2.0で消える仕様に対して警告が出るようになっている。

とりあえずstart_form_tag, end_form_tagとlink_toの:post => trueを変換しておく。

$ cat script/erase_deprecation_warning.rb
Dir.glob('app/views/*/*.rhtml') do |ent|
  p ent
  bak = ent + '~'
  File.rename ent, bak
  open(bak, 'rb') do |reader|
  open(ent, 'wb') do |writer|
    while line = reader.gets
      line.sub!(/<%= *start_form_tag\b/, '<%= form_tag')
      line.sub!(/<%= *end_form_tag *%>/, '</form>')
      line.sub!(/:post => true\b/, %[:method => 'post'])
      writer.print line
    end
  end
  end
end

注意: Rails1.1.6ではlink_to :method => 'post'は動作しない。

actionpack changelogによると pagination, in_place_editor, auto_complete_field は Rails2.0でpluginとして追い出される。

_ [Rails] ActiveResource to_param

ActiveResource::Baseにto_paramがないのはなぜだろう。 idで参照すべきではないということかな。

_ [Rails] ActiveResource 型情報

ActiveResource::Baseをnewするとその@attributesはからっぽ。 remoteで教えてもらわないといけないけど、その仕組みがまだないぽい。 ActionWebServiceと組み合わせたりできるんだろうか。

_ [Rails] perform_filters for Rails1.2pre

filters.rbの実装が変わりまくりで、しかも(この用途には)拡張しにくくなってしまっている。

optionsまわりはfiltersのを流用しつつ、別のchainを作る方向で実装してみました。

http://dev.moriq.com/svn/rails/plugins/trunk/perform_filters

testも書いたよ!(こぴぺ)

Rails1.1.6用のはstable branchに移動しました。

http://dev.moriq.com/svn/rails/plugins/branches/stable/perform_filters

追記: 別のchain(filter_chainじゃなくてhook_chainに入れてる)だとskip_filterとかが効かないや。うーん。

名前はrender_hook(plugin名はrender_hooks)でどうでしょう。before_renderも良いですけど。

[]