stream_rails 2.3.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0544b141236615c99034b6428926a2624697b422
4
- data.tar.gz: d2df99be8a42f250b6545e7a91bfbb19f4ebf5ce
3
+ metadata.gz: 82fcbb047a9fc18b2f808bf7a0c9d24edc6fef5b
4
+ data.tar.gz: 8741b89406b037ea2b6be3769e5663395661d185
5
5
  SHA512:
6
- metadata.gz: ae24b2785c725cbc1d86a6cc8499713f6c88cb10b4c79f481808de3e71df3ff7c05ef2d77a863a247d62fefeb3f5b15dd2162ad8eca39a2b25371e4faf4017df
7
- data.tar.gz: ae51df815ab47598937026dcc56abda1a86926c987ea652e3c236416ead55514d951adc9195b38237e77bef9f9b004222d1b805259faf8a1dd97c4502922310a
6
+ metadata.gz: 675e198519664358583be4d42e5265a0b7d74c4b3e212ec1296e9d34bad68e7e2277a97fe51902d24a33031f9aa6965d9ed25b39f4e93c5e11c1a42c99e0b55b
7
+ data.tar.gz: 7b21994454b8f1c62e17f7a642738c9c725ef717f29776c97c5fbee17373b210ae94c9718d3b33f10bea0b6ddf30662ec87c06f516c40d634004a49551edb65f
data/README.md CHANGED
@@ -31,10 +31,20 @@ You can check out our example app built using this library on Github [https://gi
31
31
  - [Table of Contents](#table-of-contents)
32
32
  - [Gem installation](#gem-installation)
33
33
  - [Setup](#setup)
34
+ - [Supported ORMs](#supported-orms)
35
+ - [ActiveRecord](#active-record)
36
+ - [Sequel](#sequel)
34
37
  - [Model configuration](#model-configuration)
35
38
  - [Activity fields](#activity-fields)
36
39
  - [Activity extra data](#activity-extra-data)
40
+ - [Activity creation](#activity-creation)
37
41
  - [Feed manager](#feed-manager)
42
+ - [Showing the newsfeed](#showing-the-newsfeed)
43
+ - [Activity enrichment](#activity-enrichment)
44
+ - [Templating](#templating)
45
+ - [Pagination](#pagination)
46
+ - [Disable model tracking](#disable-model-tracking)
47
+ - [Running specs](#running-specs)
38
48
 
39
49
  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
40
50
 
@@ -55,13 +65,51 @@ Login with Github on getstream.io and get your ```api_key``` and ```api_secret``
55
65
 
56
66
  Then you can add the StreamRails configuration in ```config/initializers/stream_rails.rb```
57
67
 
58
- ```
68
+ ```ruby
59
69
  require 'stream_rails'
60
70
 
61
71
  StreamRails.configure do |config|
62
72
  config.api_key = "YOUR API KEY"
63
73
  config.api_secret = "YOUR API SECRET"
64
- config.timeout = 30
74
+ config.timeout = 30 # Optional, defaults to 3
75
+ config.location = 'us-east' # Optional, defaults to 'us-east'
76
+ # If you use custom feed names, e.g.: timeline_flat, timeline_aggregated,
77
+ # use this, otherwise omit:
78
+ config.news_feeds = { flat: "timeline_flat", aggregated: "timeline_aggregated" }
79
+ end
80
+ ```
81
+
82
+ ###Supported ORMs
83
+
84
+ ####ActiveRecord
85
+
86
+ The integration will look as follows:
87
+
88
+ ```ruby
89
+ class Pin < ActiveRecord::Base
90
+ include StreamRails::Activity
91
+ as_activity
92
+
93
+ def activity_object
94
+ self.item
95
+ end
96
+ end
97
+ ```
98
+
99
+ ####Sequel
100
+
101
+ Please, use Sequel `~4`.
102
+
103
+ The integration will look as follows:
104
+
105
+ ```ruby
106
+ class Pin < Sequel::Model
107
+ include StreamRails::Activity
108
+ as_activity
109
+
110
+ def activity_object
111
+ self.item
112
+ end
65
113
  end
66
114
  ```
67
115
 
@@ -141,6 +189,32 @@ class Pin < ActiveRecord::Base
141
189
  end
142
190
  ```
143
191
 
192
+ ####Activity creation
193
+
194
+ If you want to control when to create an activity you should implement
195
+ the ```#activity_should_sync?``` method in your model.
196
+
197
+ ```ruby
198
+ class Pin < ActiveRecord::Base
199
+ belongs_to :author
200
+ belongs_to :item
201
+
202
+ include StreamRails::Activity
203
+ as_activity
204
+
205
+ def activity_should_sync?
206
+ self.published
207
+ end
208
+
209
+ def activity_object
210
+ self.item
211
+ end
212
+
213
+ end
214
+ ```
215
+
216
+ This will create an activity only when `self.published` is true.
217
+
144
218
  ###Feed manager
145
219
 
146
220
  ```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```.
@@ -292,6 +366,16 @@ eg. adds the extra_var to the partial scope
292
366
  <%= render_activity activity, :locals => {:extra_var => 42} %>
293
367
  ```
294
368
 
369
+ ####Pagination
370
+
371
+ For simple pagination you can use the [stream-ruby API](https://github.com/getstream/stream-ruby),
372
+ as follows in your controller:
373
+
374
+ ```ruby
375
+ StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # Returns a Stream::Feed object
376
+ results = feed.get(limit: 5, offset: 5)['results']
377
+ ```
378
+
295
379
  ### Disable model tracking
296
380
 
297
381
  You can disable model tracking (eg. when you run tests) via StreamRails.configure
@@ -301,3 +385,11 @@ require 'stream_rails'
301
385
 
302
386
  StreamRails.enabled = false
303
387
  ```
388
+
389
+ ###Running specs
390
+
391
+ From the project root directory:
392
+
393
+ ```
394
+ ./bin/run_tests.sh
395
+ ```
@@ -9,17 +9,17 @@ module StreamRails
9
9
 
10
10
  autoload :Activity
11
11
  autoload :Config
12
- autoload :FeedManager, 'stream_rails/feed_manager'
12
+ autoload :FeedManager, 'stream_rails/feed_manager'
13
13
  autoload :Renderable
14
14
  autoload :VERSION
15
15
 
16
16
  def self.client
17
17
  Stream::Client.new(
18
- self.config.api_key,
19
- self.config.api_secret,
20
- self.config.api_site_id,
21
- :location => self.config.location,
22
- :default_timeout => self.config.timeout
18
+ config.api_key,
19
+ config.api_secret,
20
+ config.api_site_id,
21
+ location: config.location,
22
+ default_timeout: config.timeout
23
23
  )
24
24
  end
25
25
 
@@ -38,12 +38,12 @@ module StreamRails
38
38
  # Enabled by default.
39
39
  # @return [Boolean]
40
40
  def self.enabled?
41
- !!StreamRails.config.enabled
41
+ StreamRails.config.enabled
42
42
  end
43
43
 
44
44
  # Returns StreamRails's configuration object.
45
45
  def self.feed_manager
46
- @feed_manager ||= StreamRails::FeedManager.new(self.client, self.config.feed_configs)
46
+ @feed_manager ||= StreamRails::FeedManager.new(client, config.feed_configs)
47
47
  end
48
48
 
49
49
  # Lets you set global configuration options.
@@ -57,10 +57,9 @@ module StreamRails
57
57
  # config.location = "us-east"
58
58
  # config.enabled = true
59
59
  # end
60
- def self.configure(&block)
60
+ def self.configure(&_block)
61
61
  yield(config) if block_given?
62
62
  end
63
-
64
63
  end
65
64
 
66
65
  require 'stream_rails/utils/view_helpers'
@@ -2,10 +2,9 @@ require 'active_record'
2
2
  require 'stream_rails/sync_policies'
3
3
 
4
4
  module StreamRails
5
-
6
5
  class << self
7
6
  def create_reference(record)
8
- if record.is_a? ActiveRecord::Base
7
+ if record.is_a?(ActiveRecord::Base) || (Object.const_defined?('Sequel') && record.is_a?(Sequel::Model))
9
8
  "#{record.class.model_name}:#{record.id}"
10
9
  else
11
10
  record.to_s unless record.nil?
@@ -14,34 +13,29 @@ module StreamRails
14
13
  end
15
14
 
16
15
  module ClassMethods
17
-
18
16
  def as_activity(opts = {})
19
- default_opts = {:track_deletes => true, :sync_policy => nil}
17
+ default_opts = { track_deletes: true, sync_policy: nil }
20
18
  options = default_opts.merge(opts)
21
19
  if options[:sync_policy].nil?
22
20
  include StreamRails::SyncPolicy::SyncCreate
23
- if options[:track_deletes]
24
- include StreamRails::SyncPolicy::SyncDestroy
25
- end
21
+ include StreamRails::SyncPolicy::SyncDestroy if options[:track_deletes]
26
22
  else
27
23
  include options[:sync_policy]
28
24
  end
29
25
  end
30
-
31
26
  end
32
27
 
33
28
  module Activity
34
-
35
- def self.included base
29
+ def self.included(base)
36
30
  base.extend ClassMethods
37
31
  end
38
32
 
39
33
  def activity_owner_id
40
- self.user_id
34
+ activity_actor.id
41
35
  end
42
36
 
43
37
  def activity_actor
44
- self.user
38
+ user
45
39
  end
46
40
 
47
41
  def activity_owner_feed
@@ -49,11 +43,11 @@ module StreamRails
49
43
  end
50
44
 
51
45
  def activity_actor_id
52
- StreamRails.create_reference(self.activity_actor)
46
+ StreamRails.create_reference(activity_actor)
53
47
  end
54
48
 
55
49
  def activity_object
56
- raise NotImplementedError, "Activity models must define `#activity_object`"
50
+ fail NotImplementedError, 'Activity models must define `#activity_object`'
57
51
  end
58
52
 
59
53
  def activity_verb
@@ -61,7 +55,7 @@ module StreamRails
61
55
  end
62
56
 
63
57
  def activity_object_id
64
- StreamRails.create_reference(self.activity_object)
58
+ StreamRails.create_reference(activity_object)
65
59
  end
66
60
 
67
61
  def activity_foreign_id
@@ -76,22 +70,23 @@ module StreamRails
76
70
  end
77
71
 
78
72
  def activity_time
79
- self.created_at.iso8601
73
+ created_at.iso8601
74
+ end
75
+
76
+ def activity_should_sync?
77
+ true
80
78
  end
81
79
 
82
80
  def create_activity
83
81
  activity = {
84
- :actor => self.activity_actor_id,
85
- :verb => self.activity_verb,
86
- :object => self.activity_object_id,
87
- :foreign_id => self.activity_foreign_id,
88
- :time => self.activity_time,
82
+ actor: activity_actor_id,
83
+ verb: activity_verb,
84
+ object: activity_object_id,
85
+ foreign_id: activity_foreign_id,
86
+ time: activity_time
89
87
  }
90
- if !self.activity_notify.nil?
91
- activity[:to] = self.activity_notify.map{|f| f.id}
92
- end
93
- activity.merge(self.activity_extra_data)
88
+ activity[:to] = activity_notify.map(&:id) unless activity_notify.nil?
89
+ activity.merge(activity_extra_data)
94
90
  end
95
-
96
91
  end
97
92
  end
@@ -7,24 +7,23 @@ module StreamRails
7
7
  attr_accessor :api_site_id
8
8
  attr_accessor :enabled
9
9
  attr_accessor :timeout
10
-
10
+
11
11
  attr_accessor :news_feeds
12
12
  attr_accessor :notification_feed
13
13
  attr_accessor :user_feed
14
14
 
15
15
  def initialize
16
16
  @enabled = true
17
- @news_feeds = {:flat=>'flat', :aggregated=>'aggregated'}
18
- @notification_feed = 'notification'
19
- @user_feed = 'user'
17
+ @news_feeds = { flat: 'flat', aggregated: 'aggregated' }
18
+ @notification_feed = 'notification'
19
+ @user_feed = 'user'
20
20
  @timeout = 3
21
21
  end
22
22
 
23
23
  def feed_configs
24
- {:news_feeds=>@news_feeds,
25
- :notification_feed=>@notification_feed,
26
- :user_feed=>@user_feed}
24
+ { news_feeds: @news_feeds,
25
+ notification_feed: @notification_feed,
26
+ user_feed: @user_feed }
27
27
  end
28
-
29
28
  end
30
29
  end
@@ -1,18 +1,17 @@
1
1
  require 'active_record'
2
2
 
3
3
  module StreamRails
4
-
5
4
  class ActivityResult < Hash
6
5
  attr_accessor :enriched
7
6
  attr_reader :failed_to_enrich
8
7
 
9
8
  def initialize
10
- @failed_to_enrich = Hash.new
9
+ @failed_to_enrich = {}
11
10
  super
12
11
  end
13
12
 
14
13
  def from_activity(h)
15
- self.merge(h)
14
+ merge(h)
16
15
  end
17
16
 
18
17
  def enriched?
@@ -26,23 +25,17 @@ module StreamRails
26
25
  def track_not_enriched_field(field, value = nil)
27
26
  @failed_to_enrich[field] = value
28
27
  end
29
-
30
28
  end
31
29
 
32
30
  class Enrich
33
-
34
31
  def initialize(fields = nil)
35
- @fields = fields || [:actor, :object]
32
+ @fields = fields || [:actor, :object]
36
33
  end
37
34
 
38
35
  def model_field?(field_value)
39
- if !field_value.respond_to?("split")
40
- return false
41
- end
36
+ return false unless field_value.respond_to?('split')
42
37
  bits = field_value.split(':')
43
- if bits.length < 2
44
- return false
45
- end
38
+ return false if bits.length < 2
46
39
  begin
47
40
  bits[0].classify.constantize
48
41
  rescue NameError
@@ -53,28 +46,28 @@ module StreamRails
53
46
  end
54
47
 
55
48
  def enrich_activities(activities)
56
- references = self.collect_references(activities)
57
- objects = self.retrieve_objects(references)
58
- self.inject_objects(activities, objects)
49
+ references = collect_references(activities)
50
+ objects = retrieve_objects(references)
51
+ inject_objects(activities, objects)
59
52
  end
60
53
 
61
54
  def enrich_aggregated_activities(aggregated_activities)
62
- references = Hash.new
55
+ references = {}
63
56
  aggregated_activities.each do |aggregated|
64
- refs = self.collect_references(aggregated['activities'])
65
- references = references.merge(refs){|key, v1, v2| v1.merge(v2)}
57
+ refs = collect_references(aggregated['activities'])
58
+ references = references.merge(refs) { |_key, v1, v2| v1.merge(v2) }
66
59
  end
67
- objects = self.retrieve_objects(references)
60
+ objects = retrieve_objects(references)
68
61
  aggregated_activities.each do |aggregated|
69
- aggregated['activities'] = self.inject_objects(aggregated['activities'], objects)
62
+ aggregated['activities'] = inject_objects(aggregated['activities'], objects)
70
63
  end
71
- aggregated_activities.map {|a| ActivityResult.new().from_activity(a)}
64
+ create_activity_results(aggregated_activities)
72
65
  end
73
66
 
74
67
  def collect_references(activities)
75
- model_refs = Hash.new{ |h,k| h[k] = Hash.new}
68
+ model_refs = Hash.new { |h, k| h[k] = {} }
76
69
  activities.each do |activity|
77
- activity.select{|k,v| @fields.include? k.to_sym}.each do |field, value|
70
+ activity.select { |k, _v| @fields.include? k.to_sym }.each do |_field, value|
78
71
  next unless self.model_field?(value)
79
72
  model, id = value.split(':')
80
73
  model_refs[model][id] = 0
@@ -84,24 +77,24 @@ module StreamRails
84
77
  end
85
78
 
86
79
  def retrieve_objects(references)
87
- Hash[references.map{ |model, ids| [model, Hash[model.classify.constantize.where(id: ids.keys).map {|i| [i.id.to_s, i]}] ] }]
80
+ Hash[references.map { |model, ids| [model, Hash[model.classify.constantize.where(id: ids.keys).map { |i| [i.id.to_s, i] }]] }]
88
81
  end
89
82
 
90
83
  def inject_objects(activities, objects)
91
- activities = activities.map {|a| ActivityResult.new().from_activity(a)}
92
- activities.each do |activity|
93
- activity.select{|k,v| @fields.include? k.to_sym}.each do |field, value|
84
+ create_activity_results(activities).each do |activity|
85
+ activity.select { |k, _v| @fields.include? k.to_sym }.each do |field, value|
94
86
  next unless self.model_field?(value)
95
87
  model, id = value.split(':')
96
88
  activity[field] = objects[model][id] || value
97
- if objects[model][id].nil?
98
- activity.track_not_enriched_field(field, value)
99
- end
89
+ activity.track_not_enriched_field(field, value) if objects[model][id].nil?
100
90
  end
101
91
  end
102
- activities
103
92
  end
104
93
 
105
- end
94
+ private
106
95
 
96
+ def create_activity_results(activities)
97
+ return activities.map { |a| ActivityResult.new.from_activity(a) }
98
+ end
99
+ end
107
100
  end
@@ -3,11 +3,11 @@ module StreamRails
3
3
  class FeedManager
4
4
  attr_reader :client
5
5
 
6
- def initialize(client, opts={})
7
- @client = client
8
- @user_feed = opts[:user_feed]
9
- @news_feeds = opts[:news_feeds]
10
- @notification_feed = opts[:notification_feed]
6
+ def initialize(client, opts = {})
7
+ @client = client
8
+ @user_feed = opts[:user_feed]
9
+ @news_feeds = opts[:news_feeds]
10
+ @notification_feed = opts[:notification_feed]
11
11
  end
12
12
 
13
13
  def get_user_feed(user_id)
@@ -15,7 +15,7 @@ module StreamRails
15
15
  end
16
16
 
17
17
  def get_news_feeds(user_id)
18
- Hash[@news_feeds.map{ |k,v| [k, self.get_feed(k, user_id)] }]
18
+ Hash[@news_feeds.map { |feed_name, feed_slug| [feed_name, get_feed(feed_slug, user_id)] }]
19
19
  end
20
20
 
21
21
  def get_notification_feed(user_id)
@@ -27,39 +27,38 @@ module StreamRails
27
27
  end
28
28
 
29
29
  def follow_user(user_id, target_id)
30
- target_feed = self.get_user_feed(target_id)
30
+ return unless StreamRails.enabled?
31
+ target_feed = get_user_feed(target_id)
31
32
  @news_feeds.each do |_, feed|
32
- news_feed = self.get_feed(feed, user_id)
33
+ news_feed = get_feed(feed, user_id)
33
34
  news_feed.follow(target_feed.slug, target_feed.user_id)
34
35
  end
35
36
  end
36
37
 
37
38
  def unfollow_user(user_id, target_id)
38
- target_feed = self.get_user_feed(target_id)
39
+ return unless StreamRails.enabled?
40
+ target_feed = get_user_feed(target_id)
39
41
  @news_feeds.each do |_, feed|
40
- news_feed = self.get_feed(feed, user_id)
42
+ news_feed = get_feed(feed, user_id)
41
43
  news_feed.unfollow(target_feed.slug, target_feed.user_id)
42
44
  end
43
45
  end
44
46
 
45
47
  def get_owner_feed(instance)
46
- self.get_feed(instance.activity_owner_feed, instance.activity_owner_id)
48
+ get_feed(instance.activity_owner_feed, instance.activity_owner_id)
47
49
  end
48
50
 
49
51
  def created_activity(instance)
50
- if StreamRails::enabled?
51
- activity = instance.create_activity
52
- feed = self.get_owner_feed(instance)
53
- feed.add_activity(activity)
54
- end
52
+ return unless StreamRails.enabled? && instance.activity_should_sync?
53
+ activity = instance.create_activity
54
+ feed = get_owner_feed(instance)
55
+ feed.add_activity(activity)
55
56
  end
56
57
 
57
58
  def destroyed_activity(instance)
58
- if StreamRails::enabled?
59
- feed = self.get_owner_feed(instance)
60
- feed.remove(instance.activity_foreign_id, foreign_id=true)
61
- end
59
+ return unless StreamRails.enabled?
60
+ feed = get_owner_feed(instance)
61
+ feed.remove(instance.activity_foreign_id, true)
62
62
  end
63
-
64
63
  end
65
64
  end
@@ -2,10 +2,8 @@ require 'rails'
2
2
 
3
3
  module StreamRails
4
4
  class Railtie < ::Rails::Railtie
5
-
6
5
  initializer 'stream_rails.setup_logging' do
7
6
  StreamRails.logger = Rails.logger
8
7
  end
9
-
10
8
  end
11
9
  end
@@ -1,11 +1,9 @@
1
1
  module StreamRails
2
2
  # Provides logic for rendering activities. (different templates per activity verb).
3
3
  module Renderable
4
-
5
4
  class << self
6
-
7
5
  def render(activity, context, params = {})
8
- aggregated = activity.has_key? 'activities'
6
+ aggregated = activity.key? 'activities'
9
7
  partial = partial_path(activity, aggregated, *params.values_at(:prefix, :partial, :partial_root))
10
8
  layout = layout_path(*params.values_at(:layout, :layout_root))
11
9
  locals = prepare_locals(activity, params)
@@ -27,7 +25,7 @@ module StreamRails
27
25
  end
28
26
 
29
27
  def render_aggregated(activity, context, params)
30
- if !activity['activities'].map {|a| !a.enriched?}.all?
28
+ if !activity['activities'].map { |a| !a.enriched? }.all?
31
29
  context.render params
32
30
  else
33
31
  first_activity = activity['activities'][0]
@@ -37,30 +35,30 @@ module StreamRails
37
35
  end
38
36
 
39
37
  def layout_path(path = nil, root = nil)
40
- path.nil? and return
38
+ path.nil? && return
41
39
  root ||= 'layouts'
42
40
  select_path path, root
43
41
  end
44
42
 
45
43
  def partial_path(activity, aggregated, prefix = '', path = nil, root = nil)
46
- root ||= (if aggregated then 'aggregated_activity' else 'activity' end)
44
+ root ||= (aggregated ? 'aggregated_activity' : 'activity')
47
45
  path ||= "#{activity['verb']}".downcase
48
46
  path = "#{prefix}_#{path}" if prefix
49
47
  select_path path, root
50
48
  end
51
49
 
52
50
  def prepare_locals(activity, params)
53
- locals = params.delete(:locals) || Hash.new
51
+ locals = params.delete(:locals) || {}
54
52
  locals.merge\
55
53
  activity: activity,
56
54
  parameters: params
57
55
  end
58
56
 
59
57
  private
60
- def select_path path, root
58
+
59
+ def select_path(path, root)
61
60
  [root, path].map(&:to_s).join('/')
62
61
  end
63
62
  end
64
63
  end
65
-
66
64
  end
@@ -1,40 +1,55 @@
1
1
  module StreamRails
2
-
3
2
  module SyncPolicy
4
-
5
3
  module SyncCreate
6
-
7
4
  def self.included(base)
8
- base.after_commit :add_to_feed, on: :create
5
+ if base.respond_to? :after_commit
6
+ base.after_commit :add_to_feed, on: :create
7
+ elsif Object.const_defined?('Sequel') && base < Sequel::Model
8
+ base.class_eval do
9
+ define_method(:_after_create) do |*args|
10
+ super(*args)
11
+ add_to_feed
12
+ end
13
+ end
14
+ else
15
+ fail 'Your ORM is not supported'
16
+ end
9
17
  end
10
18
 
11
19
  private
20
+
12
21
  def add_to_feed
13
- begin
14
- StreamRails.feed_manager.created_activity(self)
15
- rescue Exception => e
16
- StreamRails.logger.error "Something went wrong creating an activity: #{e}"
17
- raise
18
- end
22
+ StreamRails.feed_manager.created_activity(self)
23
+ rescue StandardError => e
24
+ StreamRails.logger.error "Something went wrong creating an activity: #{e}"
25
+ raise
19
26
  end
20
27
  end
21
28
 
22
29
  module SyncDestroy
23
-
24
30
  def self.included(base)
25
- base.after_commit :remove_from_feed, on: :destroy
31
+ if base.respond_to? :after_commit
32
+ base.after_commit :remove_from_feed, on: :destroy
33
+ elsif Object.const_defined?('Sequel') && base < Sequel::Model
34
+ base.instance_eval do
35
+ define_method(:before_destroy) do |*args|
36
+ remove_from_feed
37
+ super(*args)
38
+ end
39
+ end
40
+ else
41
+ fail 'Your ORM is not supported'
42
+ end
26
43
  end
27
44
 
28
45
  private
46
+
29
47
  def remove_from_feed
30
- begin
31
- StreamRails.feed_manager.destroyed_activity(self)
32
- rescue Exception => e
33
- StreamRails.logger.error "Something went wrong deleting an activity: #{e}"
34
- raise
35
- end
48
+ StreamRails.feed_manager.destroyed_activity(self)
49
+ rescue StandardError => e
50
+ StreamRails.logger.error "Something went wrong deleting an activity: #{e}"
51
+ raise
36
52
  end
37
53
  end
38
-
39
54
  end
40
55
  end
@@ -3,12 +3,13 @@ module StreamRails
3
3
  # Module extending ActionView::Base and adding `render_activity` helper.
4
4
  module ViewHelpers
5
5
  # View helper for rendering an activity
6
- def render_activity activity, options = {}
6
+ def render_activity(activity, options = {})
7
7
  Renderable.render(activity, self, options)
8
8
  end
9
+
9
10
  # View helper for rendering many activities
10
- def render_activities activities, options = {}
11
- activities.map {|activity| Renderable.render(activity, self, options.dup) }.join.html_safe
11
+ def render_activities(activities, options = {})
12
+ activities.map { |activity| Renderable.render(activity, self, options.dup) }.join.html_safe
12
13
  end
13
14
  end
14
15
  ActionView::Base.class_eval { include ViewHelpers }
@@ -1,3 +1,3 @@
1
1
  module StreamRails
2
- VERSION = '2.3.1'
3
- end
2
+ VERSION = '2.4.0'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stream_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tommaso Barbugli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-28 00:00:00.000000000 Z
11
+ date: 2016-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.2.3
47
+ version: 2.2.5
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.2.3
54
+ version: 2.2.5
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activerecord
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.7.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: sequel
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '4.29'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '4.29'
139
153
  description:
140
154
  email: tbarbugli@gmail.com
141
155
  executables: []