Module: SpreeAddressFormatI18n::AddressDecorator
- Defined in:
- app/models/spree_address_format_i18n/address_decorator.rb
Constant Summary collapse
- FIELDS_TO_NORMALIZE =
[ "phone", "alternative_phone", "zipcode" ]
Class Method Summary collapse
Instance Method Summary collapse
-
#full_name ⇒ Object
@gem-override spree_core-5.3.6/app/models/spree/address.rb#full_name 本家
"#{firstname} #{lastname}"ではなく、i18n の名前順・接尾辞(様 等)を反映する。. - #oneline ⇒ Object
- #texts ⇒ Object
-
#to_s ⇒ Object
@gem-override spree_core-5.3.6/app/models/spree/address.rb#to_s 本家の固定フォーマットではなく、i18n の groups 定義に沿った日本語住所表記で組む。.
- #to_text ⇒ Object
Class Method Details
.prepended(base) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 5 def self.prepended(base) base.before_validation :remove_emoji_and_normalize base.const_set(:ADDRESS_FIELDS, %w[firstname lastname firstname_kana lastname_kana company address1 address2 city state zipcode country phone fax company_kana]) # カナ presence は「新規入力」または「このリクエストでカナを変更したとき」のみ要求する。 # use_kana_fields を後から有効化したストアには、カナ未登録の既存住所が多数存在する # (実運用のストアでは3割を超えることもある)。これらは clone_shipping_address で bill=ship として再検証される # 際に空のままなので、無条件 presence だと既存ユーザーがチェックアウトできなくなる。 # 永続済み・未変更の空カナはスキップし、新規 or ユーザーが明示的にカナを変更/クリアした # 場合のみ必須にすることで、データ品質(新規は必須)と既存ユーザーの購入可否を両立する。 # @see https://github.com/be-agile/giga-repeat/issues/1210 kana_presence_required = lambda do |address, field| next false unless Spree::Store.current.use_kana_fields address.new_record? || address.public_send(:"#{field}_changed?") end # セイ(lastname_kana)を先に定義してエラーメッセージの順序を制御 base.validates :lastname_kana, presence: true, if: -> { kana_presence_required.call(self, :lastname_kana) } base.validates :lastname_kana, format: { with: /\A[\p{Katakana}\p{Blank}ー・]+\z/, allow_blank: true, message: :invalid_katakana }, if: -> { Spree::Store.current.use_kana_fields } # メイ(firstname_kana) base.validates :firstname_kana, presence: true, if: -> { kana_presence_required.call(self, :firstname_kana) } base.validates :firstname_kana, format: { with: /\A[\p{Katakana}\p{Blank}ー・]+\z/, allow_blank: true, message: :invalid_katakana }, if: -> { Spree::Store.current.use_kana_fields } base.validates :company_kana, format: { with: /\A[\p{Katakana}\p{Blank}ー・]+\z/ }, if: -> { company_kana.present? } end |
Instance Method Details
#full_name ⇒ Object
@gem-override spree_core-5.3.6/app/models/spree/address.rb#full_name
本家 "#{firstname} #{lastname}" ではなく、i18n の名前順・接尾辞(様 等)を反映する。
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 94 def full_name field_suffixes = I18n.t('address_format_i18n.field_suffixes', default: {}) name = I18n.t("address_format_i18n.address.full_name", default: [ "firstname", "lastname" ]) .map { |part| send(part) if respond_to?(part) } .compact.join(" ").strip # fnグループの接尾辞があれば追加 suffix = field_suffixes['fn'] || field_suffixes[:fn] name += " #{suffix}" if suffix && name.present? name end |
#oneline ⇒ Object
51 52 53 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 51 def oneline texts.join(" ") end |
#texts ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 55 def texts delimiter = I18n.t("address_format_i18n.delimiter", default: " ") groups = I18n.t('address_format_i18n.groups').deep_dup field_suffixes = I18n.t('address_format_i18n.field_suffixes', default: {}) unless Spree::Store.current.use_kana_fields fn_group = groups.find { |group| group[:name] == 'fn' } fn_group[:fields] = fn_group[:fields].reject { |field| field.include?('kana') } end result = groups.flat_map do |group| nodes = group[:children] || [ group ] nodes.map do |node| # show_country_fieldがfalseの場合、countryフィールドを除外 visible_fields = node[:fields].dup visible_fields.reject! { |field| field.to_s == 'country' } unless Spree::Store.current.show_country_field # 名前グループの特別処理(カナがある場合) if group[:name] == 'fn' && Spree::Store.current.use_kana_fields line = format_name_with_kana(visible_fields, delimiter) else field_values = visible_fields.filter_map { |field| respond_to?(field) ? send(field) : nil } line = field_values.join(delimiter) if field_values.present? end if line.present? # グループに接尾辞が設定されている場合は追加 suffix = field_suffixes[group[:name].to_sym] || field_suffixes[group[:name]] line += " #{suffix}" if suffix line end end end end |
#to_s ⇒ Object
@gem-override spree_core-5.3.6/app/models/spree/address.rb#to_s 本家の固定フォーマットではなく、i18n の groups 定義に沿った日本語住所表記で組む。
37 38 39 40 41 42 43 44 45 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 37 def to_s # texts.reject(&:blank?).join("<br/>").html_safe safe_texts = texts.reject(&:blank?).map do |text| ERB::Util.html_escape(text.to_s) end # rubocop:disable Rails/OutputSafety safe_texts.join("<br/>").html_safe # rubocop:enable Rails/OutputSafety end |
#to_text ⇒ Object
47 48 49 |
# File 'app/models/spree_address_format_i18n/address_decorator.rb', line 47 def to_text texts.reject(&:blank?).join("\n") end |