solidus_newsletter 1.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 (34) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +29 -0
  5. data/Gemfile +25 -0
  6. data/LICENSE +26 -0
  7. data/README.md +29 -0
  8. data/Rakefile +21 -0
  9. data/app/controllers/spree/admin/newsletters_controller.rb +33 -0
  10. data/app/controllers/spree/newsletters_controller.rb +21 -0
  11. data/app/models/spree/newsletter.rb +6 -0
  12. data/app/overrides/spree/admin/configurations/index/add_newsletter_to_admin_configurations_menu.html.erb.deface +6 -0
  13. data/app/overrides/spree/admin/shared/_configuration_menu/add_newsletter_to_admin_configurations_sidebar_menu.html.erb.deface +3 -0
  14. data/app/views/spree/admin/newsletters/_form.html.erb +47 -0
  15. data/app/views/spree/admin/newsletters/edit.html.erb +12 -0
  16. data/app/views/spree/shared/_newsletter.html.erb +23 -0
  17. data/bin/rails +7 -0
  18. data/config/locales/en.yml +30 -0
  19. data/config/locales/es-MX.yml +29 -0
  20. data/config/locales/es.yml +27 -0
  21. data/config/routes.rb +8 -0
  22. data/db/migrate/20180209175720_add_spree_newsletters_table.rb +10 -0
  23. data/lib/generators/solidus_newsletter/install/install_generator.rb +20 -0
  24. data/lib/solidus_newsletter.rb +2 -0
  25. data/lib/solidus_newsletter/configuration.rb +6 -0
  26. data/lib/solidus_newsletter/engine.rb +26 -0
  27. data/lib/solidus_newsletter/factories.rb +6 -0
  28. data/lib/solidus_newsletter/version.rb +3 -0
  29. data/solidus_newsletter.gemspec +37 -0
  30. data/spec/controllers/spree/admin/newsletters_controller_spec.rb +27 -0
  31. data/spec/controllers/spree/newsletters_controller_spec.rb +19 -0
  32. data/spec/models/spree/newsletter_spec.rb +17 -0
  33. data/spec/spec_helper.rb +45 -0
  34. metadata +262 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8b7181ee38f3d6ae3e37561089ad3d4a6f3d9c0f4f2da4a7a2eeb0b2f0eeaf6e
4
+ data.tar.gz: 82677d2a3786f839cb907d9aed94f837c940fa1ae733c69b98224e559d4348d0
5
+ SHA512:
6
+ metadata.gz: 785f34dfa1c29564b687afa7d9a14d38eed374b64ae95382d2d58130360125ecc89e7f3dee1fa8e4bea125f0722c1cd7000cc66dd115c10b9d0c0cb804eb6ba1
7
+ data.tar.gz: 27700c0900df2675e1fb28783ca5fa68132f6bb815e2939bedc110969e115658fb87c0d9d84520ac3a62faba6445a2bea01047733b05759ba64d6bfe4b1d443d
@@ -0,0 +1,15 @@
1
+ *.gem
2
+ \#*
3
+ *~
4
+ .#*
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
@@ -0,0 +1 @@
1
+ 2.3.1
@@ -0,0 +1,29 @@
1
+ sudo: false
2
+ cache: bundler
3
+ language: ruby
4
+ rvm:
5
+ - 2.3.1
6
+ env:
7
+ matrix:
8
+ - SOLIDUS_BRANCH=v1.0 DB=postgres
9
+ - SOLIDUS_BRANCH=v1.1 DB=postgres
10
+ - SOLIDUS_BRANCH=v1.2 DB=postgres
11
+ - SOLIDUS_BRANCH=v1.3 DB=postgres
12
+ - SOLIDUS_BRANCH=v1.4 DB=postgres
13
+ - SOLIDUS_BRANCH=v2.0 DB=postgres
14
+ - SOLIDUS_BRANCH=v2.1 DB=postgres
15
+ - SOLIDUS_BRANCH=v2.2 DB=postgres
16
+ - SOLIDUS_BRANCH=v2.3 DB=postgres
17
+ - SOLIDUS_BRANCH=v2.4 DB=postgres
18
+ - SOLIDUS_BRANCH=master DB=postgres
19
+ - SOLIDUS_BRANCH=v1.0 DB=mysql
20
+ - SOLIDUS_BRANCH=v1.1 DB=mysql
21
+ - SOLIDUS_BRANCH=v1.2 DB=mysql
22
+ - SOLIDUS_BRANCH=v1.3 DB=mysql
23
+ - SOLIDUS_BRANCH=v1.4 DB=mysql
24
+ - SOLIDUS_BRANCH=v2.0 DB=mysql
25
+ - SOLIDUS_BRANCH=v2.1 DB=mysql
26
+ - SOLIDUS_BRANCH=v2.2 DB=mysql
27
+ - SOLIDUS_BRANCH=v2.3 DB=mysql
28
+ - SOLIDUS_BRANCH=v2.4 DB=mysql
29
+ - SOLIDUS_BRANCH=master DB=mysql
data/Gemfile ADDED
@@ -0,0 +1,25 @@
1
+ source 'https://rubygems.org'
2
+
3
+ branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
4
+ gem 'solidus', github: 'solidusio/solidus', branch: branch
5
+ gem 'solidus_i18n', github: 'solidusio-contrib/solidus_i18n', branch: 'master'
6
+
7
+ if branch == 'master' || branch >= 'v2.3'
8
+ gem 'rails', '~> 5.1.0'
9
+ elsif branch >= 'v2.0'
10
+ gem 'rails', '~> 5.0.0'
11
+ gem 'rails-controller-testing', group: :test
12
+ else
13
+ gem 'rails', '~> 4.2.0'
14
+ gem 'rails_test_params_backport', group: :test
15
+ end
16
+
17
+ gem 'pg', '~> 0.21'
18
+ gem 'sqlite3'
19
+ gem 'mysql2'
20
+
21
+ group :development, :test do
22
+ gem 'i18n-tasks', '~> 0.9' if branch == 'master'
23
+ end
24
+
25
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 R.S.A.
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.
@@ -0,0 +1,29 @@
1
+ # Solidus Newsletter
2
+ [![Build Status](https://travis-ci.org/jtapia/solidus_newsletter.svg?branch=master)](https://travis-ci.org/jtapia/solidus_newsletter)<br />
3
+
4
+ Basic Overview
5
+ -----
6
+
7
+ Add a newsletter to the homepage of your Solidus site, and manage the newsletter content on the Admin panel.
8
+
9
+ Setup
10
+ -----
11
+
12
+ Add this extension to your Gemfile:
13
+
14
+ ```ruby
15
+ gem 'solidus_newsletter', github: 'jtapia/solidus_newsletter'
16
+ ```
17
+
18
+ Then run:
19
+
20
+ ```
21
+ bundle exec rails g solidus_newsletter:install
22
+ ```
23
+
24
+ Using the newsletter form
25
+ -----
26
+
27
+ ```ruby
28
+ <%= render partial: 'spree/shared/newsletter' %>
29
+ ```
@@ -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'] = 'solidus_newsletter'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module Admin
3
+ class NewslettersController < Spree::Admin::BaseController
4
+ def update
5
+ SolidusNewsletter::Config[:title] = newsletter_params[:title]
6
+ SolidusNewsletter::Config[:text] = newsletter_params[:text]
7
+
8
+ if (title == newsletter_params[:title] && text == newsletter_params[:text]) &&
9
+ (newsletter_params[:title].present? && newsletter_params[:text])
10
+ flash[:success] = Spree.t(:'newsletter.admin.success')
11
+ else
12
+ flash[:error] = Spree.t(:'newsletter.admin.error')
13
+ end
14
+
15
+ redirect_to admin_newsletters_edit_path
16
+ end
17
+
18
+ private
19
+
20
+ def title
21
+ SolidusNewsletter::Config[:title]
22
+ end
23
+
24
+ def text
25
+ SolidusNewsletter::Config[:text]
26
+ end
27
+
28
+ def newsletter_params
29
+ params.require(:newsletters).permit(:title, :text)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ class NewslettersController < StoreController
3
+ def create
4
+ @newsletter = Spree::Newsletter.new(newsletter_params)
5
+
6
+ if @newsletter.save
7
+ flash[:success] = Spree.t(:'newsletter.controller.success')
8
+ else
9
+ flash[:error] = Spree.t(:'newsletter.controller.error')
10
+ end
11
+
12
+ redirect_to admin_newsletters_edit_path
13
+ end
14
+
15
+ private
16
+
17
+ def newsletter_params
18
+ params.require(:newsletters).permit(:name, :email)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,6 @@
1
+ module Spree
2
+ class Newsletter < Spree::Base
3
+ validates :name, presence: true
4
+ validates :email, presence: true, uniqueness: true
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ <!-- insert_bottom "[data-hook='admin_configurations_menu']" -->
2
+
3
+ <tr>
4
+ <td><%= link_to Spree.t('newsletter.config_name'), admin_newsletters_edit_path %></td>
5
+ <td><%= Spree.t('newsletter.config_description') %></td>
6
+ </tr>
@@ -0,0 +1,3 @@
1
+ <!-- insert_bottom "[data-hook='admin_configurations_sidebar_menu']" -->
2
+
3
+ <%= settings_tab_item Spree.t('newsletter.config_name'), admin_newsletters_edit_path %>
@@ -0,0 +1,47 @@
1
+ <% if SolidusSupport.solidus_gem_version < Gem::Version.new('2.4.x') %>
2
+ <div class='alpha six columns'>
3
+ <fieldset class='no-border-bottom'>
4
+ <div class='field'>
5
+ <%= f.field_container :title do %>
6
+ <%= f.label Spree.t(:'newsletter.title') %>
7
+ <%= f.text_field :title, class: 'fullwidth', value: SolidusNewsletter::Config[:title] %>
8
+ <%= f.error_message_on :title %>
9
+ <% end %>
10
+ </div>
11
+
12
+ <div class='field'>
13
+ <%= f.field_container :text do %>
14
+ <%= f.label Spree.t(:'newsletter.form.text') %>
15
+ <%= f.text_field :text, class: 'fullwidth', value: SolidusNewsletter::Config[:text] %>
16
+ <%= f.error_message_on :text %>
17
+ <% end %>
18
+ </div>
19
+ </fieldset>
20
+ </div>
21
+ <% else %>
22
+ <div class='row'>
23
+ <div class='col-md-6'>
24
+ <fieldset class='currency no-border-bottom'>
25
+ <div class='field'>
26
+ <%= f.field_container :title do %>
27
+ <%= f.label Spree.t(:'newsletter.form.title') %>
28
+ <%= f.text_field :title, class: 'fullwidth', value: SolidusNewsletter::Config[:title] %>
29
+ <%= f.error_message_on :title %>
30
+ <% end %>
31
+ </div>
32
+ </fieldset>
33
+ </div>
34
+
35
+ <div class='col-md-6'>
36
+ <fieldset class='currency no-border-bottom'>
37
+ <div class='field'>
38
+ <%= f.field_container :text do %>
39
+ <%= f.label Spree.t(:'newsletter.form.text') %>
40
+ <%= f.text_field :text, class: 'fullwidth', value: SolidusNewsletter::Config[:text] %>
41
+ <%= f.error_message_on :text %>
42
+ <% end %>
43
+ </div>
44
+ </fieldset>
45
+ </div>
46
+ </div>
47
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <%= render 'spree/admin/shared/general_tabs' %>
2
+
3
+ <% admin_breadcrumb(link_to(Spree.t(:'newsletter.admin_breadcrumb'), edit_admin_general_settings_path)) %>
4
+
5
+ <%= form_for :newsletters, url: admin_newsletters_update_path, method: :put do |f| %>
6
+ <fieldset class='no-border-top'>
7
+ <%= render 'form', f: f %>
8
+ <%= render 'spree/admin/shared/edit_resource_links', collection_url: edit_admin_general_settings_url %>
9
+ </fieldset>
10
+ <% end %>
11
+
12
+
@@ -0,0 +1,23 @@
1
+ <section class='newsletter-section'>
2
+ <h2 class='newsletter-section__title'><%= SolidusNewsletter::Config[:title] %></h2>
3
+
4
+ <div class='newsletter-section__content row'>
5
+ <%= form_for :newsletter, url: newsletters_update_path, method: :post do |f| %>
6
+ <div class='field text col-md-3 col-sm-12 text-center'>
7
+ <p><%= SolidusNewsletter::Config[:text] %></p>
8
+ </div>
9
+
10
+ <div class='field col-md-3 col-sm-6' id=<%= 'name' %>>
11
+ <%= f.text_field :name, class: 'required fullwidth', autofocus: true, placeholder: Spree.t(:'newsletter.form.name') %>
12
+ </div>
13
+
14
+ <div class='field col-md-3 col-sm-6' id=<%= 'email' %>>
15
+ <%= f.email_field :email, class: 'required fullwidth', placeholder: Spree.t(:'newsletter.form.email') %>
16
+ </div>
17
+
18
+ <div class='col-md-3 col-sm-6 form-buttons'>
19
+ <%= f.submit Spree.t(:'newsletter.form.button'), class: 'newsletter-btn border-rounded small-text' %>
20
+ </div>
21
+ <% end %>
22
+ </div>
23
+ </section>
@@ -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/solidus_newsletter/engine', __FILE__)
5
+
6
+ require 'rails/all'
7
+ require 'rails/engine/commands'
@@ -0,0 +1,30 @@
1
+ en:
2
+ activerecord:
3
+ attributes:
4
+ spree/newsletter:
5
+ name: Name
6
+ email: Email
7
+ text: Text
8
+ models:
9
+ spree/newsletter:
10
+ one: Newsletter
11
+ other: Newsletters
12
+
13
+ spree:
14
+ newsletter:
15
+ controller:
16
+ sucess: Thank you to subscribe to our newsletter
17
+ error: Something went wrong, please try again
18
+ admin:
19
+ success: The newsletter was updated successfuly!
20
+ error: Something went wrong, please try again
21
+ form:
22
+ title: Title
23
+ text: Text
24
+ name: Name
25
+ email: Email
26
+ button: Send
27
+ admin_breadcrumb: Newsletter
28
+ config_name: "Newsletter"
29
+ config_description: "Manage Spree Newsletter contents"
30
+ title: "Newsletter"
@@ -0,0 +1,29 @@
1
+ es-MX:
2
+ activerecord:
3
+ attributes:
4
+ name: Nombre
5
+ email: Email
6
+ text: Texto
7
+ models:
8
+ spree/newsletter:
9
+ one: Newsletter
10
+ other: Newsletters
11
+
12
+ spree:
13
+ newsletter:
14
+ controller:
15
+ sucess: Gracias por suscribirte a nuestro newsletter
16
+ error: Hubo un problem, por favor intenta otra vez
17
+ admin:
18
+ success: El texto del newsletter a sido actualizado correctamente
19
+ error: El texto del newsletter no se a podido actualizar, intente más tarde
20
+ form:
21
+ title: Titulo
22
+ text: Texto
23
+ name: Nombre
24
+ email: Correo Electronico
25
+ button: Enviar
26
+ admin_breadcrumb: Newsletter
27
+ config_name: Newsletter
28
+ config_description: Manage Spree Newsletter contents
29
+ title: Newsletter
@@ -0,0 +1,27 @@
1
+ es:
2
+ activerecord:
3
+ models:
4
+ spree/slide: "Diapositiva"
5
+
6
+ spree:
7
+ next: "Siguiente"
8
+ previous: "Anterior"
9
+ name: "Nombre"
10
+ body: "Cuerpo"
11
+ link_url: "URL de enlace"
12
+ image: "Imagen"
13
+ image_file_name: "Nombre de la imagen"
14
+ published: "Publicado"
15
+ position: "Posición"
16
+ y: "Sí"
17
+ n: "No"
18
+
19
+ slider:
20
+ config_name: "Diapositivas"
21
+ config_description: "Configura las diapositivas de portada"
22
+ title: "Diapositivas"
23
+ new_slide: "Nueva Diapositiva"
24
+ editing_slide: "Editando Diapositiva"
25
+ placeholder_name: "En blanco para usar el del producto"
26
+ placeholder_link_url: "En blanco para usar la del producto"
27
+ image_tip: "Si no selecciona ninguna imagen, se tomará la primera del producto"
@@ -0,0 +1,8 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ namespace :admin do
3
+ get '/newsletters/edit' => 'newsletters#edit'
4
+ put '/newsletters/update' => 'newsletters#update'
5
+ end
6
+
7
+ resources :newsletters, only: [:create]
8
+ end
@@ -0,0 +1,10 @@
1
+ class AddSpreeNewslettersTable < SolidusSupport::Migration[4.2]
2
+ def change
3
+ create_table :spree_newsletters do |t|
4
+ t.string :name
5
+ t.string :email
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ module SolidusNewsletter
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_migrations
7
+ run 'bundle exec rake railties:install:migrations FROM=solidus_newsletter'
8
+ end
9
+
10
+ def run_migrations
11
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
12
+ if run_migrations
13
+ run 'bundle exec rake db:migrate'
14
+ else
15
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ require 'solidus_core'
2
+ require 'solidus_newsletter/engine'
@@ -0,0 +1,6 @@
1
+ module SolidusNewsletter
2
+ class Configuration < Spree::Preferences::Configuration
3
+ preference :title, :string, default: ''
4
+ preference :text, :string, default: ''
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ module SolidusNewsletter
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'solidus_newsletter'
6
+
7
+ config.autoload_paths += %W(#{config.root}/lib)
8
+
9
+ # use rspec for tests
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+
14
+ initializer 'solidus_newsletter.environment', before: :load_config_initializers do |app|
15
+ SolidusNewsletter::Config = SolidusNewsletter::Configuration.new
16
+ end
17
+
18
+ def self.activate
19
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
20
+ Rails.configuration.cache_classes ? require(c) : load(c)
21
+ end
22
+ end
23
+
24
+ config.to_prepare &method(:activate).to_proc
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :newsletter, class: Spree::Newsletter do
3
+ name 'User Test'
4
+ email 'user@test.com'
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module SolidusNewsletter
2
+ VERSION = '1.0'
3
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ # Maintain your gem's version:
5
+ require 'solidus_newsletter/version'
6
+
7
+ # Describe your gem and declare its dependencies:
8
+ Gem::Specification.new do |s|
9
+ s.name = 'solidus_newsletter'
10
+ s.version = SolidusNewsletter::VERSION
11
+ s.author = 'Jonathan Tapia'
12
+ s.email = 'jonathan.tapia@magmalabs.io'
13
+ s.homepage = 'https://github.com/jtapia/solidus_newsletter'
14
+ s.summary = 'Solidus Newsletter extension'
15
+ s.description = 'Adds a newsletter form to the homepage'
16
+
17
+ # s.files = Dir['{app,config,models,db,lib}/**/*'] + %w(MIT-LICENSE Rakefile README.md)
18
+ s.files = `git ls-files`.split("\n")
19
+ s.require_path = 'lib'
20
+ s.requirements << 'none'
21
+
22
+ solidus_version = ['>= 1.2', '< 3']
23
+ s.add_dependency 'solidus_core', solidus_version
24
+ s.add_dependency 'solidus_backend', solidus_version
25
+ s.add_dependency 'solidus_api', solidus_version
26
+ s.add_dependency 'solidus_support'
27
+
28
+ s.add_development_dependency 'database_cleaner', '~> 1.6'
29
+ s.add_development_dependency 'factory_bot', '~> 4.4'
30
+ s.add_development_dependency 'ffaker'
31
+ s.add_development_dependency 'rspec-rails', '~> 3.3'
32
+ s.add_development_dependency 'simplecov', '~> 0.14'
33
+ s.add_development_dependency 'rspec-activemodel-mocks'
34
+ s.add_development_dependency 'webmock'
35
+ s.add_development_dependency 'byebug'
36
+ end
37
+
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::NewslettersController, type: :controller do
4
+ stub_authorization!
5
+
6
+ before do
7
+ SolidusNewsletter::Config[:title] = 'Newsletter'
8
+ SolidusNewsletter::Config[:text] = 'Gets 10%'
9
+ end
10
+
11
+ context '#update' do
12
+ it 'returns true' do
13
+ put :update, params: { newsletters: { title: 'Newsletter Test', text: 'Gets 20%' } }
14
+
15
+ expect(response.status).to eq(302)
16
+ expect(SolidusNewsletter::Config[:title]).to eq('Newsletter Test')
17
+ expect(SolidusNewsletter::Config[:text]).to eq('Gets 20%')
18
+ end
19
+
20
+ it 'returns false' do
21
+ put :update, params: { newsletters: { title: '', text: '' } }
22
+
23
+ expect(response.status).to eq(302)
24
+ expect(flash[:error]).to include('Something went wrong, please try again')
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::NewslettersController, type: :controller do
4
+ context '#create' do
5
+ it 'returns true' do
6
+ post :create, params: { newsletters: { name: 'User Test', email: 'user@test.com' } }
7
+
8
+ expect(response.status).to eq(302)
9
+ expect(flash[:success]).to include(Spree.t('newsletter.controller.success'))
10
+ end
11
+
12
+ it 'returns false' do
13
+ post :create, params: { newsletters: { name: '', email: '' } }
14
+
15
+ expect(response.status).to eq(302)
16
+ expect(flash[:error]).to include(Spree.t('newsletter.controller.error'))
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Newsletter, type: :model do
4
+ context 'validations' do
5
+ it 'validates by default' do
6
+ expect(build(:newsletter, name: 'User Test', email: 'user@test.com')).to be_valid
7
+ end
8
+
9
+ it 'does not validate with a nil name' do
10
+ expect(build(:newsletter, name: nil)).to_not be_valid
11
+ end
12
+
13
+ it 'does not validate with a nil email' do
14
+ expect(build(:newsletter, email: nil)).to_not be_valid
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter 'spec'
4
+ add_group 'Controllers', 'app/controllers'
5
+ add_group 'Helpers', 'app/helpers'
6
+ add_group 'Overrides', 'app/overrides'
7
+ add_group 'Models', 'app/models'
8
+ end
9
+
10
+ ENV['RAILS_ENV'] ||= 'test'
11
+
12
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
13
+
14
+ require 'solidus_frontend'
15
+ require 'solidus_backend'
16
+ require 'rspec/rails'
17
+
18
+ Dir[Rails.root.join('spec/support/**/*.rb')].sort.each { |file| require file }
19
+
20
+ require 'spree/testing_support/url_helpers'
21
+ require 'spree/testing_support/controller_requests'
22
+ require 'spree/testing_support/authorization_helpers'
23
+ require 'spree/testing_support/preferences'
24
+ require 'spree/testing_support/factories'
25
+ require 'spree/api/testing_support/helpers'
26
+ require 'spree/api/testing_support/setup'
27
+
28
+ # Requires factories defined in lib/solidus_newsletter/factories.rb
29
+ require 'solidus_newsletter/factories'
30
+
31
+ RSpec.configure do |config|
32
+ config.infer_spec_type_from_file_location!
33
+ config.infer_base_class_for_anonymous_controllers = false
34
+ config.infer_spec_type_from_file_location!
35
+ config.use_transactional_fixtures = true
36
+
37
+ config.include FactoryBot::Syntax::Methods
38
+ config.include Spree::Api::TestingSupport::Helpers, type: :controller
39
+ config.extend Spree::Api::TestingSupport::Setup, type: :controller
40
+ config.include Spree::TestingSupport::ControllerRequests, type: :controller
41
+ config.include Spree::TestingSupport::UrlHelpers
42
+ config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :request
43
+ config.include Spree::TestingSupport::Preferences, type: :controller
44
+ config.include Spree::TestingSupport::Preferences, type: :model
45
+ end
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_newsletter
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Tapia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.2'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: solidus_backend
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '3'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1.2'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3'
53
+ - !ruby/object:Gem::Dependency
54
+ name: solidus_api
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '1.2'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '3'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '1.2'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '3'
73
+ - !ruby/object:Gem::Dependency
74
+ name: solidus_support
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: database_cleaner
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.6'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '1.6'
101
+ - !ruby/object:Gem::Dependency
102
+ name: factory_bot
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '4.4'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '4.4'
115
+ - !ruby/object:Gem::Dependency
116
+ name: ffaker
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ - !ruby/object:Gem::Dependency
130
+ name: rspec-rails
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '3.3'
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '3.3'
143
+ - !ruby/object:Gem::Dependency
144
+ name: simplecov
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.14'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '0.14'
157
+ - !ruby/object:Gem::Dependency
158
+ name: rspec-activemodel-mocks
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ - !ruby/object:Gem::Dependency
172
+ name: webmock
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ - !ruby/object:Gem::Dependency
186
+ name: byebug
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ description: Adds a newsletter form to the homepage
200
+ email: jonathan.tapia@magmalabs.io
201
+ executables: []
202
+ extensions: []
203
+ extra_rdoc_files: []
204
+ files:
205
+ - ".gitignore"
206
+ - ".ruby-version"
207
+ - ".travis.yml"
208
+ - Gemfile
209
+ - Gemfile.lock
210
+ - LICENSE
211
+ - README.md
212
+ - Rakefile
213
+ - app/controllers/spree/admin/newsletters_controller.rb
214
+ - app/controllers/spree/newsletters_controller.rb
215
+ - app/models/spree/newsletter.rb
216
+ - app/overrides/spree/admin/configurations/index/add_newsletter_to_admin_configurations_menu.html.erb.deface
217
+ - app/overrides/spree/admin/shared/_configuration_menu/add_newsletter_to_admin_configurations_sidebar_menu.html.erb.deface
218
+ - app/views/spree/admin/newsletters/_form.html.erb
219
+ - app/views/spree/admin/newsletters/edit.html.erb
220
+ - app/views/spree/shared/_newsletter.html.erb
221
+ - bin/rails
222
+ - config/locales/en.yml
223
+ - config/locales/es-MX.yml
224
+ - config/locales/es.yml
225
+ - config/routes.rb
226
+ - db/migrate/20180209175720_add_spree_newsletters_table.rb
227
+ - lib/generators/solidus_newsletter/install/install_generator.rb
228
+ - lib/solidus_newsletter.rb
229
+ - lib/solidus_newsletter/configuration.rb
230
+ - lib/solidus_newsletter/engine.rb
231
+ - lib/solidus_newsletter/factories.rb
232
+ - lib/solidus_newsletter/version.rb
233
+ - solidus_newsletter.gemspec
234
+ - spec/controllers/spree/admin/newsletters_controller_spec.rb
235
+ - spec/controllers/spree/newsletters_controller_spec.rb
236
+ - spec/models/spree/newsletter_spec.rb
237
+ - spec/spec_helper.rb
238
+ homepage: https://github.com/jtapia/solidus_newsletter
239
+ licenses: []
240
+ metadata: {}
241
+ post_install_message:
242
+ rdoc_options: []
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ requirements:
256
+ - none
257
+ rubyforge_project:
258
+ rubygems_version: 2.7.3
259
+ signing_key:
260
+ specification_version: 4
261
+ summary: Solidus Newsletter extension
262
+ test_files: []