Class: Effective::LearndashUser

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/effective/learndash_user.rb

Instance Method Summary collapse

Instance Method Details

#assign_api_attributes(data = nil) ⇒ Object

Assign my model attributes from API. These should never change.



76
77
78
79
80
81
82
83
# File 'app/models/effective/learndash_user.rb', line 76

def assign_api_attributes(data = nil)
  data ||= EffectiveLearndash.api.find_user(owner) || EffectiveLearndash.api.create_user(owner)

  # Take special care not to overwrite password. We only get password once.
  self.password ||= (data[:password].presence || 'unknown')

  assign_attributes(email: data[:email], user_id: data[:id], username: data[:username], last_synced_at: Time.zone.now)
end

#assign_api_course_enrollments ⇒ Object

This synchronizes all the course enrollments from the API down locally.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'app/models/effective/learndash_user.rb', line 86

def assign_api_course_enrollments
  raise('must be persisted') unless persisted?

  courses = LearndashCourse.all()

  EffectiveLearndash.api.user_enrollments(self).each do |data|
    course = courses.find { |course| course.course_id == data[:course] }
    raise("unable to find local persisted learndash course for id #{data[:course]}. Run Effective::LearndashCourse.sync!") unless course.present?

    enrollment = build_enrollment(course: course)
    enrollment.assign_api_attributes(data)
  end

  assign_attributes(last_synced_at: Time.zone.now)
end

#build_enrollment(course:) ⇒ Object

Find or build



64
65
66
# File 'app/models/effective/learndash_user.rb', line 64

def build_enrollment(course:)
  enrollment(course: course) || learndash_enrollments.build(learndash_course: course)
end

#check_and_refresh! ⇒ Object



47
48
49
50
51
# File 'app/models/effective/learndash_user.rb', line 47

def check_and_refresh!
  return if last_synced_at.present? && (Time.zone.now - last_synced_at) < 10
  return if learndash_enrollments.none? { |enrollment| !enrollment.completed? }
  refresh!
end

#create_enrollment(course:) ⇒ Object

Create



69
70
71
72
73
# File 'app/models/effective/learndash_user.rb', line 69

def create_enrollment(course:)
  enrollment = build_enrollment(course: course)
  enrollment.save!
  enrollment
end

#enrollment(course:) ⇒ Object

Find



59
60
61
# File 'app/models/effective/learndash_user.rb', line 59

def enrollment(course:)
  learndash_enrollments.find { |enrollment| enrollment.learndash_course_id == course.id }
end

#refresh! ⇒ Object



53
54
55
56
# File 'app/models/effective/learndash_user.rb', line 53

def refresh!
  assign_api_course_enrollments
  save!
end

#to_s ⇒ Object



43
44
45
# File 'app/models/effective/learndash_user.rb', line 43

def to_s
  owner&.to_s || username.presence || 'learndash user'
end