newsletter 3.0.2 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +6 -0
  3. data/.ruby-version +1 -1
  4. data/Gemfile +17 -5
  5. data/README.md +40 -0
  6. data/app/assets/images/newsletter/BottomRight.gif +0 -0
  7. data/app/assets/images/newsletter/MidRight.gif +0 -0
  8. data/app/assets/images/newsletter/TopCenter.gif +0 -0
  9. data/app/assets/images/newsletter/TopRight.gif +0 -0
  10. data/app/assets/images/newsletter/calendar_date_select/calendar.gif +0 -0
  11. data/app/assets/images/newsletter/iReach_logo.gif +0 -0
  12. data/app/assets/images/newsletter/spacer.gif +0 -0
  13. data/app/assets/images/newsletter/topMid.gif +0 -0
  14. data/app/assets/javascripts/newsletter/application.js +6 -0
  15. data/app/assets/stylesheets/newsletter/admin.css +261 -0
  16. data/app/assets/stylesheets/newsletter/application.css +3 -1
  17. data/app/assets/stylesheets/newsletter/nav.css +68 -0
  18. data/app/assets/stylesheets/newsletter/timepicker.css +54 -0
  19. data/app/controllers/newsletter/application_controller.rb +5 -26
  20. data/app/controllers/newsletter/areas_controller.rb +0 -38
  21. data/app/controllers/newsletter/designs_controller.rb +5 -2
  22. data/app/controllers/newsletter/elements_controller.rb +7 -7
  23. data/app/controllers/newsletter/fields_controller.rb +1 -46
  24. data/app/controllers/newsletter/newsletters_controller.rb +6 -24
  25. data/app/controllers/newsletter/pieces_controller.rb +8 -21
  26. data/app/helpers/newsletter/designs_helper.rb +1 -8
  27. data/app/helpers/newsletter/layout_helper.rb +43 -0
  28. data/app/helpers/newsletter/newsletters_helper.rb +9 -5
  29. data/app/models/newsletter/area.rb +1 -4
  30. data/app/models/newsletter/asset.rb +7 -1
  31. data/app/models/newsletter/design.rb +48 -34
  32. data/app/models/newsletter/element.rb +0 -42
  33. data/app/models/newsletter/field.rb +7 -10
  34. data/app/models/newsletter/field/inline_asset.rb +15 -2
  35. data/app/models/newsletter/newsletter.rb +18 -11
  36. data/app/models/newsletter/piece.rb +20 -24
  37. data/app/views/layouts/newsletter/application.html.erb +20 -116
  38. data/app/views/layouts/newsletter/layout.html.erb +15 -0
  39. data/app/views/newsletter/areas/_area.html.erb +1 -1
  40. data/app/views/newsletter/designs/_area_fields.html.erb +1 -1
  41. data/app/views/newsletter/designs/_form.html.erb +11 -29
  42. data/app/views/newsletter/designs/_newsletter_area.html.erb +2 -2
  43. data/app/views/newsletter/designs/edit.html.erb +3 -6
  44. data/app/views/newsletter/designs/index.html.erb +7 -6
  45. data/app/views/newsletter/designs/new.html.erb +2 -2
  46. data/app/views/newsletter/designs/show.html.erb +5 -5
  47. data/app/views/newsletter/elements/_field_fields.html.erb +12 -25
  48. data/app/views/newsletter/elements/_form.html.erb +38 -34
  49. data/app/views/newsletter/elements/edit.html.erb +2 -5
  50. data/app/views/newsletter/elements/index.html.erb +7 -7
  51. data/app/views/newsletter/elements/new.html.erb +2 -2
  52. data/app/views/newsletter/elements/show.html.erb +5 -5
  53. data/app/views/newsletter/fields/_inline_asset.html.erb +12 -32
  54. data/app/views/newsletter/fields/_text.html.erb +2 -4
  55. data/app/views/newsletter/fields/_text_area.html.erb +2 -7
  56. data/app/views/newsletter/newsletters/_form.html.erb +6 -16
  57. data/app/views/newsletter/newsletters/_head.html.erb +2 -3
  58. data/app/views/newsletter/newsletters/_newsletter.html.erb +11 -6
  59. data/app/views/newsletter/newsletters/archive.html.erb +1 -1
  60. data/app/views/newsletter/newsletters/edit.html.erb +8 -16
  61. data/app/views/newsletter/newsletters/index.html.erb +7 -7
  62. data/app/views/newsletter/newsletters/new.html.erb +2 -2
  63. data/app/views/newsletter/newsletters/show.html.erb +11 -6
  64. data/app/views/newsletter/pieces/_form.html.erb +1 -8
  65. data/app/views/newsletter/pieces/edit.html.erb +2 -4
  66. data/app/views/newsletter/pieces/new.html.erb +3 -5
  67. data/config/locales/newsletters.en.yml +27 -0
  68. data/config/routes.rb +4 -4
  69. data/designs/exports/Example.yml +202 -0
  70. data/designs/exports/example-export.yaml +481 -87
  71. data/lib/deleteable.rb +12 -14
  72. data/lib/newsletter/engine.rb +112 -6
  73. data/lib/newsletter/version.rb +1 -1
  74. data/lib/tasks/newsletter.rake +54 -41
  75. data/newsletter.gemspec +3 -1
  76. data/spec/test_app/.rspec +2 -0
  77. data/spec/test_app/app/controllers/application_controller.rb +5 -0
  78. data/spec/test_app/app/models/ability.rb +8 -0
  79. data/spec/test_app/app/models/user.rb +10 -0
  80. data/spec/test_app/app/views/layouts/application.html.erb +3 -1
  81. data/spec/test_app/config/database.postgres.yml +21 -0
  82. data/spec/test_app/config/initializers/carrierwave.rb +23 -0
  83. data/spec/test_app/config/newsletter.yml +6 -3
  84. data/spec/test_app/config/routes.rb +1 -2
  85. data/spec/test_app/db/migrate/20131222171230_create_users.rb +13 -0
  86. data/spec/test_app/db/schema.rb +13 -2
  87. data/spec/test_app/features/newsletter_management.feature +39 -0
  88. data/spec/test_app/features/piece_management.feature +20 -0
  89. data/spec/test_app/features/step_definitions/debugging_steps.rb +3 -0
  90. data/spec/test_app/features/step_definitions/design_steps.rb +3 -0
  91. data/spec/test_app/features/step_definitions/login_steps.rb +4 -0
  92. data/spec/test_app/features/step_definitions/newsletter_steps.rb +24 -0
  93. data/spec/test_app/features/step_definitions/piece_steps.rb +26 -0
  94. data/{features → spec/test_app/features}/step_definitions/webrat_steps.rb +10 -6
  95. data/spec/test_app/features/support/env.rb +36 -0
  96. data/spec/test_app/features/support/functions.rb +3 -0
  97. data/{features → spec/test_app/features}/support/paths.rb +10 -1
  98. data/spec/test_app/lib/debugging.rb +61 -0
  99. data/spec/test_app/script/full_suite +44 -0
  100. data/spec/test_app/script/rspec_multi_db +26 -0
  101. data/spec/test_app/spec/controllers/newsletter/pieces_controller_spec.rb +175 -0
  102. data/spec/test_app/spec/factories/_functions.rb +19 -0
  103. data/spec/test_app/spec/factories/assets.rb +8 -0
  104. data/spec/test_app/spec/factories/designs.rb +1 -1
  105. data/spec/test_app/spec/factories/newsletters.rb +68 -6
  106. data/spec/test_app/spec/factories/pieces.rb +8 -0
  107. data/spec/test_app/spec/factories/users.rb +13 -0
  108. data/spec/test_app/spec/features/newsletter/design_spec.rb +175 -0
  109. data/spec/test_app/spec/features/newsletter/element_spec.rb +53 -0
  110. data/spec/test_app/spec/features/newsletter/newsletter_spec.rb +99 -3
  111. data/spec/test_app/spec/helpers/newsletter/newsletters_helper_spec.rb +65 -0
  112. data/spec/test_app/spec/models/newsletter/asset_spec.rb +23 -0
  113. data/spec/test_app/spec/models/newsletter/design_spec.rb +23 -2
  114. data/spec/test_app/spec/models/newsletter/element_spec.rb +4 -0
  115. data/spec/test_app/spec/models/newsletter/inline_asset_spec.rb +43 -0
  116. data/spec/test_app/spec/models/newsletter/newsletter_spec.rb +102 -2
  117. data/spec/test_app/spec/models/newsletter/piece_spec.rb +33 -0
  118. data/spec/test_app/spec/rails_helper.rb +82 -0
  119. data/spec/test_app/spec/routing/newsletter/pieces_routing_spec.rb +28 -0
  120. data/spec/test_app/spec/spec_helper.rb +73 -64
  121. data/spec/test_app/spec/support/carrierwave.rb +7 -0
  122. data/spec/test_app/spec/support/continuances.rb +18 -0
  123. data/spec/test_app/spec/support/files/iReach_logo.gif +0 -0
  124. data/spec/test_app/spec/support/files/test.pdf +0 -0
  125. data/spec/test_app/spec/support/functions.rb +3 -0
  126. metadata +145 -726
  127. data/README +0 -243
  128. data/README.rdoc +0 -3
  129. data/app/views/newsletter/elements/_newsletter_field.html.erb +0 -37
  130. data/features/support/env.rb +0 -17
  131. data/lib/tasks/newsletter_tasks.rake +0 -4
  132. data/lib/tasks/rspec.rake +0 -158
  133. data/spec/spec_helper.rb +0 -55
  134. data/spec/test_app/db/structure.sql +0 -12
  135. data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_article.html.erb +0 -10
  136. data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_image.html.erb +0 -2
  137. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_article.html.erb +0 -5
  138. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_headline.html.erb +0 -1
  139. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_image.html.erb +0 -1
  140. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_paragraph.html.erb +0 -3
  141. data/spec/test_app/newsletters/designs/My_Design/layout.html.erb +0 -66
  142. data/spec/test_app/newsletters/designs/Testo_Changeo/elements/_left_column_article.html.erb +0 -10
  143. data/spec/test_app/newsletters/designs/Testo_Changeo/layout.html.erb +0 -66
  144. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_article.html.erb +0 -10
  145. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_image.html.erb +0 -2
  146. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_article.html.erb +0 -5
  147. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_headline.html.erb +0 -1
  148. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_image.html.erb +0 -1
  149. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_paragraph.html.erb +0 -3
  150. data/spec/test_app/newsletters/designs/empower_innovative_e-business/layout.html.erb +0 -66
  151. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_article.html.erb +0 -10
  152. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_image.html.erb +0 -2
  153. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_article.html.erb +0 -5
  154. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_headline.html.erb +0 -1
  155. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_image.html.erb +0 -1
  156. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_paragraph.html.erb +0 -3
  157. data/spec/test_app/newsletters/designs/enable_extensible_systems/layout.html.erb +0 -66
  158. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_article.html.erb +0 -10
  159. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_image.html.erb +0 -2
  160. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_article.html.erb +0 -5
  161. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_headline.html.erb +0 -1
  162. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_image.html.erb +0 -1
  163. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_paragraph.html.erb +0 -3
  164. data/spec/test_app/newsletters/designs/engage_innovative_schemas/layout.html.erb +0 -67
  165. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_article.html.erb +0 -10
  166. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_image.html.erb +0 -2
  167. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_article.html.erb +0 -5
  168. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_headline.html.erb +0 -1
  169. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_image.html.erb +0 -1
  170. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_paragraph.html.erb +0 -3
  171. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/layout.html.erb +0 -66
  172. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_article.html.erb +0 -10
  173. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_image.html.erb +0 -2
  174. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_article.html.erb +0 -5
  175. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_headline.html.erb +0 -1
  176. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_image.html.erb +0 -1
  177. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_paragraph.html.erb +0 -3
  178. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/layout.html.erb +0 -66
  179. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_article.html.erb +0 -10
  180. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_image.html.erb +0 -2
  181. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_article.html.erb +0 -5
  182. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_headline.html.erb +0 -1
  183. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_image.html.erb +0 -1
  184. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_paragraph.html.erb +0 -3
  185. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/layout.html.erb +0 -66
  186. data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/elements/_left_column_article.html.erb +0 -10
  187. data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/layout.html.erb +0 -66
  188. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_article.html.erb +0 -10
  189. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_image.html.erb +0 -2
  190. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_article.html.erb +0 -5
  191. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_headline.html.erb +0 -1
  192. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_image.html.erb +0 -1
  193. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_paragraph.html.erb +0 -3
  194. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/layout.html.erb +0 -67
  195. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_article.html.erb +0 -10
  196. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_image.html.erb +0 -2
  197. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_article.html.erb +0 -5
  198. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_headline.html.erb +0 -1
  199. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_image.html.erb +0 -1
  200. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_paragraph.html.erb +0 -3
  201. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/layout.html.erb +0 -67
  202. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_article.html.erb +0 -10
  203. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_image.html.erb +0 -2
  204. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_article.html.erb +0 -5
  205. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_headline.html.erb +0 -1
  206. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_image.html.erb +0 -1
  207. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_paragraph.html.erb +0 -3
  208. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/layout.html.erb +0 -67
  209. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_article.html.erb +0 -10
  210. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_image.html.erb +0 -2
  211. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_article.html.erb +0 -5
  212. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_headline.html.erb +0 -1
  213. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_image.html.erb +0 -1
  214. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_paragraph.html.erb +0 -3
  215. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/layout.html.erb +0 -67
  216. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_article.html.erb +0 -10
  217. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_image.html.erb +0 -2
  218. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_article.html.erb +0 -5
  219. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_headline.html.erb +0 -1
  220. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_image.html.erb +0 -1
  221. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_paragraph.html.erb +0 -3
  222. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/layout.html.erb +0 -66
  223. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_article.html.erb +0 -10
  224. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_image.html.erb +0 -2
  225. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_article.html.erb +0 -5
  226. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_headline.html.erb +0 -1
  227. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_image.html.erb +0 -1
  228. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_paragraph.html.erb +0 -3
  229. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/layout.html.erb +0 -66
  230. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_article.html.erb +0 -10
  231. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_image.html.erb +0 -2
  232. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_article.html.erb +0 -5
  233. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_headline.html.erb +0 -1
  234. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_image.html.erb +0 -1
  235. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_paragraph.html.erb +0 -3
  236. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/layout.html.erb +0 -67
  237. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_article.html.erb +0 -10
  238. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_image.html.erb +0 -2
  239. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_article.html.erb +0 -5
  240. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_headline.html.erb +0 -1
  241. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_image.html.erb +0 -1
  242. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_paragraph.html.erb +0 -3
  243. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/layout.html.erb +0 -66
  244. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_article.html.erb +0 -10
  245. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_image.html.erb +0 -2
  246. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_article.html.erb +0 -5
  247. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_headline.html.erb +0 -1
  248. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_image.html.erb +0 -1
  249. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_paragraph.html.erb +0 -3
  250. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/layout.html.erb +0 -67
  251. data/spec/test_app/newsletters/designs/transition_enterprise_systems/elements/_left_column_article.html.erb +0 -10
  252. data/spec/test_app/newsletters/designs/transition_enterprise_systems/layout.html.erb +0 -66
  253. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_article.html.erb +0 -10
  254. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_image.html.erb +0 -2
  255. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_article.html.erb +0 -5
  256. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_headline.html.erb +0 -1
  257. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_image.html.erb +0 -1
  258. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_paragraph.html.erb +0 -3
  259. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/layout.html.erb +0 -66
@@ -0,0 +1,54 @@
1
+ .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
2
+ .ui-timepicker-div dl { text-align: left; }
3
+ .ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
4
+ .ui-timepicker-div dl dd { margin: 0 10px 10px 45%; }
5
+ .ui-timepicker-div td { font-size: 90%; }
6
+ .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
7
+
8
+ .ui-timepicker-rtl{ direction: rtl; }
9
+ .ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
10
+ .ui-timepicker-rtl dl dt{ float: right; clear: right; }
11
+ .ui-timepicker-rtl dl dd { margin: 0 45% 10px 10px; }
12
+ .ui-tooltip, .arrow:after {
13
+ background: #285c00;
14
+ border: 2px solid #45930b;
15
+ }
16
+ .ui-tooltip {
17
+ padding: 10px 20px;
18
+ color: white;
19
+ border-radius: 20px;
20
+ font: bold 14px "Helvetica Neue", Sans-Serif;
21
+ box-shadow: 0 0 7px black;
22
+ }
23
+ .arrow {
24
+ width: 70px;
25
+ height: 16px;
26
+ overflow: hidden;
27
+ position: absolute;
28
+ left: 50%;
29
+ margin-left: -35px;
30
+ bottom: -16px;
31
+ }
32
+ .arrow.top {
33
+ top: -16px;
34
+ bottom: auto;
35
+ }
36
+ .arrow.left {
37
+ left: 20%;
38
+ }
39
+ .arrow:after {
40
+ content: "";
41
+ position: absolute;
42
+ left: 20px;
43
+ top: -20px;
44
+ width: 25px;
45
+ height: 25px;
46
+ box-shadow: 6px 5px 9px -9px black;
47
+ -webkit-transform: rotate(45deg);
48
+ -ms-transform: rotate(45deg);
49
+ transform: rotate(45deg);
50
+ }
51
+ .arrow.top:after {
52
+ bottom: -20px;
53
+ top: auto;
54
+ }
@@ -1,30 +1,9 @@
1
1
  require 'dynamic_form'
2
2
  require 'nested_form'
3
- class Newsletter::ApplicationController < ApplicationController
4
- layout 'newsletter/application'
5
- helper_method :title, :use_show_for_resources?, :site_url, :show_title?
6
- load_and_authorize_resource if respond_to? :load_and_authorize_resource
3
+ require 'cancan'
4
+ class Newsletter::ApplicationController < ::ApplicationController
5
+ layout Newsletter.layout
6
+ load_and_authorize_resource
7
7
 
8
- before_filter :authenticate_user! if respond_to? :authenticate_user!
9
-
10
- def title(value=nil)
11
- @title = value if value.present?
12
- @title
13
- end
14
-
15
- def show_title?
16
- true
17
- end
18
-
19
- def use_show_for_resources?
20
- ::Newsletter.use_show_for_resources
21
- rescue
22
- false
23
- end
24
-
25
- def site_url
26
- ::Newsletter.site_url
27
- rescue
28
- "#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
29
- end
8
+ helper :'newsletter/layout'
30
9
  end
@@ -12,44 +12,6 @@ module Newsletter
12
12
  head :ok
13
13
  end
14
14
 
15
- def index
16
- @areas = Area.find(:all)
17
- end
18
-
19
- def show
20
- end
21
-
22
- def new
23
- @newsletter_area = Area.new
24
- end
25
-
26
- def edit
27
- end
28
-
29
- def create
30
- @newsletter_area = Area.new(params[:area])
31
- if @newsletter_area.save
32
- flash[:notice] = 'Area was successfully created.'
33
- redirect_to(@newsletter_area)
34
- else
35
- render :action => "new"
36
- end
37
- end
38
-
39
- def update
40
- if @newsletter_area.update_attributes(params[:area])
41
- flash[:notice] = 'Area was successfully updated.'
42
- redirect_to(@newsletter_area)
43
- else
44
- render :action => "edit"
45
- end
46
- end
47
-
48
- def destroy
49
- @newsletter_area.destroy
50
- redirect_to(areas_url)
51
- end
52
-
53
15
  protected
54
16
 
55
17
  def find_design
@@ -3,8 +3,11 @@ module Newsletter
3
3
  class DesignsController < ::Newsletter::ApplicationController
4
4
  before_filter :find_design, :except => [:new, :create, :index]
5
5
 
6
+ include DeleteableActions
7
+
6
8
  def index
7
- @designs = Design.find(:all)
9
+ @designs = Design.order(:name).paginate(page: (params[:page] || 1),
10
+ per_page: (params[:per_page] || 30))
8
11
  end
9
12
 
10
13
  def show
@@ -38,7 +41,7 @@ module Newsletter
38
41
  end
39
42
 
40
43
  def destroy
41
- @design.destroy
44
+ @design.delete
42
45
  redirect_to(designs_url)
43
46
  end
44
47
 
@@ -55,21 +55,21 @@ module Newsletter
55
55
 
56
56
  protected
57
57
  def find_element
58
- @element = Element.find_by_id(params[:id])
58
+ @element ||= Element.find_by_id(params[:id])
59
59
  end
60
60
 
61
61
  def find_design
62
- return @design = @element.design if @element
63
- @design = Design.find_by_id(params[:design_id])
62
+ return @design ||= @element.design if @element && @element.design.present?
63
+ @design ||= Design.find_by_id(params[:design_id])
64
64
  end
65
65
 
66
66
  def find_fields
67
- return @fields = @element.fields if @element
68
- [Field.new]
67
+ return @fields ||= @element.fields if @element && @element.fields.present?
68
+ @fields ||= [Field.new]
69
69
  end
70
70
 
71
71
  def find_field_types
72
- @field_types = Field.valid_types
72
+ @field_types ||= Field.valid_types
73
73
  end
74
74
  end
75
- end
75
+ end
@@ -1,49 +1,4 @@
1
1
  module Newsletter
2
2
  class FieldsController < ::Newsletter::ApplicationController
3
- before_filter :find_field, :except => [:index, :new, :create]
4
-
5
- def index
6
- @fields = NewsletterField.find(:all)
7
- end
8
-
9
- def show
10
- end
11
-
12
- def new
13
- @field = NewsletterField.new
14
- end
15
-
16
- def edit
17
- end
18
-
19
- def create
20
- @field = Field.new(params[:field])
21
- if @field.save
22
- flash[:notice] = 'NewsletterField was successfully created.'
23
- redirect_to(@field)
24
- else
25
- render :action => "new"
26
- end
27
- end
28
-
29
- def update
30
- if @field.update_attributes(params[:field])
31
- flash[:notice] = 'Field was successfully updated.'
32
- redirect_to(@field)
33
- else
34
- render :action => "edit"
35
- end
36
- end
37
-
38
- def destroy
39
- @field.destroy
40
- redirect_to(fields_url)
41
- end
42
-
43
- protected
44
-
45
- def find_field
46
- @field = Field.find(params[:id])
47
- end
48
3
  end
49
- end
4
+ end
@@ -1,11 +1,7 @@
1
1
  module Newsletter
2
2
  class NewslettersController < ::Newsletter::ApplicationController
3
- skip_before_filter :authorize, :only => ["archive","show"]
4
- before_filter :find_newsletter, :only => [:editor,:publish,:unpublish,:edit,:update,:destroy,:show]
5
- #FIXME: why do we need to place this custom code here instead of reopening the class?
6
- skip_before_filter :authenticate, :only => [:archive,:show]
7
-
8
-
3
+ helper_method :newsletter
4
+
9
5
  def sort
10
6
  Newsletter.all.each do | newsletter |
11
7
  newsletter.sequence = params["newsletters"].index(newsletter.id.to_s)+1
@@ -43,26 +39,16 @@ module Newsletter
43
39
 
44
40
  def show
45
41
  return redirect_to(main_app.newsletter_archive_path) unless @newsletter.present?
46
- newsletter_html = render_to_string :inline => File.readlines(@newsletter.design.view_path).join,
47
- :locals => @newsletter.locals
48
- if params[:mode].eql?('email')
49
- #mailer handles substitutions
50
- render :text => newsletter_html
51
- else
52
- #no substitutions
53
- render :text => newsletter_html
54
- end
42
+ render layout: false
55
43
  end
56
44
 
57
45
  def editor
58
46
  params[:editor] = '1'
59
- newsletter_html = render_to_string :inline => File.readlines(@newsletter.design.view_path).join,
60
- :locals => @newsletter.locals
61
- render :text => newsletter_html
47
+ render :show, layout: false
62
48
  end
63
49
 
64
50
  def new
65
- @newsletter = Newsletter.new
51
+ @newsleter = Newsletter.new
66
52
  @designs = Design.active
67
53
  end
68
54
 
@@ -95,10 +81,6 @@ module Newsletter
95
81
  @newsletter.destroy
96
82
  redirect_to(newsletters_url)
97
83
  end
98
-
99
- protected
100
- def find_newsletter
101
- @newsletter = Newsletter.find_by_id(params[:id])
102
- end
84
+
103
85
  end
104
86
  end
@@ -1,17 +1,9 @@
1
1
  module Newsletter
2
2
  class PiecesController < ::Newsletter::ApplicationController
3
- before_filter :find_piece, :except => [:new,:create,:index]
4
3
  before_filter :find_newsletter
5
4
  before_filter :find_element
6
5
  before_filter :find_area
7
6
 
8
- def index
9
- @pieces = @newsletter.pieces.active
10
- end
11
-
12
- def show
13
- end
14
-
15
7
  def new
16
8
  @piece = Piece.new({
17
9
  :area_id => @area.id,
@@ -44,30 +36,25 @@ module Newsletter
44
36
 
45
37
  def destroy
46
38
  @piece.destroy
47
- redirect_to(newsletter_path(@newsletter,:editor=>1))
39
+ redirect_to(edit_newsletter_path(@newsletter))
48
40
  end
49
41
 
50
42
  protected
51
43
 
52
- def find_piece
53
- return @piece if @piece.try(:newsletter_id).present?
54
- return nil unless params[:id].present?
55
- @piece ||= Piece.find_by_id(params[:id])
56
- end
57
-
58
44
  def find_newsletter
59
- return @newsletter = find_piece.newsletter unless find_piece.nil?
60
- @newsletter = ::Newsletter::Newsletter.find(params[:newsletter_id] || params[:piece][:newsletter_id])
45
+ @newsletter ||= (@piece.try(:newsletter) ||
46
+ ::Newsletter::Newsletter.find(params[:newsletter_id] ||
47
+ params[:piece][:newsletter_id]))
61
48
  end
62
49
 
63
50
  def find_element
64
- return @element = find_piece.element unless find_piece.nil?
65
- @element = Element.find(params[:element_id] || params[:piece][:element_id])
51
+ @element ||= (@piece.try(:element) ||
52
+ Element.find(params[:element_id] || params[:piece][:element_id]))
66
53
  end
67
54
 
68
55
  def find_area
69
- return @area = find_piece.area unless find_piece.nil?
70
- @area = Area.find(params[:area_id] || params[:piece][:area_id])
56
+ @area ||= (@piece.try(:area) ||
57
+ Area.find(params[:area_id] || params[:piece][:area_id]))
71
58
  end
72
59
  end
73
60
  end
@@ -1,11 +1,4 @@
1
1
  module Newsletter
2
2
  module DesignsHelper
3
- #left 'newsletter' in function name for helper scoping
4
- def add_newsletter_area_link(name)
5
- link_to_function name, {:class => "button"} do |page|
6
- page.insert_html :bottom, :areas, :partial => 'newsletter_area',
7
- :object => Area.new
8
- end
9
- end
10
3
  end
11
- end
4
+ end
@@ -0,0 +1,43 @@
1
+ module Newsletter
2
+ module LayoutHelper
3
+ def title(value=nil, locals={})
4
+ if value.nil?
5
+ @page_title
6
+ else
7
+ @page_title = translate( value, locals)
8
+ "<h1>#{@page_title}</h1>".html_safe
9
+ end
10
+ end
11
+
12
+ def use_show_for_resources?
13
+ ::Newsletter.use_show_for_resources
14
+ rescue
15
+ # :nocov: shouldn't happen
16
+ false
17
+ # :nocov:
18
+ end
19
+
20
+ def show_title?
21
+ return @show_title if defined? @show_title
22
+ true
23
+ rescue
24
+ # :nocov: shouldn't happen
25
+ false
26
+ # :nocov:
27
+ end
28
+
29
+ def site_url
30
+ ::Newsletter.site_url
31
+ rescue
32
+ # :nocov: shouldn't happen
33
+ "#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
34
+ # :nocov:
35
+ end
36
+
37
+ def translate(key, options={})
38
+ super(key, options.merge(raise: true))
39
+ rescue I18n::MissingTranslationData
40
+ key
41
+ end
42
+ end
43
+ end
@@ -1,9 +1,5 @@
1
1
  module Newsletter
2
2
  module NewslettersHelper
3
- def render_area
4
- render @newsletter.design.areas.by_newsletter(@newsletter)
5
- end
6
-
7
3
  def is_email?
8
4
  params[:mode].eql?('email')
9
5
  end
@@ -15,10 +11,18 @@ module Newsletter
15
11
  new_text.html_safe
16
12
  end
17
13
 
14
+ def design_image(image_filename, options={})
15
+ options_text = ''
16
+ options.each_pair do |key,value|
17
+ options_text << %Q| #{key}="#{ERB::Util.html_escape value}"|
18
+ end
19
+ %Q|<img src="#{ERB::Util.html_escape @newsletter.image_uri(image_filename)}"#{options_text}/>|.html_safe
20
+ end
21
+
18
22
  protected
19
23
  def filter_eols_to_brs(text,orig_text)
20
24
  return '' if text.blank?
21
- return '' if orig_text =~ /<br\s*\/>/i
25
+ return text if orig_text =~ /<br\s*\/>/i
22
26
  text.gsub(/(\r\n|\r|\n)/,'<br/>')
23
27
  end
24
28
 
@@ -43,8 +43,5 @@ module Newsletter
43
43
  area.save
44
44
  end
45
45
 
46
- def should_destroy?
47
- should_destroy.to_i == 1
48
- end
49
46
  end
50
- end
47
+ end