Tbpgr Blog

Recruiting Operations tbpgr(てぃーびー) のブログ

ActiveSupport | Module#class_attribute

概要

Module#class_attribute

詳細

Module#class_attribute について

Module#class_attribute

クラスレベルの属性を設定する。
継承先でも引き継がれる。
インスタンスからも利用可能。
instance_readerオプション、instance_writerオプションの指定によって
インスタンスからのアクセス制御をすることも可能。

詳細は下記のサンプルコードおよびリンク先にて確認。

サンプル

# encoding: utf-8
require 'active_support/core_ext/class/attribute'
require 'tbpgr_utils'
class A
  class_attribute :default
  self.default = {
    hoge: "default_hoge",
    hige: "default_hige",
    hage: "default_hage",
  }
end
 
class B < A
  self.default = {
    hoge: "b_nized_default_hoge",
    hige: "b_nized_default_hige",
    hage: "b_nized_default_hage",
  }
end
 
class C < B; end

bulk_puts_eval binding, <<-EOS
A.default
B.default
C.default
A.new.default
B.new.default
C.new.default
B.default = "change in b"
C.default
EOS

__END__
下記はTbpgrUtils gemの機能

bulk_puts_eval

詳しくは下記参照
https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

A.default # => {:hoge=>"default_hoge", :hige=>"default_hige", :hage=>"default_hage"}
B.default # => {:hoge=>"b_nized_default_hoge", :hige=>"b_nized_default_hige", :hage=>"b_nized_default_hage"}
C.default # => {:hoge=>"b_nized_default_hoge", :hige=>"b_nized_default_hige", :hage=>"b_nized_default_hage"}
A.new.default # => {:hoge=>"default_hoge", :hige=>"default_hige", :hage=>"default_hage"}
B.new.default # => {:hoge=>"b_nized_default_hoge", :hige=>"b_nized_default_hige", :hage=>"b_nized_default_hage"}
C.new.default # => {:hoge=>"b_nized_default_hoge", :hige=>"b_nized_default_hige", :hage=>"b_nized_default_hage"}
B.default = "change in b" # => "change in b"
C.default # => "change in b"