refer 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 20a30a9135827cc25dc86ab2d399162e63817f1cbb063a05414b23296d9aa8d6
|
|
4
|
+
data.tar.gz: 23f345dec5970fcfabbbf298de2bfa65ad963218aae53d49f0703e856cb834b1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: da6f63c3cfc32730d3bcaeab604861e2f5b6581306c3ab9806b83264f99145b3e5b34b822d065336b39ab4e22b7efb7926a613aac626f564f1fe494557d8ccb3
|
|
7
|
+
data.tar.gz: 0cdf66d6870970330a36b51e9a2bfa316a2175260779bac3eedfe262b6edd07dac3519ff57302a919f126078bf4ec82321771f5eca797d9b656359d69ffde1b8
|
|
@@ -1,26 +1,21 @@
|
|
|
1
1
|
module Refer
|
|
2
2
|
class Referral < ApplicationRecord
|
|
3
|
-
belongs_to :referrer, polymorphic: true
|
|
3
|
+
belongs_to :referrer, polymorphic: true, default: -> { referral_code&.referrer }
|
|
4
4
|
belongs_to :referee, polymorphic: true
|
|
5
5
|
belongs_to :referral_code, optional: true, counter_cache: true
|
|
6
6
|
|
|
7
7
|
scope :completed, -> { where.not(completed_at: nil) }
|
|
8
8
|
|
|
9
|
-
before_validation do
|
|
10
|
-
self.referrer = referral_code&.referrer
|
|
11
|
-
end
|
|
12
|
-
|
|
13
9
|
validate :ensure_not_self_referral
|
|
14
10
|
|
|
11
|
+
after_update_commit -> { Refer.referral_completed&.call(self) }, if: -> { saved_change_to_completed_at? && completed_at? }
|
|
12
|
+
|
|
15
13
|
def ensure_not_self_referral
|
|
16
14
|
errors.add(:base, "Self-referrals are not allowed") if referrer == referee
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
def complete!(**attributes)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
update attributes.with_defaults(completed_at: Time.current)
|
|
23
|
-
Refer.referral_completed&.call(self)
|
|
18
|
+
update(attributes.with_defaults(completed_at: Time.current)) unless completed_at?
|
|
24
19
|
end
|
|
25
20
|
end
|
|
26
21
|
end
|
data/lib/refer/controller.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Refer
|
|
|
16
16
|
|
|
17
17
|
def set_refer_cookie(param_name: Refer.param_name, cookie_name: Refer.cookie_name, code: nil, track_visit: Refer.track_visits)
|
|
18
18
|
code ||= params[param_name]
|
|
19
|
-
return
|
|
19
|
+
return unless code.is_a?(String) && code.present?
|
|
20
20
|
|
|
21
21
|
cookies[cookie_name] = Refer.cookie(code) if Refer.overwrite_cookie || cookies[cookie_name].blank?
|
|
22
22
|
ReferralCode.find_by(code: code)&.track_visit(request) if track_visit
|
data/lib/refer/version.rb
CHANGED
data/lib/refer.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require "refer/version"
|
|
2
2
|
require "refer/engine"
|
|
3
|
+
require "ipaddr"
|
|
3
4
|
require "securerandom"
|
|
4
5
|
|
|
5
6
|
module Refer
|
|
@@ -17,7 +18,9 @@ module Refer
|
|
|
17
18
|
mattr_accessor :referral_completed
|
|
18
19
|
|
|
19
20
|
class Error < StandardError; end
|
|
20
|
-
class AlreadyReferred < Error
|
|
21
|
+
class AlreadyReferred < Error
|
|
22
|
+
def initialize(referee) = super("#{referee} has already been referred")
|
|
23
|
+
end
|
|
21
24
|
|
|
22
25
|
def self.referred?(referee)
|
|
23
26
|
Referral.where(referee: referee).exists?
|
|
@@ -26,11 +29,15 @@ module Refer
|
|
|
26
29
|
def self.refer(code:, referee:)
|
|
27
30
|
return if referred?(referee)
|
|
28
31
|
ReferralCode.find_by(code: code)&.referrals&.create(referee: referee)
|
|
32
|
+
rescue ActiveRecord::RecordNotUnique
|
|
33
|
+
nil
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def self.refer!(code:, referee:)
|
|
32
|
-
raise AlreadyReferred,
|
|
37
|
+
raise AlreadyReferred, referee if referred?(referee)
|
|
33
38
|
ReferralCode.find_by!(code: code).referrals.create!(referee: referee)
|
|
39
|
+
rescue ActiveRecord::RecordNotUnique
|
|
40
|
+
raise AlreadyReferred, referee
|
|
34
41
|
end
|
|
35
42
|
|
|
36
43
|
def self.cookie(code)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: refer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Oliver
|
|
@@ -41,6 +41,7 @@ files:
|
|
|
41
41
|
- db/migrate/20240611180738_create_refer_referrals.rb
|
|
42
42
|
- db/migrate/20240611183349_create_refer_referral_codes.rb
|
|
43
43
|
- db/migrate/20240701172643_create_refer_visits.rb
|
|
44
|
+
- db/migrate/20261007000000_add_unique_index_to_refer_referrals_referee.rb
|
|
44
45
|
- lib/generators/refer/install/USAGE
|
|
45
46
|
- lib/generators/refer/install/install_generator.rb
|
|
46
47
|
- lib/generators/refer/model/USAGE
|
|
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
73
74
|
- !ruby/object:Gem::Version
|
|
74
75
|
version: '0'
|
|
75
76
|
requirements: []
|
|
76
|
-
rubygems_version:
|
|
77
|
+
rubygems_version: 4.0.20
|
|
77
78
|
specification_version: 4
|
|
78
79
|
summary: Referral codes & affiliate links for Ruby on Rails apps
|
|
79
80
|
test_files: []
|