broadcast 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -68,6 +68,22 @@ When you're ready, just instantiate the Message class and call #publish:
68
68
  Poke.new.publish
69
69
  ```
70
70
 
71
+ Broadcast::Message::Simple
72
+ ------------
73
+
74
+ If you need to dynamically create a message or just want a oneliner to publish a message, Broadcast::Message::Simple is your friend!
75
+
76
+ ```ruby
77
+ Broadcast::Message::Simple.new(:body => 'Poke!').publish(:jabber)
78
+ ```
79
+
80
+ Broadcast::Message::Simple accepts the following keys in the arguments hash
81
+
82
+ * body
83
+ * subject
84
+
85
+ Broadcast::Message::Simple#publish accepts the name of the medium and optional override settings for that medium
86
+
71
87
  Delayed::Job
72
88
  ------------
73
89
 
data/lib/broadcast.rb CHANGED
@@ -30,5 +30,7 @@ class Broadcast
30
30
 
31
31
  end
32
32
 
33
+ require 'broadcast/publishable'
33
34
  require 'broadcast/medium'
34
35
  require 'broadcast/message'
36
+
@@ -1,33 +1,12 @@
1
1
  class Broadcast::Message
2
+ autoload "Simple", "broadcast/simple"
3
+ include Broadcast::Publishable
2
4
 
5
+ # Make the options Hashie::Mash a specific trait of Broadcast::Message
3
6
  attr_accessor :options
4
- class << self
5
- attr_accessor :media
6
- def medium(name, options = {})
7
- self.media ||= []
8
- self.media.push({ :name => name, :options => options })
9
- end
10
- end
11
7
 
12
8
  def initialize(options = {})
13
9
  @options = Hashie::Mash.new(options)
14
10
  end
15
11
 
16
- def publish
17
- (self.class.media || []).each do |medium|
18
- begin
19
- Broadcast::Medium.const_get(medium[:name].to_s.downcase.capitalize).new(medium[:options]).publish(self)
20
- rescue
21
- Broadcast.logger.error "Publishing of #{self.class.name} to #{medium[:name]} failed:\n#{$!}"
22
- end
23
- end
24
- end
25
-
26
- def subject
27
- end
28
-
29
- def body
30
- ""
31
- end
32
-
33
12
  end
@@ -0,0 +1,35 @@
1
+ # Module which allows any class to be turned into a message
2
+ module Broadcast::Publishable
3
+
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ attr_accessor :media
11
+
12
+ def medium(name, options = {})
13
+ (self.media ||= []).push({ :name => name, :options => options })
14
+ end
15
+
16
+ end
17
+
18
+ def publish
19
+ (self.class.media || []).each do |medium|
20
+ begin
21
+ Broadcast::Medium.const_get(medium[:name].to_s.downcase.capitalize).new(medium[:options]).publish(self)
22
+ rescue
23
+ Broadcast.logger.error "Publishing of #{self.class.name} to #{medium[:name]} failed:\n#{$!}"
24
+ end
25
+ end
26
+ end
27
+
28
+ def subject
29
+ end
30
+
31
+ def body
32
+ ""
33
+ end
34
+
35
+ end
@@ -0,0 +1,21 @@
1
+ class Broadcast::Message::Simple < Broadcast::Message
2
+
3
+ attr_accessor :body, :subject
4
+
5
+ def body
6
+ @body || options.body
7
+ end
8
+
9
+ def subject
10
+ @subject || options.subject
11
+ end
12
+
13
+ def publish(medium, medium_arguments = {})
14
+ begin
15
+ Broadcast::Medium.const_get(medium.to_s.downcase.capitalize).new(medium_arguments).publish(self)
16
+ rescue
17
+ Broadcast.logger.error "Publishing of #{self.class.name} to #{medium} failed:\n#{$!}"
18
+ end
19
+ end
20
+
21
+ end
@@ -1,5 +1,5 @@
1
1
  class Broadcast
2
2
 
3
- VERSION = "0.2.3"
3
+ VERSION = "0.3.0"
4
4
 
5
5
  end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ class ClassToBecomeMessage
4
+ include Broadcast::Publishable
5
+
6
+ attr_accessor :something
7
+
8
+ def initialize(somthng = nil)
9
+ self.something = somthng
10
+ end
11
+
12
+ end
13
+
14
+ describe Broadcast::Publishable do
15
+
16
+ describe "in class scope" do
17
+
18
+ it "should add the media accessor" do
19
+ ClassToBecomeMessage.should respond_to(:media)
20
+ ClassToBecomeMessage.should respond_to(:media=)
21
+ end
22
+
23
+ it "should add the medium method" do
24
+ ClassToBecomeMessage.should respond_to(:medium)
25
+ end
26
+
27
+ end
28
+
29
+ describe "in instance scope" do
30
+
31
+ before {
32
+ @instance = ClassToBecomeMessage.new(123)
33
+ }
34
+ it "should add the publish method" do
35
+ @instance.should respond_to(:publish)
36
+ end
37
+
38
+ it "should add the subject method" do
39
+ @instance.should respond_to(:subject)
40
+ end
41
+
42
+ it "should add the body method" do
43
+ @instance.should respond_to(:body)
44
+ end
45
+
46
+ it "should not add the options accessor" do
47
+ @instance.should_not respond_to(:options)
48
+ @instance.should_not respond_to(:options=)
49
+ end
50
+
51
+ it "should not mess with the initializer" do
52
+ ClassToBecomeMessage.new(123).something.should == 123
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe Broadcast::Message::Simple do
4
+
5
+ before do
6
+ @message = Broadcast::Message::Simple.new(:body => 'my body', :subject => 'OMG!')
7
+ end
8
+
9
+ describe ".initialize" do
10
+
11
+ it "should accept options" do
12
+ Broadcast::Message::Simple.new(:body => 'my body', :subject => 'OMG!')
13
+ end
14
+
15
+ end
16
+
17
+ describe "#body and #subject accessors" do
18
+
19
+ describe "#body" do
20
+
21
+ it "should be the value sent to the initializer" do
22
+ @message.body.should == 'my body'
23
+ end
24
+
25
+ end
26
+
27
+ describe "#body=" do
28
+
29
+ it "should allow changing the value of body dynamically" do
30
+ @message.body = 'updated body'
31
+ @message.body.should == 'updated body'
32
+ end
33
+
34
+ end
35
+
36
+ describe "#subject" do
37
+
38
+ it "should be the value sent to the initializer" do
39
+ @message.subject.should == 'OMG!'
40
+ end
41
+
42
+ end
43
+
44
+ describe "#subject=" do
45
+
46
+ it "should be the value sent to the initializer" do
47
+ @message.subject = 'LOL'
48
+ @message.subject.should == 'LOL'
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ describe '#publish' do
56
+
57
+ it "should explode when no media is supplied" do
58
+ lambda {
59
+ @message.publish
60
+ }.should raise_error(ArgumentError)
61
+ end
62
+
63
+ it "should publish to the media passed as first argument" do
64
+ mocked = mock
65
+ mocked.should_receive(:publish).with(@message)
66
+ Broadcast::Medium::Log.should_receive(:new).and_return(mocked)
67
+ @message.publish :log
68
+ end
69
+
70
+ it "should override media settings if provided as second argument" do
71
+ mocked = mock
72
+ mocked.should_receive(:publish).with(@message)
73
+ Broadcast::Medium::Log.should_receive(:new).with(:file => 'different.log').and_return(mocked)
74
+ @message.publish :log, :file => 'different.log'
75
+ end
76
+
77
+ end
78
+
79
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: broadcast
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
8
  - 3
10
- version: 0.2.3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marcin Bunsch
@@ -163,7 +163,9 @@ files:
163
163
  - lib/broadcast/media/yammer.rb
164
164
  - lib/broadcast/medium.rb
165
165
  - lib/broadcast/message.rb
166
+ - lib/broadcast/publishable.rb
166
167
  - lib/broadcast/railtie.rb
168
+ - lib/broadcast/simple.rb
167
169
  - lib/broadcast/tasks/broadcast.rake
168
170
  - lib/broadcast/version.rb
169
171
  - spec/lib/broadcast/media/campfire_spec.rb
@@ -179,6 +181,8 @@ files:
179
181
  - spec/lib/broadcast/media/yammer_spec.rb
180
182
  - spec/lib/broadcast/medium_spec.rb
181
183
  - spec/lib/broadcast/message_spec.rb
184
+ - spec/lib/broadcast/publishable_spec.rb
185
+ - spec/lib/broadcast/simple_spec.rb
182
186
  - spec/lib/broadcast_spec.rb
183
187
  - spec/spec_helper.rb
184
188
  - spec/support/config.rb
@@ -231,6 +235,8 @@ test_files:
231
235
  - spec/lib/broadcast/media/yammer_spec.rb
232
236
  - spec/lib/broadcast/medium_spec.rb
233
237
  - spec/lib/broadcast/message_spec.rb
238
+ - spec/lib/broadcast/publishable_spec.rb
239
+ - spec/lib/broadcast/simple_spec.rb
234
240
  - spec/lib/broadcast_spec.rb
235
241
  - spec/spec_helper.rb
236
242
  - spec/support/config.rb