newsletter 0.1.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +2 -0
  3. data/.ruby-version +1 -1
  4. data/Gemfile +6 -4
  5. data/app/controllers/newsletter/application_controller.rb +6 -3
  6. data/app/controllers/newsletter/designs_controller.rb +1 -1
  7. data/app/controllers/newsletter/pieces_controller.rb +6 -5
  8. data/app/models/newsletter.rb +0 -9
  9. data/app/models/newsletter/design.rb +4 -2
  10. data/app/models/newsletter/element.rb +2 -9
  11. data/app/models/newsletter/field.rb +0 -4
  12. data/app/models/newsletter/piece.rb +1 -1
  13. data/config/spring.rb +1 -0
  14. data/lib/newsletter/settings.rb +3 -3
  15. data/lib/newsletter/version.rb +1 -1
  16. data/newsletter.gemspec +9 -9
  17. data/newsletters/exports/example-export.yaml +134 -147
  18. data/spec/spec_helper.rb +14 -0
  19. data/spec/test_app/.rspec +1 -0
  20. data/spec/test_app/config/cucumber.yml +8 -0
  21. data/spec/test_app/config/database.mysql.yml +28 -0
  22. data/spec/test_app/config/{database.yml → database.sqlite.yml} +0 -0
  23. data/spec/test_app/config/newsletter.yml +2 -2
  24. data/spec/test_app/config/spring.rb +1 -0
  25. data/spec/test_app/db/structure.sql +12 -0
  26. data/spec/test_app/features/step_definitions/.gitkeep +0 -0
  27. data/spec/test_app/features/support/env.rb +58 -0
  28. data/spec/test_app/lib/tasks/cucumber.rake +65 -0
  29. data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_article.html.erb +10 -0
  30. data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_image.html.erb +2 -0
  31. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_article.html.erb +5 -0
  32. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_headline.html.erb +1 -0
  33. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_image.html.erb +1 -0
  34. data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_paragraph.html.erb +3 -0
  35. data/spec/test_app/newsletters/designs/My_Design/layout.html.erb +66 -0
  36. data/spec/test_app/newsletters/designs/Testo_Changeo/elements/_left_column_article.html.erb +10 -0
  37. data/spec/test_app/newsletters/designs/Testo_Changeo/layout.html.erb +66 -0
  38. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_article.html.erb +10 -0
  39. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_image.html.erb +2 -0
  40. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_article.html.erb +5 -0
  41. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_headline.html.erb +1 -0
  42. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_image.html.erb +1 -0
  43. data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_paragraph.html.erb +3 -0
  44. data/spec/test_app/newsletters/designs/empower_innovative_e-business/layout.html.erb +66 -0
  45. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_article.html.erb +10 -0
  46. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_image.html.erb +2 -0
  47. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_article.html.erb +5 -0
  48. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_headline.html.erb +1 -0
  49. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_image.html.erb +1 -0
  50. data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_paragraph.html.erb +3 -0
  51. data/spec/test_app/newsletters/designs/enable_extensible_systems/layout.html.erb +66 -0
  52. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_article.html.erb +10 -0
  53. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_image.html.erb +2 -0
  54. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_article.html.erb +5 -0
  55. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_headline.html.erb +1 -0
  56. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_image.html.erb +1 -0
  57. data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_paragraph.html.erb +3 -0
  58. data/spec/test_app/newsletters/designs/engage_innovative_schemas/layout.html.erb +67 -0
  59. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_article.html.erb +10 -0
  60. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_image.html.erb +2 -0
  61. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_article.html.erb +5 -0
  62. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_headline.html.erb +1 -0
  63. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_image.html.erb +1 -0
  64. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_paragraph.html.erb +3 -0
  65. data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/layout.html.erb +66 -0
  66. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_article.html.erb +10 -0
  67. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_image.html.erb +2 -0
  68. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_article.html.erb +5 -0
  69. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_headline.html.erb +1 -0
  70. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_image.html.erb +1 -0
  71. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_paragraph.html.erb +3 -0
  72. data/spec/test_app/newsletters/designs/harness_integrated_partnerships/layout.html.erb +66 -0
  73. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_article.html.erb +10 -0
  74. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_image.html.erb +2 -0
  75. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_article.html.erb +5 -0
  76. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_headline.html.erb +1 -0
  77. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_image.html.erb +1 -0
  78. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_paragraph.html.erb +3 -0
  79. data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/layout.html.erb +66 -0
  80. data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/elements/_left_column_article.html.erb +10 -0
  81. data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/layout.html.erb +66 -0
  82. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_article.html.erb +10 -0
  83. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_image.html.erb +2 -0
  84. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_article.html.erb +5 -0
  85. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_headline.html.erb +1 -0
  86. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_image.html.erb +1 -0
  87. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_paragraph.html.erb +3 -0
  88. data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/layout.html.erb +67 -0
  89. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_article.html.erb +10 -0
  90. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_image.html.erb +2 -0
  91. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_article.html.erb +5 -0
  92. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_headline.html.erb +1 -0
  93. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_image.html.erb +1 -0
  94. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_paragraph.html.erb +3 -0
  95. data/spec/test_app/newsletters/designs/iterate_strategic_architectures/layout.html.erb +67 -0
  96. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_article.html.erb +10 -0
  97. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_image.html.erb +2 -0
  98. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_article.html.erb +5 -0
  99. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_headline.html.erb +1 -0
  100. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_image.html.erb +1 -0
  101. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_paragraph.html.erb +3 -0
  102. data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/layout.html.erb +67 -0
  103. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_article.html.erb +10 -0
  104. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_image.html.erb +2 -0
  105. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_article.html.erb +5 -0
  106. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_headline.html.erb +1 -0
  107. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_image.html.erb +1 -0
  108. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_paragraph.html.erb +3 -0
  109. data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/layout.html.erb +67 -0
  110. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_article.html.erb +10 -0
  111. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_image.html.erb +2 -0
  112. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_article.html.erb +5 -0
  113. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_headline.html.erb +1 -0
  114. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_image.html.erb +1 -0
  115. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_paragraph.html.erb +3 -0
  116. data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/layout.html.erb +66 -0
  117. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_article.html.erb +10 -0
  118. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_image.html.erb +2 -0
  119. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_article.html.erb +5 -0
  120. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_headline.html.erb +1 -0
  121. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_image.html.erb +1 -0
  122. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_paragraph.html.erb +3 -0
  123. data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/layout.html.erb +66 -0
  124. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_article.html.erb +10 -0
  125. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_image.html.erb +2 -0
  126. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_article.html.erb +5 -0
  127. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_headline.html.erb +1 -0
  128. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_image.html.erb +1 -0
  129. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_paragraph.html.erb +3 -0
  130. data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/layout.html.erb +67 -0
  131. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_article.html.erb +10 -0
  132. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_image.html.erb +2 -0
  133. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_article.html.erb +5 -0
  134. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_headline.html.erb +1 -0
  135. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_image.html.erb +1 -0
  136. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_paragraph.html.erb +3 -0
  137. data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/layout.html.erb +66 -0
  138. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_article.html.erb +10 -0
  139. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_image.html.erb +2 -0
  140. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_article.html.erb +5 -0
  141. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_headline.html.erb +1 -0
  142. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_image.html.erb +1 -0
  143. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_paragraph.html.erb +3 -0
  144. data/spec/test_app/newsletters/designs/target_enterprise_functionalities/layout.html.erb +67 -0
  145. data/spec/test_app/newsletters/designs/transition_enterprise_systems/elements/_left_column_article.html.erb +10 -0
  146. data/spec/test_app/newsletters/designs/transition_enterprise_systems/layout.html.erb +66 -0
  147. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_article.html.erb +10 -0
  148. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_image.html.erb +2 -0
  149. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_article.html.erb +5 -0
  150. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_headline.html.erb +1 -0
  151. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_image.html.erb +1 -0
  152. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_paragraph.html.erb +3 -0
  153. data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/layout.html.erb +66 -0
  154. data/spec/test_app/script/cucumber +10 -0
  155. data/spec/test_app/spec/factories/designs.rb +13 -0
  156. data/spec/test_app/spec/factories/newsletters.rb +28 -0
  157. data/spec/test_app/spec/features/newsletter/newsletter_spec.rb +24 -0
  158. data/spec/test_app/spec/models/newsletter/design_spec.rb +11 -0
  159. data/spec/test_app/spec/models/newsletter/newsletter_spec.rb +27 -0
  160. data/spec/test_app/spec/spec_helper.rb +76 -0
  161. data/spec/test_app/spec/support/database_cleaner.rb +23 -0
  162. metadata +750 -50
  163. data/Procfile +0 -2
  164. data/engine_plan.rb +0 -13
  165. data/lib/newsletter/config.rb +0 -50
  166. data/zeus.json +0 -22
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmM2ZGRjMWQwODBjZjViNDFlMjMxZWUzZTIzNzY3NzFhOGNlMmM2Mw==
4
+ NmM2ZjA1ZGZiODAxODZhNGUzMDZmMGIzZDQ3NTRhYjI0YzEzZDJkNg==
5
5
  data.tar.gz: !binary |-
6
- ZDQ1MzM5YWM1OTQ0Y2I5ZDNhMmM1YmY3OTU4YjU1Y2NiMWE5Mjc4Mw==
6
+ MzJmMjgzYzYwYmZkOGUxYzRhNGM3OTAyYmMzMzAyNDI4MGUzYzFkYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- M2IwYWY3NWJjNzg2MjI1ZjE1MmFkZDIxZjJjNTdhODhkZDVkMmQ5YTY4M2Ew
10
- YWNmZWEyMDQyOTI4NjFlMmExODY5MmI0YmM4MjczNzkwMjkwOGY0YzRjMTJm
11
- M2Y1NDNkNWEwMmM3ZDBlZTQyZDc1MjVkNjJiNDNkMDJhZmY2Nzk=
9
+ ZTZkZDNkZTJkYzczNmQ4ZDViMmQzNTExMjZlMTNkZjZlMWNmZDg1YWRlOTk2
10
+ NzA5NmJkY2MwYzNlNTBkN2EyZjI3YTVkNmFhZGEyZDRkMTc0NmUyMDMxZjE2
11
+ MTgzM2NlMzgxMDUxYzlhOTZiMDBiNzRjMDFjNzRlZGUwNjcxYTE=
12
12
  data.tar.gz: !binary |-
13
- MjU5MWY2Yjc3MGQxMmVmOTUyZmZjMjExOWQ2MDM1Zjc5MjFiNDA4Yjk5OTMz
14
- ZTlhYTc2YTk1ZWVkZjEzYTMzN2NjYzE2Mjc5YzUwNDlmZDAyOGYwM2ZlZDM1
15
- MWRlOTBjYmQ0M2Y3OGI3MGI4MDI5MWUyZTQ4OTY3YjBlZjVkNjc=
13
+ NjYwZTg1MTVlNzgzMzFhYTYwYTIyMGQ4NDJkNTQ4OTFkNDVlY2E0OGZkOTI4
14
+ YzMzZTRlZGNhMGNjZWJmMmU3MjY3ZDU4MTY2NGYzNzRlMTgwZWM1MWMzODNm
15
+ ZjQ1Yjg4OGU5NzA1MzQ3N2QzNzA1Y2NlNTQ5ZGY3YWFiMDk5ZDg=
data/.gitignore CHANGED
@@ -18,3 +18,5 @@ tmp
18
18
  *.sqlite3
19
19
  log
20
20
  *.log
21
+ spec/test_app/designs
22
+ spec/test_app/config/database.yml
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-1.9.3-p547
1
+ ruby-1.9.3-p551
data/Gemfile CHANGED
@@ -14,13 +14,15 @@ gem "jquery-rails"
14
14
  # your gem to rubygems.org.
15
15
 
16
16
  # Testing Gems
17
+ gem 'mysql2'
17
18
  gem "rspec-rails", "~>2.14"
19
+ gem "cucumber-rails", require: false
18
20
  gem "factory_girl_rails", "~>4.3"
21
+ gem 'poltergeist'
19
22
  gem "faker"
20
23
  gem "sqlite3"
21
- gem 'foreman'
22
24
  gem 'database_cleaner'
23
- gem 'guard-rspec'
24
- gem 'guard-livereload'
25
- gem 'zeus'
26
25
  gem 'pry-rails'
26
+ gem 'spring'
27
+ gem 'spring-commands-rspec'
28
+ gem 'spring-commands-cucumber'
@@ -1,9 +1,12 @@
1
1
  require 'dynamic_form'
2
2
  require 'nested_form'
3
- class Newsletter::ApplicationController < ActionController::Base
3
+ class Newsletter::ApplicationController < ApplicationController
4
4
  layout 'newsletter/application'
5
5
  helper_method :title, :use_show_for_resources?, :site_url, :show_title?
6
-
6
+ load_and_authorize_resource if respond_to? :load_and_authorize_resource
7
+
8
+ before_filter :authenticate_user! if respond_to? :authenticate_user!
9
+
7
10
  def title(value=nil)
8
11
  @title = value if value.present?
9
12
  @title
@@ -24,4 +27,4 @@ class Newsletter::ApplicationController < ActionController::Base
24
27
  rescue
25
28
  "#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
26
29
  end
27
- end
30
+ end
@@ -48,4 +48,4 @@ module Newsletter
48
48
  @design = Design.find(params[:id])
49
49
  end
50
50
  end
51
- end
51
+ end
@@ -1,6 +1,5 @@
1
1
  module Newsletter
2
2
  class PiecesController < ::Newsletter::ApplicationController
3
- layout 'admin'
4
3
  before_filter :find_piece, :except => [:new,:create,:index]
5
4
  before_filter :find_newsletter
6
5
  before_filter :find_element
@@ -51,21 +50,23 @@ module Newsletter
51
50
  protected
52
51
 
53
52
  def find_piece
54
- @piece = Piece.find_by_id(params[:id])
53
+ return @piece if @piece.newsletter.present?
54
+ return nil unless params[:id].present?
55
+ @piece ||= Piece.find_by_id(params[:id])
55
56
  end
56
57
 
57
58
  def find_newsletter
58
- return @newsletter = @piece.newsletter unless @piece.nil?
59
+ return @newsletter = find_piece.newsletter unless find_piece.nil?
59
60
  @newsletter = ::Newsletter::Newsletter.find(params[:newsletter_id] || params[:piece][:newsletter_id])
60
61
  end
61
62
 
62
63
  def find_element
63
- return @element = @piece.element unless @piece.nil?
64
+ return @element = find_piece.element unless find_piece.nil?
64
65
  @element = Element.find(params[:element_id] || params[:piece][:element_id])
65
66
  end
66
67
 
67
68
  def find_area
68
- return @area = @piece.area unless @piece.nil?
69
+ return @area = find_piece.area unless find_piece.nil?
69
70
  @area = Area.find(params[:area_id] || params[:piece][:area_id])
70
71
  end
71
72
  end
@@ -1,11 +1,2 @@
1
1
  module Newsletter
2
2
  end
3
-
4
- require 'newsletter/area'
5
- require 'newsletter/asset'
6
- require 'newsletter/element'
7
- require 'newsletter/field'
8
- require 'newsletter/field_value'
9
- require 'newsletter/newsletter'
10
- require 'newsletter/piece'
11
- require 'newsletter/design'
@@ -7,7 +7,7 @@ Newsletter::Designs define a main layout, with areas to group Elements/Pieces.
7
7
 
8
8
  =end
9
9
 
10
- module Newsletter
10
+ module ::Newsletter
11
11
  class Design < ActiveRecord::Base
12
12
  self.table_name = "#{::Newsletter.table_prefix}designs"
13
13
  has_many :areas, :order => :name, :class_name => 'Newsletter::Area'
@@ -49,6 +49,7 @@ module Newsletter
49
49
  def self.import(filename,design_name=nil)
50
50
  raise "You must give a filename to import!" unless filename
51
51
  data = YAML.load_file(filename)
52
+ design = nil
52
53
  transaction do
53
54
  data[:name] = design_name if design_name
54
55
  design = Design.create!(:name => data[:name],
@@ -61,6 +62,7 @@ module Newsletter
61
62
  Element.import(design,element_data)
62
63
  end
63
64
  end
65
+ design
64
66
  end
65
67
 
66
68
  # returns path to newsletter design for use in views and is the same for actual file
@@ -157,4 +159,4 @@ module Newsletter
157
159
  # end
158
160
  # end
159
161
  end
160
- end
162
+ end
@@ -66,16 +66,9 @@ module Newsletter
66
66
  super
67
67
  end
68
68
  end
69
- # {"0"=>{"name"=>"asdfas", "label"=>"asdfasd", "description"=>"fasdfasdf",
70
- # "type"=>"Newsletter::Field::TextArea", "_destroy"=>"false", "id"=>"22"},
71
- # "1"=>{"name"=>"asdfasdf", "label"=>"asdfasdf", "description"=>"asdfasdf",
72
- # "type"=>"Newsletter::Field::InlineAsset", "_destroy"=>"false", "id"=>"23"}}
73
- # # # used to modify Newsletter::Fields in-form
74
- def fields_attributes=(fields_attributes)
75
- @fields_attributes = fields_attributes
76
- end
77
69
 
78
70
  def save_fields
71
+ return true unless @fields_attributes.present?
79
72
  @fields_attributes.each_pair do |index,attributes|
80
73
  should_destroy = ['true','1'].include?attributes.delete(:_destroy)
81
74
  if attributes[:id].blank?
@@ -166,4 +159,4 @@ module Newsletter
166
159
  # end
167
160
  # end
168
161
  end
169
- end
162
+ end
@@ -109,7 +109,3 @@ module Newsletter
109
109
  end
110
110
  end
111
111
 
112
- require 'newsletter/field/inline_asset'
113
- require 'newsletter/field/text'
114
- require 'newsletter/field/text_area'
115
-
@@ -22,7 +22,6 @@ module Newsletter
22
22
  scope :by_area, lambda {|area| {:conditions => {:area_id => area.id, :deleted_at => nil}}}
23
23
  scope :by_newsletter, lambda {|newsletter| {:conditions => {:newsletter_id => newsletter.id, :deleted_at => nil}}}
24
24
 
25
- # accepts_nested_attributes_for :field_values
26
25
  attr_accessor :field_values_attributes
27
26
 
28
27
  attr_protected :id
@@ -43,6 +42,7 @@ module Newsletter
43
42
  end
44
43
 
45
44
  def newsletter
45
+ return nil unless newsletter_id.present?
46
46
  @newsletter ||= ::Newsletter::Newsletter.find(newsletter_id)
47
47
  end
48
48
 
data/config/spring.rb ADDED
@@ -0,0 +1 @@
1
+ Spring.application_root = './spec/test_app'
@@ -41,10 +41,10 @@ class Newsletter::Settings
41
41
  $stderr.puts "Missing Configuration: either define ::Conf with proper values or create a config/newsletter.yml with rake newsletter:default_app_config"
42
42
  end
43
43
  c = ::Newsletter::Settings.new
44
- c.use_file!("#{Rails.root}/config/newsletter.yml")
45
- c.use_file!("#{Rails.root}/config/newsletter.local.yml")
44
+ c.use_file!(standard_file)
45
+ c.use_file!(local_file)
46
46
  c.use_section!(Rails.env)
47
47
  c
48
48
  end
49
49
 
50
- end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Newsletter
2
- VERSION = "0.1.2"
2
+ VERSION = "3.0.0"
3
3
  end
data/newsletter.gemspec CHANGED
@@ -9,19 +9,19 @@ Gem::Specification.new do |gem|
9
9
  gem.version = Newsletter::VERSION
10
10
  gem.authors = ["Lone Star Internet"]
11
11
  gem.email = ["biz@lone-star.net"]
12
- gem.description = %q{Newletter templating and management system.}
13
- gem.summary = %q{ewletter templating and management system.}
12
+ gem.licenses = ['MIT']
13
+ gem.description = %q{Newsletter templating and management system.}
14
+ gem.summary = %q{Newsletter templating and management system.}
14
15
  gem.homepage = "http://ireach.com"
15
16
 
16
17
  gem.add_dependency "rails", "~>3.2"
17
- gem.add_dependency "mini_magick"
18
- gem.add_dependency "will_paginate"
19
- gem.add_dependency 'carrierwave'
20
- gem.add_dependency "delayed_job", "~>4"
18
+ gem.add_dependency "mini_magick", "~>4.1"
19
+ gem.add_dependency "will_paginate", "~>3.0"
20
+ gem.add_dependency 'carrierwave', "~>0.10"
21
21
  gem.add_dependency "dynamic_form", "~>1.1"
22
- gem.add_dependency 'nested_form'
23
- gem.add_dependency 'curb'
24
- gem.add_dependency 'acts_as_list'
22
+ gem.add_dependency 'nested_form', "~>0.3"
23
+ gem.add_dependency 'acts_as_list', "~>0.5"
24
+ gem.add_dependency 'cancancan', "~>1.9"
25
25
 
26
26
  gem.files = `git ls-files`.split($/)
27
27
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -1,213 +1,200 @@
1
- ---
2
- :name: eESI Newsletter
3
- :elements:
1
+ ---
2
+ :name: My Design
3
+ :html_text: ! "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html
4
+ xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\"
5
+ content=\"text/html; charset=utf-8\" />\r\n<title>Simple Newsletter</title>\r\n<style
6
+ type=\"text/css\">\r\nh1{font-family: Arial Black, Arial, Helvetica, sans-serif;
7
+ color: #333333; font-size:22px; margin:0; padding: 20px 0 10px 0; }\r\nh2{font-family:
8
+ Arial Black, Arial, Helvetica, sans-serif; color: #333333; font-size:17px; margin:0;
9
+ padding: 7px 0 0 0;}\r\nh3 {font-family: Arial Black, Arial, Helvetica, sans-serif;
10
+ color: #0068b3; font-size:9pt; margin:0; padding: 0;}\r\np {font-family: Arial,
11
+ Helvetica, sans-serif; color: #333333; font-size:8.5pt; margin-top:4px; margin-bottom:4px;}\r\np.right{font-family:
12
+ Arial, Helvetica, sans-serif; color: #333333; font-size:9.5pt; margin:0 0 15px 0;
13
+ padding: 0; line-height:1.2em;}\r\na{text-decoration:none; color: #0068b3;}\r\na:hover
14
+ {color: #7fc348;}\r\n.footer {font-size:7pt;}\r\np a {font-size: 6pt; font-weight:
15
+ bold;}\r\np.right a {font-size: 7pt;}\r\nhr{color: #7fc348; margin:5px 0; height:
16
+ 1px; padding: 0;}\r\n.bullet {color: #7fc348; font-weight: bold; height: 5px;}\r\np.pullquote
17
+ {color: #333333; background:url(<%= asset_path( \"images/pullquote_bg.gif\") %>)
18
+ repeat-x ; margin:0; padding: 15px; text-align:center; font-style: italic; font-size:
19
+ 7pt;}\r\np.pullquote a { color: #333333;}\r\np.pullquote a:hover {color: #0068b3;}\r\n</style><% unless is_email? %><%=
20
+ yield :head_content %><%= javascript_include_tag :application %><% end %>\r\n</head>\r\n\r\n<body>\r\n<table
21
+ cellspacing=\"0\" cellpadding=\"0\" style=\"margin: 0 8px; width: 574px;\">\r\n<tr><td
22
+ colspan=\"2\" align=\"center\">\r\n<%= image_tag \"images/newsletter_header.gif\",
23
+ \ {:width=>\"564\"} %></td></tr>\r\n<tr bgcolor=\"#0068b3\" cellpadding=\"2\" cellspacing=\"2\"><td
24
+ style=\"font-family:arial,sans-serif;font-size:11px;color:#FFFFFF;\"cellpadding=\"2\"
25
+ cellspacing=\"2\">A Professional Employer Organization Newsletter</td><td align=\"right\"
26
+ style=\"font-family:arial,sans-serif;font-size:12px;color:#FFFFFF;\" cellpadding=\"2\"
27
+ cellspacing=\"2\"><%= @newsletter.name %></td></tr><h3><%= link_to \"Newsletter
28
+ Archives\", \"#{::Newsletter.site_url}/newsletters/archive\", :target => '_blank'
29
+ %></h3>\r\n</table>\r\n\r\n<table cellspacing=\"0\" cellpadding=\"0\" style=\"margin:
30
+ 0 8px; width: 574px;\">\r\n<tr valign=\"top\">\r\n<td width=\"227\">\r\n\r\n<h2>In
31
+ This Issue</h2>\r\n<!-- Left Column -->\r\n<%= render left_column %>\r\n<hr />\r\n\r\n<h3><%=
32
+ link_to \"Newsletter Archives\", \"#{::Newsletter.site_url}/newsletters/archive\",
33
+ :target => '_blank' %></h3>\r\n\r\n\r\n<p>If you missed a previous release or simply
34
+ want to review an article of interest, all our newsletters have been archived. <%=
35
+ link_to \"Read More\", \"#{::Newsletter.site_url}/newsletters/archive\" %></p>\r\n\r\n\r\n</td>\r\n<!--Right
36
+ Column-->\r\n<td width=\"347\" style=\"padding-left: 15px; padding-top: 20px;\">\r\n<%=
37
+ render right_column %>\r\n</td>\r\n</tr>\r\n\r\n<% if is_email? %>\r\n<tr><td colspan=\"3\"><hr
38
+ /><p class=\"footer\" align=\"center\"><font color=\"#aaaaaa\">To remove your address
39
+ from this newsletter list, please click <%= link_to \"Here\", '#UNSUBSCRIBE_URL#'
40
+ %>.</font></p></td></tr>\r\n<% end %>\r\n\r\n<tr><td colspan=\"3\"><hr /><p class=\"footer\"
41
+ align=\"center\"><font color=\"#555555\"><b>My Company, Inc.</b> <span class=\"bullet\">&#8226;</span>
42
+ 123 Test Road <span class=\"bullet\">&#8226;</span> Austin, TX 78230 p:210.495.1171
43
+ <span class=\"bullet\">&#8226;</span> f:555.555.1244 <span class=\"bullet\">&#8226;</span>
44
+ toll free: 1.800.555.5555</font></p></td></tr>\r\n\r\n\r\n\r\n\r\n\r\n\r\n</table>\r\n</body>\r\n</html>\r\n"
45
+ :description: This is the simple newsletter template.
46
+ :areas:
47
+ - :name: left_column
48
+ :description: This will house the elements of the 'left_column'
49
+ - :name: right_column
50
+ :description: This will house the elements of the 'right_column'
51
+ :elements:
4
52
  - :name: Left Column Article
5
- :areas:
53
+ :description: Has a heading, an excerpt, and a Read More link
54
+ :html_text: ! '<hr />
55
+
56
+ <h3>
57
+
58
+ <% unless link.url.blank? %>
59
+
60
+ <%= link_to headline, link.url %>
61
+
62
+ <% else %>
63
+
64
+ <%=h headline %>
65
+
66
+ <% end %>
67
+
68
+ </h3>
69
+
70
+
71
+ <p><%= filter(article_excerpt) %> <nobr><%= link_to(''Read More'', link.url) unless
72
+ link.url.blank? %></nobr></p>
73
+
74
+ '
75
+ :areas:
6
76
  - :name: left_column
7
77
  :description: This will house the elements of the 'left_column'
8
- :description: Has a heading, an excerpt, and a Read More link
9
- :fields:
78
+ :fields:
10
79
  - :name: article_excerpt
80
+ :label: Article Excerpt
11
81
  :sequence:
82
+ :is_required:
12
83
  :description: Article Excerpt
13
- :label: Article Excerpt
14
84
  :type: Newsletter::Field::TextArea
15
- :is_required:
16
85
  - :name: link
86
+ :label: Read More Link
17
87
  :sequence:
88
+ :is_required:
18
89
  :description: Read More Link
19
- :label: Read More Link
20
90
  :type: Newsletter::Field::InlineAsset
21
- :is_required:
22
91
  - :name: headline
92
+ :label: Headline
23
93
  :sequence:
94
+ :is_required:
24
95
  :description: Headline
25
- :label: Headline
26
96
  :type: Newsletter::Field::Text
27
- :is_required:
28
- :html_text: |
29
- <hr />
30
- <h3>
31
- <% unless link.url.blank? %>
32
- <%= link_to headline, link.url %>
33
- <% else %>
34
- <%=h headline %>
35
- <% end %>
36
- </h3>
37
-
38
- <p><%= filter(article_excerpt) %> <nobr><%= link_to('Read More', link.url) unless link.url.blank? %></nobr></p>
39
-
40
97
  - :name: Left Column Image
41
- :areas:
98
+ :description: Image that is formatted for the left column
99
+ :html_text: ! '<hr />
100
+
101
+ <p><%= image_tag image.url, {:width=>"220", :alt=>image.text } %></p>
102
+
103
+ '
104
+ :areas:
42
105
  - :name: left_column
43
106
  :description: This will house the elements of the 'left_column'
44
- :description: Image that is formatted for the left column
45
- :fields:
107
+ :fields:
46
108
  - :name: image
109
+ :label: Image
47
110
  :sequence: 1
111
+ :is_required: true
48
112
  :description: image formatted for left column
49
- :label: Image
50
113
  :type: Newsletter::Field::InlineAsset
51
- :is_required: true
52
- :html_text: |
53
- <hr />
54
- <p><%= image_tag image.url, {:width=>"220", :alt=>image.text } %></p>
55
-
56
114
  - :name: Right column article
57
- :areas:
115
+ :description: RIght Column Article
116
+ :html_text: ! '<h1><%= headline %></h1>
117
+
118
+ <p class="right">
119
+
120
+ <%= image_tag(image.url, {:width=>"174", :vspace=>"5", :hspace=>"10", :align=>"left",
121
+ :alt => image.text} ) unless image.url.blank? %>
122
+
123
+ <%= filter(article_excerpt) %>
124
+
125
+ <nobr><%= link_to(''Read More'', link.url) unless link.url.blank? %></nobr></p>'
126
+ :areas:
58
127
  - :name: right_column
59
128
  :description: This will house the elements of the 'right_column'
60
- :description: RIght Column Article
61
- :fields:
129
+ :fields:
62
130
  - :name: headline
131
+ :label: Headline
63
132
  :sequence:
133
+ :is_required:
64
134
  :description: Headline
65
- :label: Headline
66
135
  :type: Newsletter::Field::Text
67
- :is_required:
68
136
  - :name: image
137
+ :label: Image
69
138
  :sequence:
139
+ :is_required:
70
140
  :description: Article Image
71
- :label: Image
72
141
  :type: Newsletter::Field::InlineAsset
73
- :is_required:
74
142
  - :name: link
143
+ :label: Read More Link
75
144
  :sequence:
145
+ :is_required:
76
146
  :description: Read More Link
77
- :label: Read More Link
78
147
  :type: Newsletter::Field::InlineAsset
79
- :is_required:
80
148
  - :name: article_excerpt
149
+ :label: Article Excerpt
81
150
  :sequence:
151
+ :is_required:
82
152
  :description: Article Excerpt
83
- :label: Article Excerpt
84
153
  :type: Newsletter::Field::TextArea
85
- :is_required:
86
- :html_text: |-
87
- <h1><%= headline %></h1>
88
- <p class="right">
89
- <%= image_tag(image.url, {:width=>"174", :vspace=>"5", :hspace=>"10", :align=>"left", :alt => image.text} ) unless image.url.blank? %>
90
- <%= filter(article_excerpt) %>
91
- <nobr><%= link_to('Read More', link.url) unless link.url.blank? %></nobr></p>
92
154
  - :name: Right Column Headline
93
- :areas:
155
+ :description: Headline for use in the right column!
156
+ :html_text: <h1><%= headline %></h1>
157
+ :areas:
94
158
  - :name: right_column
95
159
  :description: This will house the elements of the 'right_column'
96
- :description: Headline for use in the right column!
97
- :fields:
160
+ :fields:
98
161
  - :name: headline
162
+ :label: Headline
99
163
  :sequence:
164
+ :is_required:
100
165
  :description: Headline
101
- :label: Headline
102
166
  :type: Newsletter::Field::Text
103
- :is_required:
104
- :html_text: <h1><%= headline %></h1>
105
167
  - :name: Right Column Image
106
- :areas:
168
+ :description: Image for use in the right column
169
+ :html_text: ! '<%= image_tag image.url, {:width=>"320", :alt=>image.text, :style=>"margin:0;
170
+ padding: 15px 0 0 0;"} %>'
171
+ :areas:
107
172
  - :name: right_column
108
173
  :description: This will house the elements of the 'right_column'
109
- :description: Image for use in the right column
110
- :fields:
174
+ :fields:
111
175
  - :name: image
176
+ :label: Image
112
177
  :sequence:
178
+ :is_required:
113
179
  :description: Right Column Image
114
- :label: Image
115
180
  :type: Newsletter::Field::InlineAsset
116
- :is_required:
117
- :html_text: "<%= image_tag image.url, {:width=>\"320\", :alt=>image.text, :style=>\"margin:0; padding: 15px 0 0 0;\"} %>"
118
181
  - :name: Right Column Paragraph
119
- :areas:
182
+ :description: paragraph for use in the right column, may contain a link
183
+ :html_text: ! "<p class=\"right\">\n\t<%= filter(body) %> <%= link_to 'Read More',
184
+ link.url unless link.url.blank? %>\n</p>"
185
+ :areas:
120
186
  - :name: right_column
121
187
  :description: This will house the elements of the 'right_column'
122
- :description: paragraph for use in the right column, may contain a link
123
- :fields:
188
+ :fields:
124
189
  - :name: link
190
+ :label: Link
125
191
  :sequence:
192
+ :is_required:
126
193
  :description: Link
127
- :label: Link
128
194
  :type: Newsletter::Field::InlineAsset
129
- :is_required:
130
195
  - :name: body
196
+ :label: Body
131
197
  :sequence:
198
+ :is_required:
132
199
  :description: Body
133
- :label: Body
134
200
  :type: Newsletter::Field::TextArea
135
- :is_required:
136
- :html_text: |-
137
- <p class="right">
138
- <%= filter(body) %> <%= link_to 'Read More', link.url unless link.url.blank? %>
139
- </p>
140
- :areas:
141
- - :name: left_column
142
- :description: This will house the elements of the 'left_column'
143
- - :name: right_column
144
- :description: This will house the elements of the 'right_column'
145
- :description: This is the monthly newsletter template for eEmployers
146
- :html_text: |
147
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
148
- <html xmlns="http://www.w3.org/1999/xhtml">
149
- <head>
150
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
151
- <title>eEmployers Newsletter</title>
152
- <style type="text/css">
153
- h1{font-family: Arial Black, Arial, Helvetica, sans-serif; color: #333333; font-size:22px; margin:0; padding: 20px 0 10px 0; }
154
- h2{font-family: Arial Black, Arial, Helvetica, sans-serif; color: #333333; font-size:17px; margin:0; padding: 7px 0 0 0;}
155
- h3 {font-family: Arial Black, Arial, Helvetica, sans-serif; color: #0068b3; font-size:9pt; margin:0; padding: 0;}
156
- p {font-family: Arial, Helvetica, sans-serif; color: #333333; font-size:8.5pt; margin-top:4px; margin-bottom:4px;}
157
- p.right{font-family: Arial, Helvetica, sans-serif; color: #333333; font-size:9.5pt; margin:0 0 15px 0; padding: 0; line-height:1.2em;}
158
- a{text-decoration:none; color: #0068b3;}
159
- a:hover {color: #7fc348;}
160
- .footer {font-size:7pt;}
161
- p a {font-size: 6pt; font-weight: bold;}
162
- p.right a {font-size: 7pt;}
163
- hr{color: #7fc348; margin:5px 0; height: 1px; padding: 0;}
164
- .bullet {color: #7fc348; font-weight: bold; height: 5px;}
165
- p.pullquote {color: #333333; background:url(http://www.eesipeo.com/newsletter_images/pullquote_bg.gif) repeat-x ; margin:0; padding: 15px; text-align:center; font-style: italic; font-size: 7pt;}
166
- p.pullquote a { color: #333333;}
167
- p.pullquote a:hover {color: #0068b3;}
168
- </style><%= yield :head_content %><%= javascript_include_tag :defaults %>
169
- </head>
170
-
171
- <body>
172
- <table cellspacing="0" cellpadding="0" style="margin: 0 8px; width: 574px;">
173
- <tr><td colspan="2" align="center">
174
- <%= image_tag "#{::Newsletter.site_url}/images/newsletter_header.gif", {:width=>"564"} %></td></tr>
175
- <tr bgcolor="#0068b3" cellpadding="2" cellspacing="2"><td style="font-family:arial,sans-serif;font-size:11px;color:#FFFFFF;"cellpadding="2" cellspacing="2">A Professional Employer Organization Newsletter</td><td align="right" style="font-family:arial,sans-serif;font-size:12px;color:#FFFFFF;" cellpadding="2" cellspacing="2"><%= @newsletter.name %></td></tr>
176
- </table>
177
-
178
- <table cellspacing="0" cellpadding="0" style="margin: 0 8px; width: 574px;">
179
- <tr valign="top">
180
- <td width="227">
181
-
182
- <h2>In This Issue</h2>
183
- <!-- Left Column -->
184
- <%= render left_column %>
185
- <hr />
186
-
187
- <h3><%= link_to "PeopleTalk Archives", "http://test1.lnstar.com/newsletters/archive", :target => '_blank' %></h3>
188
-
189
- <p>If you missed a previous release or simply want to review an article of interest, all our PeopleTalk newsletters have been archived. <%= link_to "Read More", "http://test1.lnstar.com/newsletters/archive" %></p>
190
-
191
-
192
- </td>
193
- <!--Right Column-->
194
- <td width="347" style="padding-left: 15px; padding-top: 20px;">
195
- <%= render right_column %>
196
- </td>
197
- </tr>
198
-
199
- <% if is_email? %>
200
- <tr><td colspan="3"><hr /><p class="footer" align="center"><font color="#aaaaaa">To remove your address from this newsletter list, please click <%= link_to "Here", '#UNSUBSCRIBE_URL#' %>.</font></p></td></tr>
201
- <% end %>
202
-
203
- <tr><td colspan="3"><hr /><p class="footer" align="center"><font color="#555555"><b>eEmployers Solutions, Inc.</b> <span class="bullet">&#8226;</span> 12211 Huebner Road <span class="bullet">&#8226;</span> San Antonio, TX 78230 p:210.495.1171 <span class="bullet">&#8226;</span> f:210.495.1244 <span class="bullet">&#8226;</span> toll free: 1.888.465.1171</font></p></td></tr>
204
-
205
-
206
-
207
-
208
-
209
-
210
- </table>
211
- </body>
212
- </html>
213
-