class Spree::Core::VersionedValue
Wrapper for a value that can be different depending on the Solidus
version
Some configuration defaults can be added or changed when a new Solidus
version is released. This class encapsulates getting the correct value for a given Solidus
version.
The way it works is you provide an initial value in time, plus the version boundary where it got changed. Then you can fetch the value providing the desired Solidus
version:
@example
value = VersionedValue.new(true, "3.0.0" => false) value.call("2.7.0") # => true value.call("3.0.0") # => false value.call("3.1.0") # => false
Remember that you must provide the exact boundary when a value got changed, which could easily be during a pre-release:
@example
value = VersionedValue.new(true, "3.0.0" => false) value.call("3.0.0.alpha") # => true value = VersionedValue.new(true, "3.0.0.alpha" => false) value.call("3.0.0.alpha") # => false
Multiple boundaries can also be provided:
@example
value = VersionedValue.new(0, "2.0.0" => 1, "3.0.0" => 2) value.call("1.0.0") # => 0 value.call("2.1.0") # => 1 value.call("3.0.0") # => 2
Attributes
boundaries[R]
Public Class Methods
new(initial_value, boundaries = {})
click to toggle source
@param initial_value [Any] @param boundary [Hash<String, Any>] Map from version number to new value
# File lib/spree/core/versioned_value.rb, line 43 def initialize(initial_value, boundaries = {}) @boundaries = Hash[ { '0' => initial_value } .merge(boundaries) .transform_keys { |version| to_gem_version(version) } .sort ] end
Public Instance Methods
call(solidus_version = Spree.solidus_version)
click to toggle source
@param solidus_version [String]
# File lib/spree/core/versioned_value.rb, line 53 def call(solidus_version = Spree.solidus_version) solidus_version = to_gem_version(solidus_version) boundaries.fetch( boundaries .keys .reduce do |target, following| if target <= solidus_version && solidus_version < following target else following end end ) end
Private Instance Methods
to_gem_version(string)
click to toggle source
# File lib/spree/core/versioned_value.rb, line 70 def to_gem_version(string) Gem::Version.new(string) end