bustle 0.1.0 → 0.1.1

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.
data/README.md CHANGED
@@ -12,9 +12,11 @@ The advantages of Bustle are:
12
12
  - It is lightweight and simple to use
13
13
  - It is largely self-contained and separated from you core app logic
14
14
  - It works nicely with ActiveRecord out of box
15
- - It can be extended to use with other databases
15
+ - It is ORM-agnostic therefore can be extended to use with other databases
16
16
  - It has full unit test coverage
17
17
 
18
+ Bustle is built for simplicity and extensibility. If you are after high performance pub/sub then this gem is not for you.
19
+
18
20
  ## Installation
19
21
 
20
22
  Add this line to your application's Gemfile:
@@ -45,7 +47,8 @@ class CreateBustleTables < ActiveRecord::Migration
45
47
  create_table :bustle_activities do |t|
46
48
  t.string :resource_class
47
49
  t.integer :resource_id
48
- t.string :action
50
+ t.string :action, :default => ''
51
+ t.text :data, :default => ''
49
52
  t.integer :publisher_id, :null => false
50
53
  t.timestamps
51
54
  end
@@ -153,16 +156,28 @@ Bustle::Subscriptions.get(bustle_publisher, bustle_subscriber).destroy
153
156
  #### Publish an Activity
154
157
 
155
158
  ```ruby
156
- Bustle::Activities.add bustle_publisher, action, activity
159
+ Bustle::Activities.add bustle_publisher, {
160
+ :resource => some_resource,
161
+ :action => some_string,
162
+ :data => some_text
163
+ }
157
164
  # or
158
- Bustle::Publisher.publish action, activity
165
+ Bustle::Publisher.publish({
166
+ :resource => some_resource,
167
+ :action => some_string,
168
+ :data => some_text
169
+ })
159
170
 
160
171
  # example
161
172
  post = Post.find(1)
162
173
  comment = post.comments.add(:content => "I'm a comment")
163
174
  Bustle::Publishers.add post
164
175
  publisher = Bustle::Publishers.get post
165
- publisher.publish 'new', comment
176
+ publisher.publish({
177
+ :resource => comment,
178
+ :action => 'new,
179
+ :data => 'a new comment has been posted'
180
+ })
166
181
  ```
167
182
 
168
183
  #### Activities
@@ -6,11 +6,17 @@ module Bustle
6
6
  include Concern::ByPublisher
7
7
 
8
8
  class << self
9
- def add(publisher, action, activity_resource)
9
+ def add(publisher, data = {})
10
+ if resource = data.delete(:resource)
11
+ data[:resource_class] = resource.class.name
12
+ data[:resource_id] = resource.id
13
+ end
14
+
10
15
  Activity.to_adapter.create!(
11
- :resource_class => activity_resource.class.name,
12
- :resource_id => activity_resource.id,
13
- :action => action,
16
+ :resource_class => data[:resource_class],
17
+ :resource_id => data[:resource_id],
18
+ :action => data[:action],
19
+ :data => data[:data],
14
20
  :publisher_id => publisher.id
15
21
  )
16
22
  end
@@ -1,7 +1,7 @@
1
1
  module Bustle
2
2
  class Publisher < "#{Bustle.storage}::Publisher".constantize
3
- def publish(action, activity_resource)
4
- Activities.add self, action, activity_resource
3
+ def publish(data = {})
4
+ Activities.add(self, data)
5
5
  end
6
6
 
7
7
  def activities(conditions = {})
@@ -1,3 +1,3 @@
1
1
  module Bustle
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -10,20 +10,25 @@ module Bustle
10
10
  let(:subscriber2) { Subscribers.add user }
11
11
 
12
12
  it "creates an activity" do
13
- Activities.add publisher, 'show', comment
13
+ Activities.add publisher, {
14
+ :action => 'show',
15
+ :resource => comment,
16
+ :data => 'hello world'
17
+ }
14
18
 
15
19
  activity = Activity.to_adapter.get(1)
16
20
  activity.resource_class.should == 'Bustle::Dummy::Comment'
17
21
  activity.resource_id.should == 101
18
22
  activity.action.should == 'show'
23
+ activity.data.should == 'hello world'
19
24
  activity.publisher_id.should == publisher.id
20
25
  end
21
26
 
22
27
  context "multiple activities" do
23
28
  before do
24
- 2.times { Activities.add publisher, 'show', comment }
25
- 1.times { Activities.add publisher, 'reply', comment }
26
- 2.times { Activities.add publisher2, 'reply', comment }
29
+ 2.times { Activities.add publisher, { :action => 'show' } }
30
+ 1.times { Activities.add publisher, { :action => 'reply' } }
31
+ 2.times { Activities.add publisher2, { :action => 'reply' } }
27
32
  end
28
33
 
29
34
  it "finds all activities" do
@@ -10,7 +10,10 @@ module Bustle
10
10
 
11
11
  it "is able to publish an activity" do
12
12
  publisher = Publishers.add post
13
- publisher.publish 'reply', comment
13
+ publisher.publish({
14
+ :resource => comment,
15
+ :action => 'reply'
16
+ })
14
17
  Activity.to_adapter.get(1).action.should == 'reply'
15
18
  end
16
19
  end
@@ -19,7 +19,8 @@ ActiveRecord::Migration.suppress_messages do
19
19
  create_table :bustle_activities, :force => true do |t|
20
20
  t.string :resource_class
21
21
  t.integer :resource_id
22
- t.string :action
22
+ t.string :action, :default => ''
23
+ t.text :data, :default => ''
23
24
  t.integer :publisher_id
24
25
  t.timestamps
25
26
  end
@@ -8,7 +8,7 @@ shared_examples 'has_activities' do
8
8
  end
9
9
 
10
10
  it "has activities" do
11
- 2.times { publisher.publish 'show', comment }
11
+ 2.times { publisher.publish }
12
12
 
13
13
  publisher.activities.count.should == 2
14
14
  subscriber.activities.count.should == 2
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bustle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -234,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
234
  version: '0'
235
235
  segments:
236
236
  - 0
237
- hash: 1631565603439208655
237
+ hash: -534014299533993721
238
238
  required_rubygems_version: !ruby/object:Gem::Requirement
239
239
  none: false
240
240
  requirements:
@@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  version: '0'
244
244
  segments:
245
245
  - 0
246
- hash: 1631565603439208655
246
+ hash: -534014299533993721
247
247
  requirements: []
248
248
  rubyforge_project:
249
249
  rubygems_version: 1.8.24