conf.rb 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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.plugin(name, conf)
  29. template =
  30. 'plugin {
  31. <% @conf.each do |key, value|
  32. unless value.nil?
  33. -%>
  34. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  35. <% end
  36. end -%>
  37. }'
  38. eruby = Erubis::Eruby.new(template)
  39. eruby.evaluate(
  40. :conf => conf,
  41. :Dovecot_Conf => Dovecot::Conf
  42. )
  43. end
  44. def self.service(name, conf)
  45. template =
  46. 'service <%= @name %> {
  47. <% if @conf["listeners"].kind_of?(Array)
  48. @conf["listeners"].each do |listener|
  49. listener.each do |service, values|
  50. service_proto = service.split(":")[0]
  51. service_name = service.split(":")[1]
  52. -%>
  53. <%= service_proto %>_listener <%= service_name %> {
  54. <% values.each do |key, value|-%>
  55. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  56. <% end -%>
  57. }
  58. <% end -%>
  59. <% end -%>
  60. <% end -%>
  61. <% @conf.each do |key, value|
  62. if key != "listeners"
  63. -%>
  64. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  65. <% end -%>
  66. <% end -%>
  67. }'
  68. eruby = Erubis::Eruby.new(template)
  69. eruby.evaluate(
  70. :name => name,
  71. :conf => conf,
  72. :Dovecot_Conf => Dovecot::Conf
  73. )
  74. end
  75. end
  76. end