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
@@ -1,4 +1,3 @@
1
1
  Rails.application.routes.draw do
2
-
3
- mount Newsletter::Engine => "/newsletter"
2
+ mount Newsletter::Engine => "/newsletter", as: :news
4
3
  end
@@ -0,0 +1,13 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :users do |t|
4
+ t.string :first_name
5
+ t.string :last_name
6
+ t.string :email
7
+ t.string :phone
8
+
9
+ t.timestamps
10
+ end
11
+ add_index :users, :email, :unique => true
12
+ end
13
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20131222171229) do
14
+ ActiveRecord::Schema.define(:version => 20150414102034) do
15
15
 
16
16
  create_table "news_areas", :force => true do |t|
17
17
  t.string "name", :null => false
@@ -31,7 +31,7 @@ ActiveRecord::Schema.define(:version => 20131222171229) do
31
31
  create_table "news_assets", :force => true do |t|
32
32
  t.integer "field_id"
33
33
  t.integer "piece_id"
34
- t.string "filename"
34
+ t.string "image"
35
35
  t.string "content_type"
36
36
  t.integer "size"
37
37
  t.integer "width"
@@ -113,4 +113,15 @@ ActiveRecord::Schema.define(:version => 20131222171229) do
113
113
  t.datetime "updated_at", :null => false
114
114
  end
115
115
 
116
+ create_table "users", :force => true do |t|
117
+ t.string "first_name"
118
+ t.string "last_name"
119
+ t.string "email"
120
+ t.string "phone"
121
+ t.datetime "created_at", :null => false
122
+ t.datetime "updated_at", :null => false
123
+ end
124
+
125
+ add_index "users", ["email"], :name => "index_users_on_email", :unique => true
126
+
116
127
  end
@@ -0,0 +1,39 @@
1
+ Feature: Newsletter Management
2
+ In order to create newsletters
3
+ As a valid user
4
+ I want to create, modify, and publish newsletters
5
+
6
+ Background:
7
+ Given I am logged in and authorized for everything
8
+ And a design named "Bobo's Design" exists
9
+
10
+ Scenario: Create a new newsletter
11
+ When I go to the newsletters page
12
+ And I follow "New Newsletter"
13
+ And I fill in "Name" with "Bobo's first Newsletter"
14
+ And I press "Save"
15
+ Then a newsletter named "Bobo's first Newsletter" should exist
16
+ And that newsletter should have the design named "Bobo's Design"
17
+
18
+ Scenario: Edit a newsletter
19
+ Given a newsletter named "Bobo's first Newsletter" exists
20
+ When I go to the newsletters page
21
+ And I follow "Edit"
22
+ And I fill in "Name" with "Bobo's Great Newsletter"
23
+ And I press "Save"
24
+ Then a newsletter named "Bobo's Great Newsletter" should exist
25
+
26
+ Scenario: View a newsletter on the archive page
27
+ Given a newsletter named "Bobo's first Newsletter" exists
28
+ When I go to the newsletters page
29
+ And I follow "Publish"
30
+ And I go to the newsletter archive page
31
+ And I follow "Bobo's first Newsletter"
32
+ Then I should see "Bobo's first Newsletter"
33
+
34
+ Scenario: Newsletters have pagination
35
+ Given 50 newsletters exist
36
+ When I go to the newsletters page
37
+ Then I should see "Previous"
38
+ And I should see "Next"
39
+ When I follow "Next"
@@ -0,0 +1,20 @@
1
+ Feature: Piece Management
2
+ In order to add content to newsletters
3
+ As a valid user
4
+ I want to create, modify, delete pieces
5
+
6
+ Background:
7
+ Given I am logged in and authorized for everything
8
+ And a design named "Bobo's Design" exists
9
+ And a newsletter named "Bobo's Newsletter" exists with design named "Bobo's Design"
10
+
11
+ Scenario: Add an inline asset piece with a url
12
+ When I go to the newsletters page
13
+ And I follow "Edit"
14
+ And I select to add a "Left Column Image" from the "Left column" area
15
+ And I press the "Left column" area's "Add Element" button
16
+ Then I should be on newsletter named "Bobo's Newsletter"'s new piece page
17
+ And I fill in "Url:" with "http://www.google.com/favicon.ico"
18
+ And I press "Submit"
19
+ Then a "Left Column Image" should exist in "Bobo's Newsletter"'s "Left Column" are with an "image" url of "http://www.google.com/favicon.ico"
20
+
@@ -0,0 +1,3 @@
1
+ When /I debug/ do
2
+ binding.pry
3
+ end
@@ -0,0 +1,3 @@
1
+ Given(/^a design named "(.*?)" exists$/) do |name|
2
+ import_design(nil,name)
3
+ end
@@ -0,0 +1,4 @@
1
+ Given(/^I am logged in and authorized for everything$/) do
2
+ @user = FactoryGirl.create(:user, last_name: "the_admin")
3
+ end
4
+
@@ -0,0 +1,24 @@
1
+ Then(/^a newsletter named "(.*?)" should exist$/) do |name|
2
+ @newsletter = Newsletter::Newsletter.where(name: name).first
3
+ expect(@newsletter).not_to be nil
4
+ end
5
+
6
+ Then(/^that newsletter should have the design named "(.*?)"$/) do |name|
7
+ expect(@newsletter.design.name).to eq name
8
+ end
9
+
10
+ Given(/^a newsletter named "(.*?)" exists$/) do |name|
11
+ design = import_design
12
+ FactoryGirl.create(:newsletter, name: name, design: design)
13
+ end
14
+
15
+ Given(/^a newsletter named "(.*?)" exists with design named "(.*?)"$/) do |news_name, design_name|
16
+ design = Newsletter::Design.where(name: design_name).first
17
+ FactoryGirl.create(:newsletter, name: news_name, design: design)
18
+ end
19
+
20
+ Given(/^(\d+) newsletters exist$/) do |count|
21
+ design = import_design(nil,Faker::Company.bs)
22
+ count.to_i.times{FactoryGirl.create(:newsletter, design: design)}
23
+ end
24
+
@@ -0,0 +1,26 @@
1
+ When(/^I select to add a "(.*?)" from the "(.*?)" area$/) do |element_name, area_name|
2
+ area = Newsletter::Area.where(name: area_name.downcase.gsub(/ /,'_')).first
3
+ within(:css,"#add_element_for_area_#{area.id}") do
4
+ step %Q|I select "#{element_name}" from "Area: #{area.name.humanize}"|
5
+ end
6
+ end
7
+
8
+ When(/^I press the "(.*?)" area's "(.*?)" button$/) do |area_name, add_element|
9
+ area = Newsletter::Area.where(name: area_name.downcase.gsub(/ /,'_')).first
10
+ within(:css,"#add_element_for_area_#{area.id}") do
11
+ step %Q|I press "Add Element"|
12
+ end
13
+ end
14
+
15
+ Then(/^a "(.*?)" should exist in "(.*?)"'s "(.*?)" are with an? "(.*)" ([^"]+) of "(.*?)"$/) do |element_name, newsletter_name, area_name, field_name, method, value|
16
+ newsletter = Newsletter::Newsletter.where(name: newsletter_name).last
17
+ area = newsletter.areas.detect{|a| a.name.eql?(underscore(area_name))}
18
+ element = area.elements.detect{|e| e.name.eql?(element_name)}
19
+ expect(newsletter.pieces.detect{|piece|
20
+ piece.area == area && piece.element == element &&
21
+ piece.locals[field_name.to_sym].send(method) == value
22
+ }).not_to be nil
23
+ end
24
+
25
+
26
+
@@ -4,11 +4,11 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "pat
4
4
  # http://github.com/brynary/webrat
5
5
 
6
6
  Given /^I am on (.+)$/ do |page_name|
7
- visit path_to(page_name)
7
+ visit path_to(page_name,news)
8
8
  end
9
9
 
10
10
  When /^I go to (.+)$/ do |page_name|
11
- visit path_to(page_name)
11
+ visit path_to(page_name,news)
12
12
  end
13
13
 
14
14
  When /^I press "([^\"]*)"$/ do |button|
@@ -16,13 +16,17 @@ When /^I press "([^\"]*)"$/ do |button|
16
16
  end
17
17
 
18
18
  When /^I follow "([^\"]*)"$/ do |link|
19
- click_link(link)
19
+ click_link(link, match: :first)
20
20
  end
21
21
 
22
22
  When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
23
23
  fill_in(field, :with => value)
24
24
  end
25
25
 
26
+ Then(/^I fill in "(.*?)" with the file "(.*?)"$/) do |field_name, filename|
27
+ fill_in field_name, with: "file://spec/support/files/#{filename}"
28
+ end
29
+
26
30
  When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
27
31
  select(value, :from => field)
28
32
  end
@@ -91,11 +95,11 @@ When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
91
95
  end
92
96
 
93
97
  Then /^I should see "([^\"]*)"$/ do |text|
94
- response.should contain(text)
98
+ expect(page.body).to have_content(text)
95
99
  end
96
100
 
97
101
  Then /^I should not see "([^\"]*)"$/ do |text|
98
- response.should_not contain(text)
102
+ expect(page.body).not_to have_content(text)
99
103
  end
100
104
 
101
105
  Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
@@ -111,5 +115,5 @@ Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
111
115
  end
112
116
 
113
117
  Then /^I should be on (.+)$/ do |page_name|
114
- URI.parse(current_url).path.should == path_to(page_name)
118
+ URI.parse(current_url).path.should == path_to(page_name,news)
115
119
  end
@@ -4,7 +4,41 @@
4
4
  # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
5
  # files.
6
6
 
7
+ require 'simplecov'
8
+ pwd = File.expand_path( File.dirname(__FILE__) )
9
+ SimpleCov.root(File.join(pwd,'..','..','..','..'))
10
+ SimpleCov.command_name 'cucumber-' + ENV['DBADAPTER'].to_s
11
+ SimpleCov.start('rails') do
12
+ adapters.delete(:root_filter)
13
+ add_filter do |src|
14
+ !(src.filename =~ /^#{SimpleCov.root}/)
15
+ end
16
+ add_filter do |src|
17
+ src.filename =~ /test_app/
18
+ end
19
+ end
7
20
  require 'cucumber/rails'
21
+ require 'factory_girl_rails'
22
+
23
+ require 'capybara/poltergeist'
24
+ require 'capybara/rspec'
25
+ require 'capybara/rails'
26
+ require File.join(pwd,'..','..',"lib","debugging")
27
+ #require 'rack_session_access/capybara'
28
+ Capybara.server_port = Newsletter.site_url.split(/:/).last
29
+ Capybara.app_host = Newsletter.site_url
30
+
31
+ Capybara.default_driver = :rack_test
32
+ Capybara.register_driver :poltergeist do |app|
33
+ options = {
34
+ inspector: 'open',
35
+ debug: false,
36
+ phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes'],
37
+ js_errors: false
38
+ }
39
+ Capybara::Poltergeist::Driver.new(app, options)
40
+ end
41
+ Capybara.javascript_driver = :poltergeist
8
42
 
9
43
  # Capybara defaults to CSS3 selectors rather than XPath.
10
44
  # If you'd prefer to use XPath, just uncomment this line and adjust any
@@ -27,6 +61,8 @@ require 'cucumber/rails'
27
61
  # recommended as it will mask a lot of errors for you!
28
62
  #
29
63
  ActionController::Base.allow_rescue = false
64
+ DatabaseCleaner.strategy = :truncation
65
+ DatabaseCleaner.clean
30
66
 
31
67
  # Remove/comment out the lines below if your app doesn't have a database.
32
68
  # For some databases (like MongoDB and CouchDB) you may need to use :truncation instead.
@@ -0,0 +1,3 @@
1
+ def underscore(name)
2
+ name.downcase.gsub(/ /,'_')
3
+ end
@@ -5,7 +5,7 @@ module NavigationHelpers
5
5
  #
6
6
  # step definition in webrat_steps.rb
7
7
  #
8
- def path_to(page_name)
8
+ def path_to(page_name, routing=nil)
9
9
  case page_name
10
10
 
11
11
  when /the homepage/
@@ -16,7 +16,16 @@ module NavigationHelpers
16
16
  #
17
17
  # when /^(.*)'s profile page$/i
18
18
  # user_profile_path(User.find_by_login($1))
19
+ # added by script/generate pickle path
20
+ when /the newsletter archive page/
21
+ "/newsletters/archive"
22
+ when /newsletter named "([^"]+)"'s new piece page$/
23
+ newsletter_name = $1
24
+ newsletter = Newsletter::Newsletter.where(name: newsletter_name).first
25
+ "/newsletter/newsletters/#{newsletter.id}/pieces/new"
19
26
 
27
+ when /^the (.+?) page$/ # translate to named route
28
+ routing.send("#{$1.downcase.gsub(' ','_')}_path")
20
29
  else
21
30
  raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
22
31
  "Now, go and add a mapping in #{__FILE__}"
@@ -0,0 +1,61 @@
1
+ module ::Debugging
2
+ def self.with_pry_remote(timeout=5.minutes)
3
+ return unless block_given?
4
+ begin
5
+ yield
6
+ rescue StandardError, MiniTest::Assertion, Exception, RuntimeError => e
7
+ begin
8
+ Debugging::send_developer_im('chauboldt@bender.lnstar.com', "Error running test - #{e.message}: #{e.backtrace.join("\n")[0..80]} on #{`hostname`.strip} from #{`pwd`}")
9
+ Timeout::timeout(timeout) do
10
+ binding.pry_remote
11
+ end
12
+ rescue Exception, StandardError, RuntimeError => te
13
+ Rails.logger.warn "Uncaught/Unpried exception: #{te.message} #{te.backtrace.join("\n")}"
14
+ raise e
15
+ end
16
+ end
17
+ end
18
+
19
+ def self.send_developer_im(recipient='chauboldt@bender.lnstar.com', message)
20
+ # include Jabber # Makes using it a bit easier as we don't need to prepend Jabber:: to everything
21
+ # def send_xmpp_message(recipient, message)
22
+ # (recipient,message) = ARGV
23
+
24
+ #Account info
25
+ account = 'nagios@bender.lnstar.com'
26
+ password = '10dole01'
27
+
28
+
29
+ # Jabber::debug = true # Uncomment this if you want to see what's being sent and received!
30
+ jid = Jabber::JID::new(account)
31
+ client = Jabber::Client::new(jid)
32
+ client.connect
33
+ client.auth(password)
34
+ client.send(Jabber::Message::new(recipient,message))
35
+ # end
36
+ end
37
+
38
+ def self.wait_until(timeout=nil, log=false)
39
+ timeout ||= ((Capybara.default_wait_time + 3) rescue 10.seconds)
40
+ require "timeout"
41
+ Timeout.timeout(timeout) do
42
+ Rails.logger.warn "Waiting for something.. timeout: #{timeout}" if log
43
+ sleep(0.1) until value = yield
44
+ value
45
+ end
46
+ end
47
+
48
+ def self.wait_until_success(timeout=nil, log=false)
49
+ timeout ||= ((Capybara.default_wait_time + 3) rescue 10.seconds)
50
+ wait_until(timeout) do
51
+ begin
52
+ Rails.logger.warn "Waiting for something.. trying: #{Kernel.caller[0..5].join("\n")}" if log
53
+ yield
54
+ true
55
+ rescue => e
56
+ Rails.logger.warn "Waiting for something.. failure: #{e.message} #{e.backtrace.join}"
57
+ false
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,44 @@
1
+ export RAILS_ENV=test
2
+ # RUN FOR SQLITE
3
+ cp config/database.sqlite.yml config/database.yml
4
+
5
+ bundle exec rake db:schema:load
6
+
7
+ export SQLITE_SUCCESS=0
8
+ export CUC_SQLITE_SUCCESS=0
9
+
10
+ DBADAPTER=sqlite bundle exec rspec spec && export SQLITE_SUCCESS=1
11
+ DBADAPTER=sqlite bundle exec cucumber features && export CUC_SQLITE_SUCCESS=1
12
+
13
+ if [ $POSTGRES -eq 1 ]; then
14
+ #RUN FOR Postgresql
15
+ cp config/database.postgres.local.yml config/database.yml
16
+
17
+ bundle exec rake db:schema:load
18
+
19
+ export PGSQL_SUCCESS=0
20
+ export CUCPGSQL_SUCCESS=0
21
+
22
+ DBADAPTER=pg bundle exec rspec spec && export PGSQL_SUCCESS=1
23
+ DBADAPTER=pg bundle exec cucumber features && export CUC_PGSQL_SUCCESS=1
24
+ fi
25
+
26
+ #RUN FOR MYSQL
27
+ cp config/database.mysql.local.yml config/database.yml
28
+
29
+ bundle exec rake db:schema:load
30
+
31
+ export MYSQL_SUCCESS=0
32
+ export CUCMYSQL_SUCCESS=0
33
+
34
+ DBADAPTER=mysql bundle exec rspec spec && export MYSQL_SUCCESS=1
35
+ DBADAPTER=mysql bundle exec cucumber features && export CUC_MYSQL_SUCCESS=1
36
+
37
+ unset RAILS_ENV
38
+
39
+ if [ $MYSQL_SUCCESS -eq 0 ] ; then echo "Rspec Mysql Failed" && exit 1; fi
40
+ if [ $PGSQL_SUCCESS -eq 0 ] ; then echo "Rspec Pgsql Failed" && exit 1; fi
41
+ if [ $SQLITE_SUCCESS -eq 0 ] ; then echo "Rspec SQLite Failed" && exit 1; fi
42
+ if [ $CUC_MYSQL_SUCCESS -eq 0 ] ; then echo "Cucumber Mysql Failed" && exit 1; fi
43
+ if [ $CUC_PGSQL_SUCCESS -eq 0 ] ; then echo "Cucumber Pgsql Failed" && exit 1; fi
44
+ if [ $CUC_SQLITE_SUCCESS -eq 0 ] ; then echo "Cucumber SQLite Failed" && exit 1; fi
@@ -0,0 +1,26 @@
1
+ export RAILS_ENV=test
2
+
3
+ # RUN FOR SQLITE
4
+
5
+ cp config/database.sqlite.yml config/database.yml
6
+
7
+ rm db/test.sqlite3
8
+ spring rake db:schema:load
9
+
10
+ export SQLITE_SUCCESS=0
11
+
12
+ DBADAPTER=sqlite bundle exec rspec spec && export SQLITE_SUCCESS=1
13
+
14
+ #RUN FOR MYSQL
15
+ cp config/database.local.yml config/database.yml
16
+
17
+ mysqladmin -f drop newsletter_test
18
+ mysqladmin -f create newsletter_test
19
+ spring rake db:schema:load
20
+
21
+ export MYSQL_SUCCESS=0
22
+
23
+ DBADAPTER=mysql bundle exec rspec spec && export MYSQL_SUCCESS=1
24
+
25
+ if [ $MYSQL_SUCCESS -eq 0 ] ; then exit 1; fi
26
+ if [ $SQLITE_SUCCESS -eq 0 ] ; then exit 1; fi