spree_zaez_banner 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +12 -0
  5. data/Gemfile +7 -0
  6. data/Guardfile +90 -0
  7. data/LICENSE +26 -0
  8. data/README.md +66 -0
  9. data/Rakefile +21 -0
  10. data/app/assets/javascripts/spree/backend/app/banner_box_settings/banner_box_setting.js.coffee +65 -0
  11. data/app/assets/javascripts/spree/backend/app/banner_box_settings/banner_box_style.js.coffee +23 -0
  12. data/app/assets/javascripts/spree/backend/spree_zaez_banner.js +1 -0
  13. data/app/assets/javascripts/spree/frontend/spree_zaez_banner.js +2 -0
  14. data/app/assets/stylesheets/spree/backend/spree_zaez_banner.css +6 -0
  15. data/app/assets/stylesheets/spree/frontend/spree_zaez_banner.css +4 -0
  16. data/app/controllers/spree/admin/banner_box_settings_controller.rb +52 -0
  17. data/app/controllers/spree/admin/banner_boxes_controller.rb +54 -0
  18. data/app/helpers/spree/banner_boxes_helper.rb +39 -0
  19. data/app/models/spree/banner_box.rb +68 -0
  20. data/app/models/spree/banner_configuration.rb +10 -0
  21. data/app/overrides/spree/admin/shared/_main_menu/add_banner_tab_to_main_menu.html.erb.deface +6 -0
  22. data/app/views/spree/admin/banner_box_settings/edit.html.erb +104 -0
  23. data/app/views/spree/admin/banner_boxes/_form.html.erb +63 -0
  24. data/app/views/spree/admin/banner_boxes/edit.html.erb +10 -0
  25. data/app/views/spree/admin/banner_boxes/index.html.erb +80 -0
  26. data/app/views/spree/admin/banner_boxes/new.html.erb +17 -0
  27. data/app/views/spree/admin/shared/sub_menu/_banner.html.erb +4 -0
  28. data/app/views/spree/shared/_banner_box.html.erb +31 -0
  29. data/bin/rails +7 -0
  30. data/config/locales/en.yml +48 -0
  31. data/config/locales/pt-br.yml +48 -0
  32. data/config/routes.rb +15 -0
  33. data/db/migrate/20120116204313_create_banners.rb +17 -0
  34. data/db/migrate/20120323174800_banner_namespace.rb +5 -0
  35. data/db/migrate/20131001104524_rename_presentation_to_alt_text.rb +5 -0
  36. data/db/migrate/20150721160059_add_display_period_to_spree_banner_boxes.rb +6 -0
  37. data/lib/generators/spree_zaez_banner/install/install_generator.rb +31 -0
  38. data/lib/spree_zaez_banner/engine.rb +24 -0
  39. data/lib/spree_zaez_banner/factories.rb +8 -0
  40. data/lib/spree_zaez_banner.rb +2 -0
  41. data/spec/features/admin/banner_box_settings_spec.rb +47 -0
  42. data/spec/features/admin/banner_boxes_spec.rb +126 -0
  43. data/spec/fixtures/spree.jpg +0 -0
  44. data/spec/models/spree/banner_box_spec.rb +58 -0
  45. data/spec/models/spree/banner_configuration_spec.rb +12 -0
  46. data/spec/spec_helper.rb +89 -0
  47. data/spec/support/capybara_login.rb +13 -0
  48. data/spree_zaez_banner.gemspec +38 -0
  49. data/test +0 -0
  50. metadata +350 -0
data/bin/rails ADDED
@@ -0,0 +1,7 @@
1
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+
3
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
+ ENGINE_PATH = File.expand_path('../../lib/spree_zaez_banner/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'
@@ -0,0 +1,48 @@
1
+ en:
2
+ banners: Banners
3
+ images_only: "only available is JPG, JPEG, PNG o GIF"
4
+ banner_settings_updated: "Banner Settings successfully updated."
5
+ banner_boxes: Banners
6
+ banner_box: Banner
7
+ notice_messages:
8
+ banner_box_cloned: "Banner has been cloned"
9
+ banner_box_not_cloned: "Banner could not be cloned"
10
+ activerecord:
11
+ models:
12
+ banner_box:
13
+ one: Banner
14
+ other: Banners
15
+ attributes:
16
+ banner_box:
17
+ category: Category
18
+ updated_at: Updated At
19
+ created_at: Created At
20
+ enabled: Enabled?
21
+ begin_display: Begin Display
22
+ end_display: End Display
23
+ destroy: Destroy
24
+ confirm: Confirm
25
+ spree:
26
+ banners: Banners
27
+ banner_box_settings: Banner Settings
28
+ general_settings: General Settings
29
+ banner_styles: Paperclip Styles Banner
30
+ banner_path: Banner Path
31
+ banner_default_url: Banner Default URL
32
+ banner_url: Banner URL
33
+ banner_default_style: Banner Default Style
34
+ add_new_banner_style: Add New Banner Style
35
+ new_banner_style_name: Style Name
36
+ new_banner_style_value: Value
37
+ banner_settings_updated: Banner Settings successfully updated
38
+ listing_banner_boxes: Listing Banners
39
+ new_banner_box: New Banner Box
40
+ attachment: Attachment
41
+ enabled: Enabled
42
+ show_only_enabled: Show Only Enabled
43
+ url: URL
44
+ begin_display: Begin Display
45
+ end_display: End Display
46
+ previous: Previous
47
+ next: Next
48
+ banner_box_settings_warning: You will need to regenerate thumbnails if you update the paperclip styles. Use rake paperclip:refresh:thumbnails CLASS=Spree::BannerBox to do this.
@@ -0,0 +1,48 @@
1
+ pt-BR:
2
+ banners: Banners
3
+ images_only: "apenas disponíveis os formatos JPG, JPEG, PNG o GIF"
4
+ banner_settings_updated: "Configurações do Banner atualizadas com sucesso."
5
+ banner_boxes: Banners
6
+ banner_box: Banner
7
+ notice_messages:
8
+ banner_box_cloned: "Banner foi clonado"
9
+ banner_box_not_cloned: "Banner não pode ser clonado"
10
+ activerecord:
11
+ models:
12
+ banner_box:
13
+ one: Banner
14
+ other: Banners
15
+ attributes:
16
+ banner_box:
17
+ category: Categoria
18
+ updated_at: Atualizado Em
19
+ created_at: Criado Em
20
+ enabled: Habilitado?
21
+ begin_display: Início da Exibição
22
+ end_display: Fim da Exibição
23
+ destroy: Excluir
24
+ confirm: Confirmar
25
+ spree:
26
+ banners: Banners
27
+ banner_box_settings: Configurações do Banner
28
+ general_settings: Configurações Principais
29
+ banner_styles: Estilo do Banner com Paperclip
30
+ banner_path: Caminho do Banner
31
+ banner_default_url: URL Padrão do Banner
32
+ banner_url: URL do Banner
33
+ banner_default_style: Estilo Padrão do Banner
34
+ add_new_banner_style: Adicionar Novo Estilo
35
+ new_banner_style_name: Nome do Estilo
36
+ new_banner_style_value: Valor
37
+ banner_settings_updated: Configurações do Banner atualizadas com sucesso
38
+ listing_banner_boxes: Listando Banners
39
+ new_banner_box: Novo Banner
40
+ attachment: Imagem
41
+ enabled: Habilitado
42
+ show_only_enabled: Exibir Apenas Habilitados
43
+ url: URL
44
+ begin_display: Início da Exibição
45
+ end_display: Fim da Exibição
46
+ previous: Anterior
47
+ next: Próximo
48
+ banner_box_settings_warning: Você deve gerar novamente as miniatura se você atualizar os estilos do Paperclip. Utilize rake paperclip:refresh:thumbnails CLASS=Spree::BannerBox para fazer isso.
data/config/routes.rb ADDED
@@ -0,0 +1,15 @@
1
+ Spree::Core::Engine.routes.draw do
2
+
3
+ namespace :admin do
4
+ resources :banner_boxes do
5
+ collection do
6
+ post :update_positions
7
+ end
8
+ member do
9
+ get :clone
10
+ end
11
+ end
12
+
13
+ resource :banner_box_settings, only: [:show, :edit, :update]
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ class CreateBanners < ActiveRecord::Migration
2
+ def change
3
+ create_table :banners do |t|
4
+ t.string :presentation, :url
5
+ t.string :category
6
+ t.integer :position
7
+ t.boolean :enabled, :default => false
8
+
9
+ t.string :attachment_content_type, :attachment_file_name
10
+ t.datetime :attachment_updated_at
11
+ t.integer :attachment_width, :attachment_height
12
+ t.integer :attachment_size
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ class BannerNamespace < ActiveRecord::Migration
2
+ def change
3
+ rename_table :banners, :spree_banner_boxes
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class RenamePresentationToAltText < ActiveRecord::Migration
2
+ def change
3
+ rename_column :spree_banner_boxes, :presentation, :alt_text
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddDisplayPeriodToSpreeBannerBoxes < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_banner_boxes, :begin_display, :date
4
+ add_column :spree_banner_boxes, :end_display, :date
5
+ end
6
+ end
@@ -0,0 +1,31 @@
1
+ module SpreeZaezBanner
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ class_option :auto_run_migrations, :type => :boolean, :default => false
6
+
7
+ def add_javascripts
8
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/spree_zaez_banner\n"
9
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/spree_zaez_banner\n"
10
+ end
11
+
12
+ def add_stylesheets
13
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/spree_zaez_banner\n", :before => /\*\//, :verbose => true
14
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/spree_zaez_banner\n", :before => /\*\//, :verbose => true
15
+ end
16
+
17
+ def add_migrations
18
+ run 'bundle exec rake railties:install:migrations FROM=spree_zaez_banner'
19
+ end
20
+
21
+ def run_migrations
22
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
23
+ if run_migrations
24
+ run 'bundle exec rake db:migrate'
25
+ else
26
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ module SpreeZaezBanner
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_zaez_banner'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ initializer 'spree_zaez_banner.preferences', :before => :load_config_initializers do |app|
13
+ Spree::BannerConfig = Spree::BannerConfiguration.new
14
+ end
15
+
16
+ def self.activate
17
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
18
+ Rails.configuration.cache_classes ? require(c) : load(c)
19
+ end
20
+ end
21
+
22
+ config.to_prepare &method(:activate).to_proc
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory :banner_box, class: Spree::BannerBox do
3
+ category 'home'
4
+ url 'http://localhost:3000'
5
+ enabled true
6
+ attachment { File.new(Rails.root + '../../spec/fixtures/spree.jpg') }
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_zaez_banner/engine'
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Banner Box Settings', type: :feature do
4
+ before { create_admin_in_sign_in }
5
+
6
+ context 'visit Banner Box settings' do
7
+ it 'should be a link to Banner Box settings' do
8
+ within('.sidebar') { page.find_link('Banner Box Settings')['/admin/banner_box_settings/edit'] }
9
+ end
10
+ end
11
+
12
+ context 'show Banner Box settings' do
13
+ it 'should has the preferences of Banner Box', js: true do
14
+ visit spree.edit_admin_banner_box_settings_path
15
+
16
+ expect(page).to have_selector '#preferences_banner_path'
17
+ expect(page).to have_selector '#preferences_banner_default_url'
18
+ expect(page).to have_selector '#preferences_banner_url'
19
+ expect(page).to have_selector '#preferences_banner_default_style'
20
+ end
21
+ end
22
+
23
+ context 'edit Banner Box settings' do
24
+ before { visit spree.edit_admin_banner_box_settings_path }
25
+
26
+ it 'should update the preferences', js: true do
27
+ fill_in 'Banner Path', with: 'test'
28
+ click_button 'Update'
29
+
30
+ expect(Spree::BannerConfig.banner_path).to eq 'test'
31
+ expect(find_field('preferences_banner_path').value).to eq 'test'
32
+
33
+ # set default
34
+ Spree::BannerConfig.banner_path = ':rails_root/public/spree/banners/:id/:style/:basename.:extension'
35
+ end
36
+
37
+ it 'should create a banner style', js: true do
38
+ click_link 'Add New Banner Style'
39
+ fill_in 'Style Name', with: 'test'
40
+ fill_in 'Value', with: '10x10'
41
+ click_icon :ok
42
+
43
+ expect(page).to have_text 'TEST'
44
+ expect(page).to have_selector '#banner_styles_test'
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Banner Boxes', type: :feature do
4
+
5
+ before { create_admin_in_sign_in }
6
+
7
+ context 'visit Banner Box' do
8
+ it 'should be a link to Banner Box' do
9
+ within('.sidebar') { page.find_link('Banner Box')['/admin/banner_boxes'] }
10
+ end
11
+
12
+ it 'should show a message if there are not any banners', js: true do
13
+ visit spree.admin_banner_boxes_path
14
+
15
+ expect(page).to have_text 'No Results'
16
+ end
17
+
18
+ it 'should show the data of banner boxes', js: true do
19
+ create(:banner_box)
20
+ visit spree.admin_banner_boxes_path
21
+
22
+ expect(page).to have_text 'home'
23
+ expect(page).to have_text 'http://localhost:3000'
24
+ end
25
+
26
+ context 'searching' do
27
+ before do
28
+ create(:banner_box)
29
+ create(:banner_box, category: 'product', url: 'google.com', enabled: false)
30
+ visit spree.admin_banner_boxes_path
31
+ end
32
+
33
+ it 'should search by category', js: true do
34
+ select2 'product', from: 'Category'
35
+ click_button 'Filter Results'
36
+
37
+ within_row(1) do
38
+ expect(page).to have_content('product')
39
+ end
40
+ within('table#listing_banner_boxes') { expect(page).not_to have_content('home') }
41
+ end
42
+
43
+ it 'should search by url', js: true do
44
+ fill_in 'URL', with: 'google.com'
45
+ click_button 'Filter Results'
46
+
47
+ within_row(1) do
48
+ expect(page).to have_content('product')
49
+ end
50
+ within('table#listing_banner_boxes') { expect(page).not_to have_content('home') }
51
+ end
52
+
53
+ it 'should search only enables', js: true do
54
+ check 'Show Only Enabled'
55
+ click_button 'Filter Results'
56
+
57
+ within_row(1) do
58
+ expect(page).to have_content('home')
59
+ end
60
+ within('table#listing_banner_boxes') { expect(page).not_to have_content('product') }
61
+ end
62
+ end
63
+ end
64
+
65
+ context 'create Banner Box' do
66
+ it 'should create a banner box', js: true do
67
+ visit spree.admin_banner_boxes_path
68
+ click_link 'New Banner Box'
69
+
70
+ fill_in 'Category', with: 'test'
71
+ fill_in 'URL', with: 'http://localhost'
72
+ fill_in 'Alternative Text', with: 'Test'
73
+ fill_in 'Begin Display', with: '2015/07/21'
74
+ fill_in 'End Display', with: '2015/07/22'
75
+ attach_file('Attachment', Rails.root + '../../spec/fixtures/spree.jpg')
76
+ click_button 'Create'
77
+
78
+ banner = Spree::BannerBox.last
79
+ expect(banner.category).to eq 'test'
80
+ expect(banner.url).to eq 'http://localhost'
81
+ expect(banner.alt_text).to eq 'Test'
82
+ expect(banner.begin_display).to eq Date.parse('2015/07/21')
83
+ expect(banner.end_display).to eq Date.parse('2015/07/22')
84
+
85
+ within_row(1) do
86
+ expect(page).to have_content('test')
87
+ end
88
+ end
89
+ end
90
+
91
+ context 'edit Banner Box' do
92
+ it 'should be possible edit a banner box', js: true do
93
+ create(:banner_box)
94
+ visit spree.admin_banner_boxes_path
95
+ click_icon :edit
96
+
97
+ fill_in 'End Display', with: '2015/07/22'
98
+ click_button 'Update'
99
+
100
+ expect(page).to have_text 'Banner box has been successfully updated!'
101
+ expect(Spree::BannerBox.last.end_display).to eq Date.parse('2015/07/22')
102
+ end
103
+ end
104
+
105
+ context 'clone Banner Box' do
106
+ it 'should be possible clone a banner box', js: true do
107
+ create(:banner_box)
108
+ visit spree.admin_banner_boxes_path
109
+ click_icon :clone
110
+
111
+ expect(page).to have_text 'Banner has been cloned'
112
+ expect(Spree::BannerBox.count).to eq 2
113
+ end
114
+ end
115
+
116
+ context 'Delete Banner Box' do
117
+ it 'should be possible delete a banner box', js: true do
118
+ create(:banner_box)
119
+ visit spree.admin_banner_boxes_path
120
+ click_icon :delete
121
+ # page.driver.browser.switch_to.alert.accept
122
+
123
+ expect(page).to have_selector('table tbody tr', count: 0)
124
+ end
125
+ end
126
+ end
Binary file
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::BannerBox do
4
+ let(:banner) { FactoryGirl.build(:banner_box) }
5
+
6
+ context 'validate banner' do
7
+ it 'should be invalid if category is null' do
8
+ banner.category = nil
9
+ expect(banner.invalid?).to be true
10
+ expect(banner.errors.full_messages).to include("Category can't be blank")
11
+ end
12
+
13
+ it 'should be invalid if attachment is null' do
14
+ banner.attachment = nil
15
+ expect(banner.invalid?).to be true
16
+ expect(banner.errors.full_messages).to include("Attachment can't be blank")
17
+ end
18
+ end
19
+
20
+ it 'should be able duplicate the banner' do
21
+ new_banner = banner.duplicate
22
+ expect(new_banner.category).to eq 'COPY OF home'
23
+ expect(new_banner.url).to eq 'http://localhost:3000'
24
+ expect(new_banner.attachment).to eq banner.attachment
25
+ end
26
+
27
+ it 'should return the categories for select' do
28
+ create(:banner_box, category: 'cart')
29
+ create(:banner_box, category: 'product')
30
+ expect(subject.class.categories_for_select).to eq %w(cart product)
31
+ end
32
+
33
+ context 'scoping enabled' do
34
+ it 'should return only enabled banners' do
35
+ create(:banner_box, category: 'product', enabled: false)
36
+ create(:banner_box, category: 'home')
37
+ expect(subject.class.enabled.count).to eq 1
38
+ end
39
+
40
+ it 'should return the banners enabled without category defined' do
41
+ create(:banner_box, category: 'product')
42
+ create(:banner_box, category: 'home')
43
+ expect(subject.class.enabled.count).to eq 2
44
+ end
45
+
46
+ it 'should return the banners with the category passed' do
47
+ create(:banner_box, category: 'product')
48
+ create(:banner_box, category: 'home')
49
+ expect(subject.class.enabled('product').count).to eq 1
50
+ end
51
+
52
+ it 'should return the banners with display period between the current date' do
53
+ create(:banner_box, category: 'product', end_display: (Date.today - 2.days))
54
+ create(:banner_box, category: 'home')
55
+ expect(subject.class.enabled.count).to eq 1
56
+ end
57
+ end
58
+ end