Sha256: 754b79a027d70a6fae5c96f27516cdb9b3672ae922e1b83b3a2236bf1b113739

Contents?: true

Size: 1.46 KB

Versions: 18

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Spree
  class Address
    # Provides a value object to help transitioning from legacy
    # firstname and lastname fields to a unified name field.
    class Name
      attr_reader :first_name, :last_name, :value

      # Creates an instance of Spree::Address::Name parsing input attributes.
      # @param attributes [Hash] an hash possibly containing name-related
      #   attributes (name, firstname, lastname, first_name, last_name)
      # @return [Spree::Address::Name] the object created
      def self.from_attributes(attributes)
        params = attributes.with_indifferent_access

        if params[:name].present?
          Spree::Address::Name.new(params[:name])
        elsif params[:firstname].present?
          Spree::Address::Name.new(params[:firstname], params[:lastname])
        elsif params[:first_name].present?
          Spree::Address::Name.new(params[:first_name], params[:last_name])
        else
          Spree::Address::Name.new
        end
      end

      def initialize(*components)
        @value = components.join(' ').strip
        initialize_name_components(components)
      end

      def to_s
        @value
      end

      private

      def initialize_name_components(components)
        if components.size == 2
          @first_name = components[0].to_s
          @last_name = components[1].to_s
        else
          @first_name, @last_name = @value.split(/[[:space:]]/, 2)
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
solidus_core-2.11.17 app/models/spree/address/name.rb
solidus_core-2.11.16 app/models/spree/address/name.rb
solidus_core-2.11.15 app/models/spree/address/name.rb
solidus_core-2.11.14 app/models/spree/address/name.rb
solidus_core-2.11.13 app/models/spree/address/name.rb
solidus_core-2.11.12 app/models/spree/address/name.rb
solidus_core-2.11.11 app/models/spree/address/name.rb
solidus_core-2.11.10 app/models/spree/address/name.rb
solidus_core-2.11.9 app/models/spree/address/name.rb
solidus_core-2.11.8 app/models/spree/address/name.rb
solidus_core-2.11.7 app/models/spree/address/name.rb
solidus_core-2.11.6 app/models/spree/address/name.rb
solidus_core-2.11.5 app/models/spree/address/name.rb
solidus_core-2.11.4 app/models/spree/address/name.rb
solidus_core-2.11.3 app/models/spree/address/name.rb
solidus_core-2.11.2 app/models/spree/address/name.rb
solidus_core-2.11.1 app/models/spree/address/name.rb
solidus_core-2.11.0 app/models/spree/address/name.rb