名前空間の省略にincludeを使いたくなかった
rubyでの名前空間の定義はModule
で定義することになり、これをinclude
すると名前空間を省略できるのだが、Mix-inで使ってるのか名前空間の省略で使ってるのかわからないことはよくありがち...
なんとなく、Rubyにも他の言語のような名前空間の省略機能が提供されてればなと思い、とりあえず簡易的に作ってみました
as_namespace | RubyGems.org | your community gem host
使い方
- 例えば以下の様なnamespaceで定義したModuleがあるとする
# coding: utf-8 require 'as_namespace' module Parent module Child def self.myself "Child" end module Grandson def self.myself "Grandson" end end end end
提供したいClassにinclude AsNamespace
インクルードし、
as_namespace <省略元のモジュールパス>, <省略名>
という感じに定義する
class TestClass include AsNamespace # class内にinclude as_namespace Parent::Child::Grandson, :grand # 元Module名, 省略名 as_namespace Parent::Child, :CHILD # const定義としても化 attr_reader :grandson, :child def initialize @grandson = grand.myself @child = CHILD.myself end end
たった↑のような定義をするだけで、該当クラス内では、省略名称から省略元モジュールにアクセスが出来るようになる
モジュールのincludeで意図しないprivateメソッド等がincludeされてしまうよりかは、そのあたりは元のnamespaceアクセスのままになるので、ただのnamespace省略として使う分には、シンプルかなと