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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8a9ecc30e4202c324f68912db8a8fc865f32f8a5
4
+ data.tar.gz: e739f41db8115943dd850f91e5ccd702260d4f85
5
+ SHA512:
6
+ metadata.gz: d857826b56d4e67146e826a60c809fe30487fa84f137b828720423eb7e52349287a0c553d6e31199c30d6173eadbf8c1daf96424747cc3a8f273aa450c0eef35
7
+ data.tar.gz: c15ad8f15882c652f58493de206eb1b60ea548a07e99b39ce35f230f3db98976cb8e359c3e6e7871b9adff92668863fe7a993158b5730178140a3c409fd783c3
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ *.gem
5
+ .DS_Store
6
+ .idea
7
+ .project
8
+ .sass-cache
9
+ coverage
10
+ Gemfile.lock
11
+ tmp
12
+ nbproject
13
+ pkg
14
+ *.swp
15
+ spec/dummy
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --format documentation --color
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ before_script:
2
+ - sh -e /etc/init.d/xvfb start
3
+ - export DISPLAY=:99.0
4
+ bundler_args: --quiet
5
+ script:
6
+ - bundle exec rake test_app
7
+ - bundle exec rspec
8
+ language: ruby
9
+ rvm:
10
+ - 2.0.0
11
+ - 2.1.2
12
+ - 2.1.5
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'spree', github: 'spree/spree', branch: '3-0-stable'
4
+ # Provides basic authentication functionality for testing parts of your engine
5
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '3-0-stable'
6
+
7
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,90 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec feature)
6
+
7
+ ## Uncomment to clear the screen before every task
8
+ # clearing :on
9
+
10
+ ## Guard internally checks for changes in the Guardfile and exits.
11
+ ## If you want Guard to automatically start up again, run guard in a
12
+ ## shell loop, e.g.:
13
+ ##
14
+ ## $ while bundle exec guard; do echo "Restarting Guard..."; done
15
+ ##
16
+ ## Note: if you are using the `directories` clause above and you are not
17
+ ## watching the project directory ('.'), the you will want to move the Guardfile
18
+ ## to a watched dir and symlink it back, e.g.
19
+ #
20
+ # $ mkdir config
21
+ # $ mv Guardfile config/
22
+ # $ ln -s config/Guardfile .
23
+ #
24
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
25
+
26
+ # Note: The cmd option is now required due to the increasing number of ways
27
+ # rspec may be run, below are examples of the most common uses.
28
+ # * bundler: 'bundle exec rspec'
29
+ # * bundler binstubs: 'bin/rspec'
30
+ # * spring: 'bin/rspec' (This will use spring if running and you have
31
+ # installed the spring binstubs per the docs)
32
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
33
+ # * 'just' rspec: 'rspec'
34
+
35
+ guard :shell do
36
+ watch(/^db\/migrate\/.*\.rb/) do |m|
37
+ puts "#{m[0]} Changed"
38
+ `bundle exec rake test_app`
39
+ end
40
+ end
41
+
42
+ guard :bundler do
43
+ watch('Gemfile')
44
+ # Uncomment next line if Gemfile contain `gemspec' command
45
+ watch(/^.+\.gemspec/)
46
+ end
47
+
48
+ guard :rspec, cmd: "bundle exec rspec" do
49
+ require "guard/rspec/dsl"
50
+ dsl = Guard::RSpec::Dsl.new(self)
51
+
52
+ # Feel free to open issues for suggestions and improvements
53
+
54
+ # RSpec files
55
+ rspec = dsl.rspec
56
+ watch(rspec.spec_helper) { rspec.spec_dir }
57
+ watch(rspec.spec_support) { rspec.spec_dir }
58
+ watch(rspec.spec_files)
59
+
60
+ # Ruby files
61
+ ruby = dsl.ruby
62
+ dsl.watch_spec_files_for(ruby.lib_files)
63
+
64
+ # Rails files
65
+ rails = dsl.rails(view_extensions: %w(erb haml slim))
66
+ dsl.watch_spec_files_for(rails.app_files)
67
+ dsl.watch_spec_files_for(rails.views)
68
+
69
+ watch(rails.controllers) do |m|
70
+ [
71
+ rspec.spec.("routing/#{m[1]}_routing"),
72
+ rspec.spec.("controllers/#{m[1]}_controller"),
73
+ rspec.spec.("acceptance/#{m[1]}")
74
+ ]
75
+ end
76
+
77
+ # Rails config changes
78
+ watch(rails.spec_helper) { rspec.spec_dir }
79
+ watch(rails.routes) { "#{rspec.spec_dir}/routing" }
80
+ watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
81
+
82
+ # Capybara features specs
83
+ watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
84
+
85
+ # Turnip features and steps
86
+ watch(%r{^spec/acceptance/(.+)\.feature$})
87
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
88
+ Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
89
+ end
90
+ end
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2015 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ Spree Banner [![Build Status](https://travis-ci.org/zaeznet/spree_zaez_banner.svg?branch=master)](https://travis-ci.org/zaeznet/spree_zaez_banner)
2
+ ============
3
+
4
+ Adds a way to manage banners to Spree Commerce.
5
+
6
+
7
+ Old versions of Spree
8
+ ------------
9
+
10
+ For old version of Spree (before 3-0-stable), go to [old extension](https://github.com/zaeznet/spree_banner) (fork of [Damiano Giacomello](https://github.com/damianogiacomello/spree_banner)).
11
+
12
+
13
+ Installation
14
+ ------------
15
+
16
+ 1. Add the following to your Gemfile
17
+
18
+ ```ruby
19
+ gem 'spree_zaez_banner'
20
+ ```
21
+
22
+ 2. Run `bundle install`
23
+
24
+ 3. To copy and apply migrations run:
25
+
26
+ ```
27
+ rails g spree_banner:install
28
+ ```
29
+
30
+
31
+ Configuration
32
+ -------------
33
+
34
+ Preferences can be updated within the admin panel "Banner box settings".
35
+ Or you may set them with an initializer within your application:
36
+
37
+ ```ruby
38
+ SpreeBanner::Config.tap do |config|
39
+ config.banner_styles = {mini: "48x48>", small: "100x100>", large: "800x200#"}
40
+ config.banner_default_style = 'small'
41
+ end
42
+ ```
43
+
44
+
45
+ Banner use example
46
+ ------------------
47
+
48
+ 1. Add banner helper method in your view:
49
+
50
+ ```erb
51
+ <%= insert_banner_box(category: "my_category") %>
52
+ ```
53
+
54
+ 2. Additional options:
55
+
56
+ ```ruby
57
+ class: 'my_class'
58
+ style: 'my_style'
59
+ carousel_id: 'carousel'
60
+ buttons_carousel: true|false
61
+ buttons_class: 'my_buttons_class'
62
+ indicators_carousel: true|false
63
+ image_class: 'my_image_class'
64
+ ```
65
+
66
+ Copyright (c) 2015 Zaez Inovação Digital, released under the New BSD License
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/extension_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'spree_zaez_banner'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
@@ -0,0 +1,65 @@
1
+ #= require_self
2
+ #= require ./banner_box_style
3
+
4
+ class window.BannerBoxSetting
5
+
6
+ # Callback disparado após a execução
7
+ # do constructor de uma classe
8
+ afterConstructor: ->
9
+
10
+ # Callback disparado antes da execução
11
+ # do constructor de uma classe
12
+ beforeConstructor: ->
13
+
14
+ # Constructor da classe
15
+ constructor: (defaultExecution = true) ->
16
+ do @beforeConstructor
17
+ do @defaultExecution if defaultExecution
18
+ do @afterConstructor
19
+
20
+ # Execucao padrao da classe
21
+ defaultExecution: ->
22
+ do @setVariables
23
+ do @setEvents
24
+
25
+ # Exibe o formulario para insercao de um novo estilo
26
+ addNewStyle: (e) ->
27
+ e.preventDefault()
28
+ @add_new_style_button.attr('disabled', true)
29
+ object = {translations: {text: 'Text', value: 'Value'}}
30
+ rendered = @add_new_style_template {new_style: object}
31
+ @banner_styles_container.append(rendered)
32
+ $('.new_banner_style_form').click (e) => @addNewStyleToList(e)
33
+
34
+ # Adiciona um novo estilo de banner a lista de estilos
35
+ addNewStyleToList: (e) ->
36
+ e.preventDefault()
37
+ # validar
38
+ params =
39
+ text: $('#new_banner_styles_name').val()
40
+ value: $('#new_banner_styles_value').val()
41
+ banner_style = new BannerBoxStyle($.extend({}, params))
42
+ rendered = @banner_style_template {new_style: banner_style}
43
+ $('#banner_style_form').remove()
44
+ @banner_styles_container.append(rendered)
45
+ $("#preferences_banner_default_style").append("<option value='#{params.text}'>#{params.text}</option>")
46
+ @add_new_style_button.attr('disabled', false)
47
+
48
+ destroyStyle: (e) ->
49
+ e.preventDefault()
50
+ style = e.target.parentElement.dataset['value']
51
+ $("#banner_style_#{style}").remove()
52
+ $("#preferences_banner_default_style option[value='#{style}']").remove()
53
+
54
+ # Seta os eventos do formulario
55
+ setEvents: ->
56
+ @destroy_button.click (e) => @destroyStyle(e)
57
+ @add_new_style_button.on 'click', $.proxy(@addNewStyle, @)
58
+
59
+ # Seta as variaveis utilizadas
60
+ setVariables: ->
61
+ @destroy_button = $ '.destroy_banner_style'
62
+ @add_new_style_button = $ '.add_new_banner_style'
63
+ @banner_styles_container = $ '#banner_styles'
64
+ @add_new_style_template = Handlebars.compile $('#new_banner_style_template').html()
65
+ @banner_style_template = Handlebars.compile $('#banner_style_template').html()
@@ -0,0 +1,23 @@
1
+ # Modelo base para os estilos de banners
2
+ class window.BannerBoxStyle
3
+
4
+ # Callback disparado após a execução
5
+ # do constructor de uma classe
6
+ afterConstructor: (style) ->
7
+
8
+ # Callback disparado antes da execução
9
+ # do constructor de uma classe
10
+ beforeConstructor: (style) ->
11
+
12
+ # Constructor da classe
13
+ constructor: (@style) ->
14
+ @beforeConstructor @style
15
+ @setAttributes @style
16
+ @afterConstructor @style
17
+
18
+ # Seta os attributos do estilo passado
19
+ # no construtor
20
+ # @param style Object
21
+ setAttributes: (@style) ->
22
+ @text = @style.text
23
+ @value = @style.value
@@ -0,0 +1 @@
1
+ //= require ./app/banner_box_settings/banner_box_setting
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,6 @@
1
+ .p-r-n{
2
+ padding-right: 0px;
3
+ }
4
+ .p-l-n{
5
+ padding-left: 0px;
6
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,52 @@
1
+ module Spree
2
+ module Admin
3
+ class BannerBoxSettingsController < Spree::Admin::BaseController
4
+
5
+ def show
6
+ redirect_to( :action => :edit )
7
+ end
8
+
9
+ # def create
10
+ # update_paperclip_settings
11
+ # # @styles = Spree::BannerConfig[:banner_styles]
12
+ # @config = Spree::BannerConfig.new
13
+ # super
14
+ # end
15
+
16
+ def edit
17
+ @config = Spree::BannerConfiguration.new
18
+ end
19
+
20
+ def update
21
+ Spree::BannerConfig.set(params[:preferences])
22
+
23
+ update_banner_style
24
+ update_paperclip_settings
25
+
26
+ respond_to do |format|
27
+ format.html {
28
+ flash[:notice] = Spree.t(:banner_settings_updated)
29
+ redirect_to edit_admin_banner_box_settings_path
30
+ }
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def update_banner_style
37
+ collection = {}
38
+ params[:banner_styles].each do |key, value|
39
+ collection[key.to_sym] = value
40
+ end
41
+ Spree::BannerConfig.banner_styles = collection
42
+ end
43
+
44
+ def update_paperclip_settings
45
+ Spree::BannerBox.attachment_definitions[:attachment][:styles] = Spree::BannerConfig[:banner_styles].symbolize_keys!
46
+ Spree::BannerBox.attachment_definitions[:attachment][:path] = Spree::BannerConfig[:banner_path]
47
+ Spree::BannerBox.attachment_definitions[:attachment][:default_url] = Spree::BannerConfig[:banner_default_url]
48
+ Spree::BannerBox.attachment_definitions[:attachment][:default_style] = Spree::BannerConfig[:banner_default_style].to_sym
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,54 @@
1
+ module Spree
2
+ module Admin
3
+ class BannerBoxesController < ResourceController
4
+
5
+ def index
6
+ respond_with(@collection)
7
+ end
8
+
9
+ def show
10
+ redirect_to( :action => :edit )
11
+ end
12
+
13
+ def update
14
+ @banner_box.enhance_settings
15
+ super
16
+ end
17
+
18
+ def clone
19
+ @new = @banner_box.duplicate
20
+
21
+ if @new.save
22
+ flash.notice = I18n.t('notice_messages.banner_box_cloned')
23
+ else
24
+ flash.notice = I18n.t('notice_messages.banner_box_not_cloned')
25
+ end
26
+
27
+ respond_with(@new) { |format| format.html { redirect_to edit_admin_banner_box_url(@new) } }
28
+ end
29
+
30
+ protected
31
+ def find_resource
32
+ Spree::BannerBox.find(params[:id])
33
+ end
34
+
35
+ def location_after_save
36
+ admin_banner_boxes_url
37
+ end
38
+
39
+ def collection
40
+ return @collection if @collection.present?
41
+ params[:q] ||= {}
42
+
43
+ params[:q][:s] ||= 'category, position asc'
44
+ @collection = super
45
+
46
+ @q = @collection.ransack(params[:q])
47
+ @collection = @q.result.
48
+ page(params[:page]).
49
+ per(params[:per_page] || Spree::Config[:admin_products_per_page])
50
+ @collection
51
+ end
52
+ end
53
+ end
54
+ end