ブログシステム「typo」をいじってみる


さて、前回Railsで作られたブログシステム「typo」のお話をしましたが、
今回はその続きです。
現在のtypo-5.3.0パッと見ただけでもいくつかバグらしき現象が見られるのでそれを直していきましょう。


前回の日本語タイトルだと個別画面が表示されない件の続き


前回、日本語タイトルの場合個別画面がうまく表示されない件について書きましたが、
この修正だと、

  • 更新時にparmalinkが更新されてしまう
  • draft(自動保存)の場合日本語のparmalink名が残ってしまう


という現象が起きていました。
なので、次のように修正しなおします。

#app/controllers/admin/content_controller.rbの157行目に追記
  else
    if @article.permalink.nil? || /^\D+/ =~ @article.permalink
      @article.permalink = Time.new.strftime("%Y%m%d%H%M%S")
    end
  end
  render :action => 'new'
end

コード自動色分け機能で大文字入力するとエラー画面が表示される


入力画面でコード色分け機能を使うときにコードの種類(JavaとかRubyとか)を入力するのですが、
"Java"と入力するとエラー画面が表示されます。(正しくは"java")
まあ、運用でも何とかなりますが、流石にわずらわしいので直しちゃおうかなと。
で、登録時に全部小文字に変換するのが正しいのでしょうが、
ちょっと調べるのが面倒くさかったので、表示時に全部小文字にするように修正してみました。

#vendor/plugins/typo_textfilter_code/lib/typo_textfileter_code.rbの40行目を変更
def self.macrofilter(blog, content, attrib, params, text="")
- lang = attrib['lang']
+ lang = attrib['lang'].downcase
  title = attrib['title']
  if attrib['linenumber'] == "true"
    options = DEFAULT_OPTIONS.merge(:line_numbers => :table, :wrap => :div)
  else
    options = DEFAULT_OPTIONS
  end

検索で複数キーワードを入力するとエラー画面が表示される


typoでは一応検索機能がつけられているのですが、
複数キーワードを入力するとエラー画面が表示されます。
で、typo自体複数キーワード入力に対応していないのかなと思っていたけど、
調べてみたら対応していないのではなく、普通のプログラムにおけるバグでした・・・。
そんぐらい直しとけよ(ノ`Д´)ノ彡┻━┻゛:∴


ということで、SQLの組み立てがおかしかったのでそこを直します。

#app/models/content.rbの30行目から34行目を変更
named_scope :searchstring, lambda {|search_string|
  tokens = search_string.split.collect {|c| "%#{c.downcase}%"}
- {:conditions => [(['state = ? AND (LOWER(body) LIKE ? ORLOWER(extended) LIKE ? OR LOWER(title) LIKE ?)']*tokens.size).join(' AND '),
+ {:conditions => ['state = ? AND '.concat((['(LOWER(body) LIKE ? OR LOWER(extended) LIKE ? OR LOWER(title) LIKE ?)']*tokens.size).join(' AND')),
"published", *tokens.collect{ |token| [token] * 3 }.flatten]}
}


ひとまず、バグ修正はこんなところで。
簡単に目に着いたのはこんなとこだけど、他にもいくつかあるんだろうか・・・?