Module: PackageLabelGenerator

Extended by:
ActiveSupport::Concern
Includes:
ElasticAPM::SpanHelpers
Included in:
EventDrivenServices::HhSearch::Schemas::RestaurantSchema, PackageLabelsService
Defined in:
app/services/concerns/package_label_generator.rb

Overview

Shared module for generating package custom labels This module can be included in any service that needs to generate package labels

Constant Summary collapse

DEFAULT_LABEL_TYPE =

Default label type when no specific type is defined

:features

Instance Method Summary collapse

Instance Method Details

#generate_label_names_for_package(restaurant_package) ⇒ Array<String>

Generates custom label names for a restaurant package

Examples:

generate_label_names_for_package(restaurant_package)
# => ["Free Cancellation", "Up to 5 people", "Delivery Free within 3 km"]

Parameters:

Returns:

  • (Array<String>)

    an array of custom label names (String)



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/services/concerns/package_label_generator.rb', line 67

def generate_label_names_for_package(restaurant_package)
  @restaurant_package = restaurant_package
  @package = restaurant_package.package
  custom_label_names = []

  # Add custom label names based on defined label types
  defined_custom_labels.find_each do |custom_label_obj|
    custom_label_names.push(formatted_label(custom_label_obj)) if send(:"#{custom_label_obj.defined_label}?")
  end

  # Add package-specific custom label names
  if @package&.package_attr&.custom_labels.present?
    custom_label_names += @package.fetch_package_attr.custom_labels.map do |custom_label|
      formatted_label(custom_label)
    end
  end

  custom_label_names
end

#generate_labels_for_package(restaurant_package) ⇒ Array<Hash>

Generates custom labels hash for a restaurant package

Hash structure:

[
  {
    name: 'Label Name',
    icon_url: 'https://example.com/icon.png',
    description: 'Label Description',
    type: 'features', # or other defined label types
    expiry_date: Date or nil
  },
  ...
]

Parameters:

Returns:

  • (Array<Hash>)

    an array of custom label hashes



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/services/concerns/package_label_generator.rb', line 31

def generate_labels_for_package(restaurant_package)
  @restaurant_package = restaurant_package
  @package = restaurant_package.package
  custom_labels = []

  # Add custom labels based on defined label types
  defined_custom_labels.find_each do |custom_label_obj|
    custom_labels.push(custom_label(custom_label_obj)) if send(:"#{custom_label_obj.defined_label}?")
  end

  # Add package-specific custom labels
  if @package&.package_attr&.custom_labels.present?
    custom_labels += @package.fetch_package_attr.custom_labels.map do |custom_label|
      {
        name: formatted_label(custom_label),
        icon_url: custom_label.icon_url,
        description: custom_label.description,
        type: custom_label.defined_label || DEFAULT_LABEL_TYPE.to_s,
        expiry_date: restaurant_package.comemore_payless_expiry,
      }
    end
  end

  custom_labels
end