userlist-rails 0.6.1 → 1.0.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 +4 -4
- data/.github/workflows/test.yml +5 -6
- data/.rspec +2 -1
- data/CHANEGLOG.md +79 -0
- data/Gemfile +7 -0
- data/README.md +2 -2
- data/lib/userlist/rails/extensions/user.rb +8 -0
- data/lib/userlist/rails/importer.rb +10 -3
- data/lib/userlist/rails/railtie.rb +7 -1
- data/lib/userlist/rails/transform.rb +6 -2
- data/lib/userlist/rails/transforms/user.rb +5 -0
- data/lib/userlist/rails/version.rb +1 -1
- data/lib/userlist/rails.rb +14 -3
- data/userlist-rails.gemspec +2 -8
- metadata +8 -114
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b37f407aa0fafadcfd37cece33e49bb05d04e2891b442717f167e0f0391f1c99
|
4
|
+
data.tar.gz: e69bde3e0e95de200a7196bf10c30abd5f68be569fec68af7ea756b542f36017
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b103ab51d54698367fe4d30b115dbc9afbaac61e6a35afa87790892a8f993c205dfc2bea47818c0719a84101743126c24aa1d2facc49fbf35fbc9d362493f49
|
7
|
+
data.tar.gz: c5882c73da7629605644ee62c8562d42fdb5339338020adbcfeec85143c3b98a281fafcfc342eeff16ec25cf317b466341f7fb1fd6749f34cb514e83258de386
|
data/.github/workflows/test.yml
CHANGED
@@ -5,15 +5,14 @@ jobs:
|
|
5
5
|
strategy:
|
6
6
|
matrix:
|
7
7
|
ruby:
|
8
|
-
- 2.4
|
9
|
-
- 2.4
|
10
|
-
- 2.5
|
11
|
-
- 2.6
|
12
|
-
- 2.7
|
13
8
|
- 3.0
|
9
|
+
- 3.1
|
10
|
+
- 3.2
|
11
|
+
- 3.3
|
12
|
+
- 3.4
|
14
13
|
runs-on: ubuntu-latest
|
15
14
|
steps:
|
16
|
-
- uses: actions/checkout@
|
15
|
+
- uses: actions/checkout@v4
|
17
16
|
- uses: ruby/setup-ruby@v1
|
18
17
|
with:
|
19
18
|
ruby-version: ${{ matrix.ruby }}
|
data/.rspec
CHANGED
data/CHANEGLOG.md
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Userlist for Ruby on Rails Changelog
|
2
|
+
|
3
|
+
## Unreleased (main)
|
4
|
+
|
5
|
+
## v1.0.0 (2025-04-08)
|
6
|
+
|
7
|
+
- Fix detection of relationships when there are multiple associations between users and companies
|
8
|
+
- Register Userlist::DeliveryMethod when it's available
|
9
|
+
|
10
|
+
## v0.6.2 (2023-11-30)
|
11
|
+
|
12
|
+
- Upgrades dependencies
|
13
|
+
|
14
|
+
## v0.6.1 (2021-05-14)
|
15
|
+
|
16
|
+
- Upgrades dependencies
|
17
|
+
|
18
|
+
## v0.6.0 (2021-05-14)
|
19
|
+
|
20
|
+
- Improves handling of relationships across different setups (1:1, 1:n, and n:m)
|
21
|
+
- Automatically call userlist\_\* methods on models in transforms
|
22
|
+
|
23
|
+
## v0.5.3 (2021-04-15)
|
24
|
+
|
25
|
+
- Makes userlist_push? and userlist_delete? methods work as documented
|
26
|
+
|
27
|
+
## v0.5.2 (2021-02-12)
|
28
|
+
|
29
|
+
- Only detect classes as models
|
30
|
+
|
31
|
+
## v0.5.1 (2021-01-22)
|
32
|
+
|
33
|
+
- Adds deprecation warnings for user and company models
|
34
|
+
- Adds documentation about tracking companies and relationships
|
35
|
+
|
36
|
+
## v0.5.0 (2021-01-22)
|
37
|
+
|
38
|
+
- Adds support for relationships between users and companies
|
39
|
+
- Allows setting of global company for events
|
40
|
+
- Improves reliablity of callback initializations
|
41
|
+
- Don’t extend the user and company model anymore
|
42
|
+
- Log errors when pushing instead of raising them
|
43
|
+
- Introduced transforms to wrap models as payloads
|
44
|
+
- Replaces userlist.io with userlist.com
|
45
|
+
- Require at least Ruby 2.3
|
46
|
+
- Upgrades dependencies
|
47
|
+
|
48
|
+
## v0.4.0 (2020-03-10)
|
49
|
+
|
50
|
+
- Adds helper method for adding the Userlist script tag
|
51
|
+
- Require at least Ruby 2.3
|
52
|
+
|
53
|
+
## v0.3.0 (2019-06-27)
|
54
|
+
|
55
|
+
- Use Userlist::Push::Resources to transform payloads
|
56
|
+
- Upgrades dependencies
|
57
|
+
|
58
|
+
## v0.2.2 (2019-03-18)
|
59
|
+
|
60
|
+
- Adds support for Ruby 2.2
|
61
|
+
|
62
|
+
## v0.2.1 (2019-03-13)
|
63
|
+
|
64
|
+
- Use an explicit method for callbacks instead of just a block
|
65
|
+
- Adds note about test and development environments
|
66
|
+
|
67
|
+
## v0.2.0 (2018-11-21)
|
68
|
+
|
69
|
+
- Adds basic documentation
|
70
|
+
- Adds support for global defintion of current user
|
71
|
+
- Use created_at as signed_up_at for users
|
72
|
+
- Use global push instance instead of creating one for each model
|
73
|
+
- Properly prepare models in rake tasks
|
74
|
+
- Properly setup models after reloads
|
75
|
+
- Upgrades dependencies
|
76
|
+
|
77
|
+
## v0.1.0 (2018-01-18)
|
78
|
+
|
79
|
+
- Initial release
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -265,10 +265,10 @@ end
|
|
265
265
|
|
266
266
|
#### Deleting relationships
|
267
267
|
|
268
|
-
It's also possible to delete a relationship from Userlist, using the `Userlist::Push.
|
268
|
+
It's also possible to delete a relationship from Userlist, using the `Userlist::Push.relationships.delete` method.
|
269
269
|
|
270
270
|
```ruby
|
271
|
-
Userlist::Push.
|
271
|
+
Userlist::Push.relationships.delete(membership)
|
272
272
|
```
|
273
273
|
|
274
274
|
### Tracking Events
|
@@ -17,6 +17,14 @@ module Userlist
|
|
17
17
|
base.extend(ClassMethods)
|
18
18
|
end
|
19
19
|
|
20
|
+
def identifier
|
21
|
+
super if !payload.respond_to?(:destroyed?) || !payload.destroyed?
|
22
|
+
end
|
23
|
+
|
24
|
+
def identifiers
|
25
|
+
super if payload.respond_to?(:destroyed?) && payload.destroyed?
|
26
|
+
end
|
27
|
+
|
20
28
|
def push?
|
21
29
|
super && (!payload.respond_to?(:push?) || payload.push?)
|
22
30
|
end
|
@@ -8,9 +8,9 @@ module Userlist
|
|
8
8
|
|
9
9
|
def import(model, &block)
|
10
10
|
find_each(model) do |record|
|
11
|
-
print "Pushing #{model.name} #{record.id}..."
|
12
|
-
instance_exec(record, &block)
|
13
|
-
|
11
|
+
print "Pushing #{model.name} #{record.id}... "
|
12
|
+
result = instance_exec(record, &block)
|
13
|
+
puts status(result)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -31,6 +31,13 @@ module Userlist
|
|
31
31
|
raise "Cannot iterate over #{model} because it doesn't implement .find_each, nor .each"
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
def status(result)
|
36
|
+
return '⊝' if result.nil?
|
37
|
+
return '✔' if (200..300).cover?(result.code.to_i)
|
38
|
+
|
39
|
+
'✗'
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
@@ -36,7 +36,7 @@ module Userlist
|
|
36
36
|
end
|
37
37
|
|
38
38
|
initializer 'userlist.helpers' do
|
39
|
-
ActiveSupport.on_load
|
39
|
+
ActiveSupport.on_load(:action_view) do
|
40
40
|
include Userlist::Rails::Helpers
|
41
41
|
end
|
42
42
|
end
|
@@ -75,6 +75,12 @@ module Userlist
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
78
|
+
|
79
|
+
initializer 'userlist.delivery_method', before: 'action_mailer.set_configs' do
|
80
|
+
ActiveSupport.on_load(:action_mailer) do
|
81
|
+
ActionMailer::Base.add_delivery_method(:userlist, Userlist::DeliveryMethod) if defined?(Userlist::DeliveryMethod)
|
82
|
+
end
|
83
|
+
end
|
78
84
|
end
|
79
85
|
end
|
80
86
|
end
|
@@ -27,11 +27,15 @@ module Userlist
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def push?
|
30
|
-
|
30
|
+
!model.respond_to?(:userlist_push?) || model.userlist_push?
|
31
31
|
end
|
32
32
|
|
33
33
|
def delete?
|
34
|
-
|
34
|
+
!model.respond_to?(:userlist_delete?) || model.userlist_delete?
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroyed?
|
38
|
+
model.try(:destroyed?)
|
35
39
|
end
|
36
40
|
|
37
41
|
private
|
@@ -12,6 +12,7 @@ module Userlist
|
|
12
12
|
:identifier,
|
13
13
|
:properties,
|
14
14
|
:relationships,
|
15
|
+
:identifiers,
|
15
16
|
:email,
|
16
17
|
:signed_up_at
|
17
18
|
]
|
@@ -33,6 +34,10 @@ module Userlist
|
|
33
34
|
model.try(:created_at)
|
34
35
|
end
|
35
36
|
|
37
|
+
def default_identifiers
|
38
|
+
[{ scope: 'custom', identifier: self[:identifier] }]
|
39
|
+
end
|
40
|
+
|
36
41
|
private
|
37
42
|
|
38
43
|
def build_relationship(record)
|
data/lib/userlist/rails.rb
CHANGED
@@ -11,6 +11,12 @@ module Userlist
|
|
11
11
|
:userlist_user
|
12
12
|
].freeze
|
13
13
|
|
14
|
+
REFLECTION_PRIORITY = [
|
15
|
+
ActiveRecord::Reflection::ThroughReflection,
|
16
|
+
ActiveRecord::Reflection::HasManyReflection,
|
17
|
+
ActiveRecord::Reflection::HasOneReflection
|
18
|
+
].freeze
|
19
|
+
|
14
20
|
def self.with_current_user(user)
|
15
21
|
Thread.current[:userlist_current_user] = user
|
16
22
|
yield
|
@@ -56,7 +62,10 @@ module Userlist
|
|
56
62
|
def self.find_reflection(from, to)
|
57
63
|
return unless from && to
|
58
64
|
|
59
|
-
from
|
65
|
+
from
|
66
|
+
.reflect_on_all_associations
|
67
|
+
.sort_by { |r| REFLECTION_PRIORITY.index(r.class) || REFLECTION_PRIORITY.length }
|
68
|
+
.find { |r| r.class_name == to.to_s }
|
60
69
|
end
|
61
70
|
|
62
71
|
def self.find_association_between(from, to)
|
@@ -75,15 +84,17 @@ module Userlist
|
|
75
84
|
model.instance_variable_set(:@userlist_callbacks_registered, true)
|
76
85
|
end
|
77
86
|
|
78
|
-
def self.setup_callback(type, model, scope,
|
87
|
+
def self.setup_callback(type, model, scope, default_method)
|
79
88
|
return unless callback_method = [:after_commit, :"after_#{type}"].find { |m| model.respond_to?(m) }
|
80
89
|
|
81
90
|
callback = lambda do
|
82
91
|
begin
|
92
|
+
method = try(:"userlist_#{type}_behavior") || default_method
|
93
|
+
|
83
94
|
relation = Userlist::Push.public_send(scope)
|
84
95
|
relation.public_send(method, self)
|
85
96
|
rescue Userlist::Error => e
|
86
|
-
Userlist.logger.error "Failed to #{method} #{
|
97
|
+
Userlist.logger.error "Failed to #{method} #{scope.to_s.singularize}: #{e.message}"
|
87
98
|
end
|
88
99
|
end
|
89
100
|
|
data/userlist-rails.gemspec
CHANGED
@@ -23,13 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.add_dependency 'activesupport', '>= 5.0'
|
25
25
|
spec.add_dependency 'railties', '>= 5.0'
|
26
|
-
spec.add_dependency 'userlist', '~> 0
|
26
|
+
spec.add_dependency 'userlist', '~> 1.0'
|
27
27
|
|
28
|
-
spec.
|
29
|
-
spec.add_development_dependency 'activerecord', '>= 5.0'
|
30
|
-
spec.add_development_dependency 'bundler', '>= 1.15'
|
31
|
-
spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
|
32
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
33
|
-
spec.add_development_dependency 'rspec-rails', '~> 3.0'
|
34
|
-
spec.add_development_dependency 'sqlite3', '>= 1.4'
|
28
|
+
spec.metadata = { 'rubygems_mfa_required' => 'true' }
|
35
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: userlist-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benedikt Deicke
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-04-08 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: activesupport
|
@@ -44,119 +43,14 @@ dependencies:
|
|
44
43
|
requirements:
|
45
44
|
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
46
|
+
version: '1.0'
|
48
47
|
type: :runtime
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
51
|
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: actionpack
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: activerecord
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '5.0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '5.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: bundler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.15'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.15'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rake
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '12.3'
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 12.3.3
|
107
|
-
type: :development
|
108
|
-
prerelease: false
|
109
|
-
version_requirements: !ruby/object:Gem::Requirement
|
110
|
-
requirements:
|
111
|
-
- - "~>"
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: '12.3'
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: 12.3.3
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rspec
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - "~>"
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '3.0'
|
124
|
-
type: :development
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - "~>"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '3.0'
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: rspec-rails
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: '3.0'
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: '3.0'
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: sqlite3
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - ">="
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: '1.4'
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
requirements:
|
156
|
-
- - ">="
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '1.4'
|
159
|
-
description:
|
53
|
+
version: '1.0'
|
160
54
|
email:
|
161
55
|
- benedikt@userlist.com
|
162
56
|
executables: []
|
@@ -167,6 +61,7 @@ files:
|
|
167
61
|
- ".gitignore"
|
168
62
|
- ".rspec"
|
169
63
|
- ".rubocop.yml"
|
64
|
+
- CHANEGLOG.md
|
170
65
|
- CODE_OF_CONDUCT.md
|
171
66
|
- Gemfile
|
172
67
|
- Guardfile
|
@@ -197,8 +92,8 @@ files:
|
|
197
92
|
homepage: https://github.com/userlistio/userlist-rails
|
198
93
|
licenses:
|
199
94
|
- MIT
|
200
|
-
metadata:
|
201
|
-
|
95
|
+
metadata:
|
96
|
+
rubygems_mfa_required: 'true'
|
202
97
|
rdoc_options: []
|
203
98
|
require_paths:
|
204
99
|
- lib
|
@@ -213,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
108
|
- !ruby/object:Gem::Version
|
214
109
|
version: '0'
|
215
110
|
requirements: []
|
216
|
-
rubygems_version: 3.
|
217
|
-
signing_key:
|
111
|
+
rubygems_version: 3.6.2
|
218
112
|
specification_version: 4
|
219
113
|
summary: Rails integration for Userlist
|
220
114
|
test_files: []
|