bustle 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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