Last active
April 16, 2017 18:40
-
-
Save vonHabsi/7bb65917858bc0f30338b112456ea39d to your computer and use it in GitHub Desktop.
Template Test in Elixir
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule ParamStruct do | |
defstruct key: "", value: "", default: "", description: "description of parameter", label: "label on web form", required: false, order: 99 | |
end | |
defmodule TemplateStruct do | |
defstruct key: "must be unique", name: "descriptive name", code: "", executable: false, destination: "", delete_after: false, | |
perms: "644" | |
end | |
defmodule ProcessList do | |
def parse_list([]), do: [] | |
def parse_list([%{"key" => ky,"value" => val,"default" => dft, "description" => desc,"label" => lbl} | tail]) do | |
[%ParamStruct{key: ky, value: val, description: desc, label: lbl, default: dft } | parse_list(tail) ] | |
end | |
def create_recommend_list(%{"itemScores" => score_list}) do | |
parse_list(score_list) | |
end | |
end | |
params = [ | |
%{"key" => "ca_cert_subj_state","value" => "Greater London","default" => "Greater London","description" => "Region","label" => "State/County"}, | |
%{"key" => "key-file","value" => "cacert_001","default" => "cacert_001","description" => "","label" => "Key File (without password)"}, | |
%{"key" => "key-file-pass","value" => "cacert_pass_001","default" => "cacert_pass_001","description" => "","label" => "Key File (with password)"}, | |
%{"key" => "ca_cert_email","value" => "admin@domain.net","default" => "admin@domain.net","description" => "","label" => "Email"}, | |
%{"key" => "ca_cert_subj_common_name","value" => "Elixir User","default" => "domain.net","description" => "","label" => "Common Name"}, | |
%{"key" => "ca_cert_subj_country","value" => "UK","default" => "UK","description" => "Country","label" => "Country"}, | |
%{"key" => "ca_cert_subj_location","value" => "Manchester","default" => "Westchester","description" => "","label" => "Location"}, | |
%{"key" => "ca_cert_subj_organization","value" => "Elixir Programs Forum","default" => "Big Company","description" => "","label" => "Organisation"}, | |
%{"key" => "ca_cert_subj_org_unit","value" => "IT Department","default" => "Infosystems and Communications","description" => "","label" => "Organisational Unit"} | |
] | |
sslCmd = """ | |
openssl req -x509 -new -nodes -sha256 \ | |
-key {{key-file-pass}}.key \ | |
-days 3650 \ | |
-out {{key-file-pass}}.pem \ | |
-subj ""\ | |
/C={{ca_cert_subj_country}}\ | |
/ST={{ca_cert_subj_state}}\ | |
/L={{ca_cert_subj_location}}\ | |
/O={{ca_cert_subj_organization}}\ | |
/OU={{ca_cert_subj_org_unit}}\ | |
/CN={{ca_cert_subj_common_name}}\ | |
/emailAddress={{ca_cert_email}}\ | |
""" | |
structList = ProcessList.parse_list(params) | |
#IO.inspect ProcessList.parse_list(params) | |
# [first | _ ] = ProcessList.parse_list(params) | |
# IO.puts " #{first.key} is #{first.value} " | |
# IO.inspect first | |
IO.puts sslCmd | |
IO.puts "list of keys and values" | |
IO.puts "=======================" | |
Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> IO.puts " #{x.key} is #{x.value} " end) | |
IO.puts "list of keys and values - again" | |
IO.puts "=======================" | |
Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> IO.puts " #{x.key} is #{x.value} " end) | |
x = Enum.at(structList, 0) | |
IO.inspect x | |
IO.puts " #{x.key} is #{x.value} " | |
sslCmd2 = String.replace(sslCmd, "{{#{x.key}}}", x.value) | |
IO.puts "output enum now" | |
IO.puts "===============" | |
sslCmd = Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> | |
String.replace(sslCmd, "{{#{x.key}}}", x.value) | |
end) | |
# Works now after avoiding sslCmd assignment within loop | |
IO.puts "sslCmd2" | |
IO.puts "=======================" | |
IO.puts sslCmd2 | |
IO.puts "sslCmd" | |
IO.puts "=======================" | |
IO.puts sslCmd | |
%{"key" => "ca_cert_subj_organization","value" => "Elixir Programs Forum","default" => "Big Company","description" => "","label" => "Organisation"}, | |
%{"key" => "ca_cert_subj_org_unit","value" => "IT Department","default" => "Infosystems and Communications","description" => "","label" => "Organisational Unit"} | |
] | |
sslCmd = ''' | |
openssl req -x509 -new -nodes -sha256 \ | |
-key {{key-file-pass}}.key \ | |
-days 3650 \ | |
-out {{key-file-pass}}.pem \ | |
-subj "\ | |
/C={{ca_cert_subj_country}}\ | |
/ST={{ca_cert_subj_state}}\ | |
/L={{ca_cert_subj_location}}\ | |
/O={{ca_cert_subj_organization}}\ | |
/OU={{ca_cert_subj_org_unit}}\ | |
/CN={{ca_cert_subj_common_name}}\ | |
/emailAddress={{ca_cert_email}}\ | |
''' | |
structList = ProcessList.parse_list(params) | |
#IO.inspect ProcessList.parse_list(params) | |
# [first | _ ] = ProcessList.parse_list(params) | |
# IO.puts " #{first.key} is #{first.value} " | |
# IO.inspect first | |
IO.puts sslCmd | |
Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> IO.puts " #{x.key} is #{x.value} " end) | |
#This code causes a syntax error | |
Enum.reduce(structList, sslCmd, fn(x, sslCmd) -> String.replace(sslCmd, "{{"<> x.key <> "}}", x.value) end) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment