Example ======= require 'funfig' UploadConf = Funfig.new do p.root '/services' g.nginx do p.folder { File.join(_.root, 'nginx') } p.port '8000' end p.public_ip_port '*:80' end conf = UploadConf.new p conf.nginx.folder conf.root = "~/MailProject/upload" p conf.nginx.folder conf.each {|k,v| puts "#{k} #{v}"} p conf p conf.to_hash() p conf.to_hash(true) Up1Conf = UploadConf.clone do g.nginx do p.folder { File.join(_.root, 'nganx') } p.location '/public' end end conf1 = Up1Conf.new conf1.update(conf.to_hash()) p conf1 conf1.nginx_reset! p conf1 TODO ==== 1. define array of same kinds Conf = Funfig.new do p.port 8000 p.folder '/folder' array :servers do p.port { _parent.port + _pos } p.folder { File.join(_parent.folder, _pos.to_s) } end a.servers1 do p.port { _parent.port + _pos } p.folder { File.join(_parent.folder, _pos.to_s) } end end 2. define hash of same kinds Conf = Funfig.new do hash :environments do p.host 'localhost' p.database { "mybase_#{_name}" } end h.environments1 do p.host 'localhost' p.database { "mybase_#{_name}" } end end 3. Correct composition of schemes ConfServ = Funfig.new do p.port 80 p.ip '192.168.168.192' end ConfApp = Funfig.new do p.path '/srv/path' g.server ConfServ do p.path { _.path } end end