gpt4 book ai didi

ruby-on-rails - rails gem : Running All Generators for given Namespace

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:50 25 4
gpt4 key购买 nike

我正在开发一个包含多个子模块的 gem 核心,每个子模块都是自己的 gem。作为开发人员,您将能够安装核心和任何其他 gem。我如何创建一个 rake 任务或生成器来为所有已安装的 gem 运行生成器,生成器位于主 gem 命名空间下。

例如,如果我的 gem 名为 admin:

module Admin
module Generators
class InstallGenerator < Rails::Generators::Base
end
end
end

我还有一个子 gems 的生成器:

module Admin
module Generators
class PostsGenerator < Rails::Generators::Base
end
end
end

还有一个:

module Admin
module Generators
class TagslGenerator < Rails::Generators::Base
end
end
end

并且最多可以安装 10 个 gem。而不是 rail g admin:... 安装每一个,我想创建一个运行所有任务的 rake 任务或生成器。

提前致谢!

最佳答案

在 Admin 模块下保留一个“AllGenerator”类。生成器必须执行以下操作:

  1. 对于命名空间下的每个生成器类,
  2. 从类名中获取命名空间。
  3. 调用invoke method与命名空间。

像这样:

module Admin
module Generators
class AllGenerator < Rails::Generators::Base
def generator
Rails::Generators.lookup!
Admin::Generators.constants.each do |const|
generator_class = Admin::Generators.const_get(const)
next if self.class == generator_class
if generator_class < Rails::Generators::Base
namespace = generator_klass_to_namespace(generator_class)
invoke(namespace)
end
end
end
private
def generator_klass_to_namespace(klass)
namespace = Thor::Util.namespace_from_thor_class(klass)
return namespace.sub(/_generator$/, '').sub(/:generators:/, ':')
end
end

end
end

Here's the link to the gist with complete tested code

这样,运行 rails g admin:all 将直接在 Admin::Generators 下运行所有​​其他生成器。

关于ruby-on-rails - rails gem : Running All Generators for given Namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com