conf.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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(driver, type, conf)
  29. template =
  30. '<% confs = [ @conf ].flatten(1)
  31. confs.each do |conf| -%>
  32. <%= @type %> {
  33. <% unless conf.has_key?("driver") -%>
  34. driver = <%= @driver %>
  35. <% end -%>
  36. <% conf.sort.each do |key, value|
  37. unless value.nil?
  38. -%>
  39. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  40. <% end
  41. end
  42. end -%>
  43. }'
  44. eruby = Erubis::Eruby.new(template)
  45. eruby.evaluate(
  46. :driver => driver,
  47. :type => type,
  48. :conf => conf,
  49. :Dovecot_Conf => Dovecot::Conf
  50. )
  51. end
  52. def self.plugin(name, conf)
  53. template =
  54. 'plugin {
  55. <% @conf.sort.each do |key, value|
  56. unless value.nil?
  57. -%>
  58. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  59. <% end
  60. end -%>
  61. }'
  62. eruby = Erubis::Eruby.new(template)
  63. eruby.evaluate(
  64. :conf => conf,
  65. :Dovecot_Conf => Dovecot::Conf
  66. )
  67. end
  68. def self.namespace(ns)
  69. template =
  70. 'namespace <%= @ns["name"] %> {
  71. <% @ns.sort.each do |key, value|
  72. if key != "name"
  73. -%>
  74. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  75. <% end
  76. end
  77. -%>
  78. }'
  79. eruby = Erubis::Eruby.new(template)
  80. eruby.evaluate(
  81. :ns => ns,
  82. :Dovecot_Conf => Dovecot::Conf
  83. )
  84. end
  85. def self.protocol(name, conf)
  86. template =
  87. 'protocol <%= @name %> {
  88. <% @conf.sort.each do |key, value| -%>
  89. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  90. <% end -%>
  91. }'
  92. eruby = Erubis::Eruby.new(template)
  93. eruby.evaluate(
  94. :name => name,
  95. :conf => conf,
  96. :Dovecot_Conf => Dovecot::Conf
  97. )
  98. end
  99. def self.service(name, conf)
  100. template =
  101. 'service <%= @name %> {
  102. <% if @conf["listeners"].kind_of?(Array) or @conf["listeners"].kind_of?(Hash)
  103. listeners = [ @conf["listeners"] ].flatten(1)
  104. listeners.each do |listener|
  105. listener.sort.each do |service, values|
  106. service_proto = service.split(":")[0]
  107. service_name = service.split(":")[1]
  108. -%>
  109. <%= service_proto %>_listener <%= service_name %> {
  110. <% values.sort.each do |key, value|-%>
  111. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  112. <% end -%>
  113. }
  114. <% end -%>
  115. <% end -%>
  116. <% end -%>
  117. <% @conf.sort.each do |key, value|
  118. if key != "listeners"
  119. -%>
  120. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  121. <% end -%>
  122. <% end -%>
  123. }'
  124. eruby = Erubis::Eruby.new(template)
  125. eruby.evaluate(
  126. :name => name,
  127. :conf => conf,
  128. :Dovecot_Conf => Dovecot::Conf
  129. )
  130. end
  131. def self.map(map)
  132. template =
  133. 'map {
  134. <% @map.sort.each do |k, v|
  135. if v.kind_of?(Hash)
  136. -%>
  137. <%= k %> {
  138. <%
  139. v.sort.each do |k2, v2|
  140. -%>
  141. <%= k2 %> = <%= @Dovecot_Conf.value(v2) %>
  142. <% end -%>
  143. }
  144. <% else -%>
  145. <%= k %> = <%= @Dovecot_Conf.value(v) %>
  146. <% end
  147. end
  148. -%>
  149. }'
  150. eruby = Erubis::Eruby.new(template)
  151. eruby.evaluate(
  152. :map => map,
  153. :Dovecot_Conf => Dovecot::Conf
  154. )
  155. end
  156. end
  157. end