stream_rails 2.6.6 → 3.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/LICENSE +1 -1
- data/README.md +36 -10
- data/lib/stream_rails/activity.rb +2 -2
- data/lib/stream_rails/enrich.rb +13 -7
- data/lib/stream_rails/feed_manager.rb +5 -1
- data/lib/stream_rails/logger.rb +1 -1
- data/lib/stream_rails/renderable.rb +8 -8
- data/lib/stream_rails/version.rb +1 -1
- metadata +28 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12af4b32dde33e9df2997ad8d9e92d7e1c912478d72db04bf949377dbe56646a
|
4
|
+
data.tar.gz: b6619f2ecaf1fb5b21251eec60b117386dfbc4622ffe1a71a5164506d172d809
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bd338ff891bca9426862b0996b19e6beca617662597b8b66c71995895a64a6aadb986f27c539a49e9fdf33bb5b9688f5f7393a37edd03d2eb56b2892047232b
|
7
|
+
data.tar.gz: 328cd1ce3ba75efefcfdf21828c2608dcd1c63428a238c9c647e21b612a567b1d23c810f8a79d08d51754cc48241076a3c0421d9ed3eb0cc0128e6d71ee338b1
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Stream Rails
|
2
2
|
|
3
|
-
[](https://github.com/GetStream/stream-rails/actions)
|
4
4
|
[](http://badge.fury.io/rb/stream_rails)
|
5
5
|
|
6
6
|
[stream-rails](https://github.com/GetStream/stream-rails) is a Ruby on Rails client for [Stream](https://getstream.io/).
|
@@ -67,10 +67,10 @@ gem 'stream_rails'
|
|
67
67
|
|
68
68
|
This library is tested against and fully supports the following Rails versions:
|
69
69
|
|
70
|
-
- 4.0
|
71
|
-
- 4.2
|
72
70
|
- 5.0
|
73
71
|
- 5.2
|
72
|
+
- 6.0
|
73
|
+
- 6.1
|
74
74
|
|
75
75
|
### Setup
|
76
76
|
|
@@ -156,10 +156,36 @@ Everytime a Pin is created it will be stored in the feed of the user that create
|
|
156
156
|
|
157
157
|
#### Activity fields
|
158
158
|
|
159
|
-
ActiveRecord models are stored in your feeds as activities; Activities are objects that tell the story of a person performing an action on or with an object, in its simplest form, an activity consists of an actor, a verb, and an object. In order for this to happen your models need to implement
|
159
|
+
ActiveRecord models are stored in your feeds as activities; Activities are objects that tell the story of a person performing an action on or with an object, in its simplest form, an activity consists of an actor, a verb, and an object. In order for this to happen your models need to implement these methods:
|
160
160
|
|
161
161
|
**#activity_object** the object of the activity (eg. an AR model instance)
|
162
|
-
|
162
|
+
|
163
|
+
**#activity_actor** the actor performing the activity -- this value also provides the feed name and feed ID to which the activity will be added.
|
164
|
+
|
165
|
+
For example, let's say a Pin was a polymorphic class that could belong to either a user (e.g. `User` ID: 1) or a company (e.g. `Company` ID: 1). In that instance, the below code would post the pin either to the `user:1` feed or the `company:1` feed based on its owner.
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
class Pin < ActiveRecord::Base
|
169
|
+
belongs_to :owner, :polymorphic => true
|
170
|
+
belongs_to :item
|
171
|
+
|
172
|
+
include StreamRails::Activity
|
173
|
+
as_activity
|
174
|
+
|
175
|
+
def activity_actor
|
176
|
+
self.owner
|
177
|
+
end
|
178
|
+
|
179
|
+
def activity_object
|
180
|
+
self.item
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
```
|
185
|
+
|
186
|
+
The `activity_actor` defaults to `self.user`
|
187
|
+
|
188
|
+
|
163
189
|
**#activity_verb** the string representation of the verb (defaults to model class name)
|
164
190
|
|
165
191
|
Here's a more complete example of the Pin class:
|
@@ -346,7 +372,7 @@ When you read data from feeds, a pin activity will look like this:
|
|
346
372
|
```
|
347
373
|
|
348
374
|
This is far from ready for usage in your template. We call the process of loading the references from the database
|
349
|
-
enrichment. An example is shown below:
|
375
|
+
"enrichment." An example is shown below:
|
350
376
|
|
351
377
|
```ruby
|
352
378
|
enricher = StreamRails::Enrich.new
|
@@ -356,7 +382,7 @@ results = feed.get()['results']
|
|
356
382
|
activities = enricher.enrich_activities(results)
|
357
383
|
```
|
358
384
|
|
359
|
-
A similar method called enrich_aggregated_activities is available for aggregated feeds.
|
385
|
+
A similar method called `enrich_aggregated_activities` is available for aggregated feeds.
|
360
386
|
|
361
387
|
```ruby
|
362
388
|
enricher = StreamRails::Enrich.new
|
@@ -434,7 +460,7 @@ For convenience we include a basic view:
|
|
434
460
|
|
435
461
|
The `render_activity` view helper will render the activity by picking the partial `activity/_pin` for a pin activity, `aggregated_activity/_follow` for an aggregated activity with verb follow.
|
436
462
|
|
437
|
-
The helper will automatically send `activity` to the local scope of the partial; additional parameters can be
|
463
|
+
The helper will automatically send `activity` to the local scope of the partial; additional parameters can be sent as well as use different layouts, and prefix the name
|
438
464
|
|
439
465
|
e.g. renders the activity partial using the `small_activity` layout:
|
440
466
|
|
@@ -490,10 +516,10 @@ From the project root directory:
|
|
490
516
|
|
491
517
|
### Full documentation and Low level APIs access
|
492
518
|
|
493
|
-
When needed you can also use the [low level Ruby API](https://github.com/getstream/stream-ruby) directly. Documentation is available at the [Stream website](https://getstream.io/docs/?language=ruby).
|
519
|
+
When needed you can also use the [low level Ruby API](https://github.com/getstream/stream-ruby) directly. Documentation is available at the [Stream website](https://getstream.io/activity-feeds/docs/?language=ruby).
|
494
520
|
|
495
521
|
### Copyright and License Information
|
496
522
|
|
497
|
-
Copyright (c) 2014-
|
523
|
+
Copyright (c) 2014-2021 Stream.io Inc, and individual contributors. All rights reserved.
|
498
524
|
|
499
525
|
See the file "LICENSE" for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES.
|
@@ -7,7 +7,7 @@ module StreamRails
|
|
7
7
|
if record.is_a?(ActiveRecord::Base) || (Object.const_defined?('Sequel') && record.is_a?(Sequel::Model))
|
8
8
|
"#{record.class.model_name}:#{record.id}"
|
9
9
|
else
|
10
|
-
record
|
10
|
+
record&.to_s
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -39,7 +39,7 @@ module StreamRails
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def activity_owner_feed
|
42
|
-
|
42
|
+
activity_actor.class.name.downcase
|
43
43
|
end
|
44
44
|
|
45
45
|
def activity_actor_id
|
data/lib/stream_rails/enrich.rb
CHANGED
@@ -10,8 +10,8 @@ module StreamRails
|
|
10
10
|
super
|
11
11
|
end
|
12
12
|
|
13
|
-
def from_activity(
|
14
|
-
merge(
|
13
|
+
def from_activity(from)
|
14
|
+
merge(from)
|
15
15
|
end
|
16
16
|
|
17
17
|
def enriched?
|
@@ -31,7 +31,7 @@ module StreamRails
|
|
31
31
|
attr_reader :fields
|
32
32
|
|
33
33
|
def initialize(fields = nil)
|
34
|
-
@fields = fields || [
|
34
|
+
@fields = fields || %i[actor object target]
|
35
35
|
end
|
36
36
|
|
37
37
|
def add_fields(new_fields)
|
@@ -47,9 +47,9 @@ module StreamRails
|
|
47
47
|
begin
|
48
48
|
model.classify.constantize
|
49
49
|
rescue NameError
|
50
|
-
|
50
|
+
false
|
51
51
|
else
|
52
|
-
|
52
|
+
true
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -77,6 +77,7 @@ module StreamRails
|
|
77
77
|
activities.each do |activity|
|
78
78
|
activity.select { |k, _v| @fields.include? k.to_sym }.each do |_field, value|
|
79
79
|
next unless model_field?(value)
|
80
|
+
|
80
81
|
model, _, id = value.rpartition(':')
|
81
82
|
model_refs[model][id] = 0
|
82
83
|
end
|
@@ -85,13 +86,18 @@ module StreamRails
|
|
85
86
|
end
|
86
87
|
|
87
88
|
def retrieve_objects(references)
|
88
|
-
|
89
|
+
references.map do |model, ids|
|
90
|
+
[model, model.classify.constantize.where(model.classify.constantize.primary_key => ids.keys).map do |i|
|
91
|
+
[i.id.to_s, i]
|
92
|
+
end.to_h]
|
93
|
+
end.to_h
|
89
94
|
end
|
90
95
|
|
91
96
|
def inject_objects(activities, objects)
|
92
97
|
create_activity_results(activities).each do |activity|
|
93
98
|
activity.select { |k, _v| @fields.include? k.to_sym }.each do |field, value|
|
94
99
|
next unless model_field?(value)
|
100
|
+
|
95
101
|
model, _, id = value.rpartition(':')
|
96
102
|
activity[field] = objects[model][id] || value
|
97
103
|
activity.track_not_enriched_field(field, value) if objects[model][id].nil?
|
@@ -102,7 +108,7 @@ module StreamRails
|
|
102
108
|
private
|
103
109
|
|
104
110
|
def create_activity_results(activities)
|
105
|
-
|
111
|
+
activities.map { |a| ActivityResult.new.from_activity(a) }
|
106
112
|
end
|
107
113
|
end
|
108
114
|
end
|
@@ -15,7 +15,7 @@ module StreamRails
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def get_news_feeds(user_id)
|
18
|
-
|
18
|
+
@news_feeds.transform_values { |feed_slug| get_feed(feed_slug, user_id) }
|
19
19
|
end
|
20
20
|
|
21
21
|
def get_notification_feed(user_id)
|
@@ -28,6 +28,7 @@ module StreamRails
|
|
28
28
|
|
29
29
|
def follow_user(user_id, target_id)
|
30
30
|
return unless StreamRails.enabled?
|
31
|
+
|
31
32
|
target_feed = get_user_feed(target_id)
|
32
33
|
@news_feeds.each do |_, feed|
|
33
34
|
news_feed = get_feed(feed, user_id)
|
@@ -37,6 +38,7 @@ module StreamRails
|
|
37
38
|
|
38
39
|
def unfollow_user(user_id, target_id)
|
39
40
|
return unless StreamRails.enabled?
|
41
|
+
|
40
42
|
target_feed = get_user_feed(target_id)
|
41
43
|
@news_feeds.each do |_, feed|
|
42
44
|
news_feed = get_feed(feed, user_id)
|
@@ -50,6 +52,7 @@ module StreamRails
|
|
50
52
|
|
51
53
|
def created_activity(instance)
|
52
54
|
return unless StreamRails.enabled? && instance.activity_should_sync?
|
55
|
+
|
53
56
|
activity = instance.create_activity
|
54
57
|
feed = get_owner_feed(instance)
|
55
58
|
feed.add_activity(activity)
|
@@ -57,6 +60,7 @@ module StreamRails
|
|
57
60
|
|
58
61
|
def destroyed_activity(instance)
|
59
62
|
return unless StreamRails.enabled?
|
63
|
+
|
60
64
|
feed = get_owner_feed(instance)
|
61
65
|
feed.remove(instance.activity_foreign_id, true)
|
62
66
|
end
|
data/lib/stream_rails/logger.rb
CHANGED
@@ -20,17 +20,17 @@ module StreamRails
|
|
20
20
|
context.render params
|
21
21
|
else
|
22
22
|
StreamRails.logger.warn "trying to display a non enriched activity #{activity.inspect} #{activity.failed_to_enrich}"
|
23
|
-
|
23
|
+
''
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
def render_aggregated(activity, context, params)
|
28
|
-
if
|
29
|
-
context.render params
|
30
|
-
else
|
28
|
+
if activity['activities'].map { |a| !a.enriched? }.all?
|
31
29
|
first_activity = activity['activities'][0]
|
32
30
|
StreamRails.logger.warn "trying to display a non enriched activity #{first_activity.inspect} #{first_activity.failed_to_enrich}"
|
33
|
-
|
31
|
+
''
|
32
|
+
else
|
33
|
+
context.render params
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -42,7 +42,7 @@ module StreamRails
|
|
42
42
|
|
43
43
|
def partial_path(activity, aggregated, prefix = '', path = nil, root = nil)
|
44
44
|
root ||= (aggregated ? 'aggregated_activity' : 'activity')
|
45
|
-
path ||=
|
45
|
+
path ||= (activity['verb']).to_s.downcase
|
46
46
|
path = "#{prefix}_#{path}" if prefix
|
47
47
|
select_path path, root
|
48
48
|
end
|
@@ -50,8 +50,8 @@ module StreamRails
|
|
50
50
|
def prepare_locals(activity, params)
|
51
51
|
locals = params.delete(:locals) || {}
|
52
52
|
locals.merge\
|
53
|
-
activity:
|
54
|
-
parameters:
|
53
|
+
activity: activity,
|
54
|
+
parameters: params
|
55
55
|
end
|
56
56
|
|
57
57
|
private
|
data/lib/stream_rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stream_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tommaso Barbugli
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-03-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionpack
|
@@ -18,56 +18,56 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 5.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 5.0.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
30
|
+
name: activerecord
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 5.0.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 5.0.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
44
|
+
name: railties
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: 5.0.0
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - "
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
56
|
+
version: 5.0.0
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
58
|
+
name: stream-ruby
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
63
|
+
version: 4.0.1
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - "
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
70
|
+
version: 4.0.1
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rake
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,33 +83,33 @@ dependencies:
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
86
|
+
name: rspec
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
91
|
+
version: '3.10'
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
98
|
+
version: '3.10'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
100
|
+
name: sequel
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - "~>"
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version: '
|
105
|
+
version: '4.49'
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
110
|
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
112
|
+
version: '4.49'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: simplecov
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,19 +125,19 @@ dependencies:
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 0.16.1
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
128
|
+
name: sqlite3
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
131
|
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
133
|
+
version: 1.3.13
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
138
|
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
140
|
+
version: 1.3.13
|
141
141
|
description:
|
142
142
|
email: support@getstream.io
|
143
143
|
executables: []
|
@@ -171,15 +171,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
171
|
requirements:
|
172
172
|
- - ">="
|
173
173
|
- !ruby/object:Gem::Version
|
174
|
-
version:
|
174
|
+
version: 2.5.5
|
175
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
177
|
- - ">="
|
178
178
|
- !ruby/object:Gem::Version
|
179
179
|
version: '0'
|
180
180
|
requirements: []
|
181
|
-
|
182
|
-
rubygems_version: 2.7.8
|
181
|
+
rubygems_version: 3.1.2
|
183
182
|
signing_key:
|
184
183
|
specification_version: 4
|
185
184
|
summary: A gem that provides a client interface for getstream.io
|