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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca257f164074da93de47984ddd695b818510ab5e671a1e4545eb986663d34335
4
- data.tar.gz: 6fb32d37480a4af75a79f82c8ee76e180d0a29eed7b6a86fa09ea12e749544c2
3
+ metadata.gz: b37f407aa0fafadcfd37cece33e49bb05d04e2891b442717f167e0f0391f1c99
4
+ data.tar.gz: e69bde3e0e95de200a7196bf10c30abd5f68be569fec68af7ea756b542f36017
5
5
  SHA512:
6
- metadata.gz: '049815dabf0844173db83e9186e19e1736db9f0c14a9754f14203bcca1129b8be5411127e48212830b7951f6ff4d35cb9e36647c7af7214b607d47932400b96c'
7
- data.tar.gz: ab1a3d8c38682a1de52ed54cae85c210a13b037e4fef8e83dc8c1cbc6381fcdad6727813e294e82411ae060169397963f282739722df38007a9e186d4127e4f7
6
+ metadata.gz: 2b103ab51d54698367fe4d30b115dbc9afbaac61e6a35afa87790892a8f993c205dfc2bea47818c0719a84101743126c24aa1d2facc49fbf35fbc9d362493f49
7
+ data.tar.gz: c5882c73da7629605644ee62c8562d42fdb5339338020adbcfeec85143c3b98a281fafcfc342eeff16ec25cf317b466341f7fb1fd6749f34cb514e83258de386
@@ -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@v2
15
+ - uses: actions/checkout@v4
17
16
  - uses: ruby/setup-ruby@v1
18
17
  with:
19
18
  ruby-version: ${{ matrix.ruby }}
data/.rspec CHANGED
@@ -1,3 +1,4 @@
1
1
  --format documentation
2
- --color
3
2
  --require spec_helper
3
+ --order random
4
+ --color
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
@@ -6,3 +6,10 @@ gemspec
6
6
 
7
7
  gem 'guard-rspec', '~> 4.7'
8
8
  gem 'guard-rubocop', '~> 1.3'
9
+
10
+ gem 'activerecord', '>= 5.0'
11
+ gem 'actionpack', '>= 5.0'
12
+ gem 'rake', '~> 13.0'
13
+ gem 'rspec', '~> 3.0'
14
+ gem 'rspec-rails', '~> 6.0'
15
+ gem 'sqlite3', '>= 1.4'
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.relationship.delete` method.
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.relationship.delete(membership)
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
- print " ✔︎\n"
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 :action_view do
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
- (!model.respond_to?(:userlist_push?) || model.userlist_push?)
30
+ !model.respond_to?(:userlist_push?) || model.userlist_push?
31
31
  end
32
32
 
33
33
  def delete?
34
- (!model.respond_to?(:userlist_delete?) || model.userlist_delete?)
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)
@@ -1,5 +1,5 @@
1
1
  module Userlist
2
2
  module Rails
3
- VERSION = '0.6.1'.freeze
3
+ VERSION = '1.0.0'.freeze
4
4
  end
5
5
  end
@@ -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.reflect_on_all_associations.find { |r| r.class_name == to.to_s }
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, method)
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} #{method.to_s.singularize}: #{e.message}"
97
+ Userlist.logger.error "Failed to #{method} #{scope.to_s.singularize}: #{e.message}"
87
98
  end
88
99
  end
89
100
 
@@ -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.6'
26
+ spec.add_dependency 'userlist', '~> 1.0'
27
27
 
28
- spec.add_development_dependency 'actionpack', '>= 5.0'
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.6.1
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: 2021-05-14 00:00:00.000000000 Z
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.6'
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.6'
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
- post_install_message:
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.1.4
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: []