roxy
roxy copied to clipboard
Allow calling def mlcp with arguments
It was suggested to use app_specific over import scripts, for instance like:
def deploy_customers
log_header "Deploying Customers"
ARGV.push('import')
ARGV.push('-input_file_path')
ARGV.push('data/customers')
ARGV.push('-output_uri_replace')
ARGV.push(%Q{"#{ServerConfig.expand_path("#{@@path}/../data")},''"})
ARGV.push('-output_collections')
ARGV.push('customers')
ARGV.push('-output_permissions')
role_name = @properties['ml.app-name'] + "-role"
ARGV.push("#{role_name},read,#{role_name},update,#{role_name},insert,#{role_name},execute")
mlcp
end
However, allowing an array of (extra) arguments via a param to the mlcp function might be more elegant, something like:
def deploy_customers
log_header "Deploying Customers"
role_name = @properties['ml.app-name'] + "-role"
mlcp([
'import',
'-input_file_path',
'data/customers',
'-output_uri_replace',
%Q{"#{ServerConfig.expand_path("#{@@path}/../data")},''"},
'-output_collections',
'customers',
'-output_permissions',
"#{role_name},read,#{role_name},update,#{role_name},insert,#{role_name},execute"
])
end
Or maybe even without the [..]?
+1
FWIW, as a workaround, I typically wrap the included mlcp method with this method that lets me call it with an array of arguments (and also includes the roles, since I find that I almost always want them):
def ruby_flavored_mlcp(arguments)
arguments.concat(role_permissions)
arguments.each do |arg|
ARGV.push(arg)
end
mlcp
end
Then I can:
def deploy_users
logger.info "Deploying default user profile documents"
arguments = %W{
import -input_file_path data/users
-document_type json
-output_uri_replace
"#{ServerConfig.expand_path("#{@@path}/../data")},'/api'"
}
ruby_flavored_mlcp(arguments)
end
Based on idea from @patrickmcelwee, I have used the following in app_specific:
alias_method :original_mlcp, :mlcp
def mlcp(arguments = [])
arguments.each do |arg|
ARGV.push(arg)
end
original_mlcp
end