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 Apr 18, 2024
1 parent e85fd4c commit c148964
Show file tree
Hide file tree
Showing 2 changed files with 41 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
30 changes: 30 additions & 0 deletions api/spec/lib/spree/api_configuration_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 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) }
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 c148964

Please sign in to comment.