stream_rails 2.6.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +66 -32
- data/lib/stream_rails/activity.rb +5 -5
- data/lib/stream_rails/enrich.rb +20 -12
- 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/sync_policies.rb +2 -2
- data/lib/stream_rails/version.rb +1 -1
- metadata +30 -37
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,7 +1,6 @@
|
|
1
|
-
Stream Rails
|
2
|
-
============
|
1
|
+
# Stream Rails
|
3
2
|
|
4
|
-
[![
|
3
|
+
[![build](https://github.com/GetStream/stream-rails/workflows/build/badge.svg)](https://github.com/GetStream/stream-rails/actions)
|
5
4
|
[![Gem Version](https://badge.fury.io/rb/stream_rails.svg)](http://badge.fury.io/rb/stream_rails)
|
6
5
|
|
7
6
|
[stream-rails](https://github.com/GetStream/stream-rails) is a Ruby on Rails client for [Stream](https://getstream.io/).
|
@@ -16,11 +15,11 @@ Note there is also a lower level [Ruby - Stream integration](https://github.com/
|
|
16
15
|
|
17
16
|
What you can build:
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
- Activity streams such as seen on Github
|
19
|
+
- A twitter style newsfeed
|
20
|
+
- A feed like instagram/ pinterest
|
21
|
+
- Facebook style newsfeeds
|
22
|
+
- A notification system
|
24
23
|
|
25
24
|
### Demo
|
26
25
|
|
@@ -54,7 +53,7 @@ You can check out our example app built using this library on Github [https://gi
|
|
54
53
|
|
55
54
|
### Gem installation
|
56
55
|
|
57
|
-
You can install
|
56
|
+
You can install `stream_rails` as you would any other gem:
|
58
57
|
|
59
58
|
```
|
60
59
|
gem install stream_rails
|
@@ -67,17 +66,17 @@ gem 'stream_rails'
|
|
67
66
|
```
|
68
67
|
|
69
68
|
This library is tested against and fully supports the following Rails versions:
|
70
|
-
|
71
|
-
- 4.0
|
72
|
-
- 4.2
|
69
|
+
|
73
70
|
- 5.0
|
74
71
|
- 5.2
|
72
|
+
- 6.0
|
73
|
+
- 6.1
|
75
74
|
|
76
75
|
### Setup
|
77
76
|
|
78
|
-
Login with Github on getstream.io and get your
|
77
|
+
Login with Github on getstream.io and get your `api_key` and `api_secret` from your app configuration (Dashboard screen).
|
79
78
|
|
80
|
-
Then you can add the StreamRails configuration in
|
79
|
+
Then you can add the StreamRails configuration in `config/initializers/stream_rails.rb`
|
81
80
|
|
82
81
|
```ruby
|
83
82
|
require 'stream_rails'
|
@@ -87,7 +86,7 @@ StreamRails.configure do |config|
|
|
87
86
|
config.api_secret = "YOUR API SECRET"
|
88
87
|
config.timeout = 30 # Optional, defaults to 3
|
89
88
|
config.location = 'us-east' # Optional, defaults to 'us-east'
|
90
|
-
config.api_hostname = 'stream-io-api.com' # Optional, defaults to 'stream-io-api.com'
|
89
|
+
config.api_hostname = 'stream-io-api.com' # Optional, defaults to 'stream-io-api.com'
|
91
90
|
# If you use custom feed names, e.g.: timeline_flat, timeline_aggregated,
|
92
91
|
# use this, otherwise omit:
|
93
92
|
config.news_feeds = { flat: "timeline_flat", aggregated: "timeline_aggregated" }
|
@@ -152,14 +151,41 @@ class Pin < ActiveRecord::Base
|
|
152
151
|
|
153
152
|
end
|
154
153
|
```
|
155
|
-
|
154
|
+
|
155
|
+
Everytime a Pin is created it will be stored in the feed of the user that created it. When a Pin instance is deleted, the feed will be removed as well.
|
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:
|
@@ -185,8 +211,7 @@ end
|
|
185
211
|
|
186
212
|
#### Activity extra data
|
187
213
|
|
188
|
-
Often you'll want to store more data than just the basic fields. You achieve this by implementing
|
189
|
-
|
214
|
+
Often you'll want to store more data than just the basic fields. You achieve this by implementing `#activity_extra_data` in your model.
|
190
215
|
|
191
216
|
```ruby
|
192
217
|
class Pin < ActiveRecord::Base
|
@@ -210,7 +235,7 @@ end
|
|
210
235
|
#### Activity creation
|
211
236
|
|
212
237
|
If you want to control when to create an activity you should implement
|
213
|
-
the
|
238
|
+
the `#activity_should_sync?` method in your model.
|
214
239
|
|
215
240
|
```ruby
|
216
241
|
class Pin < ActiveRecord::Base
|
@@ -235,7 +260,7 @@ This will create an activity only when `self.published` is true.
|
|
235
260
|
|
236
261
|
### Feed manager
|
237
262
|
|
238
|
-
|
263
|
+
`stream_rails` comes with a Feed Manager class that helps with all common feed operations. You can get an instance of the manager with `StreamRails.feed_manager`.
|
239
264
|
|
240
265
|
```ruby
|
241
266
|
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
|
@@ -247,12 +272,15 @@ To get you started the manager has 4 feeds pre-configured. You can add more feed
|
|
247
272
|
Feeds are divided into three categories.
|
248
273
|
|
249
274
|
##### User feed:
|
275
|
+
|
250
276
|
The user feed stores all activities for a user. Think of it as your personal Facebook page. You can easily get this feed from the manager.
|
277
|
+
|
251
278
|
```ruby
|
252
279
|
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
|
253
280
|
```
|
254
281
|
|
255
282
|
##### News feeds:
|
283
|
+
|
256
284
|
News feeds store activities from the people you follow.
|
257
285
|
There is both a flat newsfeed (similar to twitter) and an aggregated newsfeed (like facebook).
|
258
286
|
|
@@ -262,15 +290,18 @@ aggregated_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggr
|
|
262
290
|
```
|
263
291
|
|
264
292
|
##### Notification feed:
|
293
|
+
|
265
294
|
The notification feed can be used to build notification functionality.
|
266
295
|
|
267
296
|
![Notification feed](http://feedly.readthedocs.org/en/latest/_images/fb_notification_system.png)
|
268
297
|
|
269
298
|
Below we show an example of how you can read the notification feed.
|
299
|
+
|
270
300
|
```ruby
|
271
301
|
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
|
272
302
|
|
273
303
|
```
|
304
|
+
|
274
305
|
By default the notification feed will be empty. You can specify which users to notify when your model gets created. In the case of a retweet you probably want to notify the user of the parent tweet.
|
275
306
|
|
276
307
|
```ruby
|
@@ -337,11 +368,11 @@ StreamRails.feed_manager.follow_user(user_id, target_id)
|
|
337
368
|
When you read data from feeds, a pin activity will look like this:
|
338
369
|
|
339
370
|
```json
|
340
|
-
{"actor": "User:1", "verb": "like", "object": "Item:42"}
|
371
|
+
{ "actor": "User:1", "verb": "like", "object": "Item:42" }
|
341
372
|
```
|
342
373
|
|
343
374
|
This is far from ready for usage in your template. We call the process of loading the references from the database
|
344
|
-
enrichment. An example is shown below:
|
375
|
+
"enrichment." An example is shown below:
|
345
376
|
|
346
377
|
```ruby
|
347
378
|
enricher = StreamRails::Enrich.new
|
@@ -350,7 +381,9 @@ feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat]
|
|
350
381
|
results = feed.get()['results']
|
351
382
|
activities = enricher.enrich_activities(results)
|
352
383
|
```
|
353
|
-
|
384
|
+
|
385
|
+
A similar method called `enrich_aggregated_activities` is available for aggregated feeds.
|
386
|
+
|
354
387
|
```ruby
|
355
388
|
enricher = StreamRails::Enrich.new
|
356
389
|
|
@@ -363,6 +396,7 @@ If you have additional metadata in your activity (by overriding `activity_extra_
|
|
363
396
|
Stream Activity mixin), you can also enrich that field's data by doing the following:
|
364
397
|
|
365
398
|
Step One: override the `activity_extra_data` method from our mixin:
|
399
|
+
|
366
400
|
```ruby
|
367
401
|
class Pin < ActiveRecord::Base
|
368
402
|
include StreamRails::Activity
|
@@ -403,6 +437,7 @@ pin.extra_data = {:location => "location:#{boulder.id}"}
|
|
403
437
|
|
404
438
|
When we retrieve the activity later, the enrichment process will include our `location` model as well, giving us
|
405
439
|
access to attributes and methods of the location model:
|
440
|
+
|
406
441
|
```ruby
|
407
442
|
place = activity[:location].name
|
408
443
|
# Boulder, CO
|
@@ -423,18 +458,17 @@ For convenience we include a basic view:
|
|
423
458
|
</div>
|
424
459
|
```
|
425
460
|
|
426
|
-
The
|
427
|
-
|
428
|
-
The helper will automatically send ```activity``` to the local scope of the partial; additional parameters can be send as well as use different layouts, and prefix the name
|
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.
|
429
462
|
|
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
|
430
464
|
|
431
|
-
e.g. renders the activity partial using the
|
465
|
+
e.g. renders the activity partial using the `small_activity` layout:
|
432
466
|
|
433
467
|
```
|
434
468
|
<%= render_activity activity, :layout => "small_activity" %>
|
435
469
|
```
|
436
470
|
|
437
|
-
e.g. prefixes the name of the template with "
|
471
|
+
e.g. prefixes the name of the template with "notification\_":
|
438
472
|
|
439
473
|
```
|
440
474
|
<%= render_activity activity, :prefix => "notification_" %>
|
@@ -482,10 +516,10 @@ From the project root directory:
|
|
482
516
|
|
483
517
|
### Full documentation and Low level APIs access
|
484
518
|
|
485
|
-
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).
|
486
520
|
|
487
521
|
### Copyright and License Information
|
488
522
|
|
489
|
-
Copyright (c) 2014-
|
523
|
+
Copyright (c) 2014-2021 Stream.io Inc, and individual contributors. All rights reserved.
|
490
524
|
|
491
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
|
@@ -93,9 +93,9 @@ module StreamRails
|
|
93
93
|
target: activity_target_id,
|
94
94
|
time: activity_time
|
95
95
|
}
|
96
|
-
|
97
|
-
activity.
|
98
|
-
activity
|
96
|
+
arr = activity_notify
|
97
|
+
activity[:to] = arr.map(&:id) unless arr.nil?
|
98
|
+
activity.merge!(activity_extra_data || {})
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
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)
|
@@ -40,14 +40,16 @@ module StreamRails
|
|
40
40
|
|
41
41
|
def model_field?(field_value)
|
42
42
|
return false unless field_value.respond_to?('split')
|
43
|
-
|
44
|
-
|
43
|
+
|
44
|
+
model, _, id = field_value.rpartition(':')
|
45
|
+
return false unless model.present? && id.present?
|
46
|
+
|
45
47
|
begin
|
46
|
-
|
48
|
+
model.classify.constantize
|
47
49
|
rescue NameError
|
48
|
-
|
50
|
+
false
|
49
51
|
else
|
50
|
-
|
52
|
+
true
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
@@ -75,7 +77,8 @@ module StreamRails
|
|
75
77
|
activities.each do |activity|
|
76
78
|
activity.select { |k, _v| @fields.include? k.to_sym }.each do |_field, value|
|
77
79
|
next unless model_field?(value)
|
78
|
-
|
80
|
+
|
81
|
+
model, _, id = value.rpartition(':')
|
79
82
|
model_refs[model][id] = 0
|
80
83
|
end
|
81
84
|
end
|
@@ -83,14 +86,19 @@ module StreamRails
|
|
83
86
|
end
|
84
87
|
|
85
88
|
def retrieve_objects(references)
|
86
|
-
|
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
|
87
94
|
end
|
88
95
|
|
89
96
|
def inject_objects(activities, objects)
|
90
97
|
create_activity_results(activities).each do |activity|
|
91
98
|
activity.select { |k, _v| @fields.include? k.to_sym }.each do |field, value|
|
92
99
|
next unless model_field?(value)
|
93
|
-
|
100
|
+
|
101
|
+
model, _, id = value.rpartition(':')
|
94
102
|
activity[field] = objects[model][id] || value
|
95
103
|
activity.track_not_enriched_field(field, value) if objects[model][id].nil?
|
96
104
|
end
|
@@ -100,7 +108,7 @@ module StreamRails
|
|
100
108
|
private
|
101
109
|
|
102
110
|
def create_activity_results(activities)
|
103
|
-
|
111
|
+
activities.map { |a| ActivityResult.new.from_activity(a) }
|
104
112
|
end
|
105
113
|
end
|
106
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
|
@@ -28,8 +28,8 @@ module StreamRails
|
|
28
28
|
|
29
29
|
module SyncDestroy
|
30
30
|
def self.included(base)
|
31
|
-
if base.respond_to? :
|
32
|
-
base.
|
31
|
+
if base.respond_to? :before_destroy
|
32
|
+
base.before_destroy :remove_from_feed
|
33
33
|
elsif Object.const_defined?('Sequel') && base < Sequel::Model
|
34
34
|
base.instance_eval do
|
35
35
|
define_method(:before_destroy) do |*args|
|
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,62 +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
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '2.6'
|
50
47
|
- - ">="
|
51
48
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
49
|
+
version: 5.0.0
|
53
50
|
type: :runtime
|
54
51
|
prerelease: false
|
55
52
|
version_requirements: !ruby/object:Gem::Requirement
|
56
53
|
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '2.6'
|
60
54
|
- - ">="
|
61
55
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
56
|
+
version: 5.0.0
|
63
57
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
58
|
+
name: stream-ruby
|
65
59
|
requirement: !ruby/object:Gem::Requirement
|
66
60
|
requirements:
|
67
|
-
- - "
|
61
|
+
- - "~>"
|
68
62
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
63
|
+
version: 4.0.1
|
70
64
|
type: :runtime
|
71
65
|
prerelease: false
|
72
66
|
version_requirements: !ruby/object:Gem::Requirement
|
73
67
|
requirements:
|
74
|
-
- - "
|
68
|
+
- - "~>"
|
75
69
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
70
|
+
version: 4.0.1
|
77
71
|
- !ruby/object:Gem::Dependency
|
78
72
|
name: rake
|
79
73
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,61 +83,61 @@ dependencies:
|
|
89
83
|
- !ruby/object:Gem::Version
|
90
84
|
version: '0'
|
91
85
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
86
|
+
name: rspec
|
93
87
|
requirement: !ruby/object:Gem::Requirement
|
94
88
|
requirements:
|
95
|
-
- - "
|
89
|
+
- - "~>"
|
96
90
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
91
|
+
version: '3.10'
|
98
92
|
type: :development
|
99
93
|
prerelease: false
|
100
94
|
version_requirements: !ruby/object:Gem::Requirement
|
101
95
|
requirements:
|
102
|
-
- - "
|
96
|
+
- - "~>"
|
103
97
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
98
|
+
version: '3.10'
|
105
99
|
- !ruby/object:Gem::Dependency
|
106
|
-
name:
|
100
|
+
name: sequel
|
107
101
|
requirement: !ruby/object:Gem::Requirement
|
108
102
|
requirements:
|
109
103
|
- - "~>"
|
110
104
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
105
|
+
version: '4.49'
|
112
106
|
type: :development
|
113
107
|
prerelease: false
|
114
108
|
version_requirements: !ruby/object:Gem::Requirement
|
115
109
|
requirements:
|
116
110
|
- - "~>"
|
117
111
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
112
|
+
version: '4.49'
|
119
113
|
- !ruby/object:Gem::Dependency
|
120
114
|
name: simplecov
|
121
115
|
requirement: !ruby/object:Gem::Requirement
|
122
116
|
requirements:
|
123
117
|
- - "~>"
|
124
118
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.
|
119
|
+
version: 0.16.1
|
126
120
|
type: :development
|
127
121
|
prerelease: false
|
128
122
|
version_requirements: !ruby/object:Gem::Requirement
|
129
123
|
requirements:
|
130
124
|
- - "~>"
|
131
125
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.
|
126
|
+
version: 0.16.1
|
133
127
|
- !ruby/object:Gem::Dependency
|
134
|
-
name:
|
128
|
+
name: sqlite3
|
135
129
|
requirement: !ruby/object:Gem::Requirement
|
136
130
|
requirements:
|
137
131
|
- - "~>"
|
138
132
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
133
|
+
version: 1.3.13
|
140
134
|
type: :development
|
141
135
|
prerelease: false
|
142
136
|
version_requirements: !ruby/object:Gem::Requirement
|
143
137
|
requirements:
|
144
138
|
- - "~>"
|
145
139
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
140
|
+
version: 1.3.13
|
147
141
|
description:
|
148
142
|
email: support@getstream.io
|
149
143
|
executables: []
|
@@ -177,15 +171,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
171
|
requirements:
|
178
172
|
- - ">="
|
179
173
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
174
|
+
version: 2.5.5
|
181
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
176
|
requirements:
|
183
177
|
- - ">="
|
184
178
|
- !ruby/object:Gem::Version
|
185
179
|
version: '0'
|
186
180
|
requirements: []
|
187
|
-
|
188
|
-
rubygems_version: 2.7.3
|
181
|
+
rubygems_version: 3.1.2
|
189
182
|
signing_key:
|
190
183
|
specification_version: 4
|
191
184
|
summary: A gem that provides a client interface for getstream.io
|