Sha256: 97f7b581f06c42a607ac995e841646fdfdf0efe5ea3866b036cd561b787ecab1

Contents?: true

Size: 1.44 KB

Versions: 39

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Spree
  module Preferences
    class StaticModelPreferences
      class Definition
        attr_reader :preferences

        def initialize(klass, hash)
          @klass = klass
          @preferences = hash.symbolize_keys
        end

        def fetch(key, &block)
          @preferences.fetch(key, &block)
        end

        def []=(key, value)
          # ignores assignment
        end

        def to_hash
          @preferences.deep_dup
        end

        delegate :keys, to: :@preferences
      end

      def initialize
        @store = Hash.new do |data, klass|
          data[klass] = {}
        end
      end

      def add(klass, name, preferences)
        @store[klass.to_s][name] = Definition.new(klass.to_s, preferences)
      end

      def for_class(klass)
        @store[klass.to_s]
      end

      def validate!
        @store.keys.map(&:constantize).each do |klass|
          validate_for_class!(klass)
        end
      end

      private

      def validate_for_class!(klass)
        for_class(klass).each do |name, preferences|
          klass_keys = klass.defined_preferences.map(&:to_s)
          extra_keys = preferences.keys.map(&:to_s) - klass_keys
          next if extra_keys.empty?

          raise \
            "Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(', ')} " \
            "(expected keys: #{klass_keys.sort.join(', ')})"
        end
      end
    end
  end
end

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
solidus_core-4.4.2 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.4.1 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.4.0 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.3.4 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.2.4 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.1.5 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.3.3 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.3.2 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.1.4 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.3.1 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.3.0 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.2.3 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.1.3 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.0.4 lib/spree/preferences/static_model_preferences.rb
solidus_core-3.4.6 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.0.3 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.1.2 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.2.2 lib/spree/preferences/static_model_preferences.rb
solidus_core-3.4.5 lib/spree/preferences/static_model_preferences.rb
solidus_core-4.2.1 lib/spree/preferences/static_model_preferences.rb