扩展/修改库

时间:2014-01-04 01:17:11

标签: ruby-on-rails ruby rmagick

我正在使用RMagick,我不喜欢一件事:

当我这样做时:

Magick::ImageList.new(path)

路径始终是本地文件。所以,在我的代码中,我有很多次重复这个:

if URI(path).host.nil?
  Magick::ImageList.new(path)
else
  url_image = open(path)
  image = Magick::ImageList.new
  image.from_blob(url_image.read)
end

我应该如何管理该代码以避免每次我想创建一个新的Magick :: ImageList对象时重复?顺便说一句,我正在使用Rails。

1 个答案:

答案 0 :(得分:0)

我建议用自己的类包装库,在那里添加功能。这样做的另一个好处是可以将逻辑保存在一个位置,并让您自定义功能以更好地适应您的域。

也许是这些方面的事情:

class MySuperRadImageList
  def self.open(path)
    image_list = if URI(path).host.nil?
                   Magick::ImageList.new(path)
                 else
                   Magick::ImageList.new.from_blob(open(path).read)
                 end
    self.new(image_list)
  end

  def initialize(image_list)
    # ...
  end
end

我建议重构上面的代码,但是想向您展示我建议的具体示例(尤其是else子句o.O中的那一行。