Rails DSL配置意味着什么? DSL配置看起来像什么?



我有如下的Bower文件:

group :vendor, assets_path: 'assets/shop' do
asset 'jquery', '2.2.1'
asset 'lodash', '4.6.1'
...
end

现在我在文件夹vendor/assets/shop中看到了输出,这是在docs中指定的。

我想理解的是什么是"Rails DSL配置"。的真正意思是什么呢?什么是"Rails DSL配置"?甚至"DSL配置";看起来像什么?我四处看了看,找不到这句话的确切含义。

DSL是领域特定语言。"域Specific"这里的意思是该语言用于非常特殊的用途,在这种情况下,它仅用于配置鲍尔。相比之下,像Ruby或JSON这样的通用语言可以用于任何事情。

dsl用于使编写代码或配置更自然、更方便,并且对该领域的人来说更不容易出错。它使其更具声明性,填充默认值,并将您限制为您需要的域。

这是一个DSL配置。

resolution "angular", "1.2.22"

相当于这个JSON配置。

{
"name" : "dsl-generated-dependencies",
"dependencies": {
"angular": "1.2.22"
},
"resolutions": {
"angular": "1.2.22"
}
}

Bower提供了两个配置选项。您可以使用DSL生成JSON配置,也可以手工编写JSON。


虽然有时dsl是自己完整的语言,有自己的语法和解析器,但在Ruby中dsl通常只是Ruby。resolution "angular", "1.2.22"只是一个方法调用:self.resolution("angular", "1.2.22")resolution知道如何把它变成完整的鲍尔配置。

您的示例代码是在一个过程中传递group的方法调用。

self.group(:vendor, assets_path: 'assets/shop') do
self.asset('jquery', '2.2.1')
self.asset('lodash', '4.6.1')
...
end

Ruby dsl的其他示例包括Rails中的config/routes.rb

get '/patients/:id', to: 'patients#show', as: 'patient'

Gemfiles,

gem "nokogiri", ">= 1.4.2"

和FactoryBot。

factory :user do
first_name { "John" }
last_name  { "Doe" }
admin { false }
end

它们都是花哨的Ruby方法调用和块。

相关内容

  • 没有找到相关文章

最新更新