newsletter 3.2.6 → 3.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/app/controllers/newsletter/newsletters_controller.rb +8 -2
  4. data/app/models/newsletter/design.rb +11 -6
  5. data/app/models/newsletter/element.rb +1 -1
  6. data/app/models/newsletter/newsletter.rb +5 -0
  7. data/app/views/newsletter/designs/_form.html.erb +2 -0
  8. data/app/views/newsletter/newsletters/_head.html.erb +1 -1
  9. data/app/views/newsletter/newsletters/_newsletter.html.erb +13 -2
  10. data/app/views/newsletter/newsletters/archive.html.erb +1 -1
  11. data/app/views/newsletter/newsletters/edit.html.erb +1 -1
  12. data/app/views/newsletter/newsletters/show.css.erb +1 -0
  13. data/app/views/newsletter/newsletters/show.html.erb +13 -2
  14. data/app/views/newsletter/newsletters/stylesheet.css +1 -0
  15. data/config/locales/newsletters.en.yml +1 -0
  16. data/config/routes.rb +1 -1
  17. data/db/migrate/002_carrier_wave_for_assets.rb +19 -0
  18. data/db/migrate/003_add_stylesheet_text_to_designs.rb +12 -0
  19. data/designs/exports/example-export.yaml +61 -268
  20. data/lib/newsletter/engine.rb +7 -1
  21. data/lib/newsletter/version.rb +1 -1
  22. data/newsletter.gemspec +11 -0
  23. data/spec/test_app/config/database.postgres.yml +3 -3
  24. data/spec/test_app/db/migrate/20150507154748_carrier_wave_for_assets.rb +19 -0
  25. data/spec/test_app/db/migrate/20150507195612_add_stylesheet_text_to_designs.rb +12 -0
  26. data/spec/test_app/db/schema.rb +5 -4
  27. data/spec/test_app/script/full_suite +3 -3
  28. data/spec/test_app/spec/factories/designs.rb +3 -1
  29. data/spec/test_app/spec/factories/newsletters.rb +1 -1
  30. data/spec/test_app/spec/features/newsletter/design_spec.rb +2 -0
  31. data/spec/test_app/spec/models/newsletter/design_spec.rb +27 -3
  32. data/spec/test_app/spec/models/newsletter/engine_spec.rb +11 -0
  33. data/spec/test_app/spec/models/newsletter/newsletter_spec.rb +21 -0
  34. data/spec/test_app/spec/support/files/newsletter_empty_table_prefix.yml +12 -0
  35. metadata +21 -3
@@ -106,6 +106,8 @@ module Newsletter
106
106
  ::Newsletter::Area,
107
107
  ::Newsletter::Field
108
108
  ]
109
+ can [:sort,:publish,:unpublish], ::Newsletter::Newsletter
110
+ can :sort, ::Newsletter::Area
109
111
  end
110
112
  can :read, [
111
113
  ::Newsletter::Newsletter,
@@ -125,7 +127,11 @@ module Newsletter
125
127
  # initializes the configuration options pulled from config/newsletter.yml and
126
128
  # overrides with config/newsletter.local.yml if it exists
127
129
  def self.initialize_with_config(conf)
128
- ::Newsletter.table_prefix ||= conf.table_prefix || 'newsletter_' rescue 'newsletter_'
130
+ if conf.params.has_key?('table_prefix')
131
+ ::Newsletter.table_prefix ||= conf.table_prefix.to_s # allow empty
132
+ else
133
+ ::Newsletter.table_prefix ||= 'newsletter_'
134
+ end
129
135
  ::Newsletter.designs_path ||= conf.designs_path || "#{Rails.root}/designs" rescue "#{Rails.root}/designs"
130
136
  default_url_options = ActionController::Base.default_url_options
131
137
  default_site_url = "#{default_url_options[:protocol]||'http'}://#{default_url_options[:domain]}"
@@ -1,3 +1,3 @@
1
1
  module Newsletter
2
- VERSION = "3.2.6"
2
+ VERSION = "3.2.7"
3
3
  end
@@ -13,6 +13,17 @@ Gem::Specification.new do |gem|
13
13
  gem.description = %q{Email newsletter templating and management system which allows a designer to develop templates and elements that are email-friendly and allows a user to create newsletters without html/css knowledge utilizing a wysiwyg interface. Also available with the mail manager (including contact and mailing list management, double opt-in mailing list sign up, mailer, and bounce processing) and user access as the iReach gem.}
14
14
  gem.summary = %q{Newsletter templating and management system.}
15
15
  gem.homepage = "http://ireachnews.com"
16
+ gem.post_install_message = <<-EOT
17
+ Added 'Style Sheet' text area to newsletter design.
18
+ **This allows us to properly trigger viewport for mobile window size in newsletter editor.
19
+
20
+ ** Required Actions ( pre 3.2.7 ) **
21
+ Please move your inline styles to the new 'Style Sheet' text area in the newsletter design editor.
22
+
23
+ ** Required Actions for every upgrade **
24
+ rake newsletter:upgrade # this adds any new migrations and migrates your DB ...
25
+ ** NOTE! you should try this in development before pushing to your production site
26
+ EOT
16
27
 
17
28
  gem.add_dependency "rails", "~>3.2"
18
29
  gem.add_dependency "jquery-rails", "~>3.1"
@@ -10,12 +10,12 @@ credentials: &credentials
10
10
 
11
11
  development:
12
12
  <<: *credentials
13
- database: mail_manager_development
13
+ database: newsletter_development
14
14
 
15
15
  test:
16
16
  <<: *credentials
17
- database: mail_manager_test
17
+ database: newsletter_test
18
18
 
19
19
  production:
20
20
  <<: *credentials
21
- database: mail_manager
21
+ database: newsletter
@@ -0,0 +1,19 @@
1
+ class CarrierWaveForAssets < ActiveRecord::Migration
2
+ def up
3
+ table_prefix = 'newsletter_'
4
+ begin
5
+ table_prefix = ::Newsletter.table_prefix
6
+ rescue
7
+ end
8
+ rename_column :"#{table_prefix}assets", :filename, :image
9
+ end
10
+
11
+ def down
12
+ table_prefix = 'newsletter_'
13
+ begin
14
+ table_prefix = ::Newsletter.table_prefix
15
+ rescue
16
+ end
17
+ rename_column :"#{table_prefix}assets", :image, :filename
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ class AddStylesheetTextToDesigns < ActiveRecord::Migration
2
+ def table_prefix
3
+ table_prefix = 'newsletter_'
4
+ begin
5
+ table_prefix = ::Newsletter.table_prefix
6
+ rescue
7
+ end
8
+ end
9
+ def change
10
+ add_column :"#{table_prefix}designs", :stylesheet_text, :text
11
+ end
12
+ 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 => 20150414102034) do
14
+ ActiveRecord::Schema.define(:version => 20150507195612) do
15
15
 
16
16
  create_table "news_areas", :force => true do |t|
17
17
  t.string "name", :null => false
@@ -45,13 +45,14 @@ ActiveRecord::Schema.define(:version => 20150414102034) do
45
45
  end
46
46
 
47
47
  create_table "news_designs", :force => true do |t|
48
- t.string "name", :null => false
48
+ t.string "name", :null => false
49
49
  t.string "description"
50
50
  t.text "html_design"
51
51
  t.integer "updated_by"
52
52
  t.datetime "deleted_at"
53
- t.datetime "created_at", :null => false
54
- t.datetime "updated_at", :null => false
53
+ t.datetime "created_at", :null => false
54
+ t.datetime "updated_at", :null => false
55
+ t.text "stylesheet_text"
55
56
  end
56
57
 
57
58
  create_table "news_elements", :force => true do |t|
@@ -10,14 +10,14 @@ export CUC_SQLITE_SUCCESS=0
10
10
  DBADAPTER=sqlite bundle exec rspec spec && export SQLITE_SUCCESS=1
11
11
  DBADAPTER=sqlite bundle exec cucumber features && export CUC_SQLITE_SUCCESS=1
12
12
 
13
- if [ $POSTGRES -eq 1 ]; then
13
+ if [ "$POSTGRES" -eq "1" ]; then
14
14
  #RUN FOR Postgresql
15
15
  cp config/database.postgres.local.yml config/database.yml
16
16
 
17
17
  bundle exec rake db:schema:load
18
18
 
19
19
  export PGSQL_SUCCESS=0
20
- export CUCPGSQL_SUCCESS=0
20
+ export CUC_PGSQL_SUCCESS=0
21
21
 
22
22
  DBADAPTER=pg bundle exec rspec spec && export PGSQL_SUCCESS=1
23
23
  DBADAPTER=pg bundle exec cucumber features && export CUC_PGSQL_SUCCESS=1
@@ -29,7 +29,7 @@ cp config/database.mysql.local.yml config/database.yml
29
29
  bundle exec rake db:schema:load
30
30
 
31
31
  export MYSQL_SUCCESS=0
32
- export CUCMYSQL_SUCCESS=0
32
+ export CUC_MYSQL_SUCCESS=0
33
33
 
34
34
  DBADAPTER=mysql bundle exec rspec spec && export MYSQL_SUCCESS=1
35
35
  DBADAPTER=mysql bundle exec cucumber features && export CUC_MYSQL_SUCCESS=1
@@ -2,7 +2,9 @@
2
2
  def import_design(file=nil, name=nil)
3
3
  name ||= Faker::Company.bs.split(/\s+/).each(&:capitalize).join(' ')
4
4
  file ||= File.join(Newsletter::PLUGIN_ROOT,'designs','exports','example-export.yaml')
5
- Newsletter::Design.import(file,name)
5
+ design = Newsletter::Design.import(file,name)
6
+ design.update_attribute(:stylesheet_text, ".blah{background-color: red}")
7
+ design
6
8
  end
7
9
 
8
10
  FactoryGirl.define do
@@ -3,7 +3,7 @@
3
3
  FactoryGirl.define do
4
4
  factory :newsletter, class: Newsletter::Newsletter do
5
5
  name {Faker::Company.name}
6
- description {Faker::Lorem.paragraphs(1)[0..125]}
6
+ description {Faker::Lorem.paragraphs(1).join("\n")[0..125]}
7
7
  association :design
8
8
  pieces do |newsletter|
9
9
  left_area = newsletter.design.areas.where(name: 'left_column').first
@@ -19,6 +19,7 @@ EOT
19
19
  fill_in "Name", with: "My Design"
20
20
  fill_in "Description", with: "This is an awesome design!"
21
21
  fill_in "HTML code", with: left_area_only_layout
22
+ fill_in "Style Sheet", with: ".bobos { background-color: blue; }"
22
23
  click_link "Add Area"
23
24
  find(:css, ".area input").set 'left_area'
24
25
  click_button "Submit"
@@ -41,6 +42,7 @@ EOT
41
42
  @right_area = @design.areas.detect{|a| a.name.eql?('right_area')}
42
43
  @left_area = @design.areas.detect{|a| a.name.eql?('left_area')}
43
44
  expect(remove_whitespace(@design.html_text)).to eq remove_whitespace(full_layout)
45
+ expect(@design.stylesheet_text).to eq ".bobos { background-color: blue; }"
44
46
  end
45
47
  and_it "when managing elements" do
46
48
  and_it "can create an element with a text area in the left area" do
@@ -9,6 +9,27 @@ RSpec.describe Newsletter::Design do
9
9
  expect(@design.name).to eq("My Design")
10
10
  end
11
11
 
12
+ context "when name changed/moved" do
13
+ it "moves its images" do
14
+ old_images_path = @design.images_path
15
+ old_name = @design.name
16
+ expect(@design.images_path).to include("public/images/#{@design.name_as_path(@design.name)}")
17
+ expect(File.exist?(@design.images_path)).to be true
18
+ new_name = @design.name + " NEW!"
19
+ expect{@design.update_attributes(name: new_name)}.not_to raise_error
20
+ expect(@design.name).to eq new_name
21
+ expect(@design.images_path).to include("public/images/#{@design.name_as_path(new_name)}")
22
+ expect(File.exist?(old_images_path)).to be false
23
+ expect(File.exist?(@design.images_path)).to be true
24
+ end
25
+ end
26
+
27
+ context "has an associated stylesheet" do
28
+ it "that is accessible" do
29
+ expect{@design.stylesheet_text}.not_to raise_error
30
+ end
31
+ end
32
+
12
33
  context "whether it exports and imports correctly" do
13
34
  it "doesn't blow up" do
14
35
  reimported_design = nil
@@ -20,11 +41,14 @@ RSpec.describe Newsletter::Design do
20
41
  )
21
42
  end
22
43
  and_it "has the same elements" do
23
- expect(@design.elements.pluck(:name).sort).to eq reimported_design.elements.
24
- pluck(:name).sort
44
+ expect(reimported_design.elements.pluck(:name).sort).to eq @design.
45
+ elements.pluck(:name).sort
25
46
  end
26
47
  and_it "knows its images" do
27
- expect(@design.images).to include("newsletter_header.png")
48
+ expect(reimported_design.images).to include("newsletter_header.png")
49
+ end
50
+ and_it "knows its stylesheet" do
51
+ expect(reimported_design.stylesheet_text).to eq @design.stylesheet_text
28
52
  end
29
53
  end
30
54
 
@@ -0,0 +1,11 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Newsletter::Engine do
4
+ it "can set table prefix to empty" do
5
+ Newsletter.table_prefix = nil
6
+ conf = Newsletter::Settings.new(
7
+ 'spec/support/files/newsletter_empty_table_prefix.yml')
8
+ Newsletter.initialize_with_config(conf)
9
+ expect(Newsletter.table_prefix).to eq ''
10
+ end
11
+ end
@@ -25,6 +25,10 @@ RSpec.describe Newsletter::Newsletter do
25
25
  expect(@newsletter.generate(:email)).not_to include('<script>')
26
26
  end
27
27
 
28
+ it "contains its stylesheet" do
29
+ expect(@newsletter.generate(:email)).to match %r|<style>\s+#{@design.stylesheet_text}\s+</style>|
30
+ end
31
+
28
32
  it "can generate an email_html" do
29
33
  email_html = @newsletter.email_html
30
34
  expect(email_html.strip).not_to eq ''
@@ -89,6 +93,23 @@ EOT
89
93
  end
90
94
  end
91
95
 
96
+ it "contains its stylesheet for public generation", js: true do
97
+ visit '/newsletters/archive'
98
+ expect(@newsletter.generate(:public)).to \
99
+ match %r|<link.*/newsletters/#{@newsletter.id}/stylesheet.css|
100
+ end
101
+
102
+ it "returns its stylesheet from the public url: /newsletters/:id/stylesheet.css" do
103
+ visit "/newsletters/#{@newsletter.id}/stylesheet.css"
104
+ expect(page.body.strip).to eq @newsletter.design.stylesheet_text.strip
105
+ end
106
+
107
+ it "contains its stylesheet for editor generation", js: true do
108
+ visit '/newsletters/archive'
109
+ expect(@newsletter.generate(:editor)).to \
110
+ match %r|<link.*/newsletters/#{@newsletter.id}/stylesheet.css|
111
+ end
112
+
92
113
  context "regarding its public url" do
93
114
  it "goes to the default without any mode" do
94
115
  expect(@newsletter.public_url).to eq \
@@ -0,0 +1,12 @@
1
+ ---
2
+ common:
3
+ site_url: http://newsletter.dev
4
+ table_prefix:
5
+ designs_path: <%= "#{Rails.root}/" %>
6
+ use_show_for_resources: false
7
+ asset_path: newsletter_assets
8
+ site_path: /
9
+ layout: newsletter/application
10
+ test:
11
+ site_url: http://newsletter.lvh.me:4447
12
+ designs_path: <%= "#{Rails.root}/tmp" %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newsletter
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.6
4
+ version: 3.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lone Star Internet
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-30 00:00:00.000000000 Z
12
+ date: 2015-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -247,7 +247,9 @@ files:
247
247
  - app/views/newsletter/newsletters/edit.html.erb
248
248
  - app/views/newsletter/newsletters/index.html.erb
249
249
  - app/views/newsletter/newsletters/new.html.erb
250
+ - app/views/newsletter/newsletters/show.css.erb
250
251
  - app/views/newsletter/newsletters/show.html.erb
252
+ - app/views/newsletter/newsletters/stylesheet.css
251
253
  - app/views/newsletter/pieces/_form.html.erb
252
254
  - app/views/newsletter/pieces/edit.html.erb
253
255
  - app/views/newsletter/pieces/new.html.erb
@@ -258,6 +260,8 @@ files:
258
260
  - config/routes.rb
259
261
  - config/spring.rb
260
262
  - db/migrate/001_newsletter_initial.rb
263
+ - db/migrate/002_carrier_wave_for_assets.rb
264
+ - db/migrate/003_add_stylesheet_text_to_designs.rb
261
265
  - db/pre-scoped/002_newsletter_scoped.rb
262
266
  - designs/exports/Example.yml
263
267
  - designs/exports/example-export.yaml
@@ -310,6 +314,8 @@ files:
310
314
  - spec/test_app/config/spring.rb
311
315
  - spec/test_app/db/migrate/20131222171229_newsletter_initial.rb
312
316
  - spec/test_app/db/migrate/20131222171230_create_users.rb
317
+ - spec/test_app/db/migrate/20150507154748_carrier_wave_for_assets.rb
318
+ - spec/test_app/db/migrate/20150507195612_add_stylesheet_text_to_designs.rb
313
319
  - spec/test_app/db/schema.rb
314
320
  - spec/test_app/features/newsletter_management.feature
315
321
  - spec/test_app/features/piece_management.feature
@@ -348,6 +354,7 @@ files:
348
354
  - spec/test_app/spec/models/newsletter/asset_spec.rb
349
355
  - spec/test_app/spec/models/newsletter/design_spec.rb
350
356
  - spec/test_app/spec/models/newsletter/element_spec.rb
357
+ - spec/test_app/spec/models/newsletter/engine_spec.rb
351
358
  - spec/test_app/spec/models/newsletter/inline_asset_spec.rb
352
359
  - spec/test_app/spec/models/newsletter/newsletter_spec.rb
353
360
  - spec/test_app/spec/models/newsletter/piece_spec.rb
@@ -358,13 +365,20 @@ files:
358
365
  - spec/test_app/spec/support/continuances.rb
359
366
  - spec/test_app/spec/support/database_cleaner.rb
360
367
  - spec/test_app/spec/support/files/iReach_logo.gif
368
+ - spec/test_app/spec/support/files/newsletter_empty_table_prefix.yml
361
369
  - spec/test_app/spec/support/files/test.pdf
362
370
  - spec/test_app/spec/support/functions.rb
363
371
  homepage: http://ireachnews.com
364
372
  licenses:
365
373
  - MIT
366
374
  metadata: {}
367
- post_install_message:
375
+ post_install_message: " Added 'Style Sheet' text area to newsletter design.\n **This
376
+ allows us to properly trigger viewport for mobile window size in newsletter editor.\n
377
+ \ \n ** Required Actions ( pre 3.2.7 ) **\n Please move your inline styles
378
+ to the new 'Style Sheet' text area in the newsletter design editor.\n \n **
379
+ Required Actions for every upgrade **\n rake newsletter:upgrade # this adds any
380
+ new migrations and migrates your DB ...\n ** NOTE! you should try this in development
381
+ before pushing to your production site\n"
368
382
  rdoc_options: []
369
383
  require_paths:
370
384
  - lib
@@ -423,6 +437,8 @@ test_files:
423
437
  - spec/test_app/config/spring.rb
424
438
  - spec/test_app/db/migrate/20131222171229_newsletter_initial.rb
425
439
  - spec/test_app/db/migrate/20131222171230_create_users.rb
440
+ - spec/test_app/db/migrate/20150507154748_carrier_wave_for_assets.rb
441
+ - spec/test_app/db/migrate/20150507195612_add_stylesheet_text_to_designs.rb
426
442
  - spec/test_app/db/schema.rb
427
443
  - spec/test_app/features/newsletter_management.feature
428
444
  - spec/test_app/features/piece_management.feature
@@ -461,6 +477,7 @@ test_files:
461
477
  - spec/test_app/spec/models/newsletter/asset_spec.rb
462
478
  - spec/test_app/spec/models/newsletter/design_spec.rb
463
479
  - spec/test_app/spec/models/newsletter/element_spec.rb
480
+ - spec/test_app/spec/models/newsletter/engine_spec.rb
464
481
  - spec/test_app/spec/models/newsletter/inline_asset_spec.rb
465
482
  - spec/test_app/spec/models/newsletter/newsletter_spec.rb
466
483
  - spec/test_app/spec/models/newsletter/piece_spec.rb
@@ -471,5 +488,6 @@ test_files:
471
488
  - spec/test_app/spec/support/continuances.rb
472
489
  - spec/test_app/spec/support/database_cleaner.rb
473
490
  - spec/test_app/spec/support/files/iReach_logo.gif
491
+ - spec/test_app/spec/support/files/newsletter_empty_table_prefix.yml
474
492
  - spec/test_app/spec/support/files/test.pdf
475
493
  - spec/test_app/spec/support/functions.rb