sub_pub 0.0.6 → 0.0.7

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/Gemfile CHANGED
@@ -9,3 +9,4 @@ gem 'activerecord'
9
9
  gem 'rails'
10
10
  gem 'sqlite3'
11
11
  gem 'pivotal_git_scripts'
12
+ gem 'pry'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sub_pub (0.0.4)
4
+ sub_pub (0.0.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -35,6 +35,7 @@ GEM
35
35
  multi_json (~> 1.0)
36
36
  arel (3.0.2)
37
37
  builder (3.0.4)
38
+ coderay (1.0.8)
38
39
  diff-lcs (1.1.3)
39
40
  erubis (2.7.0)
40
41
  hike (1.2.1)
@@ -45,10 +46,15 @@ GEM
45
46
  i18n (>= 0.4.0)
46
47
  mime-types (~> 1.16)
47
48
  treetop (~> 1.4.8)
49
+ method_source (0.8.1)
48
50
  mime-types (1.19)
49
51
  multi_json (1.5.0)
50
52
  pivotal_git_scripts (1.1.4)
51
53
  polyglot (0.3.3)
54
+ pry (0.9.10)
55
+ coderay (~> 1.0.5)
56
+ method_source (~> 0.8)
57
+ slop (~> 3.3.1)
52
58
  rack (1.4.1)
53
59
  rack-cache (1.2)
54
60
  rack (>= 0.4)
@@ -82,6 +88,7 @@ GEM
82
88
  rspec-expectations (2.12.0)
83
89
  diff-lcs (~> 1.1.3)
84
90
  rspec-mocks (2.12.0)
91
+ slop (3.3.3)
85
92
  sprockets (2.2.2)
86
93
  hike (~> 1.2)
87
94
  multi_json (~> 1.0)
@@ -104,6 +111,7 @@ PLATFORMS
104
111
  DEPENDENCIES
105
112
  activerecord
106
113
  pivotal_git_scripts
114
+ pry
107
115
  rails
108
116
  rspec
109
117
  sqlite3
data/README.md CHANGED
@@ -25,6 +25,12 @@ Or install it yourself as:
25
25
 
26
26
  $ gem install sub_pub
27
27
 
28
+ ## RSpec Configuration
29
+
30
+ require 'sub_pub_matchers'
31
+ config.include SubPub::Matchers
32
+
33
+
28
34
  ## Usage
29
35
 
30
36
  ### Configuration
@@ -1,8 +1,18 @@
1
1
  module SubPub
2
2
  module ActiveRecord
3
3
  class Subscriber < SubPub::Subscriber
4
- def self.subscribe_to(class_instance, callback)
5
- super("active_record::#{class_instance.to_s.underscore}::#{callback}")
4
+ def self.subscribe_to(class_instance, callback_name)
5
+ @class_instance = class_instance
6
+ @callback_name = callback_name
7
+ super("active_record::#{@class_instance.to_s.underscore}::#{@callback_name}")
8
+ end
9
+
10
+ def self.model_name
11
+ @class_instance.to_s
12
+ end
13
+
14
+ def self.callback_name
15
+ @callback_name
6
16
  end
7
17
 
8
18
  def record
@@ -27,6 +27,10 @@ module SubPub
27
27
  @subscription.topic
28
28
  end
29
29
 
30
+ def self.topic_name
31
+ topic
32
+ end
33
+
30
34
  def on_publish
31
35
  raise "Please define an on_publish method for #{self.class.name}"
32
36
  end
@@ -1,3 +1,3 @@
1
1
  module SubPub
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,45 @@
1
+ module SubPub
2
+ module Matchers
3
+ def subscribe_to_model(expected)
4
+ SubscribeToModel.new(expected)
5
+ end
6
+
7
+ def subscribe_to_callback(expected)
8
+ SubscribeToModelCallback.new(expected)
9
+ end
10
+
11
+ def subscribe_to_topic(expected)
12
+ SubscribeToTopic.new(expected)
13
+ end
14
+
15
+ class SubscribeToTopic
16
+ def initialize(expected_topic)
17
+ @expected_topic = expected_topic
18
+ end
19
+
20
+ def matches?(subject)
21
+ subject.topic_name.should == @expected_topic
22
+ end
23
+ end
24
+
25
+ class SubscribeToModel
26
+ def initialize(expected)
27
+ @expected = expected
28
+ end
29
+
30
+ def matches?(subject)
31
+ @expected.name.should == subject.model_name
32
+ end
33
+ end
34
+
35
+ class SubscribeToModelCallback
36
+ def initialize(expected)
37
+ @expected = expected
38
+ end
39
+
40
+ def matches?(subject)
41
+ @expected.should == subject.callback_name
42
+ end
43
+ end
44
+ end
45
+ end
Binary file
data/spec/spec_helper.rb CHANGED
@@ -19,6 +19,8 @@ RSpec.configure do |config|
19
19
  # Load the environment
20
20
  #
21
21
  require 'bundler'
22
+ require 'sub_pub_matchers'
23
+
22
24
  Bundler.require
23
25
 
24
26
  #
@@ -40,6 +42,7 @@ RSpec.configure do |config|
40
42
  # Use with_model
41
43
  #
42
44
  config.extend WithModel
45
+ config.include SubPub::Matchers
43
46
 
44
47
  #
45
48
  # Ensure pubsub is enabled
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe SubPub::ActiveRecord::Subscriber do
4
+ with_model :FooBar do
5
+ table do |t|
6
+ t.string :title
7
+ end
8
+ end
9
+
10
+ before do
11
+ class Fooz < SubPub::ActiveRecord::Subscriber
12
+ subscribe_to(FooBar, 'after_create')
13
+ end
14
+
15
+ class Bazz < SubPub::ActiveRecord::Subscriber
16
+ subscribe_to(FooBar, 'after_create')
17
+ end
18
+ end
19
+
20
+ it "returns the model name observed" do
21
+ Fooz.model_name.should == 'FooBar'
22
+ end
23
+
24
+ it "returns the callback observed" do
25
+ Bazz.callback_name.should == 'after_create'
26
+ end
27
+
28
+ context 'matchers' do
29
+ subject do
30
+ Fooz
31
+ end
32
+
33
+ it { should subscribe_to_model(FooBar) }
34
+ it { should subscribe_to_callback("after_create") }
35
+ end
36
+ end
37
+
@@ -1,55 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SubPub::Subscriber do
4
- class FooBar < SubPub::Subscriber
5
- end
6
-
7
- describe ".topic" do
8
- it "sets up a subscription" do
9
- FooBar.class_eval do
10
- subscribe_to("foo")
11
- end
12
-
13
- FooBar.topic.should == 'foo'
14
- end
15
- end
16
-
17
- describe ".subscription" do
18
- it "should be the result of the subscribe" do
19
- subscription = stub
20
-
21
- SubPub.should_receive(:subscribe).with('topic-name') { subscription }
22
-
23
- FooBar.class_eval do
24
- subscribe_to("topic-name")
25
- end
26
-
27
- FooBar.subscription.should be(subscription)
28
- end
29
- end
30
-
31
- describe ".publish" do
32
- it "notifies the subscription of the publish event" do
33
- subscription = double
34
- subscription.should_receive(:on_publish)
35
- FooBar.publish(subscription)
4
+ before do
5
+ class Bazero < SubPub::Subscriber
6
+ subscribe_to('foo_bar_topic')
36
7
  end
37
8
  end
38
9
 
39
- describe "#on_publish" do
40
- it "warns developers that they need to implement the interface" do
41
- expect {FooBar.new({}).on_publish}.to raise_error(/Please define/)
42
- end
43
- end
44
-
45
- describe "payload" do
46
- let(:payload) { double }
47
- it "has a payload" do
48
- FooBar.new(payload).payload.should == payload
10
+ context "subscriber" do
11
+ subject do
12
+ Bazero
49
13
  end
50
14
 
51
- it "has options" do
52
- FooBar.new(payload).options.should == payload
53
- end
15
+ it { should subscribe_to_topic('foo_bar_topic') }
54
16
  end
55
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sub_pub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-17 00:00:00.000000000 Z
12
+ date: 2012-12-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: In process publish/subscribe for Ruby
15
15
  email:
@@ -35,10 +35,13 @@ files:
35
35
  - lib/sub_pub/subscriber.rb
36
36
  - lib/sub_pub/subscription.rb
37
37
  - lib/sub_pub/version.rb
38
+ - lib/sub_pub_matchers.rb
38
39
  - pkg/sub_pub-0.0.3.gem
39
40
  - pkg/sub_pub-0.0.4.gem
41
+ - pkg/sub_pub-0.0.6.gem
40
42
  - spec/integration/sub_pub_spec.rb
41
43
  - spec/spec_helper.rb
44
+ - spec/unit/active_record_subscriber_spec.rb
42
45
  - spec/unit/register_spec.rb
43
46
  - spec/unit/subscriber_spec.rb
44
47
  - sub_pub.gemspec
@@ -54,12 +57,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
54
57
  - - ! '>='
55
58
  - !ruby/object:Gem::Version
56
59
  version: '0'
60
+ segments:
61
+ - 0
62
+ hash: 246920761593909108
57
63
  required_rubygems_version: !ruby/object:Gem::Requirement
58
64
  none: false
59
65
  requirements:
60
66
  - - ! '>='
61
67
  - !ruby/object:Gem::Version
62
68
  version: '0'
69
+ segments:
70
+ - 0
71
+ hash: 246920761593909108
63
72
  requirements: []
64
73
  rubyforge_project:
65
74
  rubygems_version: 1.8.24
@@ -70,6 +79,6 @@ summary: SubPub is a thin wrapper around ActiveSupport::Notifications, which pro
70
79
  test_files:
71
80
  - spec/integration/sub_pub_spec.rb
72
81
  - spec/spec_helper.rb
82
+ - spec/unit/active_record_subscriber_spec.rb
73
83
  - spec/unit/register_spec.rb
74
84
  - spec/unit/subscriber_spec.rb
75
- has_rdoc: