Sha256: 84ed3d604bf99f2026a0ed079b56a6d1928f3cce2b6dea223acbb80d1f60f53a

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module Spree
  module Preferences
    module PreferableDecorator
      private

      def convert_preference_value(value, type)
        case type
        when :string, :text, :select
          value.to_s
        when :password
          value.to_s
        when :decimal
          BigDecimal.new(value.to_s)
        when :integer
          value.to_i
        when :boolean, :boolean_select
          if value.is_a?(FalseClass) ||
            value.nil? ||
            value == 0 ||
            value =~ /^(f|false|0)$/i ||
            (value.respond_to?(:empty?) && value.empty?)
            false
          else
            true
          end
        when :array
          value.is_a?(Array) ? value : Array.wrap(value)
        when :hash
          case value.class.to_s
          when 'Hash'
            value
          when 'String'
            # only works with hashes whose keys are strings
            JSON.parse value.gsub('=>', ':')
          when 'Array'
            begin
              value.try(:to_h)
            rescue TypeError
              Hash[*value]
            rescue ArgumentError
              raise 'An even count is required when passing an array to be converted to a hash'
            end
          else
            value.class.ancestors.include?(Hash) ? value : {}
          end
        else
          value
        end
      end
    end
  end
end

::Spree::Preferences::Preferable.prepend(Spree::Preferences::PreferableDecorator)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spree_braintree_vzero-3.5.1 app/models/spree/preferences/preferable_decorator.rb