如果每个国家/地区都有自己的省变量逻辑,我如何以更加DSL的方式操纵参数。
我想更好地组织它: - 根据每个国家/地区创建配置文件 - 如果文件不存在,则会有一个默认文件 - 并且每个文件都是一个ruby文件,省级参数可以通过ruby代码进行操作,这样可以提供灵活性。
目前我在控制器中这样做:
before_filter :modify_location_params, :only => [:create]
def location_params
params.require(:location).permit(
origin: [:name, :country, :city, :state, :postal_code, :address1, :address2,:province],
destination: [:name, :country, :city, :state, :postal_code, :address1, :address2,:province],
)
end
def modify_location_params
[:origin, :destination].each do |location|
unless (params[:location][location][:country].downcase =~ /(Sweden|sw)/).nil?
params[:location][location][:province] = 'SW'
end
unless (params[:location][location][:country].downcase == 'IL' && some_other_condition == true
params[:location][location][:city] = 'OM'
params[:location][location][:name] = 'some name'
end
end
end
是的,我可以在switch / if语句中执行此操作,但我认为由于我有很多国家/地区,因此对于这种操作而言,这将是一种更好的方式来执行类似DSL的系统。任何想法如何实施这样的?
答案 0 :(得分:1)
我不完全确定我理解你要做的是什么,但是如果你只想为每个国家/地区想要一个类似方法的不同实现,你可以为每个国家创建一个类,让它们从父国家类继承。像
这样的东西class Country
def as_origin
#default code
end
end
class Sweden < Country
def as_origin
#override default code here
end
end
如果你想避免手工完成这一切,还有很多好的宝石来帮助country information
答案 1 :(得分:0)
如果我理解正确,您希望根据该哈希中的Get-AzureRmWebApp
值向哈希添加不同的键值对。如果是这样,那么YAML文件应该可以工作。
假设您在YAML文件中有以下内容
:country
然后你可以定义一个方法
# country_details.yaml
sweden:
province: 'SW'
il:
city: 'OM'
name: 'some name'
你这样使用
def country_details(country)
parsed_yaml = YAML::load(File.open('path/to/file'))
details = parsed_yaml[country]
end