Closed hiboma closed 5 years ago
/${resource_path}/details
を持っているリソースはそこまで多くないので、不要なリソースにはやしてしまうと混乱してしまいそうですね。
ジャストアイディアですがlist_detail部分だけモジュールかして利用するリソースからincludeする形にするのはどうでしょうか
素朴に module に分離すると 以下のような名前をきって list_detail
を include する感じかな〜
もしくは 以下のように新しいクラス変数を付けておいて、全ての Yao::Resource::* で list_detail
メソッドを生やしはするけど details を持たないリソースでは誤用を避けるようにガード節を入れるか、かなぁ
module Yao::Resources
class Flavor < Base
self.service = "compute"
self.resource_name = "flavor"
self.resources_name = "flavors"
self.accessible_resource_details = true 👈 🆕
end
end
end
module Yao::Resources
module RestfullyAccessible
...
def list_detail(query={})
# 🔥 detail を持たないクラスでは実行できない
unless accessible_resource_details
raise '#{self.to_s} does not have resources detail API.'
end
res = GET([resources_path, "detail"].join("/"), query)
resources_from_json(res.body)
end
既存の https://github.com/yaocloud/yao/blob/master/lib/yao/resources/metadata_available.rb に揃えようかなぁ
ResourceDetailAvailable ?
別の案の内容を見て思ったのですが、そもそもlistとlist_detailを分ける必要があるのかなっと :thinking: listで取れるものはlist_detailでとれるので、accessible_resource_detais=trueなリソースは、listでdetailsを叩くようにすると良いのかなっと思いました。
\💡 /
Draft PR 解除までに 諸々やったことです
return_resources
list_detail
to list
self.resources_detail_available
list_detail
to list
Yao::Volume.list
粒度がだいぶ大きくなったけどよろしくお願いします @buty4649
Yaoの互換性を保つために一時的に alias :list_detail :list するのはいかかでしょうか? そして、折をみてlist_detailを削除するみたいなのを考えました。
ok 〜
Add alias :list_detail list
and the tests したぜ!
Appreciate your thoroughly review ! 細かいとこまでありがと〜
Hi. This PR depcates
Yao::Resources::RestfullyAccessible.return_resources
same as https://github.com/yaocloud/yao/pull/126.Yao::Resources::RestfullyAccessible.return_resources
を廃止することを提案する PR ですDraft PR で 相談したいこと
return_resources
を消していく中で、特定のリソースでlist_detail
の実装がコピペ状態になっているのを見つけましたこの
list_detail
の実装をYao::Resources::*
からYao::Resources::RestfullyAccessible
に集約するとでコードが DRY になるだろうと考えています迷っていること
上記のような変更を入れると、 OpenStack API で
/${resource_path}/details
を持たない リソースにもlist_detail
が生えてしまうので どのように集約するのがいいかなぁと思案しています