From d3c092e1a2ab1f1e090879317dc9e49428c81b02 Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 09:33:01 -0600 Subject: [PATCH 01/10] Update Extension with Solidus Dev Support Result of running `bundle exec solidus extension .` --- .circleci/config.yml | 18 +++++ .gem_release.yml | 5 ++ .github/stale.yml | 1 + .github_changelog_generator | 2 + .gitignore | 6 ++ .rspec | 3 +- .rubocop.yml | 3 + CHANGELOG.md | 1 + Gemfile | 17 +++- LICENSE | 4 +- README.md | 76 +++++++++++------- Rakefile | 3 +- bin/console | 2 +- bin/rails | 16 +--- bin/rails-engine | 13 ++++ bin/rails-sandbox | 16 ++++ bin/rake | 7 ++ bin/sandbox | 78 +++++++++++++++++++ bin/setup | 2 +- .../install/install_generator.rb | 31 ++++---- .../install/templates/initializer.rb | 6 ++ lib/solidus_user_roles.rb | 6 +- lib/solidus_user_roles/configuration.rb | 21 +++++ lib/solidus_user_roles/engine.rb | 8 ++ lib/solidus_user_roles/version.rb | 5 ++ solidus_user_roles.gemspec | 60 ++++++++------ spec/spec_helper.rb | 15 +++- 27 files changed, 334 insertions(+), 91 deletions(-) create mode 100644 .gem_release.yml create mode 100644 .github/stale.yml create mode 100644 .github_changelog_generator create mode 100644 CHANGELOG.md mode change 100644 => 100755 bin/console mode change 100644 => 100755 bin/rails create mode 100755 bin/rails-engine create mode 100755 bin/rails-sandbox create mode 100755 bin/rake create mode 100755 bin/sandbox mode change 100644 => 100755 bin/setup create mode 100644 lib/generators/solidus_user_roles/install/templates/initializer.rb create mode 100644 lib/solidus_user_roles/configuration.rb create mode 100644 lib/solidus_user_roles/version.rb diff --git a/.circleci/config.yml b/.circleci/config.yml index 12bb10e..28d70eb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,9 @@ version: 2.1 orbs: + # Required for feature specs. + browser-tools: circleci/browser-tools@1.1 + # Always take the latest version of the orb, this allows us to # run specs against Solidus supported versions only without the need # to change this configuration every time a Solidus version is released @@ -8,20 +11,34 @@ orbs: solidusio_extensions: solidusio/extensions@volatile jobs: + run-specs-with-sqlite: + executor: solidusio_extensions/sqlite + steps: + - browser-tools/install-chrome + - solidusio_extensions/run-tests run-specs-with-postgres: executor: solidusio_extensions/postgres steps: + - browser-tools/install-chrome - solidusio_extensions/run-tests run-specs-with-mysql: executor: solidusio_extensions/mysql steps: + - browser-tools/install-chrome - solidusio_extensions/run-tests + lint-code: + executor: solidusio_extensions/sqlite-memory + steps: + - solidusio_extensions/lint-code workflows: "Run specs on supported Solidus versions": jobs: + - run-specs-with-sqlite - run-specs-with-postgres - run-specs-with-mysql + - lint-code + "Weekly run specs against master": triggers: - schedule: @@ -31,5 +48,6 @@ workflows: only: - master jobs: + - run-specs-with-sqlite - run-specs-with-postgres - run-specs-with-mysql diff --git a/.gem_release.yml b/.gem_release.yml new file mode 100644 index 0000000..723a235 --- /dev/null +++ b/.gem_release.yml @@ -0,0 +1,5 @@ +bump: + recurse: false + file: 'lib/solidus_user_roles/version.rb' + message: Bump SolidusUserRoles to %{version} + tag: true diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..0d0b1c9 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1 @@ +_extends: .github diff --git a/.github_changelog_generator b/.github_changelog_generator new file mode 100644 index 0000000..eac0962 --- /dev/null +++ b/.github_changelog_generator @@ -0,0 +1,2 @@ +issues=false +exclude-labels=infrastructure diff --git a/.gitignore b/.gitignore index c72cab4..1ba2096 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.gem \#* *~ .#* @@ -7,9 +8,14 @@ .sass-cache coverage Gemfile.lock +Gemfile-local tmp nbproject pkg *.swp spec/dummy spec/examples.txt +/sandbox +.rvmrc +.ruby-version +.ruby-gemset diff --git a/.rspec b/.rspec index 5052887..83e16f8 100644 --- a/.rspec +++ b/.rspec @@ -1 +1,2 @@ ---color \ No newline at end of file +--color +--require spec_helper diff --git a/.rubocop.yml b/.rubocop.yml index 6207a64..b075a8f 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1,5 @@ require: - solidus_dev_support/rubocop + +AllCops: + NewCops: disable diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..825c32f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/Gemfile b/Gemfile index 9e7564f..bac45f8 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,10 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } branch = ENV.fetch('SOLIDUS_BRANCH', 'master') gem 'solidus', github: 'solidusio/solidus', branch: branch +# The solidus_frontend gem has been pulled out since v3.2 +gem 'solidus_frontend', github: 'solidusio/solidus_frontend' if branch == 'master' +gem 'solidus_frontend' if branch >= 'v3.2' # rubocop:disable Bundler/DuplicatedGem + # Needed to help Bundler figure out how to resolve dependencies, # otherwise it takes forever to resolve them. # See https://github.com/bundler/bundler/issues/6677 @@ -14,7 +18,7 @@ gem 'rails', '>0.a' # Provides basic authentication functionality for testing parts of your engine gem 'solidus_auth_devise' -case ENV['DB'] +case ENV.fetch('DB', nil) when 'mysql' gem 'mysql2' when 'postgresql' @@ -24,5 +28,16 @@ else end gem 'rails-controller-testing', group: :test +# While we still support Ruby < 3 we need to workaround a limitation in +# the 'async' gem that relies on the latest ruby, since RubyGems doesn't +# resolve gems based on the required ruby version. +gem 'async', '< 3' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3') gemspec + +# Use a local Gemfile to include development dependencies that might not be +# relevant for the project or for other contributors, e.g. pry-byebug. +# +# We use `send` instead of calling `eval_gemfile` to work around an issue with +# how Dependabot parses projects: https://github.com/dependabot/dependabot-core/issues/1658. +send(:eval_gemfile, 'Gemfile-local') if File.exist? 'Gemfile-local' diff --git a/LICENSE b/LICENSE index 3218ef6..439c45f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2016 [name of plugin creator] +Copyright (c) 2023 Allison Reilly All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -9,7 +9,7 @@ are permitted provided that the following conditions are met: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name Spree nor the names of its contributors may be used to + * Neither the name Solidus nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/README.md b/README.md index 09dc79f..57e7677 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,73 @@ -SolidusUserRoles -===================== +# Solidus User Roles -[![CircleCI](https://circleci.com/gh/boomerdigital/solidus_user_roles.svg?style=svg)](https://circleci.com/gh/boomerdigital/solidus_user_roles) +[![CircleCI](https://circleci.com/gh/cpfergus1/solidus_user_roles.svg?style=shield)](https://circleci.com/gh/cpfergus1/solidus_user_roles) +[![codecov](https://codecov.io/gh/cpfergus1/solidus_user_roles/branch/master/graph/badge.svg)](https://codecov.io/gh/cpfergus1/solidus_user_roles) + -SolidusUserRoles gives an admin the ability to create custom roles for their employees to restrict or allow access to certain sections in the admin panel. - -Installation ------------- +## Installation Add solidus_user_roles to your Gemfile: ```ruby -gem 'solidus_user_roles', github: 'boomerdigital/solidus_user_roles' +gem 'solidus_user_roles' ``` Bundle your dependencies and run the installation generator: ```shell -bundle -bundle exec rails g solidus_user_roles:install +bin/rails generate solidus_user_roles:install ``` -Remember to seed or run: -```shell -rake solidus_user_roles:load_seeds -``` +## Usage + + -Admin Panel ------------ -An admin is the only user who has the ability to add or remove roles from other users. -![image](https://cloud.githubusercontent.com/assets/6445334/14432566/b90ae0b4-ffd8-11e5-832c-8692dbb437bb.png) -![image](https://cloud.githubusercontent.com/assets/6445334/14432655/0c5c7a84-ffd9-11e5-8463-366fa88b774f.png) -![image](https://cloud.githubusercontent.com/assets/6445334/14432674/22dadc60-ffd9-11e5-97c2-3e9719427140.png) +## Development +### Testing the extension -Testing -------- +First bundle your dependencies, then run `bin/rake`. `bin/rake` will default to building the dummy +app if it does not exist, then it will run specs. The dummy app can be regenerated by using +`bin/rake extension:test_app`. -First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`. +```shell +bin/rake +``` + +To run [Rubocop](https://github.com/bbatsov/rubocop) static code analysis run ```shell -bundle -bundle exec rake +bundle exec rubocop ``` -When testing your applications integration with this extension you may use it's factories. -Simply add this require statement to your spec_helper: +When testing your application's integration with this extension you may use its factories. +You can load Solidus core factories along with this extension's factories using this statement: ```ruby -require 'solidus_user_roles/factories' +SolidusDevSupport::TestingSupport::Factories.load_for(SolidusUserRoles::Engine) +``` + +### Running the sandbox + +To run this extension in a sandboxed Solidus application, you can run `bin/sandbox`. The path for +the sandbox app is `./sandbox` and `bin/rails` will forward any Rails commands to +`sandbox/bin/rails`. + +Here's an example: + ``` +$ bin/rails server +=> Booting Puma +=> Rails 6.0.2.1 application starting in development +* Listening on tcp://127.0.0.1:3000 +Use Ctrl-C to stop +``` + +### Releasing new versions + +Please refer to the [dedicated page](https://github.com/solidusio/solidus/wiki/How-to-release-extensions) in the Solidus wiki. + +## License -Copyright (c) 2016 [name of extension creator], released under the New BSD License +Copyright (c) 2023 Allison Reilly, released under the New BSD License. diff --git a/Rakefile b/Rakefile index f1d1f98..c08aa46 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,6 @@ - # frozen_string_literal: true require 'solidus_dev_support/rake_tasks' SolidusDevSupport::RakeTasks.install -task default: %w[extension:test_app extension:specs] +task default: 'extension:specs' diff --git a/bin/console b/bin/console old mode 100644 new mode 100755 index a494806..f6c66f1 --- a/bin/console +++ b/bin/console @@ -3,7 +3,7 @@ # frozen_string_literal: true require "bundler/setup" -require "solidus_editor" +require "solidus_user_roles" # You can add fixtures and/or initialization code here to make experimenting # with your gem easier. You can also use a different console, if you like. diff --git a/bin/rails b/bin/rails old mode 100644 new mode 100755 index c535fd2..6dbbbc3 --- a/bin/rails +++ b/bin/rails @@ -1,15 +1,7 @@ #!/usr/bin/env ruby -# frozen_string_literal: true - -app_root = 'spec/dummy' - -unless File.exist? "#{app_root}/bin/rails" - system "bin/rake", app_root or begin # rubocop:disable Style/AndOr - warn "Automatic creation of the dummy app failed" - exit 1 - end +if %w[g generate].include? ARGV.first + exec "#{__dir__}/rails-engine", *ARGV +else + exec "#{__dir__}/rails-sandbox", *ARGV end - -Dir.chdir app_root -exec 'bin/rails', *ARGV diff --git a/bin/rails-engine b/bin/rails-engine new file mode 100755 index 0000000..f78a82c --- /dev/null +++ b/bin/rails-engine @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails gems +# installed from the root of your application. + +ENGINE_ROOT = File.expand_path('..', __dir__) +ENGINE_PATH = File.expand_path('../lib/solidus_user_roles/engine', __dir__) + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/bin/rails-sandbox b/bin/rails-sandbox new file mode 100755 index 0000000..ad2df04 --- /dev/null +++ b/bin/rails-sandbox @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +app_root = 'sandbox' + +unless File.exist? "#{app_root}/bin/rails" + warn 'Creating the sandbox app...' + Dir.chdir "#{__dir__}/.." do + system "#{__dir__}/sandbox" or begin + warn 'Automatic creation of the sandbox app failed' + exit 1 + end + end +end + +Dir.chdir app_root +exec 'bin/rails', *ARGV diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000..1e6eacd --- /dev/null +++ b/bin/rake @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("rake", "rake") diff --git a/bin/sandbox b/bin/sandbox new file mode 100755 index 0000000..0f32818 --- /dev/null +++ b/bin/sandbox @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -e +test -z "${DEBUG+empty_string}" || set -x + +test "$DB" = "sqlite" && export DB="sqlite3" + +if [ -z "$SOLIDUS_BRANCH" ] +then + echo "~~> Use 'export SOLIDUS_BRANCH=[master|v3.2|...]' to control the Solidus branch" + SOLIDUS_BRANCH="master" +fi +echo "~~> Using branch $SOLIDUS_BRANCH of solidus" + +if [ -z "$SOLIDUS_FRONTEND" ] +then + echo "~~> Use 'export SOLIDUS_FRONTEND=[solidus_frontend|solidus_starter_frontend]' to control the Solidus frontend" + SOLIDUS_FRONTEND="solidus_frontend" +fi +echo "~~> Using branch $SOLIDUS_FRONTEND as the solidus frontend" + +extension_name="solidus_user_roles" + +# Stay away from the bundler env of the containing extension. +function unbundled { + ruby -rbundler -e'b = proc {system *ARGV}; Bundler.respond_to?(:with_unbundled_env) ? Bundler.with_unbundled_env(&b) : Bundler.with_clean_env(&b)' -- $@ +} + +rm -rf ./sandbox +unbundled bundle exec rails new sandbox \ + --database="${DB:-sqlite3}" \ + --skip-bundle \ + --skip-git \ + --skip-keeps \ + --skip-rc \ + --skip-spring \ + --skip-test \ + --skip-javascript + +if [ ! -d "sandbox" ]; then + echo 'sandbox rails application failed' + exit 1 +fi + +cd ./sandbox +cat <> Gemfile +gem 'solidus', github: 'solidusio/solidus', branch: '$SOLIDUS_BRANCH' +gem 'rails-i18n' +gem 'solidus_i18n' + +gem '$extension_name', path: '..' + +group :test, :development do + platforms :mri do + gem 'pry-byebug' + end +end +RUBY + +unbundled bundle install --gemfile Gemfile + +unbundled bundle exec rake db:drop db:create + +unbundled bundle exec rails generate solidus:install \ + --auto-accept \ + --user_class=Spree::User \ + --enforce_available_locales=true \ + --with-authentication=true \ + --payment-method=none \ + --frontend=${SOLIDUS_FRONTEND} \ + $@ + +unbundled bundle exec rails generate solidus:auth:install --auto-run-migrations +unbundled bundle exec rails generate ${extension_name}:install --auto-run-migrations + +echo +echo "๐Ÿš€ Sandbox app successfully created for $extension_name!" +echo "๐Ÿงช This app is intended for test purposes." diff --git a/bin/setup b/bin/setup old mode 100644 new mode 100755 index c3563af..67d9193 --- a/bin/setup +++ b/bin/setup @@ -5,4 +5,4 @@ set -vx gem install bundler --conservative bundle update -bundle exec rake extension:test_app +bin/rake clobber diff --git a/lib/generators/solidus_user_roles/install/install_generator.rb b/lib/generators/solidus_user_roles/install/install_generator.rb index ef8c974..ba9af8a 100644 --- a/lib/generators/solidus_user_roles/install/install_generator.rb +++ b/lib/generators/solidus_user_roles/install/install_generator.rb @@ -1,8 +1,18 @@ +# frozen_string_literal: true + module SolidusUserRoles module Generators class InstallGenerator < Rails::Generators::Base + class_option :auto_run_migrations, type: :boolean, default: false + source_root File.expand_path('templates', __dir__) + + def self.exit_on_failure? + true + end - class_option :auto_run_migrations, :type => :boolean, :default => false + def copy_initializer + template 'initializer.rb', 'config/initializers/solidus_user_roles.rb' + end def add_javascripts append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_user_roles\n" @@ -10,29 +20,22 @@ def add_javascripts end def add_stylesheets - inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_user_roles\n", :before => /\*\//, :verbose => true - inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_user_roles\n", :before => /\*\//, :verbose => true + inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_user_roles\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength + inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_user_roles\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength end def add_migrations - run 'bundle exec rake railties:install:migrations FROM=solidus_user_roles' + run 'bin/rails railties:install:migrations FROM=solidus_user_roles' end def run_migrations - run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]') + run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength if run_migrations - run 'bundle exec rake db:migrate' + run 'bin/rails db:migrate' else - puts 'Skipping rake db:migrate, don\'t forget to run it!' + puts 'Skipping bin/rails db:migrate, don\'t forget to run it!' # rubocop:disable Rails/Output end end - - def include_seed_data - append_file "db/seeds.rb", <<-SEEDS - \n - SolidusUserRoles::Engine.load_seed if defined?(SolidusUserRoles::Engine) - SEEDS - end end end end diff --git a/lib/generators/solidus_user_roles/install/templates/initializer.rb b/lib/generators/solidus_user_roles/install/templates/initializer.rb new file mode 100644 index 0000000..0646476 --- /dev/null +++ b/lib/generators/solidus_user_roles/install/templates/initializer.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +SolidusUserRoles.configure do |config| + # TODO: Remember to change this with the actual preferences you have implemented! + # config.sample_preference = 'sample_value' +end diff --git a/lib/solidus_user_roles.rb b/lib/solidus_user_roles.rb index 1ea407e..36adcdc 100644 --- a/lib/solidus_user_roles.rb +++ b/lib/solidus_user_roles.rb @@ -1,3 +1,5 @@ -require 'solidus_core' -require 'solidus_support' +# frozen_string_literal: true + +require 'solidus_user_roles/configuration' +require 'solidus_user_roles/version' require 'solidus_user_roles/engine' diff --git a/lib/solidus_user_roles/configuration.rb b/lib/solidus_user_roles/configuration.rb new file mode 100644 index 0000000..ffd23ca --- /dev/null +++ b/lib/solidus_user_roles/configuration.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module SolidusUserRoles + class Configuration + # Define here the settings for this extension, e.g.: + # + # attr_accessor :my_setting + end + + class << self + def configuration + @configuration ||= Configuration.new + end + + alias config configuration + + def configure + yield configuration + end + end +end diff --git a/lib/solidus_user_roles/engine.rb b/lib/solidus_user_roles/engine.rb index d28f7bc..ca9f3c5 100644 --- a/lib/solidus_user_roles/engine.rb +++ b/lib/solidus_user_roles/engine.rb @@ -1,10 +1,18 @@ +# frozen_string_literal: true + +require 'solidus_core' +require 'solidus_support' + module SolidusUserRoles class Engine < Rails::Engine include SolidusSupport::EngineExtensions + isolate_namespace ::Spree + engine_name 'solidus_user_roles' config.autoload_paths += %W(#{config.root}/lib) + # use rspec for tests config.generators do |g| g.test_framework :rspec end diff --git a/lib/solidus_user_roles/version.rb b/lib/solidus_user_roles/version.rb new file mode 100644 index 0000000..3d85d56 --- /dev/null +++ b/lib/solidus_user_roles/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module SolidusUserRoles + VERSION = '1.2.2' +end diff --git a/solidus_user_roles.gemspec b/solidus_user_roles.gemspec index 757b5c6..8ae2cc3 100644 --- a/solidus_user_roles.gemspec +++ b/solidus_user_roles.gemspec @@ -1,25 +1,37 @@ -# encoding: UTF-8 -Gem::Specification.new do |s| - s.platform = Gem::Platform::RUBY - s.name = 'solidus_user_roles' - s.version = '1.2.2' - s.summary = 'Advanced user roles for Solidus.' - s.description = 'Advanced user roles for Solidus.' - s.required_ruby_version = '>= 2.1.0' - - s.author = 'Allison Reilly' - s.email = 'acreilly3@gmail.com' - s.homepage = 'http://boomer.digital' - - #s.files = `git ls-files`.split("\n") - #s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") - s.require_path = 'lib' - s.requirements << 'none' - - s.add_dependency "solidus_core", [">= 1.0.0", "< 3"] - s.add_dependency 'solidus_support', '~> 0.5' - - - s.add_development_dependency 'solidus_dev_support' - s.add_development_dependency 'shoulda-matchers' +# frozen_string_literal: true + +require_relative 'lib/solidus_user_roles/version' + +Gem::Specification.new do |spec| + spec.name = 'solidus_user_roles' + spec.version = SolidusUserRoles::VERSION + spec.authors = ['Allison Reilly'] + spec.email = 'acreilly3@gmail.com' + + spec.summary = 'Advanced user roles for Solidus.' + spec.description = 'Advanced user roles for Solidus.' + spec.homepage = 'http://boomer.digital' + spec.license = 'BSD-3-Clause' + + spec.metadata['homepage_uri'] = spec.homepage + spec.metadata['source_code_uri'] = 'https://github.com/cpfergus1/solidus_user_roles' + spec.metadata['changelog_uri'] = 'https://github.com/cpfergus1/solidus_user_roles/blob/master/CHANGELOG.md' + + spec.required_ruby_version = Gem::Requirement.new('>= 2.5', '< 4') + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + files = Dir.chdir(__dir__) { `git ls-files -z`.split("\x0") } + + spec.files = files.grep_v(%r{^(test|spec|features)/}) + spec.test_files = files.grep(%r{^(test|spec|features)/}) + spec.bindir = "exe" + spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] + + spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 4'] + spec.add_dependency 'solidus_support', '~> 0.5' + + spec.add_development_dependency 'solidus_dev_support', '~> 2.6' + spec.add_development_dependency 'shoulda-matchers' end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 6b67c7c..84a029e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,16 +6,27 @@ # Run Coverage report require 'solidus_dev_support/rspec/coverage' -require File.expand_path('dummy/config/environment.rb', __dir__) +# Create the dummy app if it's still missing. +dummy_env = "#{__dir__}/dummy/config/environment.rb" +system 'bin/rake extension:test_app' unless File.exist? dummy_env +require dummy_env # Requires factories and other useful helpers defined in spree_core. require 'solidus_dev_support/rspec/feature_helper' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. -Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f } +Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f } + +# Requires factories defined in Solidus core and this extension. +# See: lib/solidus_user_roles/testing_support/factories.rb +SolidusDevSupport::TestingSupport::Factories.load_for(SolidusUserRoles::Engine) RSpec.configure do |config| config.infer_spec_type_from_file_location! config.use_transactional_fixtures = false + + if Spree.solidus_gem_version < Gem::Version.new('2.11') + config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :system + end end From 06a0dbaad50133ed812a28e83cbf3164d1e1d5ec Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 09:33:22 -0600 Subject: [PATCH 02/10] Update Factories Location to Testing Support --- lib/solidus_user_roles/testing_support/factories.rb | 5 +++++ spec/support/factories.rb | 7 ------- spec/support/factories/factories.rb | 6 ------ 3 files changed, 5 insertions(+), 13 deletions(-) create mode 100644 lib/solidus_user_roles/testing_support/factories.rb delete mode 100644 spec/support/factories.rb delete mode 100644 spec/support/factories/factories.rb diff --git a/lib/solidus_user_roles/testing_support/factories.rb b/lib/solidus_user_roles/testing_support/factories.rb new file mode 100644 index 0000000..0a61ad9 --- /dev/null +++ b/lib/solidus_user_roles/testing_support/factories.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +FactoryBot.define do + +end diff --git a/spec/support/factories.rb b/spec/support/factories.rb deleted file mode 100644 index 46db831..0000000 --- a/spec/support/factories.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -require "factory_bot" - -Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f| - require File.expand_path(f) -end diff --git a/spec/support/factories/factories.rb b/spec/support/factories/factories.rb deleted file mode 100644 index 39ebc4a..0000000 --- a/spec/support/factories/factories.rb +++ /dev/null @@ -1,6 +0,0 @@ -FactoryBot.define do - factory :permission_set, class: Spree::PermissionSet do - name { 'ProductManagement' } - set { 'Spree::PermissionSets::ProductManagement' } - end -end From 7872c5cf86974c46f5f4d87476860717a3a0d98c Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 09:57:36 -0600 Subject: [PATCH 03/10] Update CircleCI config to Latest https://circleci.com/developer/orbs/orb/solidusio/extensions --- .circleci/config.yml | 60 +++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 28d70eb..2a922dd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,32 +11,47 @@ orbs: solidusio_extensions: solidusio/extensions@volatile jobs: - run-specs-with-sqlite: - executor: solidusio_extensions/sqlite + run-specs: + parameters: + solidus: + type: string + default: master + db: + type: string + default: "postgres" + ruby: + type: string + default: "3.2" + executor: + name: solidusio_extensions/<< parameters.db >> + ruby_version: << parameters.ruby >> steps: + - checkout - browser-tools/install-chrome - - solidusio_extensions/run-tests - run-specs-with-postgres: - executor: solidusio_extensions/postgres - steps: - - browser-tools/install-chrome - - solidusio_extensions/run-tests - run-specs-with-mysql: - executor: solidusio_extensions/mysql - steps: - - browser-tools/install-chrome - - solidusio_extensions/run-tests + - solidusio_extensions/run-tests-solidus-<< parameters.solidus >> + lint-code: - executor: solidusio_extensions/sqlite-memory + executor: + name: solidusio_extensions/sqlite + ruby_version: "3.0" steps: - solidusio_extensions/lint-code workflows: "Run specs on supported Solidus versions": jobs: - - run-specs-with-sqlite - - run-specs-with-postgres - - run-specs-with-mysql + - run-specs: + name: &name "run-specs-solidus-<< matrix.solidus >>-ruby-<< matrix.ruby >>-db-<< matrix.db >>" + matrix: + parameters: { solidus: ["master"], ruby: ["3.2"], db: ["postgres"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["current"], ruby: ["3.1"], db: ["mysql"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["older"], ruby: ["3.0"], db: ["sqlite"] } - lint-code "Weekly run specs against master": @@ -48,6 +63,11 @@ workflows: only: - master jobs: - - run-specs-with-sqlite - - run-specs-with-postgres - - run-specs-with-mysql + - run-specs: + name: *name + matrix: + parameters: { solidus: ["master"], ruby: ["3.2"], db: ["postgres"] } + - run-specs: + name: *name + matrix: + parameters: { solidus: ["current"], ruby: ["3.1"], db: ["mysql"] } \ No newline at end of file From 9000bcd1a8ecf118ef21407cf61813b7776cd3a9 Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 10:32:05 -0600 Subject: [PATCH 04/10] Rubocop Corrections --- .../spree/admin/roles_controller.rb | 2 + .../spree/role_decorator.rb | 1 - app/models/spree/permission_set.rb | 4 +- .../spree/permission_sets/role_management.rb | 15 ++++++- app/models/spree/role_permission.rb | 2 + app/overrides/user_sub_menu.rb | 6 ++- config/routes.rb | 2 + db/seeds.rb | 1 + lib/solidus_user_roles/engine.rb | 14 +++--- lib/solidus_user_roles/factories.rb | 6 --- .../testing_support/factories.rb | 5 ++- lib/tasks/load_seeds.rake | 2 + solidus_user_roles.gemspec | 2 +- .../spree/admin/roles_controller_spec.rb | 34 +++++++------- spec/models/spree/permission_set_spec.rb | 6 +-- spec/models/spree/role_permission_spec.rb | 4 +- spec/models/spree/role_spec.rb | 44 +++++++++---------- 17 files changed, 85 insertions(+), 65 deletions(-) delete mode 100644 lib/solidus_user_roles/factories.rb diff --git a/app/controllers/spree/admin/roles_controller.rb b/app/controllers/spree/admin/roles_controller.rb index 4adbce6..7854320 100644 --- a/app/controllers/spree/admin/roles_controller.rb +++ b/app/controllers/spree/admin/roles_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Spree module Admin class RolesController < ResourceController diff --git a/app/decorators/models/solidus_user_roles/spree/role_decorator.rb b/app/decorators/models/solidus_user_roles/spree/role_decorator.rb index 83bb4e5..2919c4c 100644 --- a/app/decorators/models/solidus_user_roles/spree/role_decorator.rb +++ b/app/decorators/models/solidus_user_roles/spree/role_decorator.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true - module SolidusUserRoles module Spree module RoleDecorator diff --git a/app/models/spree/permission_set.rb b/app/models/spree/permission_set.rb index 0ea4149..af5b8af 100644 --- a/app/models/spree/permission_set.rb +++ b/app/models/spree/permission_set.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + module Spree class PermissionSet < Spree::Base - has_many :role_permissions + has_many :role_permissions # rubocop:disable Rails/HasManyOrHasOneDependent has_many :roles, through: :role_permissions validates :name, :set, presence: true scope :display_permissions, -> { where('name LIKE ?', '%Display') } diff --git a/app/models/spree/permission_sets/role_management.rb b/app/models/spree/permission_sets/role_management.rb index adc3ec2..f02d338 100644 --- a/app/models/spree/permission_sets/role_management.rb +++ b/app/models/spree/permission_sets/role_management.rb @@ -1,9 +1,22 @@ +# frozen_string_literal: true + # A Role Manager has all the access of a UserManager and the ability to manage Roles module Spree module PermissionSets class RoleManagement < PermissionSets::Base def activate! - can [:admin, :display, :create, :update, :save_in_address_book, :remove_from_address_book, :addresses, :orders, :items], Spree.user_class + can [ + :admin, + :display, + :create, + :update, + :save_in_address_book, + :remove_from_address_book, + :addresses, + :orders, + :items + ], + Spree.user_class # due to how cancancan filters by associations, # we have to define this twice, once for `accessible_by` diff --git a/app/models/spree/role_permission.rb b/app/models/spree/role_permission.rb index f7b5d18..a194df5 100644 --- a/app/models/spree/role_permission.rb +++ b/app/models/spree/role_permission.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Spree class RolePermission < Spree::Base belongs_to :role diff --git a/app/overrides/user_sub_menu.rb b/app/overrides/user_sub_menu.rb index 506e5cb..7074093 100644 --- a/app/overrides/user_sub_menu.rb +++ b/app/overrides/user_sub_menu.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + Deface::Override.new( - virtual_path: 'spree/admin/shared/_menu', - name: 'add_user_roles_menu_links', + virtual_path: 'spree/admin/shared/_menu', + name: 'add_user_roles_menu_links', insert_bottom: "[data-hook='admin_tabs']" ) do <<-HTML diff --git a/config/routes.rb b/config/routes.rb index 61a0e8a..7fc5f70 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Spree::Core::Engine.routes.draw do namespace :admin do resources :roles diff --git a/db/seeds.rb b/db/seeds.rb index a9a064e..323507f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true Spree::PermissionSets::Base.subclasses.each do |permission| Spree::PermissionSet.create(name: permission.to_s.split('PermissionSets::').last, set: permission.to_s) diff --git a/lib/solidus_user_roles/engine.rb b/lib/solidus_user_roles/engine.rb index ca9f3c5..c6d9ca3 100644 --- a/lib/solidus_user_roles/engine.rb +++ b/lib/solidus_user_roles/engine.rb @@ -18,7 +18,8 @@ class Engine < Rails::Engine end def self.load_custom_permissions - if (ActiveRecord::Base.connection.tables & ['spree_roles','spree_permission_sets']).to_a.length == 2 # makes sure both table exist + # Ensure both tables exist before assigning permissions + if (ActiveRecord::Base.connection.tables & ['spree_roles', 'spree_permission_sets']).to_a.length == 2 ::Spree::Role.non_base_roles.each do |role| if ::Spree.solidus_gem_version < Gem::Version.new('2.5.x') ::Spree::RoleConfiguration.configure do |config| @@ -35,16 +36,15 @@ def self.load_custom_permissions warn "Skipping role configuration: #{e.message}" end - def self.activate - Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c| + Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')).sort.each do |c| Rails.configuration.cache_classes ? require(c) : load(c) end - unless Rails.env == 'test' - SolidusUserRoles::Engine.load_custom_permissions - end + return if Rails.env.test? + + SolidusUserRoles::Engine.load_custom_permissions end - config.to_prepare &method(:activate).to_proc + config.to_prepare(&method(:activate).to_proc) end end diff --git a/lib/solidus_user_roles/factories.rb b/lib/solidus_user_roles/factories.rb deleted file mode 100644 index 7d34ac0..0000000 --- a/lib/solidus_user_roles/factories.rb +++ /dev/null @@ -1,6 +0,0 @@ -FactoryBot.define do - # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them. - # - # Example adding this to your spec_helper will load these Factories for use: - # require 'solidus_user_roles/factories' -end diff --git a/lib/solidus_user_roles/testing_support/factories.rb b/lib/solidus_user_roles/testing_support/factories.rb index 0a61ad9..276cbb8 100644 --- a/lib/solidus_user_roles/testing_support/factories.rb +++ b/lib/solidus_user_roles/testing_support/factories.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true FactoryBot.define do - + factory :permission_set, class: Spree::PermissionSet do + name { 'ProductManagement' } + set { 'Spree::PermissionSets::ProductManagement' } + end end diff --git a/lib/tasks/load_seeds.rake b/lib/tasks/load_seeds.rake index 2fa71bd..b5d2b75 100644 --- a/lib/tasks/load_seeds.rake +++ b/lib/tasks/load_seeds.rake @@ -1,3 +1,5 @@ +# frozen_string_literal: true + namespace :solidus_user_roles do desc "Loads seed data." task load_seeds: :environment do diff --git a/solidus_user_roles.gemspec b/solidus_user_roles.gemspec index 8ae2cc3..82bd150 100644 --- a/solidus_user_roles.gemspec +++ b/solidus_user_roles.gemspec @@ -32,6 +32,6 @@ Gem::Specification.new do |spec| spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 4'] spec.add_dependency 'solidus_support', '~> 0.5' - spec.add_development_dependency 'solidus_dev_support', '~> 2.6' spec.add_development_dependency 'shoulda-matchers' + spec.add_development_dependency 'solidus_dev_support', '~> 2.6' end diff --git a/spec/controllers/spree/admin/roles_controller_spec.rb b/spec/controllers/spree/admin/roles_controller_spec.rb index 769558b..4262a38 100644 --- a/spec/controllers/spree/admin/roles_controller_spec.rb +++ b/spec/controllers/spree/admin/roles_controller_spec.rb @@ -24,35 +24,35 @@ end describe "#create" do + subject(:request) { post :create, params: params } + let(:params) do { role: { - name: "TEST #{rand(10000)}", + name: "TEST #{rand(10_000)}", permission_set_ids: [permission_set.id] } } end - subject { post :create, params: params } it { is_expected.to redirect_to(spree.admin_roles_path) } it "expect @role to eq the role being updated" do - expect(assigns(:role)).to eq(@role) + expect(assigns(:role)).to eq(@role) # rubocop:disable RSpec/InstanceVariable end - it "should update the permission sets" do - expect{subject}.to change { Spree::Role.count }.by(1) + it "updates the permission sets" do + expect{ request }.to change(Spree::Role, :count).by(1) end - it "should update the RoleConfiguration" do - if Spree.solidus_gem_version < Gem::Version.new('2.5.x') - expect{subject}.to change {Spree::RoleConfiguration.instance.roles.count}.by(1) - else - expect{subject}.to change {Spree::Config.roles.roles.count}.by(1) - end + + it "updates the RoleConfiguration" do + expect{ request }.to change { Spree::Config.roles.roles.count }.by(1) end end describe "#update" do + subject(:request) { put :update, params: params } + let(:params) do { id: role.to_param, @@ -63,20 +63,20 @@ } end - subject { put :update, params: params } it { is_expected.to redirect_to(spree.admin_roles_path) } it "expect @role to eq the role being updated" do - expect(assigns(:role)).to eq(@role) + expect(assigns(:role)).to eq(@role) # rubocop:disable RSpec/InstanceVariable end - it "should update the permission sets" do - expect{subject}.to change { role.reload.permission_sets.count }.by(1) + it "updates the permission sets" do + expect{ request }.to change { role.reload.permission_sets.count }.by(1) end end describe "#destroy" do - subject { put :destroy, params: { :id => role.to_param } } - it { is_expected.to have_http_status(302) } + subject { put :destroy, params: { id: role.to_param } } + + it { is_expected.to have_http_status(:found) } end end diff --git a/spec/models/spree/permission_set_spec.rb b/spec/models/spree/permission_set_spec.rb index d13e5c1..2a39862 100644 --- a/spec/models/spree/permission_set_spec.rb +++ b/spec/models/spree/permission_set_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Spree::PermissionSet, type: :model do - it { should have_many :role_permissions } - it { should have_many(:roles).through(:role_permissions) } - it { should validate_presence_of :name } + it { is_expected.to have_many :role_permissions } + it { is_expected.to have_many(:roles).through(:role_permissions) } + it { is_expected.to validate_presence_of :name } end diff --git a/spec/models/spree/role_permission_spec.rb b/spec/models/spree/role_permission_spec.rb index 2a1e55e..d6e0f98 100644 --- a/spec/models/spree/role_permission_spec.rb +++ b/spec/models/spree/role_permission_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' describe Spree::RolePermission, type: :model do - it { should belong_to :role } - it { should belong_to :permission_set } + it { is_expected.to belong_to :role } + it { is_expected.to belong_to :permission_set } end diff --git a/spec/models/spree/role_spec.rb b/spec/models/spree/role_spec.rb index e9839ae..0606e93 100644 --- a/spec/models/spree/role_spec.rb +++ b/spec/models/spree/role_spec.rb @@ -1,47 +1,45 @@ require 'spec_helper' describe Spree::Role, type: :model do - it { should have_many :role_permissions } - it { should have_many(:permission_sets).through(:role_permissions) } - it { should validate_uniqueness_of :name } let(:role) { role = build(:role) role.permission_sets << create(:permission_set) role } - context "#assign_permissions" do + it { is_expected.to have_many :role_permissions } + it { is_expected.to have_many(:permission_sets).through(:role_permissions) } + it { is_expected.to validate_uniqueness_of :name } + + describe "#assign_permissions" do it 'creates new Spree::RoleConfiguration::Role' do - if Spree.solidus_gem_version < Gem::Version.new('2.5.x') - expect { role.save }.to change { Spree::RoleConfiguration.instance.roles.count }.by(1) - else - expect { role.save }.to change { Spree::Config.roles.roles.count }.by(1) - end + expect { role.save }.to change { Spree::Config.roles.roles.count }.by(1) end + it 'updates the existing Spree::RoleConfiguration::Role' do role.save role.permission_sets << create(:permission_set, name: 'test', set: 'Spree::PermissionSets::ProductDisplay') - if Spree.solidus_gem_version < Gem::Version.new('2.5.x') - expect { role.save }.to change { Spree::RoleConfiguration.instance.roles[role.name].permission_sets.count }.from(1).to(2) - else - expect { role.save }.to change { Spree::Config.roles.roles[role.name].permission_sets.count }.from(1).to(2) - end + expect { role.save }.to change { Spree::Config.roles.roles[role.name].permission_sets.count }.from(1).to(2) end end - context "#destroy" do + describe "#destroy" do + let(:role) { create(:role) } + before do - @role = create(:role) - @role.permission_sets << create(:permission_set) - @role.save - @role_permission = @role.role_permissions.first + role.permission_sets << create(:permission_set) + role.save end - it "should destroy all associated role permissions" do - @role.destroy - expect{ Spree::Role.find(@role.id) }.to raise_error(ActiveRecord::RecordNotFound) - expect{ Spree::RolePermission.find(@role_permission.id) }.to raise_error(ActiveRecord::RecordNotFound) + it "destroys all associated role permissions" do + role_permission = role.role_permissions.first + + role.destroy + aggregate_failures do + expect{ described_class.find(role.id) }.to raise_error(ActiveRecord::RecordNotFound) + expect{ Spree::RolePermission.find(role_permission.id) }.to raise_error(ActiveRecord::RecordNotFound) + end end end end From 4a5a46dc94d275d640dff0b7a9085b3b70cba659 Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 10:53:49 -0600 Subject: [PATCH 05/10] Ignore case sensitivity in validation Fixes MySQL error --- .../models/solidus_user_roles/spree/role_decorator.rb | 2 +- spec/models/spree/role_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/decorators/models/solidus_user_roles/spree/role_decorator.rb b/app/decorators/models/solidus_user_roles/spree/role_decorator.rb index 2919c4c..0b9df0f 100644 --- a/app/decorators/models/solidus_user_roles/spree/role_decorator.rb +++ b/app/decorators/models/solidus_user_roles/spree/role_decorator.rb @@ -8,7 +8,7 @@ def self.prepended(base) base.has_many :permission_sets, through: :role_permissions base.scope :non_base_roles, -> { where.not(name: ['admin', 'user']) } - base.validates :name, uniqueness: true + base.validates_uniqueness_of :name, case_sensitive: false base.after_save :assign_permissions end diff --git a/spec/models/spree/role_spec.rb b/spec/models/spree/role_spec.rb index 0606e93..536a6b3 100644 --- a/spec/models/spree/role_spec.rb +++ b/spec/models/spree/role_spec.rb @@ -9,7 +9,7 @@ it { is_expected.to have_many :role_permissions } it { is_expected.to have_many(:permission_sets).through(:role_permissions) } - it { is_expected.to validate_uniqueness_of :name } + it { is_expected.to validate_uniqueness_of(:name).ignoring_case_sensitivity } describe "#assign_permissions" do it 'creates new Spree::RoleConfiguration::Role' do From dd96e07ed17f3a2d723b62f15cb7c7817e20b6d6 Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Fri, 5 May 2023 12:19:44 -0600 Subject: [PATCH 06/10] Replace Deprecated Spree.t with I18n.t --- app/views/spree/admin/roles/_form.html.erb | 6 +++--- app/views/spree/admin/roles/edit.html.erb | 4 ++-- app/views/spree/admin/roles/index.html.erb | 14 +++++++------- app/views/spree/admin/roles/new.html.erb | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/views/spree/admin/roles/_form.html.erb b/app/views/spree/admin/roles/_form.html.erb index 9c4c91d..4797e3b 100644 --- a/app/views/spree/admin/roles/_form.html.erb +++ b/app/views/spree/admin/roles/_form.html.erb @@ -15,12 +15,12 @@
- <%= f.label :name, Spree.t(:name) %> + <%= f.label :name, I18n.t("spree.name") %> <%= f.text_field :name, :class => 'fullwidth' %>
- <%= label_tag nil, Spree.t(:display_permissions) %> + <%= label_tag nil, I18n.t("spree.display_permissions") %>
- <%= label_tag nil, Spree.t(:management_permissions) %> + <%= label_tag nil, I18n.t("spree.management_permissions") %>
diff --git a/app/views/spree/admin/roles/index.html.erb b/app/views/spree/admin/roles/index.html.erb index dd3df3a..a1c8362 100644 --- a/app/views/spree/admin/roles/index.html.erb +++ b/app/views/spree/admin/roles/index.html.erb @@ -10,8 +10,7 @@ <% end %> <% end %> - -<% if @roles.any? %> +<% if @roles.non_base_roles.any? %> @@ -42,10 +41,14 @@
<% else %> -
- <%= I18n.t("spree.no_resource_found", resource: I18n.t(:other, scope: 'activerecord.models.spree/role')) %> - <% if can?(:create, Spree::TaxRate) %> - <%= link_to I18n.t("spree.add_one"), spree.new_admin_role_path %>! - <% end %> +
+
+
+ <%= I18n.t("spree.no_resource_found", resource: I18n.t(:other, scope: 'activerecord.models.spree/role')) %> + <% if can?(:admin, Spree::Role) && can?(:create, Spree::Role) %> + <%= link_to I18n.t("spree.add_one"), spree.new_admin_role_path %>! + <% end %> +
+
<% end %> From f8f0949c3705c450d6be7541622da9d02338e02d Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Tue, 9 May 2023 13:54:33 -0600 Subject: [PATCH 09/10] Solidus 4.0 Master Branch Changed to Main https://github.com/solidusio/solidus/pull/5042 --- .circleci/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2a922dd..9761924 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: parameters: solidus: type: string - default: master + default: main db: type: string default: "postgres" @@ -43,7 +43,7 @@ workflows: - run-specs: name: &name "run-specs-solidus-<< matrix.solidus >>-ruby-<< matrix.ruby >>-db-<< matrix.db >>" matrix: - parameters: { solidus: ["master"], ruby: ["3.2"], db: ["postgres"] } + parameters: { solidus: ["main"], ruby: ["3.2"], db: ["postgres"] } - run-specs: name: *name matrix: @@ -54,19 +54,19 @@ workflows: parameters: { solidus: ["older"], ruby: ["3.0"], db: ["sqlite"] } - lint-code - "Weekly run specs against master": + "Weekly run specs against main": triggers: - schedule: cron: "0 0 * * 4" # every Thursday filters: branches: only: - - master + - main jobs: - run-specs: name: *name matrix: - parameters: { solidus: ["master"], ruby: ["3.2"], db: ["postgres"] } + parameters: { solidus: ["main"], ruby: ["3.2"], db: ["postgres"] } - run-specs: name: *name matrix: From e742102d35ca6f01f92da2d4d484436148f96a54 Mon Sep 17 00:00:00 2001 From: Connor Ferguson <68167430+cpfergus1@users.noreply.github.com> Date: Wed, 10 May 2023 06:56:26 -0600 Subject: [PATCH 10/10] Update Readme --- README.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 57e7677..5d98197 100644 --- a/README.md +++ b/README.md @@ -10,19 +10,27 @@ Add solidus_user_roles to your Gemfile: ```ruby -gem 'solidus_user_roles' +gem 'solidus_user_roles', github: 'boomerdigital/solidus_user_roles' ``` Bundle your dependencies and run the installation generator: ```shell -bin/rails generate solidus_user_roles:install +bundle +bundle exec rails g solidus_user_roles:install ``` -## Usage - - +Remember to seed or run: +```shell +rake solidus_user_roles:load_seeds +``` +Admin Panel +----------- +An admin is the only user who has the ability to add or remove roles from other users. +![image](https://github.com/cpfergus1/solidus_user_roles/assets/68167430/8109fe7e-d098-42c8-a03a-ad1bec273b8c) +![image](https://github.com/cpfergus1/solidus_user_roles/assets/68167430/311d8e38-e801-401d-9fe8-f232435001ad) +![image](https://github.com/cpfergus1/solidus_user_roles/assets/68167430/6f248635-054c-4adc-9fdf-85108acd06c8) ## Development ### Testing the extension @@ -68,6 +76,8 @@ Use Ctrl-C to stop Please refer to the [dedicated page](https://github.com/solidusio/solidus/wiki/How-to-release-extensions) in the Solidus wiki. + ## License +Fork of https://github.com/boomerdigital/solidus_user_roles Copyright (c) 2023 Allison Reilly, released under the New BSD License.