require 'json'
def each_step(json, type)
json['workflows'].map{|w| w["steps"].select {|s| s["type"] == type.to_s}}.flatten.each do |step| yield(step) end
end
def replace_oauth(app_json)
client_id = ENV["CLIENT_ID"] client_secret = ENV["CLIENT_SECRET"] redirect_scheme = ENV["SCHEME"] each_step(app_json, :networkOAuth2) do |step| step["items"].each do |item| if item["oAuth2ClientId"] item["oAuth2ClientId"] = client_id item["oAuth2ClientSecret"] = client_secret item["oAuth2RedirectScheme"] = redirect_scheme end end end
end
def replace_servers(app_json)
server_url = ENV["SERVER_URL"] base_url = ENV["PREVIOUS_SERVER_URL"] app_json["servers"].each do |server| server["url"] = server_url end each_step(app_json, :display) do |step| step["items"].each do |item| ["appleSystemURL", "androidDeepLink"].each{|key| item[key] = item[key].gsub(base_url, server_url) } end end
end
def env_set(path)
app_json = JSON.parse(File.read(app_json_path)) replace_oauth(app_json) replace_servers(app_json) File.write(app_json_path, app_json.to_json)
end
namespace :mw do
namespace :set_env do desc 'Update Android app.json to use new env' task :android do env_set(File.join('app', 'src', 'main', 'res', 'raw', 'app.json')) end desc 'Update iOS app.json to use new env' task :ios do project_name = ENV["PROJECT_NAME"] env_set(File.join(project_name, project_name, "Resources", "app.json")) end end
end