userlist-rails 0.2.2 → 0.3.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
- SHA1:
3
- metadata.gz: e4d61b0a03998803da600145d3fdd0f20417356a
4
- data.tar.gz: 3eab7385e90e78907ae75ef7c3f65d839e9c4f89
2
+ SHA256:
3
+ metadata.gz: f4ac0764bfdecbc381ea029d3fa9e8e2b04aa7f668eff35f7f54d14b7e20d1e9
4
+ data.tar.gz: 31e4be6a0b8fe3b5a7cf172b9a07af9e6e5dac7a9edd38751b39416ddee8ad9e
5
5
  SHA512:
6
- metadata.gz: 7493478a9e99f7db583786b4e1c3e0171590b6cf9c4c899ca577042a0874cff0ff5387cffc79184b2523d7197ce213b9be6c7aab900fd56d79b197619b401d4a
7
- data.tar.gz: 78941e76d2a252abdebb9a39d813064e814ea4e739409e1cba682ff8b2f902671f54255989ba14f6266865a657658405fc5cd2c6a9b1368273075cd32e38a095
6
+ metadata.gz: 3053ce85e9cc0d218dec274d0a11b5e0fb9caac714b999a2e3a0995946b17ae5f0180159fd978ecc91c890230cf8c744d3e9ddcfe67f1b035eb19c610ce49bbd
7
+ data.tar.gz: 0a426f64b71938dfea7112c62d96b97e568a47db3a8f1780571ad3612d0f7f39e8cc8c6f2511a5344b95785ad4efe18e8a5f9e912c886a9f2587601716bf2b46
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- sudo: false
3
1
  language: ruby
4
- cache: bundler
5
2
  rvm:
6
- - 2.5.0
7
- before_install: gem install bundler -v 1.17.1
3
+ - 2.2
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
7
+ - 2.6
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Userlist::Rails
1
+ # Userlist::Rails [![Build Status](https://travis-ci.com/userlistio/userlist-rails.svg?branch=master)](https://travis-ci.com/userlistio/userlist-rails)
2
2
 
3
3
  This gem helps with integrating [Userlist.io](http://userlist.io) into Ruby on Rails applications.
4
4
 
@@ -57,7 +57,7 @@ end
57
57
 
58
58
  #### Sending user data automatically
59
59
 
60
- By default, this gem will automatically detect your `User` model and create and update the corresponding user inside of Userlist. To customize the `identifier`, `email`, or `properties` transmitted for a user, you can overwrite the according methods in your `User` model.
60
+ By default, this gem will automatically detect your `User` model and create, update, and delete the corresponding user inside of Userlist. To customize the `identifier`, `email`, or `properties` transmitted for a user, you can overwrite the according methods in your `User` model.
61
61
 
62
62
  ```ruby
63
63
  class User < ApplicationRecord
@@ -77,18 +77,24 @@ end
77
77
 
78
78
  #### Sending user data manually
79
79
 
80
- To manually send user data into Userlist, use the `Userlist::Push.user` method.
80
+ To manually send user data into Userlist, use the `Userlist::Push.users.push` method.
81
81
 
82
82
  ```ruby
83
- Userlist::Push.user(identifier: user.id, email: user.email, properties: { first_name: user.first_name, last_name: user.last_name })
83
+ Userlist::Push.users.push(identifier: user.id, email: user.email, properties: { first_name: user.first_name, last_name: user.last_name })
84
+ ```
85
+
86
+ It's also possible to delete a user from Userlist, using the `Userlist::Push.users.delete` method.
87
+
88
+ ```ruby
89
+ Userlist::Push.users.delete(user.id)
84
90
  ```
85
91
 
86
92
  ### Tracking Events
87
93
 
88
- To track custom events use the `Userlist::Push.event` method.
94
+ To track custom events use the `Userlist::Push.events.push` method.
89
95
 
90
96
  ```ruby
91
- Userlist::Push.event(name: 'project_created', user: current_user, properties: { project_name: project.name })
97
+ Userlist::Push.events.push(name: 'project_created', user: current_user, properties: { project_name: project.name })
92
98
  ```
93
99
 
94
100
  It is possible to make the `user` property optional by setting it for the entire request using an `around_action` callback in your `ApplicationController`.
@@ -106,7 +112,7 @@ end
106
112
  This simplifies the tracking call for the current request.
107
113
 
108
114
  ```ruby
109
- Userlist::Push.event(name: 'project_created', properties: { project_name: project.name })
115
+ Userlist::Push.events.push(name: 'project_created', properties: { project_name: project.name })
110
116
  ```
111
117
 
112
118
  ### Batch importing
@@ -7,8 +7,10 @@ module Userlist
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- method = [:after_commit, :after_save].find { |m| respond_to?(m) }
11
- public_send(method, :userlist_push) if method
10
+ if method = [:after_commit, :after_save].find { |m| respond_to?(m) }
11
+ public_send(method, :userlist_push, on: [:create, :update])
12
+ public_send(method, :userlist_delete, on: [:destroy])
13
+ end
12
14
  end
13
15
 
14
16
  def userlist_identifier
@@ -32,7 +34,11 @@ module Userlist
32
34
  end
33
35
 
34
36
  def userlist_push
35
- Userlist::Push.company(userlist_payload)
37
+ Userlist::Push.companies.push(userlist_payload)
38
+ end
39
+
40
+ def userlist_delete
41
+ Userlist::Push.companies.delete(userlist_identifier)
36
42
  end
37
43
  end
38
44
  end
@@ -0,0 +1,13 @@
1
+ module Userlist
2
+ module Rails
3
+ module Extensions
4
+ module Event
5
+ def initialize(payload)
6
+ payload[:user] ||= Userlist::Rails.current_user
7
+
8
+ super
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,35 @@
1
+ require 'active_support/core_ext/hash/transform_values' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5.0')
2
+
3
+ module Userlist
4
+ module Rails
5
+ module Extensions
6
+ module Resource
7
+ def initialize(payload = {})
8
+ super(transform_payload(payload))
9
+ end
10
+
11
+ private
12
+
13
+ def transform_payload(payload)
14
+ payload = transform_value(payload)
15
+
16
+ return payload unless payload.is_a?(Hash)
17
+
18
+ payload.transform_values do |value|
19
+ result = transform_value(value)
20
+ result = transform_payload(result) if result.is_a?(Hash)
21
+ result
22
+ end
23
+ end
24
+
25
+ def transform_value(value)
26
+ if value.respond_to?(:userlist_payload)
27
+ value.send(:userlist_payload)
28
+ else
29
+ value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -3,10 +3,12 @@ require 'rails/railtie'
3
3
  require 'userlist'
4
4
  require 'userlist/config'
5
5
  require 'userlist/rails/logger'
6
- require 'userlist/rails/push'
7
6
  require 'userlist/rails/user'
8
7
  require 'userlist/rails/company'
9
8
 
9
+ require 'userlist/rails/extensions/resource'
10
+ require 'userlist/rails/extensions/event'
11
+
10
12
  module Userlist
11
13
  module Rails
12
14
  class Railtie < ::Rails::Railtie
@@ -25,7 +27,8 @@ module Userlist
25
27
  end
26
28
 
27
29
  initializer 'userlist.extensions' do
28
- Userlist::Push.send(:prepend, Userlist::Rails::Push)
30
+ Userlist::Push::Resource.send(:prepend, Userlist::Rails::Extensions::Resource)
31
+ Userlist::Push::Event.send(:prepend, Userlist::Rails::Extensions::Event)
29
32
  end
30
33
 
31
34
  initializer 'userlist.models' do
@@ -7,8 +7,10 @@ module Userlist
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- method = [:after_commit, :after_save].find { |m| respond_to?(m) }
11
- public_send(method, :userlist_push) if method
10
+ if method = [:after_commit, :after_save].find { |m| respond_to?(m) }
11
+ public_send(method, :userlist_push, on: [:create, :update])
12
+ public_send(method, :userlist_delete, on: [:destroy])
13
+ end
12
14
  end
13
15
 
14
16
  def userlist_identifier
@@ -38,7 +40,11 @@ module Userlist
38
40
  end
39
41
 
40
42
  def userlist_push
41
- Userlist::Push.user(userlist_payload)
43
+ Userlist::Push.users.push(userlist_payload)
44
+ end
45
+
46
+ def userlist_delete
47
+ Userlist::Push.users.delete(userlist_identifier)
42
48
  end
43
49
  end
44
50
  end
@@ -1,5 +1,5 @@
1
1
  module Userlist
2
2
  module Rails
3
- VERSION = '0.2.2'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
5
5
  end
@@ -1,6 +1,9 @@
1
1
  require 'userlist/rails/config'
2
2
  require 'userlist/rails/railtie'
3
3
 
4
+ require 'userlist/rails/extensions/resource'
5
+ require 'userlist/rails/extensions/event'
6
+
4
7
  module Userlist
5
8
  module Rails
6
9
  def self.with_current_user(user)
@@ -21,11 +21,10 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'activesupport', '>= 3.0'
23
23
  spec.add_dependency 'railties', '>= 3.0'
24
- spec.add_dependency 'userlist', '~> 0.2', '>= 0.2.2'
24
+ spec.add_dependency 'userlist', '~> 0.3'
25
25
 
26
- spec.add_development_dependency 'bundler', '~> 1.15'
26
+ spec.add_development_dependency 'bundler', '>= 1.15'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
28
  spec.add_development_dependency 'rspec', '~> 3.0'
29
- spec.add_development_dependency 'sqlite3'
30
29
  spec.add_development_dependency 'webmock', '~> 1.22'
31
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: userlist-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benedikt Deicke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-18 00:00:00.000000000 Z
11
+ date: 2019-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,32 +44,26 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.2'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 0.2.2
47
+ version: '0.3'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '0.2'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 0.2.2
54
+ version: '0.3'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: bundler
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - "~>"
59
+ - - ">="
66
60
  - !ruby/object:Gem::Version
67
61
  version: '1.15'
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
- - - "~>"
66
+ - - ">="
73
67
  - !ruby/object:Gem::Version
74
68
  version: '1.15'
75
69
  - !ruby/object:Gem::Dependency
@@ -100,20 +94,6 @@ dependencies:
100
94
  - - "~>"
101
95
  - !ruby/object:Gem::Version
102
96
  version: '3.0'
103
- - !ruby/object:Gem::Dependency
104
- name: sqlite3
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
97
  - !ruby/object:Gem::Dependency
118
98
  name: webmock
119
99
  requirement: !ruby/object:Gem::Requirement
@@ -152,9 +132,10 @@ files:
152
132
  - lib/userlist/rails.rb
153
133
  - lib/userlist/rails/company.rb
154
134
  - lib/userlist/rails/config.rb
135
+ - lib/userlist/rails/extensions/event.rb
136
+ - lib/userlist/rails/extensions/resource.rb
155
137
  - lib/userlist/rails/importer.rb
156
138
  - lib/userlist/rails/logger.rb
157
- - lib/userlist/rails/push.rb
158
139
  - lib/userlist/rails/railtie.rb
159
140
  - lib/userlist/rails/user.rb
160
141
  - lib/userlist/rails/version.rb
@@ -178,8 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
159
  - !ruby/object:Gem::Version
179
160
  version: '0'
180
161
  requirements: []
181
- rubyforge_project:
182
- rubygems_version: 2.4.5.2
162
+ rubygems_version: 3.0.3
183
163
  signing_key:
184
164
  specification_version: 4
185
165
  summary: Rails integration for Userlist.io
@@ -1,41 +0,0 @@
1
- require 'active_support/core_ext/hash/transform_values'
2
-
3
- module Userlist
4
- module Rails
5
- module Push
6
- def event(payload = {})
7
- payload[:user] ||= Userlist::Rails.current_user
8
-
9
- super(transform_payload(payload))
10
- end
11
- alias track event
12
-
13
- def user(payload = {})
14
- super(transform_payload(payload))
15
- end
16
- alias identify user
17
-
18
- private
19
-
20
- def transform_payload(payload)
21
- payload = transform_value(payload)
22
-
23
- return payload unless payload.is_a?(Hash)
24
-
25
- payload.transform_values do |value|
26
- result = transform_value(value)
27
- result = transform_payload(result) if result.is_a?(Hash)
28
- result
29
- end
30
- end
31
-
32
- def transform_value(value)
33
- if value.respond_to?(:userlist_payload)
34
- value.send(:userlist_payload)
35
- else
36
- value
37
- end
38
- end
39
- end
40
- end
41
- end