mail_engine 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. data/.yardoc/checksums +17 -0
  2. data/.yardoc/objects/ActionMailer/Base/collect_responses_and_parts_order_i.dat +0 -0
  3. data/.yardoc/objects/ActionMailer/Base/mail_i.dat +0 -0
  4. data/.yardoc/objects/ActionMailer/Base/origin_mail_i.dat +0 -0
  5. data/.yardoc/objects/ActionMailer/Base/set_layout_and_partials_i.dat +0 -0
  6. data/.yardoc/objects/ActionMailer/Base.dat +0 -0
  7. data/.yardoc/objects/ActionMailer/Collector/custom_i.dat +0 -0
  8. data/.yardoc/objects/ActionMailer/Collector.dat +0 -0
  9. data/.yardoc/objects/ActionMailer.dat +0 -0
  10. data/.yardoc/objects/MailEngine/ActsAsMailReceiver/ClassMethods/acts_as_mail_receiver_i.dat +0 -0
  11. data/.yardoc/objects/MailEngine/ActsAsMailReceiver/ClassMethods.dat +0 -0
  12. data/.yardoc/objects/MailEngine/ActsAsMailReceiver.dat +0 -0
  13. data/.yardoc/objects/MailEngine/Base/_40_40configurations.dat +0 -0
  14. data/.yardoc/objects/MailEngine/Base/current_config_c.dat +0 -0
  15. data/.yardoc/objects/MailEngine/Base/send_mail_c.dat +0 -0
  16. data/.yardoc/objects/MailEngine/Base.dat +0 -0
  17. data/.yardoc/objects/MailEngine/Configuration/load_c.dat +0 -0
  18. data/.yardoc/objects/MailEngine/Configuration.dat +0 -0
  19. data/.yardoc/objects/MailEngine/CreateConfig/create_config_file_i.dat +0 -0
  20. data/.yardoc/objects/MailEngine/CreateConfig.dat +0 -0
  21. data/.yardoc/objects/MailEngine/CreateMigration/create_migrations_i.dat +0 -0
  22. data/.yardoc/objects/MailEngine/CreateMigration.dat +0 -0
  23. data/.yardoc/objects/MailEngine/Engine.dat +0 -0
  24. data/.yardoc/objects/MailEngine/HtmlDocumentAssetsReplacer/check_21_c.dat +0 -0
  25. data/.yardoc/objects/MailEngine/HtmlDocumentAssetsReplacer/process_c.dat +0 -0
  26. data/.yardoc/objects/MailEngine/HtmlDocumentAssetsReplacer/replace_resource_filename_in_html_c.dat +0 -0
  27. data/.yardoc/objects/MailEngine/HtmlDocumentAssetsReplacer/replace_resource_url_in_html_c.dat +0 -0
  28. data/.yardoc/objects/MailEngine/HtmlDocumentAssetsReplacer.dat +0 -0
  29. data/.yardoc/objects/MailEngine/MailLogSubscriber/deliver_i.dat +0 -0
  30. data/.yardoc/objects/MailEngine/MailLogSubscriber.dat +0 -0
  31. data/.yardoc/objects/MailEngine/Sendgrid/Base/ClassMethods/sendgrid_header_i.dat +0 -0
  32. data/.yardoc/objects/MailEngine/Sendgrid/Base/ClassMethods.dat +0 -0
  33. data/.yardoc/objects/MailEngine/Sendgrid/Base/InstanceMethods.dat +0 -0
  34. data/.yardoc/objects/MailEngine/Sendgrid/Base.dat +0 -0
  35. data/.yardoc/objects/MailEngine/Sendgrid/FilterSetting/data_3D_i.dat +0 -0
  36. data/.yardoc/objects/MailEngine/Sendgrid/FilterSetting/data_i.dat +0 -0
  37. data/.yardoc/objects/MailEngine/Sendgrid/FilterSetting/initialize_i.dat +0 -0
  38. data/.yardoc/objects/MailEngine/Sendgrid/FilterSetting/validate_config_21_i.dat +0 -0
  39. data/.yardoc/objects/MailEngine/Sendgrid/FilterSetting.dat +0 -0
  40. data/.yardoc/objects/MailEngine/Sendgrid/RestApi/blocks_c.dat +0 -0
  41. data/.yardoc/objects/MailEngine/Sendgrid/RestApi/bounces_c.dat +0 -0
  42. data/.yardoc/objects/MailEngine/Sendgrid/RestApi/invalidemails_c.dat +0 -0
  43. data/.yardoc/objects/MailEngine/Sendgrid/RestApi/spamreports_c.dat +0 -0
  44. data/.yardoc/objects/MailEngine/Sendgrid/RestApi/stats_c.dat +0 -0
  45. data/.yardoc/objects/MailEngine/Sendgrid/RestApi.dat +0 -0
  46. data/.yardoc/objects/MailEngine/Sendgrid/RestApiError.dat +0 -0
  47. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/add_sub_val_i.dat +0 -0
  48. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/add_to_i.dat +0 -0
  49. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/category_i.dat +0 -0
  50. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/filters_i.dat +0 -0
  51. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/initialize_i.dat +0 -0
  52. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/set_unique_args_i.dat +0 -0
  53. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/to_hash_i.dat +0 -0
  54. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/to_json_i.dat +0 -0
  55. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi/to_s_i.dat +0 -0
  56. data/.yardoc/objects/MailEngine/Sendgrid/SmtpApi.dat +0 -0
  57. data/.yardoc/objects/MailEngine/Sendgrid.dat +0 -0
  58. data/.yardoc/objects/MailEngine/VERSION.dat +0 -0
  59. data/.yardoc/objects/MailEngine/ZipProcessor/extract_all_files_c.dat +0 -0
  60. data/.yardoc/objects/MailEngine/ZipProcessor.dat +0 -0
  61. data/.yardoc/objects/MailEngine.dat +0 -0
  62. data/.yardoc/objects/PLACEHOLDERS_IN_LAYOUT.dat +0 -0
  63. data/.yardoc/objects/root.dat +0 -0
  64. data/.yardoc/proxy_types +0 -0
  65. data/Gemfile +36 -0
  66. data/Gemfile.lock +159 -0
  67. data/MIT-LICENSE +20 -0
  68. data/README.mkd +152 -0
  69. data/Rakefile +57 -0
  70. data/VERSION +1 -0
  71. data/app/controllers/mail_engine/application_controller.rb +7 -0
  72. data/app/controllers/mail_engine/dashboard_controller.rb +9 -0
  73. data/app/controllers/mail_engine/mail_logs_controller.rb +20 -0
  74. data/app/controllers/mail_engine/mail_schedules_controller.rb +56 -0
  75. data/app/controllers/mail_engine/mail_template_files_controller.rb +46 -0
  76. data/app/controllers/mail_engine/mail_templates_controller.rb +141 -0
  77. data/app/controllers/mail_engine/reports_controller.rb +34 -0
  78. data/app/helpers/mail_engine/mail_engine_helper.rb +30 -0
  79. data/app/mailers/mail_engine/mail_dispatcher.rb +59 -0
  80. data/app/models/mail_engine/mail_log.rb +36 -0
  81. data/app/models/mail_engine/mail_schedule.rb +70 -0
  82. data/app/models/mail_engine/mail_template.rb +270 -0
  83. data/app/models/mail_engine/mail_template_file.rb +31 -0
  84. data/app/models/mail_engine/template_partial.rb +9 -0
  85. data/app/uploaders/mail_engine/template_file_uploader.rb +47 -0
  86. data/app/uploaders/mail_engine/zip_file_uploader.rb +47 -0
  87. data/app/views/layouts/mail_engine/mail_engine.html.erb +112 -0
  88. data/app/views/layouts/mail_engine/mail_template_layouts/header_and_footer.html.erb +10 -0
  89. data/app/views/layouts/mail_engine/mail_template_layouts/header_and_footer.text.erb +3 -0
  90. data/app/views/layouts/mail_engine/mail_template_layouts/none.html.erb +8 -0
  91. data/app/views/layouts/mail_engine/mail_template_layouts/none.text.erb +1 -0
  92. data/app/views/layouts/mail_engine/mail_template_layouts/only_footer.html.erb +9 -0
  93. data/app/views/layouts/mail_engine/mail_template_layouts/only_footer.text.erb +2 -0
  94. data/app/views/mail_engine/dashboard/index.html.erb +64 -0
  95. data/app/views/mail_engine/mail_logs/index.html.erb +34 -0
  96. data/app/views/mail_engine/mail_logs/show.html.erb +38 -0
  97. data/app/views/mail_engine/mail_schedules/_form.html.erb +45 -0
  98. data/app/views/mail_engine/mail_schedules/edit.html.erb +16 -0
  99. data/app/views/mail_engine/mail_schedules/index.html.erb +50 -0
  100. data/app/views/mail_engine/mail_schedules/new.html.erb +13 -0
  101. data/app/views/mail_engine/mail_schedules/show.html.erb +44 -0
  102. data/app/views/mail_engine/mail_template_files/_form.html.erb +28 -0
  103. data/app/views/mail_engine/mail_template_files/edit.html.erb +9 -0
  104. data/app/views/mail_engine/mail_template_files/new.html.erb +9 -0
  105. data/app/views/mail_engine/mail_templates/_form.html.erb +97 -0
  106. data/app/views/mail_engine/mail_templates/_layout_selector.html.erb +50 -0
  107. data/app/views/mail_engine/mail_templates/duplicate.html.erb +41 -0
  108. data/app/views/mail_engine/mail_templates/edit.html.erb +16 -0
  109. data/app/views/mail_engine/mail_templates/index.html.erb +69 -0
  110. data/app/views/mail_engine/mail_templates/new.html.erb +12 -0
  111. data/app/views/mail_engine/mail_templates/new_by_upload.html.erb +63 -0
  112. data/app/views/mail_engine/mail_templates/partial_options.html.erb +28 -0
  113. data/app/views/mail_engine/mail_templates/preview.html.erb +1 -0
  114. data/app/views/mail_engine/mail_templates/preview.text.erb +1 -0
  115. data/app/views/mail_engine/mail_templates/show.html.erb +64 -0
  116. data/app/views/mail_engine/reports/charts/blocks.html.erb +21 -0
  117. data/app/views/mail_engine/reports/charts/bounces.html.erb +21 -0
  118. data/app/views/mail_engine/reports/charts/invalidemails.html.erb +19 -0
  119. data/app/views/mail_engine/reports/charts/spamreports.html.erb +17 -0
  120. data/app/views/mail_engine/reports/index.html.erb +67 -0
  121. data/config/routes.rb +48 -0
  122. data/db/migrate/20110114030841_create_table_mail_template.rb +22 -0
  123. data/db/migrate/20110126030525_create_mail_schedules.rb +21 -0
  124. data/db/migrate/20110204114145_create_template_partials.rb +13 -0
  125. data/db/migrate/20110206025002_create_mail_logs.rb +17 -0
  126. data/db/migrate/20110217062316_create_mail_template_files.rb +14 -0
  127. data/doc/_index.html +322 -0
  128. data/doc/class_list.html +36 -0
  129. data/doc/css/common.css +1 -0
  130. data/doc/css/full_list.css +53 -0
  131. data/doc/css/style.css +310 -0
  132. data/doc/file_list.html +38 -0
  133. data/doc/frames.html +13 -0
  134. data/doc/js/app.js +203 -0
  135. data/doc/js/full_list.js +149 -0
  136. data/doc/js/jquery.js +154 -0
  137. data/doc/method_list.html +283 -0
  138. data/lib/mail_engine/action_mailer_patch.rb +104 -0
  139. data/lib/mail_engine/acts_as_mail_receiver.rb +22 -0
  140. data/lib/mail_engine/base.rb +26 -0
  141. data/lib/mail_engine/configuration.rb +11 -0
  142. data/lib/mail_engine/engine.rb +42 -0
  143. data/lib/mail_engine/generators/create_config.rb +20 -0
  144. data/lib/mail_engine/generators/create_migration.rb +20 -0
  145. data/lib/mail_engine/generators/templates/mail_engine_config.yml +14 -0
  146. data/lib/mail_engine/html_document_assets_replacer.rb +86 -0
  147. data/lib/mail_engine/mail_log_subscriber.rb +30 -0
  148. data/lib/mail_engine/placeholders_in_layout.rb +5 -0
  149. data/lib/mail_engine/sendgrid/base.rb +45 -0
  150. data/lib/mail_engine/sendgrid/rest_api.rb +85 -0
  151. data/lib/mail_engine/sendgrid/smtp_api.rb +85 -0
  152. data/lib/mail_engine/sendgrid.rb +9 -0
  153. data/lib/mail_engine/tasks/sendmail.rake +8 -0
  154. data/lib/mail_engine/version.rb +3 -0
  155. data/lib/mail_engine/zip_processor.rb +51 -0
  156. data/lib/mail_engine.rb +17 -0
  157. data/mail_engine.gemspec +422 -0
  158. data/screenshots/bounce_report.png +0 -0
  159. data/screenshots/dashboard.png +0 -0
  160. data/screenshots/editing_mail_template.png +0 -0
  161. data/screenshots/logs.png +0 -0
  162. data/screenshots/new_by_upload.png +0 -0
  163. data/screenshots/reports.png +0 -0
  164. data/screenshots/schedule.png +0 -0
  165. data/screenshots/select_layout_partial.png +0 -0
  166. data/screenshots/templates.png +0 -0
  167. data/test/dummy/Rakefile +7 -0
  168. data/test/dummy/app/controllers/application_controller.rb +11 -0
  169. data/test/dummy/app/helpers/application_helper.rb +2 -0
  170. data/test/dummy/app/mailers/user_mailer.rb +36 -0
  171. data/test/dummy/app/models/user.rb +10 -0
  172. data/test/dummy/config/application.rb +52 -0
  173. data/test/dummy/config/boot.rb +10 -0
  174. data/test/dummy/config/database.yml +52 -0
  175. data/test/dummy/config/environment.rb +5 -0
  176. data/test/dummy/config/environments/development.rb +47 -0
  177. data/test/dummy/config/environments/production.rb +49 -0
  178. data/test/dummy/config/environments/test.rb +43 -0
  179. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  180. data/test/dummy/config/initializers/inflections.rb +10 -0
  181. data/test/dummy/config/initializers/mime_types.rb +5 -0
  182. data/test/dummy/config/initializers/secret_token.rb +7 -0
  183. data/test/dummy/config/initializers/session_store.rb +8 -0
  184. data/test/dummy/config/locales/en.yml +5 -0
  185. data/test/dummy/config/locales/zh.yml +2 -0
  186. data/test/dummy/config/routes.rb +58 -0
  187. data/test/dummy/config.ru +4 -0
  188. data/test/dummy/db/migrate/20110114030841_create_table_mail_template.rb +22 -0
  189. data/test/dummy/db/migrate/20110125094530_create_users.rb +16 -0
  190. data/test/dummy/db/migrate/20110126030525_create_mail_schedules.rb +21 -0
  191. data/test/dummy/db/migrate/20110204114145_create_template_partials.rb +13 -0
  192. data/test/dummy/db/migrate/20110206025002_create_mail_logs.rb +17 -0
  193. data/test/dummy/db/migrate/20110217062316_create_mail_template_files.rb +14 -0
  194. data/test/dummy/db/schema.rb +78 -0
  195. data/test/dummy/public/404.html +26 -0
  196. data/test/dummy/public/422.html +26 -0
  197. data/test/dummy/public/500.html +26 -0
  198. data/test/dummy/public/favicon.ico +0 -0
  199. data/test/dummy/public/images/mail_engine/header_and_footer_layout.png +0 -0
  200. data/test/dummy/public/images/mail_engine/logo.gif +0 -0
  201. data/test/dummy/public/images/mail_engine/logo.png +0 -0
  202. data/test/dummy/public/images/mail_engine/none_layout.png +0 -0
  203. data/test/dummy/public/images/mail_engine/only_footer_layout.png +0 -0
  204. data/test/dummy/public/images/mail_engine/unselect_header_and_footer_layout.png +0 -0
  205. data/test/dummy/public/images/mail_engine/unselect_none_layout.png +0 -0
  206. data/test/dummy/public/images/mail_engine/unselect_only_footer_layout.png +0 -0
  207. data/test/dummy/public/javascripts/jquery.iframe-auto-height.plugin.js +50 -0
  208. data/test/dummy/public/javascripts/jquery.js +16 -0
  209. data/test/dummy/public/javascripts/jquery.nyroModal/img/ajaxLoader.gif +0 -0
  210. data/test/dummy/public/javascripts/jquery.nyroModal/img/close.gif +0 -0
  211. data/test/dummy/public/javascripts/jquery.nyroModal/img/next.gif +0 -0
  212. data/test/dummy/public/javascripts/jquery.nyroModal/img/prev.gif +0 -0
  213. data/test/dummy/public/javascripts/jquery.nyroModal/js/jquery.nyroModal-ie6.js +186 -0
  214. data/test/dummy/public/javascripts/jquery.nyroModal/js/jquery.nyroModal-ie6.min.js +9 -0
  215. data/test/dummy/public/javascripts/jquery.nyroModal/js/jquery.nyroModal.custom.js +1599 -0
  216. data/test/dummy/public/javascripts/jquery.nyroModal/js/jquery.nyroModal.custom.min.js +34 -0
  217. data/test/dummy/public/javascripts/jquery.nyroModal/styles/nyroModal.css +102 -0
  218. data/test/dummy/public/javascripts/jquery.string.js +425 -0
  219. data/test/dummy/public/javascripts/mail_engine_application.js +2 -0
  220. data/test/dummy/public/javascripts/markitup/jquery.markitup.js +564 -0
  221. data/test/dummy/public/javascripts/markitup/sets/css/images/bold.png +0 -0
  222. data/test/dummy/public/javascripts/markitup/sets/css/images/css.png +0 -0
  223. data/test/dummy/public/javascripts/markitup/sets/css/images/italic.png +0 -0
  224. data/test/dummy/public/javascripts/markitup/sets/css/images/picture.png +0 -0
  225. data/test/dummy/public/javascripts/markitup/sets/css/images/stroke.png +0 -0
  226. data/test/dummy/public/javascripts/markitup/sets/css/images/tag.png +0 -0
  227. data/test/dummy/public/javascripts/markitup/sets/css/images/text_align_center.png +0 -0
  228. data/test/dummy/public/javascripts/markitup/sets/css/images/text_align_justify.png +0 -0
  229. data/test/dummy/public/javascripts/markitup/sets/css/images/text_align_left.png +0 -0
  230. data/test/dummy/public/javascripts/markitup/sets/css/images/text_align_right.png +0 -0
  231. data/test/dummy/public/javascripts/markitup/sets/css/images/text_indent.png +0 -0
  232. data/test/dummy/public/javascripts/markitup/sets/css/images/text_letterspacing.png +0 -0
  233. data/test/dummy/public/javascripts/markitup/sets/css/images/text_linespacing.png +0 -0
  234. data/test/dummy/public/javascripts/markitup/sets/css/images/text_lowercase.png +0 -0
  235. data/test/dummy/public/javascripts/markitup/sets/css/images/text_padding_bottom.png +0 -0
  236. data/test/dummy/public/javascripts/markitup/sets/css/images/text_padding_left.png +0 -0
  237. data/test/dummy/public/javascripts/markitup/sets/css/images/text_padding_right.png +0 -0
  238. data/test/dummy/public/javascripts/markitup/sets/css/images/text_padding_top.png +0 -0
  239. data/test/dummy/public/javascripts/markitup/sets/css/images/text_uppercase.png +0 -0
  240. data/test/dummy/public/javascripts/markitup/sets/css/readme.txt +28 -0
  241. data/test/dummy/public/javascripts/markitup/sets/css/set.js +52 -0
  242. data/test/dummy/public/javascripts/markitup/sets/css/style.css +72 -0
  243. data/test/dummy/public/javascripts/markitup/sets/default/images/bold.png +0 -0
  244. data/test/dummy/public/javascripts/markitup/sets/default/images/clean.png +0 -0
  245. data/test/dummy/public/javascripts/markitup/sets/default/images/image.png +0 -0
  246. data/test/dummy/public/javascripts/markitup/sets/default/images/italic.png +0 -0
  247. data/test/dummy/public/javascripts/markitup/sets/default/images/link.png +0 -0
  248. data/test/dummy/public/javascripts/markitup/sets/default/images/picture.png +0 -0
  249. data/test/dummy/public/javascripts/markitup/sets/default/images/preview.png +0 -0
  250. data/test/dummy/public/javascripts/markitup/sets/default/images/stroke.png +0 -0
  251. data/test/dummy/public/javascripts/markitup/sets/default/set.js +27 -0
  252. data/test/dummy/public/javascripts/markitup/sets/default/style.css +27 -0
  253. data/test/dummy/public/javascripts/markitup/sets/html/images/bold.png +0 -0
  254. data/test/dummy/public/javascripts/markitup/sets/html/images/clean.png +0 -0
  255. data/test/dummy/public/javascripts/markitup/sets/html/images/h1.png +0 -0
  256. data/test/dummy/public/javascripts/markitup/sets/html/images/h2.png +0 -0
  257. data/test/dummy/public/javascripts/markitup/sets/html/images/h3.png +0 -0
  258. data/test/dummy/public/javascripts/markitup/sets/html/images/h4.png +0 -0
  259. data/test/dummy/public/javascripts/markitup/sets/html/images/h5.png +0 -0
  260. data/test/dummy/public/javascripts/markitup/sets/html/images/h6.png +0 -0
  261. data/test/dummy/public/javascripts/markitup/sets/html/images/image.png +0 -0
  262. data/test/dummy/public/javascripts/markitup/sets/html/images/italic.png +0 -0
  263. data/test/dummy/public/javascripts/markitup/sets/html/images/link.png +0 -0
  264. data/test/dummy/public/javascripts/markitup/sets/html/images/list-bullet.png +0 -0
  265. data/test/dummy/public/javascripts/markitup/sets/html/images/list-item.png +0 -0
  266. data/test/dummy/public/javascripts/markitup/sets/html/images/list-numeric.png +0 -0
  267. data/test/dummy/public/javascripts/markitup/sets/html/images/paragraph.png +0 -0
  268. data/test/dummy/public/javascripts/markitup/sets/html/images/picture.png +0 -0
  269. data/test/dummy/public/javascripts/markitup/sets/html/images/preview.png +0 -0
  270. data/test/dummy/public/javascripts/markitup/sets/html/images/stroke.png +0 -0
  271. data/test/dummy/public/javascripts/markitup/sets/html/readme.txt +11 -0
  272. data/test/dummy/public/javascripts/markitup/sets/html/set.js +40 -0
  273. data/test/dummy/public/javascripts/markitup/sets/html/style.css +59 -0
  274. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-container.png +0 -0
  275. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-bbcode.png +0 -0
  276. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-dotclear.png +0 -0
  277. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-html.png +0 -0
  278. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-json.png +0 -0
  279. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-markdown.png +0 -0
  280. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-textile.png +0 -0
  281. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-wiki.png +0 -0
  282. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor-xml.png +0 -0
  283. data/test/dummy/public/javascripts/markitup/skins/markitup/images/bg-editor.png +0 -0
  284. data/test/dummy/public/javascripts/markitup/skins/markitup/images/handle.png +0 -0
  285. data/test/dummy/public/javascripts/markitup/skins/markitup/images/menu.png +0 -0
  286. data/test/dummy/public/javascripts/markitup/skins/markitup/images/submenu.png +0 -0
  287. data/test/dummy/public/javascripts/markitup/skins/markitup/style.css +147 -0
  288. data/test/dummy/public/javascripts/markitup/skins/simple/images/handle.png +0 -0
  289. data/test/dummy/public/javascripts/markitup/skins/simple/images/menu.png +0 -0
  290. data/test/dummy/public/javascripts/markitup/skins/simple/images/submenu.png +0 -0
  291. data/test/dummy/public/javascripts/markitup/skins/simple/style.css +118 -0
  292. data/test/dummy/public/javascripts/markitup/templates/preview.css +5 -0
  293. data/test/dummy/public/javascripts/markitup/templates/preview.html +11 -0
  294. data/test/dummy/public/javascripts/rails.js +132 -0
  295. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  296. data/test/dummy/public/stylesheets/application.css +0 -0
  297. data/test/dummy/public/stylesheets/style.css +681 -0
  298. data/test/dummy/script/rails +6 -0
  299. data/test/factories.rb +88 -0
  300. data/test/fixtures/files/compress_by_dir.zip +0 -0
  301. data/test/fixtures/files/compress_by_file.zip +0 -0
  302. data/test/fixtures/files/image.png +0 -0
  303. data/test/functional/mail_engine/mail_dispatcher_test.rb +8 -0
  304. data/test/functional/mail_engine/mail_schedules_controller_controller_test.rb +8 -0
  305. data/test/functional/mail_engine/mail_templates_controller_controller_test.rb +8 -0
  306. data/test/support/integration_case.rb +5 -0
  307. data/test/test_helper.rb +35 -0
  308. data/test/unit/mail_engine/mail_log_test.rb +8 -0
  309. data/test/unit/mail_engine/mail_schedule_test.rb +40 -0
  310. data/test/unit/mail_engine/mail_template_file_test.rb +21 -0
  311. data/test/unit/mail_engine/mail_template_test.rb +77 -0
  312. data/test/unit/mail_engine/template_partial_test.rb +8 -0
  313. metadata +597 -0
data/.yardoc/checksums ADDED
@@ -0,0 +1,17 @@
1
+ lib/mail_engine/generators/create_migration.rb 668a6289313667bb5bd3a4e3bf9a9109fbd8da79
2
+ lib/mail_engine/sendgrid.rb 9ddb5014301ea6c90f51c53a8f491b81d4fe2e13
3
+ lib/mail_engine/version.rb ef61db17982e6fe17b507089a3bc407c2c511669
4
+ lib/mail_engine/base.rb b973fb0c7c6219333f3cd957d62a71ffb021d8fa
5
+ lib/mail_engine/engine.rb 0708eca7318ec379a9a1e1f8a589e9d8d6c7bc46
6
+ lib/mail_engine/action_mailer_patch.rb 243bfccaeb9cd7e5f9fa75894f2260f73be6698d
7
+ lib/mail_engine/generators/create_config.rb 05cbb67778c9094bf60469ccf32401360d599265
8
+ lib/mail_engine/sendgrid/rest_api.rb 7245e928594306c21d9cbf6f8173d06f0f430e7a
9
+ lib/mail_engine/sendgrid/base.rb 3b5a99c4157a654de4f0888a2b8185c80b4e49f7
10
+ lib/mail_engine/configuration.rb bbe48fd2a4c121b95717c97a79dc8cfe7f1f07e0
11
+ lib/mail_engine/zip_processor.rb 042c1ea78c968b0043cebc21de0c2ed0b66635b2
12
+ lib/mail_engine/mail_log_subscriber.rb a2962e2a22b022d364fcf190ee88f20315be5739
13
+ lib/mail_engine/html_document_assets_replacer.rb 4017f6533368b7cec110cc630d7c5235e0d46ebe
14
+ lib/mail_engine/acts_as_mail_receiver.rb a675dbc5dbdb6701bb60753a19033b272a832237
15
+ lib/mail_engine/sendgrid/smtp_api.rb 36e3486fd4df48866b94f8865ade269295a4cabb
16
+ lib/mail_engine/placeholders_in_layout.rb 5047c9952ab86bf201a523a2cf1db3f442f2531c
17
+ lib/mail_engine.rb 32b4284d58e00764358d9005828dcae9bb9c2647
Binary file
Binary file
Binary file
Binary file
Binary file
data/Gemfile ADDED
@@ -0,0 +1,36 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "3.0.3"
4
+ gem 'mysql'
5
+ gem "liquid", :git => "git://github.com/hlxwell/liquid.git"
6
+ gem "httparty"
7
+ gem 'will_paginate', '~> 3.0.pre2'
8
+ gem "carrierwave"
9
+ gem 'nokogiri'
10
+ gem 'deep_cloneable'
11
+
12
+ # gem "sqlite3-ruby", :require => "sqlite3"
13
+ # gem "mustache"
14
+
15
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
16
+ # gem 'ruby-debug'
17
+ # gem 'ruby-debug19'
18
+
19
+ group :development do
20
+ gem "yard"
21
+ gem "bundler"
22
+ gem "jeweler"
23
+ gem "rcov"
24
+ gem "reek"
25
+ end
26
+
27
+ group :test do
28
+ gem 'timecop'
29
+ gem "capybara", ">= 0.4.0"
30
+ gem "mocha", :require => "mocha"
31
+ gem "fakeweb"
32
+ gem "factory_girl", :require => 'factory_girl', :git => "git://github.com/thoughtbot/factory_girl.git"
33
+ gem "shoulda", :require => 'shoulda'
34
+ gem 'test_benchmarker'
35
+ gem "rack-test", :require => "rack/test"
36
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,159 @@
1
+ GIT
2
+ remote: git://github.com/hlxwell/liquid.git
3
+ revision: d70ed7582215507a579fee8b5e5b3269600f3fb3
4
+ specs:
5
+ liquid (2.2.2)
6
+
7
+ GIT
8
+ remote: git://github.com/thoughtbot/factory_girl.git
9
+ revision: a7f7e85187e9178f4da2db1b87fa38aec6a96178
10
+ specs:
11
+ factory_girl (2.0.0.beta1)
12
+
13
+ GEM
14
+ remote: http://rubygems.org/
15
+ specs:
16
+ abstract (1.0.0)
17
+ actionmailer (3.0.3)
18
+ actionpack (= 3.0.3)
19
+ mail (~> 2.2.9)
20
+ actionpack (3.0.3)
21
+ activemodel (= 3.0.3)
22
+ activesupport (= 3.0.3)
23
+ builder (~> 2.1.2)
24
+ erubis (~> 2.6.6)
25
+ i18n (~> 0.4)
26
+ rack (~> 1.2.1)
27
+ rack-mount (~> 0.6.13)
28
+ rack-test (~> 0.5.6)
29
+ tzinfo (~> 0.3.23)
30
+ activemodel (3.0.3)
31
+ activesupport (= 3.0.3)
32
+ builder (~> 2.1.2)
33
+ i18n (~> 0.4)
34
+ activerecord (3.0.3)
35
+ activemodel (= 3.0.3)
36
+ activesupport (= 3.0.3)
37
+ arel (~> 2.0.2)
38
+ tzinfo (~> 0.3.23)
39
+ activeresource (3.0.3)
40
+ activemodel (= 3.0.3)
41
+ activesupport (= 3.0.3)
42
+ activesupport (3.0.3)
43
+ arel (2.0.4)
44
+ builder (2.1.2)
45
+ capybara (0.4.0)
46
+ celerity (>= 0.7.9)
47
+ culerity (>= 0.2.4)
48
+ mime-types (>= 1.16)
49
+ nokogiri (>= 1.3.3)
50
+ rack (>= 1.0.0)
51
+ rack-test (>= 0.5.4)
52
+ selenium-webdriver (>= 0.0.27)
53
+ xpath (~> 0.1.2)
54
+ carrierwave (0.5.1)
55
+ activesupport (~> 3.0)
56
+ celerity (0.8.4)
57
+ childprocess (0.1.4)
58
+ ffi (~> 0.6.3)
59
+ crack (0.1.8)
60
+ culerity (0.2.12)
61
+ deep_cloneable (1.2.1)
62
+ erubis (2.6.6)
63
+ abstract (>= 1.0.0)
64
+ fakeweb (1.3.0)
65
+ ffi (0.6.3)
66
+ rake (>= 0.8.7)
67
+ git (1.2.5)
68
+ httparty (0.6.1)
69
+ crack (= 0.1.8)
70
+ i18n (0.4.2)
71
+ jeweler (1.5.2)
72
+ bundler (~> 1.0.0)
73
+ git (>= 1.2.5)
74
+ rake
75
+ json_pure (1.4.6)
76
+ mail (2.2.14)
77
+ activesupport (>= 2.3.6)
78
+ i18n (>= 0.4.0)
79
+ mime-types (~> 1.16)
80
+ treetop (~> 1.4.8)
81
+ mime-types (1.16)
82
+ mocha (0.9.10)
83
+ rake
84
+ mysql (2.8.1)
85
+ nokogiri (1.4.4)
86
+ polyglot (0.3.1)
87
+ rack (1.2.1)
88
+ rack-mount (0.6.13)
89
+ rack (>= 1.0.0)
90
+ rack-test (0.5.7)
91
+ rack (>= 1.0)
92
+ rails (3.0.3)
93
+ actionmailer (= 3.0.3)
94
+ actionpack (= 3.0.3)
95
+ activerecord (= 3.0.3)
96
+ activeresource (= 3.0.3)
97
+ activesupport (= 3.0.3)
98
+ bundler (~> 1.0)
99
+ railties (= 3.0.3)
100
+ railties (3.0.3)
101
+ actionpack (= 3.0.3)
102
+ activesupport (= 3.0.3)
103
+ rake (>= 0.8.7)
104
+ thor (~> 0.14.4)
105
+ rake (0.8.7)
106
+ rcov (0.9.9)
107
+ reek (1.2.8)
108
+ ruby2ruby (~> 1.2)
109
+ ruby_parser (~> 2.0)
110
+ sexp_processor (~> 3.0)
111
+ ruby2ruby (1.2.5)
112
+ ruby_parser (~> 2.0)
113
+ sexp_processor (~> 3.0)
114
+ ruby_parser (2.0.6)
115
+ sexp_processor (~> 3.0)
116
+ rubyzip (0.9.4)
117
+ selenium-webdriver (0.1.0)
118
+ childprocess (= 0.1.4)
119
+ ffi (~> 0.6.3)
120
+ json_pure
121
+ rubyzip
122
+ sexp_processor (3.0.5)
123
+ shoulda (2.11.3)
124
+ test_benchmarker (1.2.1)
125
+ thor (0.14.6)
126
+ timecop (0.3.5)
127
+ treetop (1.4.9)
128
+ polyglot (>= 0.3.1)
129
+ tzinfo (0.3.23)
130
+ will_paginate (3.0.pre2)
131
+ xpath (0.1.2)
132
+ nokogiri (~> 1.3)
133
+ yard (0.6.4)
134
+
135
+ PLATFORMS
136
+ ruby
137
+
138
+ DEPENDENCIES
139
+ bundler
140
+ capybara (>= 0.4.0)
141
+ carrierwave
142
+ deep_cloneable
143
+ factory_girl!
144
+ fakeweb
145
+ httparty
146
+ jeweler
147
+ liquid!
148
+ mocha
149
+ mysql
150
+ nokogiri
151
+ rack-test
152
+ rails (= 3.0.3)
153
+ rcov
154
+ reek
155
+ shoulda
156
+ test_benchmarker
157
+ timecop
158
+ will_paginate (~> 3.0.pre2)
159
+ yard
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.mkd ADDED
@@ -0,0 +1,152 @@
1
+ Why Mail Engine
2
+ ===============
3
+ 1. Don't need to export and import your system data to any other mail systems(like mailchimp, mad_mimi).
4
+ 2. Allow user to edit all email templates directly in system admin, save the time of developer to participate in.
5
+ 3. Allow user to add mail sending schedule directly in system admin, don't need developer to add
6
+ them into code or deploy crontab at server each time when client have new request.
7
+ 4. Fully take advantage of the convenience of loading any system data to mail template. In the past,
8
+ like using mailchimp, you have to store everything into user list, then you are able to load that into
9
+ mail template, it increased the complexity of maintaining information in another system.
10
+ 5. If you want to trace your mail, like open rate, click rate and unsubscribe rate, we provide Sendgrid
11
+ integration configuration to take advantage that system. (More information at http://sendgrid.com)
12
+ 6. Allow logging all sent mails, you can check which mail been sent to which user.
13
+ 7. You can know send the email to the active users, so that you don't need to waste your credits of sendgrid or amazon.
14
+
15
+ Problem when using third part mail system
16
+ =========================================
17
+ We are using mailchimp mostly for the newsletter solution, but it's has many problems that we have to make a new mail engine
18
+ to fit our needs in real project:
19
+
20
+ 1. It is only one newsletter or marketing mail solution, so for system mail, it can do nothing, so for system mail we still go the original way (put them in the rails project.)
21
+ 2. Mailchimp don't support other encode for mail, when sending japanese or chinese mail it will be failed.
22
+ 3. It doesn't support localization, so different language is different campaign, you need to set a lot config for each of them.
23
+ 4. Manage user list is awkward, it even can't create list by API, so you have to create list one by one by hand.
24
+ 5. It can't load other user personal or customized data from system into mail, like latest unchecked news or messages, it's very limited to load info from user list record.
25
+ 6. It doesn't support reusable partials, which like you hope to put a fixed content of footer or header.
26
+ 7. It doesn't support recurring mail sending.
27
+
28
+ Installation
29
+ ============
30
+ ** Step 1: **
31
+
32
+ gem install mail_engine
33
+
34
+ ** Step 2: **
35
+
36
+ Add below line to the crontab list of your sever:
37
+
38
+ ### check mail schedule for every 15 minutes ###
39
+ */4 * * * * sh -c "cd /path/to/your/system && rake mail_engine:sendmail RAILS_ENV=production"
40
+
41
+
42
+ Usage
43
+ =====
44
+ ** For System Mail: **
45
+
46
+ Due to the sender of system mail is ActionMailer, so you just need to set template physical store path (e.g. user_mailer/notify)
47
+ as the mailer template load path, system will load it from database. (Notice, database template will
48
+ override your file template.)
49
+
50
+ Mail Engine use Liquid template engine, so you can read the Liquid Reference at http://www.liquidmarkup.org/
51
+
52
+ Steps:
53
+
54
+ 1. Just create a template in mail engine.
55
+
56
+ ** For Marketing Mail: **
57
+
58
+ For normal marketing mails are quite simple in logic, so don't need logic code in the mail template.
59
+ So we provide a mail dispatcher which allows user can send marketing mail only by providing the template and
60
+ select the data pre-defined in system to the mail template, don't need developer to do anything like adding mailer file.
61
+
62
+ Steps:
63
+
64
+ 1. Create a mail tempate in mail engine.
65
+ 2. Create a sending schedule record. (You can specify the users to receive this mail, total sending count,
66
+ sending period, when start to deliver the first mail and load which data into this template, You also can set
67
+ condition for the scheduler, like if no specified data in collection, don't send the mail.)
68
+
69
+ You also can send mail in your program by using:
70
+ MailEngine::MailDispatcher.{your marketing mail template name}(:to => "Michael he <hlxwell@gmail.com>", :values => {:username => "Michael He"}).deliver
71
+
72
+ Screenshots
73
+ ===========
74
+
75
+ Dashboard
76
+ ---------
77
+ Shows the latest report.
78
+
79
+ ![Dashboard](https://github.com/hlxwell/mail-engine/raw/master/screenshots/dashboard.png "Dashboard")
80
+
81
+
82
+ Template Management
83
+ -------------------
84
+ You can manage the template used in your system, including:
85
+
86
+ 1. System mail, has it's own action mailer file.
87
+ 2. Marketing mail, simple logic and without it's own action mailer.
88
+ 3. Partials, you can reused it in any other templates.
89
+
90
+ ![Template Management](https://github.com/hlxwell/mail-engine/raw/master/screenshots/templates.png "Template Management")
91
+
92
+
93
+ Template editing Page
94
+ ---------------------
95
+ You can see here are many details you can change:
96
+
97
+ 1. Template Path, system action mailer can find it when lookup mail template.
98
+ 2. Locale
99
+ 3. Format
100
+ 4. Layout
101
+ 5. Files will used in the template.
102
+ 6. Zip File when you used at creating this template.
103
+ 7. Preview template in time.
104
+
105
+ ![Template editing Preview](https://github.com/hlxwell/mail-engine/raw/master/screenshots/editing_mail_template.png "Template editing Preview")
106
+
107
+
108
+ Upload html template with image in a zip file
109
+ ---------------------------------------------
110
+ You can create a template by uplaoding a zip file including one html and other images or css files.
111
+
112
+ ![Upload html template with image in a zip file.")](https://github.com/hlxwell/mail-engine/raw/master/screenshots/new_by_upload.png "Upload html template with image in a zip file.")
113
+
114
+
115
+ Partial and Layout selection
116
+ ----------------------------
117
+ ![Partial and Layout selection](https://github.com/hlxwell/mail-engine/raw/master/screenshots/select_layout_partial.png "Partial and Layout selection")
118
+
119
+
120
+ Mail Schedule
121
+ -------------
122
+ You can set a mail sending schedule, here are some useful setting items:
123
+
124
+ 1. Marketing Mail Template.
125
+ 2. User Group will be received this mail.
126
+ 3. Total send count.
127
+ 4. Already send count.
128
+ 5. Sending Period.
129
+ 6. Payloads which load from user model and send to template when sending.
130
+ 7. First send date time, this date will indicate when this mail will be send first time, and according to the seding period it will resend at the same time after one period.
131
+ 8. You can set requirements, which been predefined in the system, let the mail not been sent if the requirements is unreached.
132
+
133
+ ![Mail Schedule](https://github.com/hlxwell/mail-engine/raw/master/screenshots/schedule.png "Mail Schedule")
134
+
135
+
136
+ Mail Logs
137
+ ---------
138
+ It will log all mails' content been sent, you can turn it off in config file.
139
+
140
+ ![Mail Logs](https://github.com/hlxwell/mail-engine/raw/master/screenshots/logs.png "Mail Logs")
141
+
142
+
143
+ Report
144
+ ------
145
+ Shows detail chart and data list of mail sending stats.
146
+
147
+ ![Report](https://github.com/hlxwell/mail-engine/raw/master/screenshots/reports.png "Report")
148
+
149
+
150
+ Bounce Report
151
+ -------------
152
+ ![Bounce Report](https://github.com/hlxwell/mail-engine/raw/master/screenshots/bounce_report.png "Bounce Report")
data/Rakefile ADDED
@@ -0,0 +1,57 @@
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
10
+ require 'rake/rdoctask'
11
+ require 'rake/testtask'
12
+
13
+ # jeweler
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "mail_engine"
18
+ gem.homepage = "http://github.com/hlxwell/mail-engine"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Mail Management Solution}
21
+ gem.description = %Q{Rails system mail management solution.}
22
+ gem.email = "hlxwell@gmail.com"
23
+ gem.authors = ["michael he"]
24
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
25
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
26
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
27
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
28
+ end
29
+ Jeweler::RubygemsDotOrgTasks.new
30
+
31
+ # Rcov
32
+ require 'rcov/rcovtask'
33
+ Rcov::RcovTask.new do |test|
34
+ test.libs << 'test'
35
+ test.pattern = 'test/**/test_*.rb'
36
+ test.verbose = true
37
+ end
38
+
39
+ # Reek tasks
40
+ require 'reek/rake/task'
41
+ Reek::Rake::Task.new do |t|
42
+ t.fail_on_error = true
43
+ t.verbose = false
44
+ t.source_files = 'lib/**/*.rb'
45
+ end
46
+
47
+ # test tasks
48
+ Rake::TestTask.new(:test) do |t|
49
+ t.libs << 'lib' << 'test'
50
+ t.pattern = 'test/**/*_test.rb'
51
+ t.verbose = false
52
+ end
53
+ task :default => :test
54
+
55
+ # yard tasks
56
+ require 'yard'
57
+ YARD::Rake::YardocTask.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,7 @@
1
+ class MailEngine::ApplicationController < ActionController::Base
2
+ prepend_view_path MailEngine::MailTemplate::Resolver.instance
3
+
4
+ layout 'mail_engine/mail_engine'
5
+ include MailEngine
6
+ helper MailEngine::MailEngineHelper
7
+ end
@@ -0,0 +1,9 @@
1
+ class MailEngine::DashboardController < MailEngine::ApplicationController
2
+ def index
3
+ @pie_chart_columns = ["bounces", "unique_opens", "spamreports", "blocks", "unopened"]
4
+
5
+ @stats_data = MailEngine::Sendgrid::RestApi.stats(:days => 6)
6
+ @data_of_today = @stats_data.last
7
+ @data_of_today.merge!("unopened" => (@data_of_today["delivered"].to_i - @data_of_today["unique_opens"].to_i))
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ class MailEngine::MailLogsController < MailEngine::ApplicationController
2
+ before_filter :find_model
3
+
4
+ def index
5
+ @mail_logs = MailLog.order("created_at desc").paginate :page => params[:page], :per_page => 20
6
+ end
7
+
8
+ def show
9
+ end
10
+
11
+ def destroy
12
+ @mail_log.destroy
13
+ redirect_to mail_logs_path
14
+ end
15
+
16
+ private
17
+ def find_model
18
+ @mail_log = MailLog.find(params[:id]) if params[:id].present?
19
+ end
20
+ end