solidus_newsletter 1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []