conf.rb 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. '<%= @type %> {
  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. :type => type,
  41. :conf => conf,
  42. :Dovecot_Conf => Dovecot::Conf
  43. )
  44. end
  45. def self.plugin(name, conf)
  46. template =
  47. 'plugin {
  48. <% @conf.each do |key, value|
  49. unless value.nil?
  50. -%>
  51. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  52. <% end
  53. end -%>
  54. }'
  55. eruby = Erubis::Eruby.new(template)
  56. eruby.evaluate(
  57. :conf => conf,
  58. :Dovecot_Conf => Dovecot::Conf
  59. )
  60. end
  61. def self.namespace(ns)
  62. template =
  63. 'namespace <%= @ns["name"] %> {
  64. <% @ns.each do |key, value|
  65. if key != "name"
  66. -%>
  67. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  68. <% end
  69. end
  70. -%>
  71. }'
  72. eruby = Erubis::Eruby.new(template)
  73. eruby.evaluate(
  74. :ns => ns,
  75. :Dovecot_Conf => Dovecot::Conf
  76. )
  77. end
  78. def self.protocol(name, conf)
  79. template =
  80. 'protocol <%= @name %> {
  81. <% @conf.each do |key, value| -%>
  82. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  83. <% end -%>
  84. }'
  85. eruby = Erubis::Eruby.new(template)
  86. eruby.evaluate(
  87. :name => name,
  88. :conf => conf,
  89. :Dovecot_Conf => Dovecot::Conf
  90. )
  91. end
  92. def self.service(name, conf)
  93. template =
  94. 'service <%= @name %> {
  95. <% if @conf["listeners"].kind_of?(Array)
  96. @conf["listeners"].each do |listener|
  97. listener.each do |service, values|
  98. service_proto = service.split(":")[0]
  99. service_name = service.split(":")[1]
  100. -%>
  101. <%= service_proto %>_listener <%= service_name %> {
  102. <% values.each do |key, value|-%>
  103. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  104. <% end -%>
  105. }
  106. <% end -%>
  107. <% end -%>
  108. <% end -%>
  109. <% @conf.each do |key, value|
  110. if key != "listeners"
  111. -%>
  112. <%= key %> = <%= @Dovecot_Conf.value(value) %>
  113. <% end -%>
  114. <% end -%>
  115. }'
  116. eruby = Erubis::Eruby.new(template)
  117. eruby.evaluate(
  118. :name => name,
  119. :conf => conf,
  120. :Dovecot_Conf => Dovecot::Conf
  121. )
  122. end
  123. end
  124. end