なるとのクラス図

なるとのクラス図を書いてみる。*1
あと、脳内にある設計を記録としてちゃんと残してみる。

  • NarutoClass*2
  • InitializerModule*3
    • BaseAccessorClass*4
      • AgentObject*5
        • MixiModule*6
          • FriendClass*7
          • CommunityClass*8
          • その他、多数のオブジェクトを用意する
        • TwitterModule*9
        • TumblrModule*10
        • TimelogModule*11
        • Mogo2Module*12
        • HaruModule*13
        • FeecleModule*14

基本仕様

基本的に、AgentObjectを操作する。
汎用性と拡張性を持たせるために、BaseAccessorClassやInitializerModuleなどを使っている。
AgentObjectのメソッド"get_url_pattern"は、サイトからスクレイピングしてきた値を直接返すだけ。
AgentObjectのメソッド"create_hogehoge_object"は、サイトからスクレイピングしてきた内容を
Rubyのオブジェクトとして再構成して返す。
あと、なるとを使うコード中で$KCODEを設定しておいてくれたら、
特に文字コード変換しなくてもなるとがよろしくサイトに合わせて文字コードの変更もやるように作っている。

拡張方法

サイトのHTMLコード変更や、APIの仕様変更などでなるとが動作しなくなった場合、
サイトに追加された新機能への対応をする場合などは、パーサモジュールの変更だけで
対応できるようにする。
また、対応サイトが増えた場合にはパーサモジュールを追加して、InitializerModuleにちょこっと
手を加えるだけで対応できるように設計している。

ファイル構成

readme_ja.txt
licence.txt
このへんはお決まりで。
lib/naruto.rb
コアクラス
lib/config/initializer.rb
初期化やら設定やら
lib/accessor/base_accessor.rb
ベースクラス
lib/accessor/sites/mixi.rb
lib/accessor/sites/twitter.rb
サイト別のパーサモジュールをこのへんに
lib/accessor/sites/mixi/base.rb
lib/accessor/sites/mixi/friend/friend.rb
lib/accessor/sites/mixi/firend/profile.rb
クラスごとにファイルや階層を分けるのがRubyのしきたり

進捗度

20%程度

  • 全体の設計は固まった。
  • mixiのパーサモジュールは20%くらい作った
  • twitter,tumblr,timelog,feecle,haru,mogo2のパーサモジュールは未着手
  • AgentObjectのスイッチング機能は設計構想だけはあるが、機能の開発はまだ途中。
  • テストはまだ書いてない
  • RDocもまだ書いてない
  • RakeFileもまだ書いてない
  • RubyGemsパッケージ化もまだ

*1:…というか、クラス図を書くのは初めてだったりする(ぉぃ

*2:コアクラス、InitializerModuleによって初期化され、BaseAccessorClassを継承し、任意のパーサモジュールをオーバーライドしたAgentObjectを所持する

*3:初期化するだけ

*4:こいつが本体、こいつがパーサモジュールをオーバーライドしたAgentObjectを持っている

*5:オーバーライドされたオブジェクト、こいつが実質的なアクセサ

*6:mixi用のパーサモジュール、AgentObjectにextendされる

*7:mixiのオブジェクト

*8:mixiのオブジェクト

*9:twitter用のパーサモジュール、AgentObjectにextendされる

*10:tumblr用のパーサモジュール、同上

*11:同上

*12:同上

*13:同上

*14:同上