-
Notifications
You must be signed in to change notification settings - Fork 28
API kou
互換性のために残していると思うけど消したい。
.new
でレシーバーのクラス以外のオブジェクトが返ってくるのは紛らわしい。
charty/backends/
にしているから。
Chartty::PlotterAdapter.inherited
で継承したら自動登録するよりも明示的にCharty::Backend.register
を呼んで登録してもらう方がいいんじゃないかな。自動登録にすると複数のバックエンド実装で共有したいアブストラクトバックエンドみたいなやつがあったときに隠せなくなっちゃう。
module Charty
class Gruff < Backend
register :gruff
end
end
あと、どうせName
を定義しなければいけない(継承するだけの完全自動ではない)ならメソッドを呼んでもいいと思う。
Name
でいくならせめてCharty::Backend::Name
→Charty::Backend::NAME
というように全部大文字にした方がよいと思う。
RenderContext
で全部の図をサポートするんじゃなくて、Chart
というベースクラスを作って図毎にクラスを作った方がいいんじゃないかな。
module Charty
class Chart
end
class Scatter < Chart
def plot
@backend.scatter(...)
end
end
end
こうすればバックエンドがcase when
しなくてもよくなる。オブジェクト指向言語ならcase when
はできるだけ避けたいところ。
RenderContext
があってもいいけど、ユーザーには見せたくない。RenderContext
って本当にコンテキストかな。Data
だとプロット対象のデータと紛らわしい感じがするからSource
とかどうかな。Data
で#each
でデータを返して、ラベルとかはメタデータとしてData#x_label
で返すとかもいいかも。
Chart#@+
を定義して図を合成できるようにしてもよさそう。
scatter + bar
Plotter
経由じゃなく、直接オブジェクトを作ってもいいかも。
scatter = Charty::Scatter.new(data, ...)
plot
は描画で、render
はファイルに保存は紛らわしいから保存はsave
がいいと思う。
気持ちはわからなくもないけどinstance_eval
はコンテキストがわかりにくくなるのでやめた方がよいと思う。せめて、ブロック引数でインスタンスを受け付けるようにしたい。
if block_given?
if block.arity >= 1
yield(configurator)
else
configurator.instance_eval(&block)
end
end
bar
とかだけで大丈夫。