ayl 0.1.1 → 0.2.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/VERSION +1 -1
- data/ayl.gemspec +4 -2
- data/lib/ayl.rb +1 -0
- data/lib/ayl/mailer.rb +21 -0
- data/lib/ayl/message.rb +2 -0
- data/lib/ayl/message_options.rb +3 -2
- data/spec/engine_spec.rb +1 -1
- data/spec/mailer_spec.rb +71 -0
- data/spec/message_options_spec.rb +9 -1
- data/spec/message_spec.rb +42 -1
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.1
|
data/ayl.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ayl"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dave Sieh"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-07-22"
|
13
13
|
s.description = "Invoke code At Your Leisure. ayl is a small framework that simplifies the process of implementing asynchronous method calls in Ruby."
|
14
14
|
s.email = "j0hnds@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/ayl/extensions.rb",
|
32
32
|
"lib/ayl/logger.rb",
|
33
33
|
"lib/ayl/logging.rb",
|
34
|
+
"lib/ayl/mailer.rb",
|
34
35
|
"lib/ayl/message.rb",
|
35
36
|
"lib/ayl/message_options.rb",
|
36
37
|
"lib/ayl/unrecoverable_message_exception.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"spec/engine_spec.rb",
|
39
40
|
"spec/extensions_spec.rb",
|
40
41
|
"spec/logger_spec.rb",
|
42
|
+
"spec/mailer_spec.rb",
|
41
43
|
"spec/message_options_spec.rb",
|
42
44
|
"spec/message_spec.rb",
|
43
45
|
"spec/spec_helper.rb",
|
data/lib/ayl.rb
CHANGED
data/lib/ayl/mailer.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ayl
|
2
|
+
|
3
|
+
class Mailer
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
attr_reader :mailer
|
7
|
+
|
8
|
+
def mailer=(mailer)
|
9
|
+
raise "Mailer implement the 'ayl_message(message, exception)' method" if mailer && !mailer.respond_to?(:ayl_message)
|
10
|
+
@mailer = mailer
|
11
|
+
end
|
12
|
+
|
13
|
+
def deliver_message(message, exception=nil)
|
14
|
+
mailer.ayl_message(message, exception).deliver if mailer && mailer.respond_to?(:ayl_message)
|
15
|
+
rescue Exception => ex
|
16
|
+
Ayl::Logger.instance.error("Error sending ayl email message: #{ex.backtrace.join("\n")}")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/ayl/message.rb
CHANGED
@@ -21,6 +21,7 @@ module Ayl
|
|
21
21
|
Message.new(nil, nil, MessageOptions.new).tap do | m |
|
22
22
|
m.send(:message_hash=, message_hash)
|
23
23
|
m.send(:code=, code)
|
24
|
+
m.options.decay_failed_job = message_hash[:decay_failed_job] if message_hash[:decay_failed_job]
|
24
25
|
end
|
25
26
|
|
26
27
|
end
|
@@ -32,6 +33,7 @@ module Ayl
|
|
32
33
|
def to_hash
|
33
34
|
@message_hash ||= {
|
34
35
|
:type => :ayl,
|
36
|
+
:decay_failed_job => options.decay_failed_job,
|
35
37
|
:code => to_rrepr
|
36
38
|
}
|
37
39
|
end
|
data/lib/ayl/message_options.rb
CHANGED
@@ -2,12 +2,12 @@ module Ayl
|
|
2
2
|
|
3
3
|
class MessageOptions
|
4
4
|
|
5
|
-
OPTIONS = [ :priority, :fuzz, :delay, :time_to_run, :queue_name ]
|
5
|
+
OPTIONS = [ :priority, :fuzz, :delay, :time_to_run, :queue_name, :decay_failed_job ]
|
6
6
|
|
7
7
|
attr_accessor *OPTIONS
|
8
8
|
|
9
9
|
class << self
|
10
|
-
attr_accessor :default_priority, :default_fuzz, :default_delay, :default_time_to_run, :default_queue_name
|
10
|
+
attr_accessor :default_priority, :default_fuzz, :default_delay, :default_time_to_run, :default_queue_name, :default_decay_failed_job
|
11
11
|
end
|
12
12
|
|
13
13
|
# Set the default options
|
@@ -16,6 +16,7 @@ module Ayl
|
|
16
16
|
self.default_delay = 0
|
17
17
|
self.default_time_to_run = 120
|
18
18
|
self.default_queue_name = 'default'
|
19
|
+
self.default_decay_failed_job = false
|
19
20
|
|
20
21
|
def initialize(opts=nil)
|
21
22
|
opts ||= {}
|
data/spec/engine_spec.rb
CHANGED
data/spec/mailer_spec.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ayl::Mailer do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
Ayl::Mailer.instance.mailer = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'Mailer configuration' do
|
10
|
+
|
11
|
+
context "#logger" do
|
12
|
+
|
13
|
+
it "should respond with nil if a mailer isn't configured" do
|
14
|
+
Ayl::Mailer.instance.mailer.should be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise an error if an attempt is made to configure the mailer with an invalid object" do
|
18
|
+
lambda { Ayl::Mailer.instance.mailer = Object.new }.should raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should allow a valid mailer to be configured" do
|
22
|
+
mock_mailer = mock("MyMailer")
|
23
|
+
mock_mailer.stub(:ayl_message)
|
24
|
+
|
25
|
+
lambda { Ayl::Mailer.instance.mailer = mock_mailer }.should_not raise_error
|
26
|
+
Ayl::Mailer.instance.mailer.should == mock_mailer
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "Sending messages" do
|
34
|
+
|
35
|
+
context '#deliver_message' do
|
36
|
+
|
37
|
+
it "should do nothing if no mailer is configured" do
|
38
|
+
Ayl::Mailer.instance.deliver_message("The message")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should deliver a message and no stack trace if a valid mailer is configured" do
|
42
|
+
mock_mailer = mock("MyMailer")
|
43
|
+
mock_mailer.should_receive(:ayl_message).with('The Message', nil).and_return do
|
44
|
+
mock("MailMessage").tap do | mail_message |
|
45
|
+
mail_message.should_receive(:deliver)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Ayl::Mailer.instance.mailer = mock_mailer
|
50
|
+
|
51
|
+
Ayl::Mailer.instance.deliver_message('The Message')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should deliver a message and a stack trace if a valid mailer is configured" do
|
55
|
+
mock_mailer = mock("MyMailer")
|
56
|
+
mock_mailer.should_receive(:ayl_message).with('The Message', 'StackTrace').and_return do
|
57
|
+
mock("MailMessage").tap do | mail_message |
|
58
|
+
mail_message.should_receive(:deliver)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Ayl::Mailer.instance.mailer = mock_mailer
|
63
|
+
|
64
|
+
Ayl::Mailer.instance.deliver_message('The Message', 'StackTrace')
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -10,6 +10,7 @@ describe Ayl::MessageOptions do
|
|
10
10
|
Ayl::MessageOptions.default_delay.should == 0
|
11
11
|
Ayl::MessageOptions.default_time_to_run.should == 120
|
12
12
|
Ayl::MessageOptions.default_queue_name.should == 'default'
|
13
|
+
Ayl::MessageOptions.default_decay_failed_job.should == false
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should reflect the changes if changes have been made" do
|
@@ -18,12 +19,14 @@ describe Ayl::MessageOptions do
|
|
18
19
|
Ayl::MessageOptions.default_delay = 2300
|
19
20
|
Ayl::MessageOptions.default_time_to_run = 1
|
20
21
|
Ayl::MessageOptions.default_queue_name = 'different'
|
22
|
+
Ayl::MessageOptions.default_decay_failed_job = true
|
21
23
|
|
22
24
|
Ayl::MessageOptions.default_priority.should == 256
|
23
25
|
Ayl::MessageOptions.default_fuzz.should == 18
|
24
26
|
Ayl::MessageOptions.default_delay.should == 2300
|
25
27
|
Ayl::MessageOptions.default_time_to_run.should == 1
|
26
28
|
Ayl::MessageOptions.default_queue_name.should == 'different'
|
29
|
+
Ayl::MessageOptions.default_decay_failed_job.should == true
|
27
30
|
end
|
28
31
|
|
29
32
|
end
|
@@ -38,6 +41,7 @@ describe Ayl::MessageOptions do
|
|
38
41
|
mo.delay.should == Ayl::MessageOptions.default_delay
|
39
42
|
mo.time_to_run.should == Ayl::MessageOptions.default_time_to_run
|
40
43
|
mo.queue_name.should == Ayl::MessageOptions.default_queue_name
|
44
|
+
mo.decay_failed_job.should == Ayl::MessageOptions.default_decay_failed_job
|
41
45
|
end
|
42
46
|
|
43
47
|
it "should respond with the correct defaults when initialized with nil" do
|
@@ -48,6 +52,7 @@ describe Ayl::MessageOptions do
|
|
48
52
|
mo.delay.should == Ayl::MessageOptions.default_delay
|
49
53
|
mo.time_to_run.should == Ayl::MessageOptions.default_time_to_run
|
50
54
|
mo.queue_name.should == Ayl::MessageOptions.default_queue_name
|
55
|
+
mo.decay_failed_job.should == Ayl::MessageOptions.default_decay_failed_job
|
51
56
|
end
|
52
57
|
|
53
58
|
it "should respond with the correct defaults when initialized with no parameter" do
|
@@ -58,10 +63,11 @@ describe Ayl::MessageOptions do
|
|
58
63
|
mo.delay.should == Ayl::MessageOptions.default_delay
|
59
64
|
mo.time_to_run.should == Ayl::MessageOptions.default_time_to_run
|
60
65
|
mo.queue_name.should == Ayl::MessageOptions.default_queue_name
|
66
|
+
mo.decay_failed_job.should == Ayl::MessageOptions.default_decay_failed_job
|
61
67
|
end
|
62
68
|
|
63
69
|
it "should respond with the correct values when all are specified in the options" do
|
64
|
-
opts = { :priority => 22, :fuzz => 88, :delay => 99, :time_to_run => 11, :queue_name => 'stub' }
|
70
|
+
opts = { :priority => 22, :fuzz => 88, :delay => 99, :time_to_run => 11, :queue_name => 'stub', :decay_failed_job => true }
|
65
71
|
mo = Ayl::MessageOptions.new(opts)
|
66
72
|
|
67
73
|
mo.priority.should == opts[:priority]
|
@@ -69,6 +75,7 @@ describe Ayl::MessageOptions do
|
|
69
75
|
mo.delay.should == opts[:delay]
|
70
76
|
mo.time_to_run.should == opts[:time_to_run]
|
71
77
|
mo.queue_name.should == opts[:queue_name]
|
78
|
+
mo.decay_failed_job.should == opts[:decay_failed_job]
|
72
79
|
end
|
73
80
|
|
74
81
|
it "should respond with the correct values when some values are specified in the options" do
|
@@ -80,6 +87,7 @@ describe Ayl::MessageOptions do
|
|
80
87
|
mo.delay.should == opts[:delay]
|
81
88
|
mo.time_to_run.should == Ayl::MessageOptions.default_time_to_run
|
82
89
|
mo.queue_name.should == Ayl::MessageOptions.default_queue_name
|
90
|
+
mo.decay_failed_job.should == Ayl::MessageOptions.default_decay_failed_job
|
83
91
|
end
|
84
92
|
|
85
93
|
it "should raise an exception when an invalid option is provided in the hash" do
|
data/spec/message_spec.rb
CHANGED
@@ -2,6 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Ayl::Message do
|
4
4
|
|
5
|
+
before(:each) do
|
6
|
+
# Need to reset the default message options each time
|
7
|
+
Ayl::MessageOptions.default_priority = 512
|
8
|
+
Ayl::MessageOptions.default_fuzz = 0
|
9
|
+
Ayl::MessageOptions.default_delay = 0
|
10
|
+
Ayl::MessageOptions.default_time_to_run = 120
|
11
|
+
Ayl::MessageOptions.default_queue_name = 'default'
|
12
|
+
Ayl::MessageOptions.default_decay_failed_job = false
|
13
|
+
end
|
14
|
+
|
5
15
|
context "Initialization" do
|
6
16
|
|
7
17
|
it "should accept an object, selector options and a set of arguments" do
|
@@ -47,7 +57,14 @@ describe Ayl::Message do
|
|
47
57
|
it "should package up the message into a hash" do
|
48
58
|
options = Ayl::MessageOptions.new
|
49
59
|
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
50
|
-
m.to_hash.should == { :type => :ayl, :code => "\"object\".method_name(\"arg1\", \"arg2\")" }
|
60
|
+
m.to_hash.should == { :type => :ayl, :decay_failed_job => false, :code => "\"object\".method_name(\"arg1\", \"arg2\")" }
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should package up the message into a hash when the decay failed job has been set" do
|
64
|
+
options = Ayl::MessageOptions.new
|
65
|
+
options.decay_failed_job = true
|
66
|
+
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
67
|
+
m.to_hash.should == { :type => :ayl, :decay_failed_job => true, :code => "\"object\".method_name(\"arg1\", \"arg2\")" }
|
51
68
|
end
|
52
69
|
|
53
70
|
it "should be able to create a message from a hash with code that has arguments" do
|
@@ -86,6 +103,30 @@ describe Ayl::Message do
|
|
86
103
|
m.to_hash.should === m_hash
|
87
104
|
end
|
88
105
|
|
106
|
+
it "should create a message with decay_failed job set to false if not in the original hash" do
|
107
|
+
m_hash = { :type => :ayl, :code => "String._ayl_after_create(2.to_s(2))" }
|
108
|
+
m = Ayl::Message.from_hash(m_hash)
|
109
|
+
m.options.is_a?(Ayl::MessageOptions).should be_true
|
110
|
+
m.to_hash.should === m_hash
|
111
|
+
m.options.decay_failed_job.should be_false
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should create a message with decay_failed job set to false if in the original hash as false" do
|
115
|
+
m_hash = { :type => :ayl, :decay_failed_job => false, :code => "String._ayl_after_create(2.to_s(2))" }
|
116
|
+
m = Ayl::Message.from_hash(m_hash)
|
117
|
+
m.options.is_a?(Ayl::MessageOptions).should be_true
|
118
|
+
m.to_hash.should === m_hash
|
119
|
+
m.options.decay_failed_job.should be_false
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should create a message with decay_failed job set to true if in the original hash as true" do
|
123
|
+
m_hash = { :type => :ayl, :decay_failed_job => true, :code => "String._ayl_after_create(2.to_s(2))" }
|
124
|
+
m = Ayl::Message.from_hash(m_hash)
|
125
|
+
m.options.is_a?(Ayl::MessageOptions).should be_true
|
126
|
+
m.to_hash.should === m_hash
|
127
|
+
m.options.decay_failed_job.should be_true
|
128
|
+
end
|
129
|
+
|
89
130
|
|
90
131
|
end
|
91
132
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ayl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
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: 2013-
|
12
|
+
date: 2013-07-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/ayl/extensions.rb
|
115
115
|
- lib/ayl/logger.rb
|
116
116
|
- lib/ayl/logging.rb
|
117
|
+
- lib/ayl/mailer.rb
|
117
118
|
- lib/ayl/message.rb
|
118
119
|
- lib/ayl/message_options.rb
|
119
120
|
- lib/ayl/unrecoverable_message_exception.rb
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- spec/engine_spec.rb
|
122
123
|
- spec/extensions_spec.rb
|
123
124
|
- spec/logger_spec.rb
|
125
|
+
- spec/mailer_spec.rb
|
124
126
|
- spec/message_options_spec.rb
|
125
127
|
- spec/message_spec.rb
|
126
128
|
- spec/spec_helper.rb
|
@@ -140,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
142
|
version: '0'
|
141
143
|
segments:
|
142
144
|
- 0
|
143
|
-
hash:
|
145
|
+
hash: 3676915364557125950
|
144
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
147
|
none: false
|
146
148
|
requirements:
|