のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

名前空間の省略にincludeを使いたくなかった

rubyでの名前空間の定義はModuleで定義することになり、これをincludeすると名前空間を省略できるのだが、Mix-inで使ってるのか名前空間の省略で使ってるのかわからないことはよくありがち...

ja.stackoverflow.com

なんとなく、Rubyにも他の言語のような名前空間の省略機能が提供されてればなと思い、とりあえず簡易的に作ってみました

as_namespace | RubyGems.org | your community gem host

github.com

使い方

  • 例えば以下の様な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省略として使う分には、シンプルかなと