Module: Refer

Defined in:
lib/refer.rb,
lib/refer/model.rb,
lib/refer/engine.rb,
lib/refer/version.rb,
lib/refer/controller.rb,
app/models/refer/visit.rb,
lib/refer/has_referrals.rb,
app/models/refer/referral.rb,
app/models/refer/referral_code.rb,
app/models/refer/application_record.rb

Defined Under Namespace

Modules: Controller, HasReferrals, Model Classes: AlreadyReferred, ApplicationRecord, Engine, Error, InstallGenerator, ModelGenerator, Referral, ReferralCode, Visit

Constant Summary collapse

VERSION =
"1.0.4"

Class Method Summary collapse

Class Method Details



36
37
38
39
40
41
# File 'lib/refer.rb', line 36

def self.cookie(code)
  {
    value: code,
    expires: Refer.cookie_length.from_now
  }
end

.mask_ip(ip) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/refer.rb', line 44

def self.mask_ip(ip)
  return ip unless mask_ips

  addr = IPAddr.new(ip)
  if addr.ipv4?
    # set last octet to 0
    addr.mask(24).to_s
  else
    # set last 80 bits to zeros
    addr.mask(48).to_s
  end
end

.refer(code:, referee:) ⇒ Object



26
27
28
29
# File 'lib/refer.rb', line 26

def self.refer(code:, referee:)
  return if referred?(referee)
  ReferralCode.find_by(code: code)&.referrals&.create(referee: referee)
end

.refer!(code:, referee:) ⇒ Object

Raises:



31
32
33
34
# File 'lib/refer.rb', line 31

def self.refer!(code:, referee:)
  raise AlreadyReferred, "#{referee} has already been referred" if referred?(referee)
  ReferralCode.find_by!(code: code).referrals.create!(referee: referee)
end

.referred?(referee) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/refer.rb', line 22

def self.referred?(referee)
  Referral.where(referee: referee).exists?
end