Skip to content

Commit

Permalink
Properly delegate Spree::ApiConfiguration#promotion_attributes
Browse files Browse the repository at this point in the history
Initializing the app with the code prior to this commit would
instantiate the promotions configuration, which is not good because
instantiating it via `Spree::Config.promotions` leads to the object
being instacached and very, very hard to change.

Also, we currently have to spots in the app where we can configure the
promotion api attributes, and this reduces it to just one by deprecating
the preference :promotion_attributes on `Spree::ApiConfiguration`.
  • Loading branch information
mamhoff committed May 2, 2024
1 parent 7ba0f98 commit 0f24a5d
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
12 changes: 11 additions & 1 deletion api/lib/spree/api_configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,17 @@ class ApiConfiguration < Preferences::Configuration
:variant_id
]

preference :promotion_attributes, :array, default: Spree::Config.promotions.promotion_api_attributes
def promotion_attributes
Spree::Config.promotions.promotion_api_attributes
end
alias_method :preferred_promotion_attributes, :promotion_attributes

def promotion_attributes=(value)
Spree::Config.promotions.promotion_api_attributes = value
end
alias_method :preferred_promotion_attributes=, :promotion_attributes=
promotion_attributes_deprecation_message = "Spree::ApiConfiguration#promotion_attributes= is deprecated. Please use Spree::Config.promotions.promotion_api_attributes= instead."
deprecate "promotion_attributes=" => promotion_attributes_deprecation_message, deprecator: Spree.deprecator

preference :store_attributes, :array, default: [
:id, :name, :url, :meta_description, :meta_keywords, :seo_title,
Expand Down
41 changes: 41 additions & 0 deletions api/spec/lib/spree/api_configuration_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# frozen_string_literal: true

require "spec_helper"

RSpec.describe Spree::ApiConfiguration do
subject(:config) { Spree::ApiConfiguration.new }

describe "#promotion_attributes" do
subject(:promotion_attributes) { config.promotion_attributes }

it { is_expected.to eq(Spree::Config.promotions.promotion_api_attributes) }

it "can be changed" do
config.promotion_attributes << :foo
expect(promotion_attributes).to include(:foo)
end

it "can delete attributes" do
expect(promotion_attributes).to include(:name)
config.promotion_attributes.delete(:name)
expect(promotion_attributes).not_to include(:name)
end
end

describe "#promotion_attributes=" do
subject(:promotion_attributes_setter) { config.promotion_attributes = [:name] }

around do |example|
original_attributes = Spree::Config.promotions.promotion_api_attributes
Spree.deprecator.silence do
example.run
end
Spree::Config.promotions.promotion_api_attributes = original_attributes
end

it "sets the promotion_attributes" do
promotion_attributes_setter
expect(config.promotion_attributes).to eq([:name])
end
end
end

0 comments on commit 0f24a5d

Please sign in to comment.