Module: SpreeCmCommissioner::VariantOptionsConcern

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/spree_cm_commissioner/variant_options_concern.rb

Instance Method Summary collapse

Instance Method Details

#end_dateObject



74
75
76
77
78
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 74

def end_date
  return start_date + options.total_duration_in_seconds.seconds if start_date.present? && options.total_duration_in_seconds.positive?

  options.end_date
end

#end_date_timeObject

No need to fallback to event end date to avoid n+1. To get end_time duration of event, include event when needed instead.



66
67
68
69
70
71
72
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 66

def end_date_time
  return nil if end_date.blank? && end_time.blank?
  return end_date if end_time.blank?
  return end_time if end_date.blank?

  end_date.change(hour: end_time.hour, min: end_time.min, sec: end_time.sec)
end

#end_timeObject



80
81
82
83
84
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 80

def end_time
  return start_time + options.total_duration_in_seconds.seconds if start_time.present? && options.total_duration_in_seconds.positive?

  options.end_time
end

#find_option_value_name_for(option_type_name: nil) ⇒ Object



50
51
52
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 50

def find_option_value_name_for(option_type_name: nil)
  option_values.detect { |o| o.option_type.name.downcase.strip == option_type_name.downcase.strip }.try(:name)
end

#option_value_name_for(option_type_name: nil) ⇒ Object



44
45
46
47
48
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 44

def option_value_name_for(option_type_name: nil)
  return options_in_hash[option_type_name] if options_in_hash.present? # empty is not considered present?

  find_option_value_name_for(option_type_name: option_type_name)
end

#optionsObject



36
37
38
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 36

def options
  @options ||= VariantOptions.new(self)
end

#options_in_hashObject



40
41
42
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 40

def options_in_hash
  [:cm_options]
end

#post_paid?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 86

def post_paid?
  options.payment_option == 'post-paid'
end

#set_options_to_public_metadataObject

save optins to public_metadata so we don’t have to query option types & option values when needed them. once variant changed, we update metadata.



92
93
94
95
96
97
98
99
100
101
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 92

def 
  self. ||= {}

  latest_options_in_hash = option_values.each_with_object({}) do |option_value, hash|
    option_type_name = option_value.option_type.name
    hash[option_type_name] = find_option_value_name_for(option_type_name: option_type_name)
  end

  self.[:cm_options] = latest_options_in_hash
end

#set_options_to_public_metadata!Object



103
104
105
106
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 103

def set_options_to_public_metadata!
  
  save!
end

#start_date_timeObject

No need to fallback to event start date to avoid n+1. To get end_time duration of event, include event when needed instead.



56
57
58
59
60
61
62
# File 'app/models/concerns/spree_cm_commissioner/variant_options_concern.rb', line 56

def start_date_time
  return nil if start_date.blank? && start_time.blank?
  return start_date if start_time.blank?
  return start_time if start_date.blank?

  start_date.change(hour: start_time.hour, min: start_time.min, sec: start_time.sec)
end