これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

script/generator続き Rails::Generator::NamedBase(2)

ここの続き。
NamedBaseにはname以外にも色々な属性があるらしい。色々試してみて、↓みたいな感じだと把握。

属性名 データ型 内容
name String Generatorの第1引数に渡した値。"ruby script/generate model hoge"だと"hoge"となる。
class_name String nameをクラス名の形にしたもの。nameが"foo_bar"なら"FooBar"となる。
singular_name String nameの単数形
plural_name String nameの複数形
table_name String nameをテーブル名の形にしたもの。nameが"FooBar"なら"foo_bar"となる。
class_path Array nameがFoo::Bar::Bazなら["Foo", "Bar"]となる。
file_path String 実際にファイルをどこに置くか? nameが"Foo::Bar::Baz"なら"foo/bar/baz"となる
class_nesting String ネストしているクラス? nameが"Foo::Bar::Baz"なら"Foo::Bar"。
class_nesting_depth Fixnum ネストの深さ。nameが"Foo::Bar::Baz"なら"2"。
file_name String singular_nameのalias
actions Array 第2引数に渡した値。"ruby script/generate model hoge puge moge"だと["puge", "moge"]となる。

(参考)調べるために使ったプログラムと実行結果

(追記)調査用のプログラムがなんか宜しくなかったみたい。なので、やり直し。

require 'rbconfig'
 
class MyGenGenerator < Rails::Generator::NamedBase
 
  def initialize(runtime_args, runtime_options = {})
    super
  end
 
  def manifest
    record do |m|
      [
        "name",
        "class_name", 
        "singular_name", 
        "plural_name", 
        "table_name", 
        "class_path", 
        "file_path", 
        "class_nesting", 
        "class_nesting_depth",
        "file_name", 
        "actions"
      ].each do |var|
        print "#{var} : "
        p self.send(var)
      end
    end
  end

end

実行すると。

$ ruby script/generate my_gen foo
name : "foo"
class_name : "Foo"
singular_name : "foo"
plural_name : "foos"
table_name : "foos"
class_path : []
file_path : "foo"
class_nesting : ""
class_nesting_depth : 0
file_name : "foo"
actions : []
$ ruby script/generate my_gen foo bar baz
name : "foo"
class_name : "Foo"
singular_name : "foo"
plural_name : "foos"
table_name : "foos"
class_path : []
file_path : "foo"
class_nesting : ""
class_nesting_depth : 0
file_name : "foo"
actions : ["bar", "baz"]
$ ruby script/generate my_gen foo_bar
name : "foo_bar"
class_name : "FooBar"
singular_name : "foo_bar"
plural_name : "foo_bars"
table_name : "foo_bars"
class_path : []
file_path : "foo_bar"
class_nesting : ""
class_nesting_depth : 0
file_name : "foo_bar"
actions : []
$ ruby script/generate my_gen FooBar
name : "FooBar"
class_name : "FooBar"
singular_name : "foo_bar"
plural_name : "foo_bars"
table_name : "foo_bars"
class_path : []
file_path : "foo_bar"
class_nesting : ""
class_nesting_depth : 0
file_name : "foo_bar"
actions : []
$ ruby script/generate my_gen Foo::Bar::Baz::Qux
name : "Foo::Bar::Baz::Qux"
class_name : "Foo::Bar::Baz::Qux"
singular_name : "qux"
plural_name : "quxes"
table_name : "foo/bar/baz_quxes"
class_path : ["foo", "bar", "baz"]
file_path : "foo/bar/baz/qux"
class_nesting : "Foo::Bar::Baz"
class_nesting_depth : 3
file_name : "qux"
actions : []
$ ruby script/generate my_gen foo/bar/baz/qux
name : "foo/bar/baz/qux"
class_name : "Foo::Bar::Baz::Qux"
singular_name : "qux"
plural_name : "quxes"
table_name : "foo/bar/baz_quxes"
class_path : ["foo", "bar", "baz"]
file_path : "foo/bar/baz/qux"
class_nesting : "Foo::Bar::Baz"
class_nesting_depth : 3
file_name : "qux"
actions : []