conf.rb 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. require 'erubis'
  2. module Dovecot
  3. module Conf
  4. def self.value(v, default = nil)
  5. if v.nil?
  6. default.to_s
  7. elsif v === true
  8. 'yes'
  9. elsif v === false
  10. 'no'
  11. elsif v.kind_of?(Array)
  12. v.join(' ')
  13. else
  14. v.to_s
  15. end
  16. end
  17. def self.attribute(conf, k, default = nil)
  18. v = conf[k]
  19. if v.nil?
  20. "##{k} = #{value(default)}"
  21. else
  22. "#{k} = #{value(v)}"
  23. end
  24. end
  25. def self.protocols(conf)
  26. Dovecot::Protocols.list(conf).join(' ')
  27. end
  28. def self.authdb(type, conf)
  29. template =
  30. '<% confs = [ @conf ].flatten
  31. confs.each do |conf| -%>
  32. <%= @type %> {
  33. <% conf.each do |key, value|
  34. unless value.nil?
  35. -%>
  36. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  37. <% end
  38. end
  39. end -%>
  40. }'
  41. eruby = Erubis::Eruby.new(template)
  42. eruby.evaluate(
  43. :type => type,
  44. :conf => conf,
  45. :Dovecot_Conf => Dovecot::Conf
  46. )
  47. end
  48. def self.plugin(name, conf)
  49. template =
  50. 'plugin {
  51. <% @conf.each do |key, value|
  52. unless value.nil?
  53. -%>
  54. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  55. <% end
  56. end -%>
  57. }'
  58. eruby = Erubis::Eruby.new(template)
  59. eruby.evaluate(
  60. :conf => conf,
  61. :Dovecot_Conf => Dovecot::Conf
  62. )
  63. end
  64. def self.namespace(ns)
  65. template =
  66. 'namespace <%= @ns["name"] %> {
  67. <% @ns.each do |key, value|
  68. if key != "name"
  69. -%>
  70. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  71. <% end
  72. end
  73. -%>
  74. }'
  75. eruby = Erubis::Eruby.new(template)
  76. eruby.evaluate(
  77. :ns => ns,
  78. :Dovecot_Conf => Dovecot::Conf
  79. )
  80. end
  81. def self.protocol(name, conf)
  82. template =
  83. 'protocol <%= @name %> {
  84. <% @conf.each do |key, value| -%>
  85. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  86. <% end -%>
  87. }'
  88. eruby = Erubis::Eruby.new(template)
  89. eruby.evaluate(
  90. :name => name,
  91. :conf => conf,
  92. :Dovecot_Conf => Dovecot::Conf
  93. )
  94. end
  95. def self.service(name, conf)
  96. template =
  97. 'service <%= @name %> {
  98. <% if @conf["listeners"].kind_of?(Array)
  99. @conf["listeners"].each do |listener|
  100. listener.each do |service, values|
  101. service_proto = service.split(":")[0]
  102. service_name = service.split(":")[1]
  103. -%>
  104. <%= service_proto %>_listener <%= service_name %> {
  105. <% values.each do |key, value|-%>
  106. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  107. <% end -%>
  108. }
  109. <% end -%>
  110. <% end -%>
  111. <% end -%>
  112. <% @conf.each do |key, value|
  113. if key != "listeners"
  114. -%>
  115. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  116. <% end -%>
  117. <% end -%>
  118. }'
  119. eruby = Erubis::Eruby.new(template)
  120. eruby.evaluate(
  121. :name => name,
  122. :conf => conf,
  123. :Dovecot_Conf => Dovecot::Conf
  124. )
  125. end
  126. end
  127. end