solidus_social 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +6 -8
  6. data/.rspec +3 -3
  7. data/.rubocop.yml +3 -149
  8. data/.rubocop_todo.yml +42 -0
  9. data/CHANGELOG.md +31 -9
  10. data/Gemfile +21 -20
  11. data/{LICENSE.md → LICENSE} +2 -2
  12. data/README.md +56 -14
  13. data/Rakefile +4 -19
  14. data/app/controllers/spree/admin/authentication_methods_controller.rb +2 -0
  15. data/app/controllers/spree/omniauth_callbacks_controller.rb +8 -6
  16. data/app/controllers/spree/user_authentications_controller.rb +3 -1
  17. data/app/decorators/controllers/solidus_social/spree/user_registrations_controller_decorator.rb +27 -0
  18. data/app/decorators/models/solidus_social/spree/user_decorator.rb +28 -0
  19. data/app/helpers/spree/omniauth_callbacks_helper.rb +2 -0
  20. data/app/models/spree/authentication_method.rb +3 -1
  21. data/app/models/spree/social_configuration.rb +2 -0
  22. data/app/models/spree/user_authentication.rb +3 -1
  23. data/app/overrides/add_authentications_to_account_summary.rb +2 -0
  24. data/app/overrides/admin_configuration_decorator.rb +3 -1
  25. data/app/overrides/user_registrations_decorator.rb +2 -0
  26. data/app/views/spree/admin/authentication_methods/_form.html.erb +4 -4
  27. data/app/views/spree/admin/authentication_methods/edit.html.erb +2 -2
  28. data/app/views/spree/admin/authentication_methods/index.html.erb +10 -10
  29. data/app/views/spree/admin/authentication_methods/new.html.erb +2 -2
  30. data/app/views/spree/shared/_social.html.erb +5 -5
  31. data/app/views/spree/shared/_user_form.html.erb +3 -3
  32. data/app/views/spree/users/_new-customer.html.erb +2 -2
  33. data/app/views/spree/users/_social.html.erb +5 -5
  34. data/bin/console +17 -0
  35. data/bin/rails +15 -4
  36. data/bin/rake +7 -0
  37. data/bin/sandbox +72 -0
  38. data/bin/setup +8 -0
  39. data/config/locales/en.yml +1 -0
  40. data/config/routes.rb +6 -4
  41. data/db/migrate/20120120163432_create_user_authentications.rb +2 -0
  42. data/db/migrate/20120123163222_create_authentication_methods.rb +2 -0
  43. data/lib/generators/solidus_social/install/install_generator.rb +7 -5
  44. data/lib/generators/solidus_social/install/templates/config/initializers/solidus_social.rb +3 -1
  45. data/lib/solidus_social.rb +22 -7
  46. data/lib/solidus_social/engine.rb +29 -54
  47. data/lib/solidus_social/facebook_omniauth_strategy_ext.rb +25 -0
  48. data/lib/solidus_social/factories.rb +4 -0
  49. data/lib/solidus_social/version.rb +3 -16
  50. data/solidus_social.gemspec +43 -46
  51. data/spec/controllers/spree/omniauth_callbacks_controller_spec.rb +14 -9
  52. data/spec/features/spree/admin/authentication_methods_configuration_spec.rb +13 -10
  53. data/spec/features/spree/sign_in_spec.rb +13 -10
  54. data/spec/lib/solidus_social/engine_spec.rb +9 -0
  55. data/spec/lib/{spree_social/engine_spec.rb → solidus_social_speec.rb} +3 -1
  56. data/spec/lib/spree/social_config_spec.rb +2 -0
  57. data/spec/models/spree/authentication_method_spec.rb +4 -2
  58. data/spec/models/spree/social_configuration_spec.rb +2 -0
  59. data/spec/models/spree/user_decorator_spec.rb +5 -3
  60. data/spec/spec_helper.rb +17 -29
  61. data/spec/support/omniauth.rb +4 -0
  62. metadata +56 -196
  63. data/.hound.yml +0 -26
  64. data/.travis.yml +0 -32
  65. data/app/assets/javascripts/spree/backend/solidus_social.js +0 -1
  66. data/app/assets/javascripts/spree/frontend/solidus_social.js +0 -1
  67. data/app/assets/stylesheets/spree/backend/solidus_social.css +0 -3
  68. data/app/controllers/spree/user_registrations_controller_decorator.rb +0 -15
  69. data/app/models/spree/user_decorator.rb +0 -16
  70. data/spec/support/capybara.rb +0 -11
  71. data/spec/support/database_cleaner.rb +0 -23
  72. data/spec/support/devise.rb +0 -3
  73. data/spec/support/factory_girl.rb +0 -7
  74. data/spec/support/spree.rb +0 -8
data/Rakefile CHANGED
@@ -1,21 +1,6 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
1
+ # frozen_string_literal: true
3
2
 
4
- require 'rspec/core/rake_task'
5
- require 'spree/testing_support/common_rake'
3
+ require 'solidus_dev_support/rake_tasks'
4
+ SolidusDevSupport::RakeTasks.install
6
5
 
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_social'
20
- Rake::Task['common:test_app'].invoke('Spree::User')
21
- end
6
+ task default: 'extension:specs'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spree
2
4
  module Admin
3
5
  class AuthenticationMethodsController < ResourceController
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2
4
  include Spree::Core::ControllerHelpers::Common
3
5
  include Spree::Core::ControllerHelpers::Order
@@ -18,14 +20,14 @@ class Spree::OmniauthCallbacksController < Devise::OmniauthCallbacksController
18
20
 
19
21
  def omniauth_callback
20
22
  if request.env['omniauth.error'].present?
21
- flash[:error] = I18n.t('devise.omniauth_callbacks.failure', kind: auth_hash['provider'], reason: Spree.t(:user_was_not_valid))
23
+ flash[:error] = I18n.t('devise.omniauth_callbacks.failure', kind: auth_hash['provider'], reason: I18n.t('spree.user_was_not_valid'))
22
24
  redirect_back_or_default(root_url)
23
25
  return
24
26
  end
25
27
 
26
- authentication = Spree::UserAuthentication.find_by_provider_and_uid(auth_hash['provider'], auth_hash['uid'])
28
+ authentication = Spree::UserAuthentication.find_by(provider: auth_hash['provider'], uid: auth_hash['uid'])
27
29
 
28
- if authentication.present? and authentication.try(:user).present?
30
+ if authentication.present? && authentication.try(:user).present?
29
31
  flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
30
32
  sign_in_and_redirect :spree_user, authentication.user
31
33
  elsif spree_current_user
@@ -34,14 +36,14 @@ class Spree::OmniauthCallbacksController < Devise::OmniauthCallbacksController
34
36
  flash[:notice] = I18n.t('devise.sessions.signed_in')
35
37
  redirect_back_or_default(account_url)
36
38
  else
37
- user = Spree.user_class.find_by_email(auth_hash['info']['email']) || Spree.user_class.new
39
+ user = Spree.user_class.find_by(email: auth_hash['info']['email']) || Spree.user_class.new
38
40
  user.apply_omniauth(auth_hash)
39
41
  if user.save
40
42
  flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
41
43
  sign_in_and_redirect :spree_user, user
42
44
  else
43
45
  session[:omniauth] = auth_hash.except('extra')
44
- flash[:notice] = Spree.t(:one_more_step, kind: auth_hash['provider'].capitalize)
46
+ flash[:notice] = I18n.t('spree.one_more_step', kind: auth_hash['provider'].capitalize)
45
47
  redirect_to new_spree_user_registration_url
46
48
  return
47
49
  end
@@ -60,7 +62,7 @@ class Spree::OmniauthCallbacksController < Devise::OmniauthCallbacksController
60
62
  end
61
63
 
62
64
  def passthru
63
- render file: "#{Rails.root}/public/404", formats: [:html], status: 404, layout: false
65
+ render file: "#{Rails.root}/public/404", formats: [:html], status: :not_found, layout: false
64
66
  end
65
67
 
66
68
  def auth_hash
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Spree::UserAuthenticationsController < Spree::StoreController
2
4
  def index
3
5
  @authentications = spree_current_user.user_authentications if spree_current_user
@@ -6,7 +8,7 @@ class Spree::UserAuthenticationsController < Spree::StoreController
6
8
  def destroy
7
9
  @authentication = spree_current_user.user_authentications.find(params[:id])
8
10
  @authentication.destroy
9
- flash[:notice] = Spree.t(:destroy, scope: :authentications)
11
+ flash[:notice] = I18n.t('spree.destroy', scope: :authentications)
10
12
  redirect_to spree.account_path
11
13
  end
12
14
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusSocial
4
+ module Spree
5
+ module UserRegistrationsControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ after_action :clear_omniauth, only: :create
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def build_resource(*args)
15
+ super
16
+ @spree_user.apply_omniauth(session[:omniauth]) if session[:omniauth]
17
+ @spree_user
18
+ end
19
+
20
+ def clear_omniauth
21
+ session[:omniauth] = nil unless @spree_user.new_record?
22
+ end
23
+
24
+ ::Spree::UserRegistrationsController.prepend self
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusSocial
4
+ module Spree
5
+ module UserDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ has_many :user_authentications, dependent: :destroy
9
+
10
+ devise :omniauthable
11
+ end
12
+ end
13
+
14
+ def apply_omniauth(omniauth)
15
+ if omniauth.fetch('info', {})['email'].present?
16
+ self.email = omniauth['info']['email'] if email.blank?
17
+ end
18
+ user_authentications.build(provider: omniauth['provider'], uid: omniauth['uid'])
19
+ end
20
+
21
+ def password_required?
22
+ (user_authentications.empty? || password.present?) && super
23
+ end
24
+
25
+ ::Spree.user_class.prepend self
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spree
2
4
  module OmniauthCallbacksHelper
3
5
  include Spree::BaseHelper
@@ -1,4 +1,6 @@
1
- class Spree::AuthenticationMethod < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Spree::AuthenticationMethod < ApplicationRecord
2
4
  def self.provider_options
3
5
  SolidusSocial.configured_providers.map { |provider_name| [provider_name.split("_").first.camelize, provider_name] }
4
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Spree
2
4
  class SocialConfiguration < Preferences::Configuration
3
5
  attr_accessor :providers
@@ -1,3 +1,5 @@
1
- class Spree::UserAuthentication < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class Spree::UserAuthentication < ApplicationRecord
2
4
  belongs_to :user
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Deface::Override.new(virtual_path: 'spree/users/show',
2
4
  name: 'add_socials_to_account_summary',
3
5
  insert_after: '[data-hook="account_my_orders"]',
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Deface::Override.new(virtual_path: 'spree/admin/shared/_configuration_menu',
2
4
  name: 'add_social_providers_link_configuration_menu',
3
5
  insert_bottom: '[data-hook="admin_configurations_sidebar_menu"]',
4
- text: '<%= configurations_sidebar_menu_item Spree.t(:social_authentication_methods), spree.admin_authentication_methods_path %>',
6
+ text: '<%= configurations_sidebar_menu_item I18n.t("spree.social_authentication_methods"), spree.admin_authentication_methods_path %>',
5
7
  disabled: false)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Deface::Override.new(virtual_path: 'spree/user_registrations/new',
2
4
  name: 'add_socials_to_login_extras',
3
5
  insert_after: '[data-hook="login_extras"]',
@@ -10,7 +10,7 @@
10
10
  <div class="alpha five columns">
11
11
  <div data-hook="environment" class="field">
12
12
  <%= f.field_container :provider do %>
13
- <%= f.label :provider, Spree.t(:social_provider) %>
13
+ <%= f.label :provider, I18n.t('spree.social_provider') %>
14
14
  <%= f.select :provider, Spree::AuthenticationMethod.provider_options, {}, { include_blank: false, class: 'select2 fullwidth' } %>
15
15
  <% end %>
16
16
  </div>
@@ -18,11 +18,11 @@
18
18
  <div class="alpha five columns">
19
19
  <div data-hook="environment" class="field">
20
20
  <%= f.field_container :active do %>
21
- <span style="padding:0 10px 2px;"><%= f.label :active, Spree.t(:active) %></span>
21
+ <span style="padding:0 10px 2px;"><%= f.label :active, I18n.t('spree.active') %></span>
22
22
  <%= f.radio_button :active, :true %>
23
- <span style="padding:0 2px;"><%= Spree.t(:say_yes) %></span>
23
+ <span style="padding:0 2px;"><%= I18n.t('spree.say_yes') %></span>
24
24
  <%= f.radio_button :active, :false %>
25
- <span style="padding:0 2px"><%= Spree.t(:say_no) %></span>
25
+ <span style="padding:0 2px"><%= I18n.t('spree.say_no') %></span>
26
26
  <% end %>
27
27
  </div>
28
28
  </div>
@@ -1,11 +1,11 @@
1
1
  <%= render 'spree/admin/shared/configuration_menu' %>
2
2
 
3
3
  <% content_for :page_title do %>
4
- <%= Spree.t(:edit_social_method) %>
4
+ <%= I18n.t('spree.edit_social_method') %>
5
5
  <% end %>
6
6
 
7
7
  <% content_for :page_actions do %>
8
- <li><%= link_to_with_icon 'icon-arrow-left', Spree.t(:back_to_authentication_methods_list), admin_authentication_methods_path, class: 'button' %></li>
8
+ <li><%= link_to_with_icon 'icon-arrow-left', I18n.t('spree.back_to_authentication_methods_list'), admin_authentication_methods_path, class: 'button' %></li>
9
9
  <% end %>
10
10
 
11
11
  <%= render 'spree/shared/error_messages', target: @authentication_method %>
@@ -1,13 +1,13 @@
1
1
  <%= render 'spree/admin/shared/configuration_menu' %>
2
2
 
3
3
  <% content_for :page_title do %>
4
- <%= Spree.t(:social_authentication_methods) %>
4
+ <%= I18n.t('spree.social_authentication_methods') %>
5
5
  <% end %>
6
6
 
7
7
  <% content_for :page_actions do %>
8
8
  <ul class="actions inline-menu">
9
9
  <li>
10
- <%= button_link_to Spree.t(:new_social_method), new_object_url, icon: 'icon-plus', id: 'admin_new_slide_link' %>
10
+ <%= link_to I18n.t('spree.new_social_method'), new_object_url, id: 'admin_new_slide_link' %>
11
11
  </li>
12
12
  </ul>
13
13
  <% end %>
@@ -23,11 +23,11 @@
23
23
  <col style="width: 20%" />
24
24
  </colgroup>
25
25
  <thead data-hook="admin_social_methods_index_headers">
26
- <th><%= Spree.t(:social_provider) %></th>
27
- <th><%= Spree.t(:social_api_key) %></th>
28
- <th><%= Spree.t(:social_api_secret) %></th>
29
- <th><%= Spree.t(:environment) %></th>
30
- <th><%= Spree.t(:active) %></th>
26
+ <th><%= I18n.t('spree.social_provider') %></th>
27
+ <th><%= I18n.t('spree.social_api_key') %></th>
28
+ <th><%= I18n.t('spree.social_api_secret') %></th>
29
+ <th><%= I18n.t('spree.environment') %></th>
30
+ <th><%= I18n.t('spree.active') %></th>
31
31
  <th data-hook="admin_social_methods_index_header_actions" class="actions"></th>
32
32
  </thead>
33
33
  <tbody>
@@ -37,7 +37,7 @@
37
37
  <td class="align-center"><%= truncate method.api_key, length: 10 %></td>
38
38
  <td class="align-center"><%= truncate method.api_secret, length: 10 %></td>
39
39
  <td class="align-center"><%= method.environment.to_s.titleize %></td>
40
- <td class="align-center"><%= method.active ? Spree.t(:yes) : Spree.t(:no) %></td>
40
+ <td class="align-center"><%= method.active ? I18n.t('spree.yes') : I18n.t('spree.no') %></td>
41
41
  <td class="actions">
42
42
  <%= link_to_edit method, no_text: true %>
43
43
  <%= link_to_delete method, no_text: true %>
@@ -48,7 +48,7 @@
48
48
  </table>
49
49
  <% else %>
50
50
  <div class="alpha twelve columns no-objects-found">
51
- <%= Spree.t(:no_authentication_methods_found) %>,
52
- <%= Spree.t(:add_one) %>!
51
+ <%= I18n.t('spree.no_authentication_methods_found') %>,
52
+ <%= I18n.t('spree.add_one') %>!
53
53
  </div>
54
54
  <% end %>
@@ -1,11 +1,11 @@
1
1
  <%= render 'spree/admin/shared/configuration_menu' %>
2
2
 
3
3
  <% content_for :page_title do %>
4
- <%= Spree.t(:new_social_method) %>
4
+ <%= I18n.t('spree.new_social_method') %>
5
5
  <% end %>
6
6
 
7
7
  <% content_for :page_actions do %>
8
- <li><%= link_to_with_icon 'icon-arrow-left', Spree.t(:back_to_authentication_methods_list), admin_authentication_methods_path, class: 'button' %></li>
8
+ <li><%= link_to_with_icon 'icon-arrow-left', I18n.t('spree.back_to_authentication_methods_list'), admin_authentication_methods_path, class: 'button' %></li>
9
9
  <% end %>
10
10
 
11
11
  <%= render 'spree/shared/error_messages', target: @authentication_method %>
@@ -1,11 +1,11 @@
1
1
  <div id="social-signin-links">
2
2
  <% if (!spree_current_user || !spree_current_user.user_authentications) && Spree::AuthenticationMethod.active_authentication_methods? %>
3
- <h2><%= Spree.t(:sign_in_through_one_of_these_services) %></h2>
3
+ <h2><%= I18n.t('spree.sign_in_through_one_of_these_services') %></h2>
4
4
  <% end %>
5
-
5
+
6
6
  <% Spree::AuthenticationMethod.available_for(spree_current_user).each do |method| %>
7
- <%= link_to(content_tag(:i, '', class: "icon-spree-#{method.provider.to_url}-circled"),
8
- spree.send("spree_user_#{method.provider}_omniauth_authorize_path"),
9
- title: Spree.t(:sign_in_with, provider: method.provider)) if method.active %>
7
+ <%= link_to(content_tag(:i, '', class: "icon-spree-#{method.provider.dasherize}-circled"),
8
+ spree.send("spree_user_#{method.provider}_omniauth_authorize_path", r: rand),
9
+ title: t('spree.sign_in_with', provider: method.provider)) if method.active %>
10
10
  <% end %>
11
11
  </div>
@@ -1,16 +1,16 @@
1
1
  <p>
2
- <%= f.label :email, Spree.t(:email) %><br />
2
+ <%= f.label :email, I18n.t('spree.email') %><br />
3
3
  <%= f.email_field :email, class: 'title' %>
4
4
  </p>
5
5
  <% if spree_current_user.nil? || spree_current_user.password_required? %>
6
6
  <div id="password-credentials">
7
7
  <p>
8
- <%= f.label :password, Spree.t(:password) %><br />
8
+ <%= f.label :password, I18n.t('spree.password') %><br />
9
9
  <%= f.password_field :password, class: 'title' %>
10
10
  </p>
11
11
 
12
12
  <p>
13
- <%= f.label :password_confirmation, Spree.t(:confirm_password) %><br />
13
+ <%= f.label :password_confirmation, I18n.t('spree.confirm_password') %><br />
14
14
  <%= f.password_field :password_confirmation, class: 'title' %>
15
15
  </p>
16
16
  </div>
@@ -1,5 +1,5 @@
1
1
  <% if session[:omniauth] %>
2
- <h6><%= Spree.t(:please_confirm_your_email) %></h6>
2
+ <h6><%= I18n.t('spree.please_confirm_your_email') %></h6>
3
3
  <% else %>
4
- <h6><%= Spree.t(:new_customer) %></h6>
4
+ <h6><%= I18n.t('spree.new_customer') %></h6>
5
5
  <% end %>
@@ -3,25 +3,25 @@
3
3
  <div id="existing-customer">
4
4
  <% if spree_current_user.user_authentications %>
5
5
  <% unless spree_current_user.user_authentications.empty? %>
6
- <p><strong><%= Spree.t(:you_have_signed_in_with_these_services) %>:</strong></p>
6
+ <p><strong><%= I18n.t('spree.you_have_signed_in_with_these_services') %>:</strong></p>
7
7
  <div class="authentications">
8
8
  <% for user_authentication in spree_current_user.user_authentications %>
9
9
  <div class="authentication">
10
10
  <div class="provider columns two">
11
- <%= content_tag(:i, '', class: "icon-spree-#{user_authentication.provider.to_url}-circled columns") %>
11
+ <%= content_tag(:i, '', class: "icon-spree-#{user_authentication.provider.dasherize}-circled columns") %>
12
12
  <%= user_authentication.provider %>
13
13
  </div>
14
14
  <div class="uid columns two"><%= user_authentication.uid %></div>
15
- <%= link_to 'X', user_authentication, data: { confirm: "#{Spree.t(:remove_authentication_option_confirmation)}" }, method: :delete, class: 'remove' %>
15
+ <%= link_to 'X', user_authentication, data: { confirm: I18n.t('spree.remove_authentication_option_confirmation') }, method: :delete, class: 'remove' %>
16
16
  </div>
17
17
  <% end %>
18
18
  <div class="clear"></div>
19
19
  </div>
20
20
  <% end %>
21
21
  <% end %>
22
-
22
+
23
23
  <% if Spree::AuthenticationMethod.available_for(spree_current_user).present? %>
24
- <%= content_tag(:p, content_tag(:strong, Spree.t(:add_another_service))) %>
24
+ <%= content_tag(:p, content_tag(:strong, I18n.t('spree.add_another_service'))) %>
25
25
  <%= render 'spree/shared/social' %>
26
26
  <% end %>
27
27
  </div>
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require "bundler/setup"
6
+ require "solidus_social"
7
+
8
+ # You can add fixtures and/or initialization code here to make experimenting
9
+ # with your gem easier. You can also use a different console, if you like.
10
+ $LOAD_PATH.unshift(*Dir["#{__dir__}/../app/*"])
11
+
12
+ # (If you use this, don't forget to add pry to your Gemfile!)
13
+ # require "pry"
14
+ # Pry.start
15
+
16
+ require "irb"
17
+ IRB.start(__FILE__)
data/bin/rails CHANGED
@@ -1,7 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- ENGINE_ROOT = File.expand_path('../..', __FILE__)
4
- ENGINE_PATH = File.expand_path('../../lib/solidus_social/engine', __FILE__)
3
+ # frozen_string_literal: true
5
4
 
6
- require 'rails/all'
7
- require 'rails/engine/commands'
5
+ app_root = 'sandbox'
6
+
7
+ unless File.exist? "#{app_root}/bin/rails"
8
+ warn 'Creating the sandbox app...'
9
+ Dir.chdir "#{__dir__}/.." do
10
+ system "#{__dir__}/sandbox" or begin # rubocop:disable Style/AndOr
11
+ warn 'Automatic creation of the sandbox app failed'
12
+ exit 1
13
+ end
14
+ end
15
+ end
16
+
17
+ Dir.chdir app_root
18
+ exec 'bin/rails', *ARGV
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "rubygems"
5
+ require "bundler/setup"
6
+
7
+ load Gem.bin_path("rake", "rake")
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -e
4
+
5
+ case "$DB" in
6
+ postgres|postgresql)
7
+ RAILSDB="postgresql"
8
+ ;;
9
+ mysql)
10
+ RAILSDB="mysql"
11
+ ;;
12
+ sqlite|'')
13
+ RAILSDB="sqlite3"
14
+ ;;
15
+ *)
16
+ echo "Invalid DB specified: $DB"
17
+ exit 1
18
+ ;;
19
+ esac
20
+
21
+ extension_name="solidus_social"
22
+
23
+ # Stay away from the bundler env of the containing extension.
24
+ function unbundled {
25
+ ruby -rbundler -e'b = proc {system *ARGV}; Bundler.respond_to?(:with_unbundled_env) ? Bundler.with_unbundled_env(&b) : Bundler.with_clean_env(&b)' -- $@
26
+ }
27
+
28
+ rm -rf ./sandbox
29
+ unbundled bundle exec rails new sandbox --database="$RAILSDB" \
30
+ --skip-bundle \
31
+ --skip-git \
32
+ --skip-keeps \
33
+ --skip-rc \
34
+ --skip-spring \
35
+ --skip-test \
36
+ --skip-javascript
37
+
38
+ if [ ! -d "sandbox" ]; then
39
+ echo 'sandbox rails application failed'
40
+ exit 1
41
+ fi
42
+
43
+ cd ./sandbox
44
+ cat <<RUBY >> Gemfile
45
+
46
+ gem '$extension_name', path: '..'
47
+ gem 'solidus_auth_devise', '>= 2.1.0'
48
+ gem 'rails-i18n'
49
+ gem 'solidus_i18n'
50
+
51
+ group :test, :development do
52
+ platforms :mri do
53
+ gem 'pry-byebug'
54
+ end
55
+ end
56
+ RUBY
57
+
58
+ unbundled bundle install --gemfile Gemfile
59
+
60
+ unbundled bundle exec rake db:drop db:create
61
+
62
+ unbundled bundle exec rails generate spree:install \
63
+ --auto-accept \
64
+ --user_class=Spree::User \
65
+ --enforce_available_locales=true \
66
+ $@
67
+
68
+ unbundled bundle exec rails generate solidus:auth:install
69
+
70
+ echo
71
+ echo "🚀 Sandbox app successfully created for $extension_name!"
72
+ echo "🚀 This app is intended for test purposes."