Module: SpreeCmCommissioner::UserDecorator

Defined in:
app/models/spree_cm_commissioner/user_decorator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_user_places(base) ⇒ Object



62
63
64
65
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 62

def self.define_user_places(base)
  base.has_many :user_places, class_name: 'SpreeCmCommissioner::UserPlace'
  base.has_many :places, through: :user_places, class_name: 'SpreeCmCommissioner::Place'
end

.prepended(base) ⇒ Object

rubocop:disable Metrics/AbcSize,Metrics/MethodLength



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 5

def self.prepended(base) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  base.include SpreeCmCommissioner::UserNotification
  base.include SpreeCmCommissioner::UserIdentity
  base.include SpreeCmCommissioner::UserPreference

  base.enum gender: i[male female other]

  base.has_many :subscriptions, through: :customer, class_name: 'SpreeCmCommissioner::Subscription'
  base.has_many :payments, as: :payable, class_name: 'Spree::Payment', dependent: :nullify
  base.has_many :role_permissions, through: :spree_roles, class_name: 'SpreeCmCommissioner::RolePermission'
  base.has_many :permissions, through: :role_permissions, class_name: 'SpreeCmCommissioner::Permission'
  base.has_many :line_items, through: :orders, source: :line_items
  base.has_many :check_ins, foreign_key: 'check_in_by_id', class_name: 'SpreeCmCommissioner::CheckIn'
  base.has_many :user_events, class_name: 'SpreeCmCommissioner::UserEvent'
  base.has_many :events, through: :user_events, class_name: 'Spree::Taxon', source: 'taxon'
  base.has_many :guests, class_name: 'SpreeCmCommissioner::Guest', dependent: :destroy

  base.has_many :google_user_identity_providers,
                -> { where(identity_type: :google) },
                class_name: 'SpreeCmCommissioner::UserIdentityProvider'

  base.has_many :wished_items, class_name: 'Spree::WishedItem', through: :wishlists
  base.has_many :promotions, through: :promotion_rules, class_name: 'Spree::Promotion'

  base.has_one :profile, as: :viewable, dependent: :destroy, class_name: 'SpreeCmCommissioner::UserProfile'
  base.has_one :customer, class_name: 'SpreeCmCommissioner::Customer'

  base.has_secure_password :confirm_pin_code, validations: false

  base.multi_tenant :tenant, class_name: 'SpreeCmCommissioner::Tenant'
  base.scope :by_tenant, -> (tenant_id) { where(tenant_id: tenant_id) }
  base.scope :by_non_tenant, -> { where(tenant_id: nil) }
  base.scope :vendor_users, -> (vendor_id) { joins(:role_users => :role).where(spree_roles: { vendor_id: vendor_id }).distinct }

  base.whitelisted_ransackable_attributes = %w[email first_name last_name gender phone_number]

  base.before_save :update_otp_enabled
  base.attr_accessor :assigned_roles
  base.validates_password_strength :password, if: -> { requires_strong_password? && password.present? }

  define_user_places(base)

  def base.end_users
    joins('LEFT JOIN spree_vendor_users ON spree_users.id = spree_vendor_users.user_id').where(spree_vendor_users: { user_id: nil })
  end

  def normal_user?
    system_user = admin? || !vendors.empty?
    normal_user = spree_roles.length == 1 ? spree_roles[0].name == 'user' : spree_roles.empty?
    normal_user && !system_user
  end

  def soft_deleted?
    !.nil?
  end
end

Instance Method Details

#display_nameObject



111
112
113
114
115
116
117
118
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 111

def display_name
  return full_name if full_name.present?
  return first_name if first_name.present?
  return last_name if last_name.present?
  return email if email.present?

  phone_number
end

#early_adopter?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 80

def early_adopter?
  has_spree_role?('early_adopter')
end

#ensure_unique_database_delivery_method(attributes) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 120

def ensure_unique_database_delivery_method(attributes)
  recipient = self

  options = {
    recipient_id: recipient.id,
    notificable_id: attributes[:notificable].id,
    notificable_type: attributes[:notificable].class.to_s,
    type: attributes[:type]
  }

  notification = recipient.notifications.where(options).first_or_initialize

  if notification.persisted?
    notification.update(attributes)
  else
    notification.assign_attributes(attributes)
    notification.save!
  end

  notification
end

#full_nameObject



98
99
100
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 98

def full_name
  [first_name, last_name].compact_blank.join(' ')
end

#has_spree_role?(role_name) ⇒ Boolean

override

Returns:

  • (Boolean)


72
73
74
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 72

def has_spree_role?(role_name) # rubocop:disable Naming/PredicateName
  spree_roles.non_vendor.exists?(name: role_name)
end

#normal_user?Boolean

Returns:

  • (Boolean)


51
52
53
54
55
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 51

def normal_user?
  system_user = admin? || !vendors.empty?
  normal_user = spree_roles.length == 1 ? spree_roles[0].name == 'user' : spree_roles.empty?
  normal_user && !system_user
end

#operator?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 88

def operator?
  has_spree_role?('operator')
end

#organizer?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 84

def organizer?
  has_spree_role?('organizer')
end

#permissions_for_vendor(vendor_id) ⇒ Object



67
68
69
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 67

def permissions_for_vendor(vendor_id)
  permissions.joins(role_permissions: :role).where(spree_roles: { vendor_id: vendor_id })
end

#privileged_role?Boolean

Returns:

  • (Boolean)


102
103
104
105
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 102

def privileged_role?
  assigned = assigned_roles || []
  assigned.map(&:to_s).include?('admin')
end

#push_notificable?Boolean

Returns:

  • (Boolean)


142
143
144
145
146
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 142

def push_notificable?
  return false if device_tokens_count.blank?

  device_tokens_count.positive?
end

#requires_strong_password?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 107

def requires_strong_password?
  admin? || privileged_role?
end

#soft_deleted?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 57

def soft_deleted?
  !.nil?
end

#super_admin?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 76

def super_admin?
  has_spree_role?('super_admin')
end

#update_otp_enabledObject



154
155
156
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 154

def update_otp_enabled
  self.otp_enabled = otp_email || otp_phone_number
end

#update_tracked_fields!(request) ⇒ Object



158
159
160
161
162
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 158

def update_tracked_fields!(request)
  ActiveRecord::Base.connected_to(role: :writing) do
    super(request)
  end
end

#validate_current_password!(password) ⇒ Object



148
149
150
151
152
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 148

def validate_current_password!(password)
  return if valid_password?(password)

  errors.add(:password, I18n.t('spree_user.invalid_password'))
end

#vendor_organizer?(vendor) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
95
96
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 92

def vendor_organizer?(vendor)
  spree_roles.any? do |role|
    role.name == "#{vendor.id}-organizer"
  end
end