spree_zaez_banner 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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