From 180f42cf7b30d5aa48bb82f427ddd525911e87e5 Mon Sep 17 00:00:00 2001 From: Anita Graham Date: Wed, 9 Dec 2020 13:29:23 +0800 Subject: [PATCH 1/5] Get settings using friendlyId Update factory to use block --- app/controllers/refinery/admin/settings_controller.rb | 2 +- spec/factories/settings.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/refinery/admin/settings_controller.rb b/app/controllers/refinery/admin/settings_controller.rb index aef0ec8..e92159c 100644 --- a/app/controllers/refinery/admin/settings_controller.rb +++ b/app/controllers/refinery/admin/settings_controller.rb @@ -16,7 +16,7 @@ def new end def edit - @setting = ::Refinery::Setting.find(params[:id]) + @setting = ::Refinery::Setting.friendly.find(params[:id]) render :layout => false if request.xhr? end diff --git a/spec/factories/settings.rb b/spec/factories/settings.rb index 531b84d..69221ed 100644 --- a/spec/factories/settings.rb +++ b/spec/factories/settings.rb @@ -1,5 +1,5 @@ FactoryBot.define do factory :setting, :class => Refinery::Setting do - name "Refinery CMS setting" + name { "Refinery CMS setting" } end end From a4694133949c5c1647ed54f332f57f687acf833d Mon Sep 17 00:00:00 2001 From: Anita Date: Mon, 28 Feb 2022 13:03:50 +0800 Subject: [PATCH 2/5] Setup for zeitwerk. --- Gemfile | 4 +-- config/initializers/zeitwerk.rb | 12 +++++++++ lib/refinerycms/settings.rb | 1 + spec/models/refinery/setting_spec.rb | 36 +++++++++++++-------------- spec/routing/settings_routing_spec.rb | 23 +++++++++-------- spec/spec_helper.rb | 1 + spec/support/refinery_login.rb | 3 +++ 7 files changed, 49 insertions(+), 31 deletions(-) create mode 100644 config/initializers/zeitwerk.rb create mode 100644 lib/refinerycms/settings.rb create mode 100644 spec/support/refinery_login.rb diff --git a/Gemfile b/Gemfile index 0c0f2ba..34a7249 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" gemspec -git "https://github.com/refinery/refinerycms", branch: "master" do +git "https://github.com/refinery/refinerycms", branch: "zeitwerk" do gem "refinerycms" group :test do @@ -49,4 +49,4 @@ end # Load local gems according to Refinery developer preference. if File.exist? local_gemfile = File.expand_path("../.gemfile", __FILE__) eval File.read(local_gemfile) -end \ No newline at end of file +end diff --git a/config/initializers/zeitwerk.rb b/config/initializers/zeitwerk.rb new file mode 100644 index 0000000..60dee20 --- /dev/null +++ b/config/initializers/zeitwerk.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class RefineryInflector < Zeitwerk::Inflector + def camelize(basename, abspath) + return 'Refinery' if basename.start_with?('refinerycms-') + super + end +end + +Rails.autoloaders.each do |autoloader| + autoloader.inflector = RefineryInflector.new +end diff --git a/lib/refinerycms/settings.rb b/lib/refinerycms/settings.rb new file mode 100644 index 0000000..011d327 --- /dev/null +++ b/lib/refinerycms/settings.rb @@ -0,0 +1 @@ +require_relative '../refinery/settings' diff --git a/spec/models/refinery/setting_spec.rb b/spec/models/refinery/setting_spec.rb index 2475ffc..a620f35 100644 --- a/spec/models/refinery/setting_spec.rb +++ b/spec/models/refinery/setting_spec.rb @@ -8,32 +8,32 @@ module Refinery ::Refinery::Setting.set(:rspec_testing_creating_from_scratch, nil) end - context "slug" do - it "should create correct slug" do + describe "slug" do + it "creates a slug" do ::Refinery::Setting.set('test/something', {:value => "Look, a value"}) expect(::Refinery::Setting.last.to_param).to eq('test-something') end end - context "set" do - it "should save and get @keram" do + describe "set" do + it "saves and gets @keram" do ::Refinery::Setting.find_or_set(:twitter, '@keram') setting = ::Refinery::Setting.last expect(setting.value).to eq('@keram') end - it "should not strip whitespaces" do + it "does not strip whitespaces" do ::Refinery::Setting.find_or_set(:author, ' benbruscella ') setting = ::Refinery::Setting.last expect(setting.value).to eq(' benbruscella ') end - it "should create a setting that didn't exist" do + it "creates a new setting if there isn't one" do expect(::Refinery::Setting.get(:creating_from_scratch, :scoping => 'rspec_testing')).to eq(nil) expect(::Refinery::Setting.set(:creating_from_scratch, {:value => "Look, a value", :scoping => 'rspec_testing'})).to eq("Look, a value") end - it "should override an existing setting" do + it "overrides an existing setting" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => "a value", :scoping => 'rspec_testing'}) expect(set).to eq("a value") @@ -41,38 +41,38 @@ module Refinery expect(new_set).to eq("newer replaced value") end - it "should default to form_value_type text_area" do + it "defaults to form_value_type text_area" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => "a value", :scoping => 'rspec_testing'}) expect(::Refinery::Setting.find_by(:name => 'creating_from_scratch', :scoping => 'rspec_testing').form_value_type).to eq("text_area") end - it "should fix true as a value to 'true' (string)" do + it "fixes true as a value to 'true' (string)" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => true, :scoping => 'rspec_testing'}) expect(::Refinery::Setting.find_by(:name => 'creating_from_scratch', :scoping => 'rspec_testing')[:value]).to eq('true') expect(set).to eq(true) end - it "should fix false as a value to 'false' (string)" do + it "fixes false as a value to 'false' (string)" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => false, :scoping => 'rspec_testing'}) expect(::Refinery::Setting.find_by(:name => 'creating_from_scratch', :scoping => 'rspec_testing')[:value]).to eq('false') expect(set).to eq(false) end - it "should fix '1' as a value with a check_box form_value_type to true" do + it "sets '1' as the value of a check_box form_value_type to true" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => "1", :scoping => 'rspec_testing', :form_value_type => 'check_box'}) expect(::Refinery::Setting.find_by(:name => 'creating_from_scratch', :scoping => 'rspec_testing')[:value]).to eq('true') expect(set).to eq(true) end - it "should fix '0' as a value with a check_box form_value_type to false" do + it "sets '0' as the value of a check_box form_value_type to false" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => "0", :scoping => 'rspec_testing', :form_value_type => 'check_box'}) expect(::Refinery::Setting.find_by(:name => 'creating_from_scratch', :scoping => 'rspec_testing')[:value]).to eq('false') expect(set).to eq(false) end end - context "get" do - it "should retrieve a seting that was created" do + describe "get" do + it "should retrieve a setting that was created" do set = ::Refinery::Setting.set(:creating_from_scratch, {:value => "some value", :scoping => 'rspec_testing'}) expect(set).to eq('some value') @@ -97,14 +97,14 @@ module Refinery end end - context "find_or_set" do - it "should create a non existant setting" do + describe "find_or_set" do + it "will create a setting if it does not exist" do created = ::Refinery::Setting.find_or_set(:creating_from_scratch, 'I am a setting being created', :scoping => 'rspec_testing') expect(created).to eq("I am a setting being created") end - it "should not override an existing setting" do + it "will not override an existing setting" do created = ::Refinery::Setting.set(:creating_from_scratch, {:value => 'I am a setting being created', :scoping => 'rspec_testing'}) expect(created).to eq("I am a setting being created") @@ -113,7 +113,7 @@ module Refinery expect(created).to eq("I am a setting being created") end - it "should work without scoping" do + it "works without scoping" do expect(::Refinery::Setting.find_or_set(:rspec_testing_creating_from_scratch, 'Yes it worked')).to eq('Yes it worked') end end diff --git a/spec/routing/settings_routing_spec.rb b/spec/routing/settings_routing_spec.rb index 67e54ed..a9a9922 100644 --- a/spec/routing/settings_routing_spec.rb +++ b/spec/routing/settings_routing_spec.rb @@ -1,16 +1,17 @@ -require "spec_helper" +require 'spec_helper' - -describe "routes for refinery settings", :type => :routing do - - context "when interface config is disabled" do - before do +describe "Refinery::Settings", type: :routing do + context 'when interface disabled' do + it "is not routable" do allow(Refinery::Settings).to receive(:enable_interface).and_return(false) - Refinery::Plugins.registered.find_by_name("refinery_settings").hide_from_menu = true + expect(get: "/refinery/settings").to not_be_routable end + end - it "should not be accesible" do - expect(:get => "/refinery/settings").to_not be_routable - end - end + context 'when interface enabled' do + it "routes to the settings index" do + allow(Refinery::Settings).to receive(:enable_interface).and_return(true) + expect(get: "/refinery/settings").to be_routable + end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index bddb8bc..23f33d8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -14,6 +14,7 @@ config.mock_with :rspec config.filter_run :focus => true config.run_all_when_everything_filtered = true + config.use_transactional_fixtures = true end # set javascript driver for capybara diff --git a/spec/support/refinery_login.rb b/spec/support/refinery_login.rb new file mode 100644 index 0000000..b533a34 --- /dev/null +++ b/spec/support/refinery_login.rb @@ -0,0 +1,3 @@ +def refinery_login + let(:logged_in_user) { Refinery::Core::NilUser.new } +end From 0017fbf5e5b9249c02745e38f66679feab0b3616 Mon Sep 17 00:00:00 2001 From: Anita Date: Mon, 28 Feb 2022 13:03:50 +0800 Subject: [PATCH 3/5] Setup for zeitwerk. Update version and docs --- readme.md | 11 +++++------ refinerycms-settings.gemspec | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index 6971424..922fc7c 100644 --- a/readme.md +++ b/readme.md @@ -4,11 +4,10 @@ ## About -Refinery Settings was extracted from Refinery CMS just before 2.0.0 was released -and can now be used separately. +Refinery Settings is compatible with Refinery CMS 4.1.0 and Rails 6 ## Installation -Add the gem to you Gemfile: +Add the gem to your Gemfile: gem 'refinerycms-settings' @@ -17,13 +16,13 @@ Generate and install the necessary migrations: rails generate refinery:settings rake db:migrate -## Upgrading from 2.0.x -When you upgrade from version 2.0.x make sure you run: +## Upgrading +When you upgrade run: rails generate refinery:settings rake db:migrate -It will copy the new migration and migrate the database. +If there are new migrations for Settings it will copy them to your app and migrate the database. ## How do I Make my Own Settings? diff --git a/refinerycms-settings.gemspec b/refinerycms-settings.gemspec index cb1258c..7b7bd02 100644 --- a/refinerycms-settings.gemspec +++ b/refinerycms-settings.gemspec @@ -3,7 +3,7 @@ Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY s.name = %q{refinerycms-settings} - s.version = %q{4.0.1} + s.version = %q{4.1.0} s.summary = %q{Settings engine for Refinery CMS} s.description = %q{Adds programmer creatable, user editable settings.} s.email = %q{info@refinerycms.com} @@ -15,7 +15,7 @@ Gem::Specification.new do |s| s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- spec/*`.split("\n") - s.add_dependency 'refinerycms-core', ['~> 4.0', '>= 4.0.0'] + s.add_dependency 'refinerycms-core', ['~> 4.0', '>= 4.1.0'] s.add_dependency 'friendly_id', ['>= 5.1.0', '< 5.3'] s.cert_chain = [File.expand_path("../certs/parndt.pem", __FILE__)] From a719706ecc42da0832aa7a9fbddd809e38406301 Mon Sep 17 00:00:00 2001 From: Anita Graham Date: Thu, 3 Mar 2022 11:42:46 +0800 Subject: [PATCH 4/5] Add CI Workflow Add Dependabot.yml --- .github/dependabot.yml | 6 +++++ .github/workflows/main.yml | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/main.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..e4d674d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: bundler + directory: "/" + schedule: + interval: monthly diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..03fe9b1 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,52 @@ +name: CI + +on: + push: + branches: + - master + pull_request: + +jobs: + test: + strategy: + matrix: + database: [ mysql, postgresql ] + ruby: [ 2.7, 2.6 ] + fail-fast: false + max-parallel: 20 + runs-on: ubuntu-latest + + env: + CI: true + DB: ${{ matrix.database }} + MYSQL_PASSWORD: root + PGHOST: localhost + PGPASSWORD: runner + PGUSER: runner + RAILS_ENV: test + RETRY_COUNT: 3 + + name: ${{ matrix.extension }} ${{ matrix.ruby }} ${{ matrix.database }} + steps: + - run: sudo apt-get update && sudo apt-get install libsqlite3-dev -y + - uses: actions/checkout@v2 + - uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + ruby-version: ${{ matrix.ruby }} + + - name: "Set up MySQL using VM's server" + if: ${{ env.DB == 'mysql' }} + run: | + sudo apt-get install libmysqlclient-dev -y + sudo systemctl start mysql.service + + - name: "Set up PostgreSQL using VM's server" + if: ${{ env.DB == 'postgresql' }} + run: | + sudo apt-get install libpq-dev -y + sudo systemctl start postgresql.service + sudo -u postgres psql -c "CREATE USER runner WITH SUPERUSER PASSWORD 'runner'" + + - run: bin/rake refinery:testing:dummy_app + - run: bin/rspec spec From 92506aa8561351d5738ca4f8fe24772dd42236c6 Mon Sep 17 00:00:00 2001 From: Anita Date: Fri, 4 Mar 2022 12:08:48 +0800 Subject: [PATCH 5/5] Update version of pg to match the one used by Refinery. --- Gemfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 34a7249..cb3e0ec 100644 --- a/Gemfile +++ b/Gemfile @@ -22,9 +22,12 @@ if !ENV["TRAVIS"] || ENV["DB"] == "mysql" gem "mysql2", :platform => :ruby end -if !ENV["TRAVIS"] || ENV["DB"] == "postgresql" - gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby - gem 'pg', '~> 0.21', platform: :ruby + +if !ENV['CI'] || ENV['DB'] == 'postgresql' + group :postgres, :postgresql do + gem 'activerecord-jdbcpostgresql-adapter', '>= 1.3.0.rc1', platform: :jruby + gem 'pg', '~> 1.1', platform: :ruby + end end gem "jruby-openssl", :platform => :jruby