module Fabrication
module Syntax
# Extends Fabrication to provide make/make! class methods, which are
# shortcuts for Fabricate.build/Fabricate.
#
# Usage:
#
# require 'fabrication/syntax/make'
#
# User.make(:name => 'Johnny')
#
#
module Make
def make(*args, &block)
overrides = Fabrication::Support.extract_options!(args)
klass = name.underscore.to_sym
fabricator_name = args.first.is_a?(Symbol) ? "#{klass}_#{args.first}" : klass
Fabricate.build(fabricator_name, overrides, &block)
end
def make!(*args, &block)
overrides = Fabrication::Support.extract_options!(args)
klass = name.underscore.to_sym
fabricator_name = args.first.is_a?(Symbol) ? "#{klass}_#{args.first}" : klass
Fabricate(fabricator_name, overrides, &block)
end
end
end
end
Object.extend Fabrication::Syntax::Make
質問する
69 次
3 に答える
0
あなたの最後の行のように。module
other の内部で定義するmodule
と、名前空間が付けられます。したがって、コードMake
モジュールは、その名前空間を使用して外部Fabrication
モジュール定義からアクセスできます。
Fabrication::Syntax::Make
Make
これにより、名前の競合なしにルート名前空間でモジュールを定義できます。
于 2013-07-12T22:02:37.013 に答える
0
それは本質的に名前空間です。だけで同じことができますmodule Fabrication::Syntax::Make
。何らかの理由で、それらをネストすることは、ほとんどの有名な宝石/プロジェクトが行うことであり、その理由は不明ですが、私もそうします. 一般的に、より直接的な方法よりも入れ子を好む理由について、いくつかの洞察を得たいと思います。
于 2013-07-12T22:00:57.503 に答える