ayl 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +5 -7
- data/Gemfile.lock +57 -19
- data/LICENSE.txt +1 -1
- data/README.rdoc +2 -2
- data/VERSION +1 -1
- data/ayl.gemspec +18 -20
- data/lib/ayl/mailer.rb +8 -1
- data/lib/ayl/message.rb +21 -6
- data/lib/ayl/message_options.rb +13 -2
- data/spec/engine_spec.rb +27 -27
- data/spec/extensions_spec.rb +12 -10
- data/spec/logger_spec.rb +14 -14
- data/spec/mailer_spec.rb +38 -18
- data/spec/message_options_spec.rb +63 -46
- data/spec/message_spec.rb +48 -40
- data/spec/worker_spec.rb +1 -1
- metadata +25 -54
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b3b09c825346a151c1ee66241ddb9f8f803fb663
|
4
|
+
data.tar.gz: a18dc857d326a0b310cfc2c6fc8b1b4aa1a5afec
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4733517f005acbae5f5c668810bd33fb1fcfe3076892abd4540438a3f1721fb5be3a900f23cd8620169d705806d2c51264d2679d48a302317b23ae39715c15a6
|
7
|
+
data.tar.gz: 94529875c0b7971d76a6503b85f5befab221cb775826588717b2f59566b6cd27c35f87ffdc628e512c2e12f59f84db11867330abb691afb1727b4b5cd6483e31
|
data/Gemfile
CHANGED
@@ -6,13 +6,11 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "rspec", "
|
10
|
-
gem "bundler", "
|
11
|
-
gem "jeweler", "
|
12
|
-
gem "rcov", ">= 0"
|
13
|
-
gem 'pry'
|
9
|
+
gem "rspec", "~> 2.14"
|
10
|
+
gem "bundler", "~> 1.10"
|
11
|
+
gem "jeweler", "~> 2.0"
|
14
12
|
end
|
15
13
|
|
16
|
-
group :test do
|
17
|
-
gem 'pry'
|
14
|
+
group :test, :development do
|
15
|
+
gem 'pry', "~> 0.9"
|
18
16
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,41 +1,79 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
addressable (2.3.8)
|
5
|
+
builder (3.2.2)
|
4
6
|
coderay (0.9.8)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
descendants_tracker (0.0.4)
|
8
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
9
|
+
diff-lcs (1.2.5)
|
10
|
+
faraday (0.9.1)
|
11
|
+
multipart-post (>= 1.2, < 3)
|
12
|
+
git (1.2.9.1)
|
13
|
+
github_api (0.12.3)
|
14
|
+
addressable (~> 2.3)
|
15
|
+
descendants_tracker (~> 0.0.4)
|
16
|
+
faraday (~> 0.8, < 0.10)
|
17
|
+
hashie (>= 3.3)
|
18
|
+
multi_json (>= 1.7.5, < 2.0)
|
19
|
+
nokogiri (~> 1.6.3)
|
20
|
+
oauth2
|
21
|
+
hashie (3.4.2)
|
22
|
+
highline (1.7.2)
|
23
|
+
jeweler (2.0.1)
|
24
|
+
builder
|
25
|
+
bundler (>= 1.0)
|
9
26
|
git (>= 1.2.5)
|
27
|
+
github_api
|
28
|
+
highline (>= 1.6.15)
|
29
|
+
nokogiri (>= 1.5.10)
|
10
30
|
rake
|
31
|
+
rdoc
|
32
|
+
jwt (1.5.0)
|
11
33
|
method_source (0.6.7)
|
12
34
|
ruby_parser (>= 2.3.1)
|
35
|
+
mini_portile (0.6.2)
|
36
|
+
multi_json (1.11.0)
|
37
|
+
multi_xml (0.5.5)
|
38
|
+
multipart-post (2.0.0)
|
39
|
+
nokogiri (1.6.6.2)
|
40
|
+
mini_portile (~> 0.6.0)
|
41
|
+
oauth2 (1.0.0)
|
42
|
+
faraday (>= 0.8, < 0.10)
|
43
|
+
jwt (~> 1.0)
|
44
|
+
multi_json (~> 1.3)
|
45
|
+
multi_xml (~> 0.5)
|
46
|
+
rack (~> 1.2)
|
13
47
|
pry (0.9.7.4)
|
14
48
|
coderay (~> 0.9.8)
|
15
49
|
method_source (~> 0.6.7)
|
16
50
|
ruby_parser (>= 2.3.1)
|
17
51
|
slop (~> 2.1.0)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
rspec-
|
23
|
-
rspec-
|
24
|
-
|
25
|
-
rspec-
|
26
|
-
|
27
|
-
|
52
|
+
rack (1.6.1)
|
53
|
+
rake (10.4.2)
|
54
|
+
rdoc (4.2.0)
|
55
|
+
rspec (2.99.0)
|
56
|
+
rspec-core (~> 2.99.0)
|
57
|
+
rspec-expectations (~> 2.99.0)
|
58
|
+
rspec-mocks (~> 2.99.0)
|
59
|
+
rspec-core (2.99.2)
|
60
|
+
rspec-expectations (2.99.2)
|
61
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
62
|
+
rspec-mocks (2.99.3)
|
28
63
|
ruby_parser (2.3.1)
|
29
64
|
sexp_processor (~> 3.0)
|
30
65
|
sexp_processor (3.0.8)
|
31
66
|
slop (2.1.0)
|
67
|
+
thread_safe (0.3.5)
|
32
68
|
|
33
69
|
PLATFORMS
|
34
70
|
ruby
|
35
71
|
|
36
72
|
DEPENDENCIES
|
37
|
-
bundler (
|
38
|
-
jeweler (
|
39
|
-
pry
|
40
|
-
|
41
|
-
|
73
|
+
bundler (~> 1.10)
|
74
|
+
jeweler (~> 2.0)
|
75
|
+
pry (~> 0.9)
|
76
|
+
rspec (~> 2.14)
|
77
|
+
|
78
|
+
BUNDLED WITH
|
79
|
+
1.10.3
|
data/LICENSE.txt
CHANGED
data/README.rdoc
CHANGED
@@ -13,7 +13,7 @@ been abstracted away from the general framework. You can implement any
|
|
13
13
|
"Engine" you like to provide the asynchronous functionality. A
|
14
14
|
reference implementation of an engine using beanstalk
|
15
15
|
({beanstalkd}[http://kr.github.com/beanstalkd/],
|
16
|
-
{
|
16
|
+
{beaneater}[https://github.com/beanstalkd/beaneater]) as a queuing
|
17
17
|
mechanism is provided to give you a leg up:
|
18
18
|
{ayl-beanstalk}[https://github.com/j0hnds/ayl-beanstalk]. If you
|
19
19
|
decide to use a different mechanism, you can simply provide an
|
@@ -39,6 +39,6 @@ See the {wiki}[https://github.com/j0hnds/ayl/wiki/ayl-Home] for more detailed do
|
|
39
39
|
|
40
40
|
== Copyright
|
41
41
|
|
42
|
-
Copyright (c) 2011 j0hnds@gmail.com. See LICENSE.txt for
|
42
|
+
Copyright (c) 2011-2015 j0hnds@gmail.com. See LICENSE.txt for
|
43
43
|
further details.
|
44
44
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/ayl.gemspec
CHANGED
@@ -2,14 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: ayl 0.4.0 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "ayl"
|
8
|
-
s.version = "0.
|
9
|
+
s.version = "0.4.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Dave Sieh"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2015-06-15"
|
13
15
|
s.description = "Invoke code At Your Leisure. ayl is a small framework that simplifies the process of implementing asynchronous method calls in Ruby."
|
14
16
|
s.email = "j0hnds@gmail.com"
|
15
17
|
s.extra_rdoc_files = [
|
@@ -47,32 +49,28 @@ Gem::Specification.new do |s|
|
|
47
49
|
]
|
48
50
|
s.homepage = "http://github.com/j0hnds/ayl"
|
49
51
|
s.licenses = ["MIT"]
|
50
|
-
s.
|
51
|
-
s.rubygems_version = "1.8.23"
|
52
|
+
s.rubygems_version = "2.4.6"
|
52
53
|
s.summary = "Invoke code At Your Leisure"
|
53
54
|
|
54
55
|
if s.respond_to? :specification_version then
|
55
|
-
s.specification_version =
|
56
|
+
s.specification_version = 4
|
56
57
|
|
57
58
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
58
|
-
s.add_development_dependency(%q<rspec>, ["
|
59
|
-
s.add_development_dependency(%q<bundler>, ["
|
60
|
-
s.add_development_dependency(%q<jeweler>, ["
|
61
|
-
s.add_development_dependency(%q<
|
62
|
-
s.add_development_dependency(%q<pry>, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.14"])
|
60
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.10"])
|
61
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
62
|
+
s.add_development_dependency(%q<pry>, ["~> 0.9"])
|
63
63
|
else
|
64
|
-
s.add_dependency(%q<rspec>, ["
|
65
|
-
s.add_dependency(%q<bundler>, ["
|
66
|
-
s.add_dependency(%q<jeweler>, ["
|
67
|
-
s.add_dependency(%q<
|
68
|
-
s.add_dependency(%q<pry>, [">= 0"])
|
64
|
+
s.add_dependency(%q<rspec>, ["~> 2.14"])
|
65
|
+
s.add_dependency(%q<bundler>, ["~> 1.10"])
|
66
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
67
|
+
s.add_dependency(%q<pry>, ["~> 0.9"])
|
69
68
|
end
|
70
69
|
else
|
71
|
-
s.add_dependency(%q<rspec>, ["
|
72
|
-
s.add_dependency(%q<bundler>, ["
|
73
|
-
s.add_dependency(%q<jeweler>, ["
|
74
|
-
s.add_dependency(%q<
|
75
|
-
s.add_dependency(%q<pry>, [">= 0"])
|
70
|
+
s.add_dependency(%q<rspec>, ["~> 2.14"])
|
71
|
+
s.add_dependency(%q<bundler>, ["~> 1.10"])
|
72
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
73
|
+
s.add_dependency(%q<pry>, ["~> 0.9"])
|
76
74
|
end
|
77
75
|
end
|
78
76
|
|
data/lib/ayl/mailer.rb
CHANGED
@@ -6,7 +6,8 @@ module Ayl
|
|
6
6
|
attr_reader :mailer
|
7
7
|
|
8
8
|
def mailer=(mailer)
|
9
|
-
raise "Mailer implement the 'ayl_message(message, exception)' method" if mailer && !mailer.respond_to?(:ayl_message)
|
9
|
+
raise "Mailer must implement the 'ayl_message(message, exception)' method" if mailer && !mailer.respond_to?(:ayl_message)
|
10
|
+
raise "Mailer must implement the 'burying_job(code)' method" if mailer && !mailer.respond_to?(:burying_job)
|
10
11
|
@mailer = mailer
|
11
12
|
end
|
12
13
|
|
@@ -16,6 +17,12 @@ module Ayl
|
|
16
17
|
Ayl::Logger.instance.error("Error sending ayl email message: #{ex.backtrace.join("\n")}")
|
17
18
|
end
|
18
19
|
|
20
|
+
def burying_job(code)
|
21
|
+
mailer.burying_job(code).deliver if mailer && mailer.respond_to?(:burying_job)
|
22
|
+
rescue Exception => ex
|
23
|
+
Ayl::Logger.instance.error("Error sending burying_job email message: #{ex.backtrace.join("\n")}")
|
24
|
+
end
|
25
|
+
|
19
26
|
end
|
20
27
|
|
21
28
|
end
|
data/lib/ayl/message.rb
CHANGED
@@ -3,6 +3,7 @@ module Ayl
|
|
3
3
|
class Message
|
4
4
|
|
5
5
|
attr_accessor :object, :selector, :options, :arguments
|
6
|
+
attr_reader :code
|
6
7
|
|
7
8
|
def initialize(object, selector, opts, *args)
|
8
9
|
@object = object
|
@@ -13,15 +14,20 @@ module Ayl
|
|
13
14
|
|
14
15
|
def self.from_hash(message_hash)
|
15
16
|
raise Ayl::UnrecoverableMessageException, "parameter must be a hash" unless message_hash.is_a?(Hash)
|
16
|
-
raise Ayl::UnrecoverableMessageException, "not a valid message hash" if message_hash[
|
17
|
-
raise Ayl::UnrecoverableMessageException, "No code provided in job: #{job.body}" if message_hash[
|
17
|
+
raise Ayl::UnrecoverableMessageException, "not a valid message hash" if message_hash['type'] != 'ayl' || message_hash['code'].nil?
|
18
|
+
raise Ayl::UnrecoverableMessageException, "No code provided in job: #{job.body}" if message_hash['code'].nil?
|
18
19
|
|
19
|
-
code = message_hash[
|
20
|
+
code = message_hash['code']
|
20
21
|
|
21
22
|
Message.new(nil, nil, MessageOptions.new).tap do | m |
|
22
23
|
m.send(:message_hash=, message_hash)
|
23
24
|
m.send(:code=, code)
|
24
|
-
m.options.failed_job_handler =
|
25
|
+
m.options.failed_job_handler =
|
26
|
+
message_hash['failed_job_handler'] if message_hash['failed_job_handler']
|
27
|
+
m.options.failed_job_count =
|
28
|
+
message_hash['failed_job_count'] if message_hash['failed_job_handler'] == 'decay' && message_hash['failed_job_count']
|
29
|
+
m.options.failed_job_delay =
|
30
|
+
message_hash['failed_job_delay'] if message_hash['failed_job_handler'] == 'decay' && message_hash['failed_job_delay']
|
25
31
|
end
|
26
32
|
|
27
33
|
end
|
@@ -31,11 +37,20 @@ module Ayl
|
|
31
37
|
end
|
32
38
|
|
33
39
|
def to_hash
|
34
|
-
@message_hash ||=
|
40
|
+
@message_hash ||= new_message_hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def new_message_hash
|
44
|
+
{
|
35
45
|
:type => :ayl,
|
36
46
|
:failed_job_handler => options.failed_job_handler,
|
37
47
|
:code => to_rrepr
|
38
|
-
}
|
48
|
+
}.tap do | h |
|
49
|
+
if options.failed_job_handler == 'decay'
|
50
|
+
h[:failed_job_count] = options.failed_job_count
|
51
|
+
h[:failed_job_delay] = options.failed_job_delay
|
52
|
+
end
|
53
|
+
end
|
39
54
|
end
|
40
55
|
|
41
56
|
def evaluate(top_binding)
|
data/lib/ayl/message_options.rb
CHANGED
@@ -2,14 +2,23 @@ module Ayl
|
|
2
2
|
|
3
3
|
class MessageOptions
|
4
4
|
|
5
|
-
OPTIONS = [
|
5
|
+
OPTIONS = [
|
6
|
+
:priority,
|
7
|
+
:fuzz,
|
8
|
+
:delay,
|
9
|
+
:time_to_run,
|
10
|
+
:queue_name,
|
11
|
+
:failed_job_handler,
|
12
|
+
:failed_job_delay,
|
13
|
+
:failed_job_count ]
|
6
14
|
|
7
15
|
VALID_FAILED_JOB_HANDLERS = %W{ bury decay delete }
|
8
16
|
|
9
17
|
attr_accessor *OPTIONS
|
10
18
|
|
11
19
|
class << self
|
12
|
-
attr_accessor :default_priority, :default_fuzz, :default_delay, :default_time_to_run, :default_queue_name
|
20
|
+
attr_accessor :default_priority, :default_fuzz, :default_delay, :default_time_to_run, :default_queue_name
|
21
|
+
attr_accessor :default_failed_job_handler, :default_failed_job_delay, :default_failed_job_count
|
13
22
|
end
|
14
23
|
|
15
24
|
# Set the default options
|
@@ -19,6 +28,8 @@ module Ayl
|
|
19
28
|
self.default_time_to_run = 120
|
20
29
|
self.default_queue_name = 'default'
|
21
30
|
self.default_failed_job_handler = 'delete'
|
31
|
+
self.default_failed_job_delay = 60
|
32
|
+
self.default_failed_job_count = 3
|
22
33
|
|
23
34
|
def initialize(opts=nil)
|
24
35
|
opts ||= {}
|
data/spec/engine_spec.rb
CHANGED
@@ -7,47 +7,47 @@ describe Ayl::Engine do
|
|
7
7
|
it "should return the default (synchronous) engine if no other engines are configured" do
|
8
8
|
engine = Ayl::Engine.get_active_engine
|
9
9
|
|
10
|
-
engine.
|
11
|
-
engine.
|
10
|
+
expect(engine).not_to be_nil
|
11
|
+
expect(engine).to be_an_instance_of(Ayl::Engine)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should allow a different engine to be configured and selected if active" do
|
15
|
-
mock_engine =
|
16
|
-
mock_engine.
|
17
|
-
mock_engine.
|
18
|
-
mock_engine.
|
15
|
+
mock_engine = double("FakeEngine")
|
16
|
+
expect(mock_engine).to receive(:respond_to?).with(:asynchronous?).and_return(true)
|
17
|
+
expect(mock_engine).to receive(:respond_to?).with(:is_connected?).and_return(true)
|
18
|
+
expect(mock_engine).to receive(:is_connected?).and_return(true)
|
19
19
|
|
20
20
|
Ayl::Engine.clear_engines
|
21
21
|
Ayl::Engine.add_engine(mock_engine)
|
22
22
|
|
23
|
-
Ayl::Engine.get_active_engine.
|
23
|
+
expect(Ayl::Engine.get_active_engine).to eq(mock_engine)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should allow a different engine to be configured but select the default if the new one is not active" do
|
27
|
-
mock_engine =
|
28
|
-
mock_engine.
|
29
|
-
mock_engine.
|
30
|
-
mock_engine.
|
27
|
+
mock_engine = double("FakeEngine")
|
28
|
+
expect(mock_engine).to receive(:respond_to?).with(:asynchronous?).and_return(true)
|
29
|
+
expect(mock_engine).to receive(:respond_to?).with(:is_connected?).and_return(true)
|
30
|
+
expect(mock_engine).to receive(:is_connected?).and_return(false)
|
31
31
|
|
32
32
|
Ayl::Engine.clear_engines
|
33
33
|
Ayl::Engine.add_engine(mock_engine)
|
34
34
|
|
35
|
-
Ayl::Engine.get_active_engine.
|
35
|
+
expect(Ayl::Engine.get_active_engine).to eq(Ayl::Engine.instance)
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should raise an exception if a new engine is added that doesn't respond to :asynchronous" do
|
39
|
-
mock_engine =
|
40
|
-
mock_engine.
|
39
|
+
mock_engine = double("FakeEngine")
|
40
|
+
expect(mock_engine).to receive(:respond_to?).with(:asynchronous?).and_return(false)
|
41
41
|
|
42
|
-
|
42
|
+
expect { Ayl::Engine.add_engine(mock_engine) }.to raise_error
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should raise an exception if a new engine is added that doesn't respond to :is_connected" do
|
46
|
-
mock_engine =
|
47
|
-
mock_engine.
|
48
|
-
mock_engine.
|
46
|
+
mock_engine = double("FakeEngine")
|
47
|
+
expect(mock_engine).to receive(:respond_to?).with(:asynchronous?).and_return(true)
|
48
|
+
expect(mock_engine).to receive(:respond_to?).with(:is_connected?).and_return(false)
|
49
49
|
|
50
|
-
|
50
|
+
expect { Ayl::Engine.add_engine(mock_engine) }.to raise_error
|
51
51
|
end
|
52
52
|
|
53
53
|
end
|
@@ -59,26 +59,26 @@ describe Ayl::Engine do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should identify itself as synchronous" do
|
62
|
-
@default_engine.asynchronous
|
62
|
+
expect(@default_engine.asynchronous?).to be false
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should respond that it is connected" do
|
66
|
-
@default_engine.is_connected
|
66
|
+
expect(@default_engine.is_connected?).to be true
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should simply execute the code provided in the message submission" do
|
70
|
-
mock_logger =
|
70
|
+
mock_logger = double("Ayl::Logger")
|
71
71
|
mock_logger.stub(:debug)
|
72
72
|
|
73
73
|
Ayl::Logger.instance.logger = mock_logger
|
74
74
|
|
75
|
-
mock_message =
|
75
|
+
mock_message = double("Ayl::Message")
|
76
76
|
|
77
|
-
mock_worker =
|
78
|
-
mock_worker.
|
79
|
-
Ayl::Worker.
|
77
|
+
mock_worker = double("Ayl::Worker")
|
78
|
+
expect(mock_worker).to receive(:process_message).with(mock_message).and_return(8)
|
79
|
+
expect(Ayl::Worker).to receive(:new).and_return(mock_worker)
|
80
80
|
|
81
|
-
@default_engine.submit(mock_message).
|
81
|
+
expect(@default_engine.submit(mock_message)).to eq(8)
|
82
82
|
end
|
83
83
|
|
84
84
|
end
|
data/spec/extensions_spec.rb
CHANGED
@@ -13,30 +13,32 @@ describe Ayl::Extensions do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should delegate the call to ayl_send to ayl_send_opts" do
|
16
|
-
@cut.
|
16
|
+
expect(@cut).to receive(:ayl_send_opts).with(:something, {}, "arg1", "arg2")
|
17
17
|
@cut.ayl_send(:something, "arg1", "arg2")
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should have the message submit the call from ayl_send_opts" do
|
21
|
-
mock_engine =
|
21
|
+
mock_engine = double("Ayl::Engine")
|
22
22
|
|
23
|
-
Ayl::Engine.
|
23
|
+
expect(Ayl::Engine).to receive(:get_active_engine).and_return(mock_engine)
|
24
24
|
|
25
|
-
mock_message_opts =
|
26
|
-
Ayl::MessageOptions.
|
25
|
+
mock_message_opts = double("Ayl::MessageOptions")
|
26
|
+
expect(Ayl::MessageOptions).to receive(:new).with({}).and_return(mock_message_opts)
|
27
27
|
|
28
|
-
mock_message =
|
28
|
+
mock_message = double("Ayl::Message")
|
29
29
|
|
30
|
-
Ayl::Message.
|
31
|
-
|
30
|
+
expect(Ayl::Message).to receive(:new).
|
31
|
+
with(@cut, :something, mock_message_opts, "arg1", "arg2").
|
32
|
+
and_return(mock_message)
|
33
|
+
expect(mock_engine).to receive(:submit).with(mock_message)
|
32
34
|
|
33
35
|
@cut.ayl_send_opts(:something, {}, "arg1", "arg2")
|
34
36
|
end
|
35
37
|
|
36
38
|
it "should extend a common set up classes" do
|
37
39
|
[ Array, Hash, Module, Numeric, Range, String, Symbol ].each do |c|
|
38
|
-
c.
|
39
|
-
c.
|
40
|
+
expect(c).to respond_to :ayl_send
|
41
|
+
expect(c).to respond_to :ayl_send_opts
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
data/spec/logger_spec.rb
CHANGED
@@ -9,14 +9,14 @@ describe Ayl::Logger do
|
|
9
9
|
context "Logger Configuration" do
|
10
10
|
|
11
11
|
it "should respond with nil if a logger isn't configured" do
|
12
|
-
Ayl::Logger.instance.logger.
|
12
|
+
expect(Ayl::Logger.instance.logger).to be_nil
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should respond with the logger set if the logger is configured" do
|
16
|
-
mock_logger =
|
16
|
+
mock_logger = double("Logger")
|
17
17
|
|
18
18
|
Ayl::Logger.instance.logger = mock_logger
|
19
|
-
Ayl::Logger.instance.logger.
|
19
|
+
expect(Ayl::Logger.instance.logger).to be mock_logger
|
20
20
|
end
|
21
21
|
|
22
22
|
end
|
@@ -24,11 +24,11 @@ describe Ayl::Logger do
|
|
24
24
|
context "Logging" do
|
25
25
|
|
26
26
|
it "should log calls to the logger through std out when no logger is configured" do
|
27
|
-
Kernel.
|
28
|
-
Kernel.
|
29
|
-
Kernel.
|
30
|
-
Kernel.
|
31
|
-
Kernel.
|
27
|
+
expect(Kernel).to receive(:puts).with("DEBUG: Debug message")
|
28
|
+
expect(Kernel).to receive(:puts).with("ERROR: Error message")
|
29
|
+
expect(Kernel).to receive(:puts).with("FATAL: Fatal message")
|
30
|
+
expect(Kernel).to receive(:puts).with("INFO: Info message")
|
31
|
+
expect(Kernel).to receive(:puts).with("WARN: Warn message")
|
32
32
|
|
33
33
|
Ayl::Logger.instance.logger = nil
|
34
34
|
|
@@ -38,12 +38,12 @@ describe Ayl::Logger do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should log calls to the configured logger" do
|
41
|
-
mock_logger =
|
42
|
-
mock_logger.
|
43
|
-
mock_logger.
|
44
|
-
mock_logger.
|
45
|
-
mock_logger.
|
46
|
-
mock_logger.
|
41
|
+
mock_logger = double("Logger")
|
42
|
+
expect(mock_logger).to receive(:debug).with("Debug message")
|
43
|
+
expect(mock_logger).to receive(:error).with("Error message")
|
44
|
+
expect(mock_logger).to receive(:fatal).with("Fatal message")
|
45
|
+
expect(mock_logger).to receive(:info).with("Info message")
|
46
|
+
expect(mock_logger).to receive(:warn).with("Warn message")
|
47
47
|
|
48
48
|
Ayl::Logger.instance.logger = mock_logger
|
49
49
|
|
data/spec/mailer_spec.rb
CHANGED
@@ -8,22 +8,23 @@ describe Ayl::Mailer do
|
|
8
8
|
|
9
9
|
context 'Mailer configuration' do
|
10
10
|
|
11
|
-
context "#
|
11
|
+
context "#deliver_message" do
|
12
12
|
|
13
13
|
it "should respond with nil if a mailer isn't configured" do
|
14
|
-
Ayl::Mailer.instance.mailer.
|
14
|
+
expect(Ayl::Mailer.instance.mailer).to be_nil
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should raise an error if an attempt is made to configure the mailer with an invalid object" do
|
18
|
-
|
18
|
+
expect { Ayl::Mailer.instance.mailer = Object.new }.to raise_error
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should allow a valid mailer to be configured" do
|
22
|
-
mock_mailer =
|
22
|
+
mock_mailer = double("MyMailer")
|
23
23
|
mock_mailer.stub(:ayl_message)
|
24
|
+
mock_mailer.stub(:burying_job)
|
24
25
|
|
25
|
-
|
26
|
-
Ayl::Mailer.instance.mailer.
|
26
|
+
expect { Ayl::Mailer.instance.mailer = mock_mailer }.not_to raise_error
|
27
|
+
expect(Ayl::Mailer.instance.mailer).to be mock_mailer
|
27
28
|
end
|
28
29
|
|
29
30
|
end
|
@@ -39,12 +40,13 @@ describe Ayl::Mailer do
|
|
39
40
|
end
|
40
41
|
|
41
42
|
it "should deliver a message and no stack trace if a valid mailer is configured" do
|
42
|
-
mock_mailer =
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
mock_mailer = double("MyMailer")
|
44
|
+
mock_message = double("MailMessage")
|
45
|
+
expect(mock_message).to receive(:deliver)
|
46
|
+
expect(mock_mailer).to receive(:ayl_message).
|
47
|
+
with('The Message', nil).
|
48
|
+
and_return(mock_message)
|
49
|
+
mock_mailer.stub(:burying_job)
|
48
50
|
|
49
51
|
Ayl::Mailer.instance.mailer = mock_mailer
|
50
52
|
|
@@ -52,12 +54,13 @@ describe Ayl::Mailer do
|
|
52
54
|
end
|
53
55
|
|
54
56
|
it "should deliver a message and a stack trace if a valid mailer is configured" do
|
55
|
-
mock_mailer =
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
mock_mailer = double("MyMailer")
|
58
|
+
mock_message = double("MailMessage")
|
59
|
+
expect(mock_message).to receive(:deliver)
|
60
|
+
expect(mock_mailer).to receive(:ayl_message).
|
61
|
+
with('The Message', 'StackTrace').
|
62
|
+
and_return(mock_message)
|
63
|
+
mock_mailer.stub(:burying_job)
|
61
64
|
|
62
65
|
Ayl::Mailer.instance.mailer = mock_mailer
|
63
66
|
|
@@ -66,6 +69,23 @@ describe Ayl::Mailer do
|
|
66
69
|
|
67
70
|
end
|
68
71
|
|
72
|
+
context '#burying_job' do
|
73
|
+
|
74
|
+
it "should deliver a message if a valid mailer is configured" do
|
75
|
+
mock_mailer = double("MyMailer")
|
76
|
+
mock_message = double("MailMessage")
|
77
|
+
expect(mock_message).to receive(:deliver)
|
78
|
+
expect(mock_mailer).to receive(:burying_job).
|
79
|
+
with('1 + 2').
|
80
|
+
and_return(mock_message)
|
81
|
+
mock_mailer.stub(:ayl_message)
|
82
|
+
|
83
|
+
Ayl::Mailer.instance.mailer = mock_mailer
|
84
|
+
|
85
|
+
Ayl::Mailer.instance.burying_job('1 + 2')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
69
89
|
end
|
70
90
|
|
71
91
|
end
|
@@ -5,12 +5,14 @@ describe Ayl::MessageOptions do
|
|
5
5
|
context "Option Default Accessors" do
|
6
6
|
|
7
7
|
it "should have the correct defaults" do
|
8
|
-
Ayl::MessageOptions.default_priority.
|
9
|
-
Ayl::MessageOptions.default_fuzz.
|
10
|
-
Ayl::MessageOptions.default_delay.
|
11
|
-
Ayl::MessageOptions.default_time_to_run.
|
12
|
-
Ayl::MessageOptions.default_queue_name.
|
13
|
-
Ayl::MessageOptions.default_failed_job_handler.
|
8
|
+
expect(Ayl::MessageOptions.default_priority).to eq(512)
|
9
|
+
expect(Ayl::MessageOptions.default_fuzz).to eq(0)
|
10
|
+
expect(Ayl::MessageOptions.default_delay).to eq(0)
|
11
|
+
expect(Ayl::MessageOptions.default_time_to_run).to eq(120)
|
12
|
+
expect(Ayl::MessageOptions.default_queue_name).to eq('default')
|
13
|
+
expect(Ayl::MessageOptions.default_failed_job_handler).to eq('delete')
|
14
|
+
expect(Ayl::MessageOptions.default_failed_job_count).to eq(3)
|
15
|
+
expect(Ayl::MessageOptions.default_failed_job_delay).to eq(60)
|
14
16
|
end
|
15
17
|
|
16
18
|
it "should reflect the changes if changes have been made" do
|
@@ -20,13 +22,17 @@ describe Ayl::MessageOptions do
|
|
20
22
|
Ayl::MessageOptions.default_time_to_run = 1
|
21
23
|
Ayl::MessageOptions.default_queue_name = 'different'
|
22
24
|
Ayl::MessageOptions.default_failed_job_handler = 'bury'
|
23
|
-
|
24
|
-
Ayl::MessageOptions.
|
25
|
-
|
26
|
-
Ayl::MessageOptions.
|
27
|
-
Ayl::MessageOptions.
|
28
|
-
Ayl::MessageOptions.
|
29
|
-
Ayl::MessageOptions.
|
25
|
+
Ayl::MessageOptions.default_failed_job_count = 8
|
26
|
+
Ayl::MessageOptions.default_failed_job_delay = 3600
|
27
|
+
|
28
|
+
expect(Ayl::MessageOptions.default_priority).to eq(256)
|
29
|
+
expect(Ayl::MessageOptions.default_fuzz).to eq(18)
|
30
|
+
expect(Ayl::MessageOptions.default_delay).to eq(2300)
|
31
|
+
expect(Ayl::MessageOptions.default_time_to_run).to eq(1)
|
32
|
+
expect(Ayl::MessageOptions.default_queue_name).to eq('different')
|
33
|
+
expect(Ayl::MessageOptions.default_failed_job_handler).to eq('bury')
|
34
|
+
expect(Ayl::MessageOptions.default_failed_job_count).to eq(8)
|
35
|
+
expect(Ayl::MessageOptions.default_failed_job_delay).to eq(3600)
|
30
36
|
end
|
31
37
|
|
32
38
|
end
|
@@ -36,66 +42,77 @@ describe Ayl::MessageOptions do
|
|
36
42
|
it "should respond with the correct defaults when initialized with an empty hash" do
|
37
43
|
mo = Ayl::MessageOptions.new({})
|
38
44
|
|
39
|
-
mo.priority.
|
40
|
-
mo.fuzz.
|
41
|
-
mo.delay.
|
42
|
-
mo.time_to_run.
|
43
|
-
mo.queue_name.
|
44
|
-
mo.failed_job_handler.
|
45
|
+
expect(mo.priority).to eq(Ayl::MessageOptions.default_priority)
|
46
|
+
expect(mo.fuzz).to eq(Ayl::MessageOptions.default_fuzz)
|
47
|
+
expect(mo.delay).to eq(Ayl::MessageOptions.default_delay)
|
48
|
+
expect(mo.time_to_run).to eq(Ayl::MessageOptions.default_time_to_run)
|
49
|
+
expect(mo.queue_name).to eq(Ayl::MessageOptions.default_queue_name)
|
50
|
+
expect(mo.failed_job_handler).to eq(Ayl::MessageOptions.default_failed_job_handler)
|
51
|
+
expect(mo.failed_job_count).to eq(Ayl::MessageOptions.default_failed_job_count)
|
52
|
+
expect(mo.failed_job_delay).to eq(Ayl::MessageOptions.default_failed_job_delay)
|
45
53
|
end
|
46
54
|
|
47
55
|
it "should respond with the correct defaults when initialized with nil" do
|
48
56
|
mo = Ayl::MessageOptions.new(nil)
|
49
57
|
|
50
|
-
mo.priority.
|
51
|
-
mo.fuzz.
|
52
|
-
mo.delay.
|
53
|
-
mo.time_to_run.
|
54
|
-
mo.queue_name.
|
55
|
-
mo.failed_job_handler.
|
58
|
+
expect(mo.priority).to eq(Ayl::MessageOptions.default_priority)
|
59
|
+
expect(mo.fuzz).to eq(Ayl::MessageOptions.default_fuzz)
|
60
|
+
expect(mo.delay).to eq(Ayl::MessageOptions.default_delay)
|
61
|
+
expect(mo.time_to_run).to eq(Ayl::MessageOptions.default_time_to_run)
|
62
|
+
expect(mo.queue_name).to eq(Ayl::MessageOptions.default_queue_name)
|
63
|
+
expect(mo.failed_job_handler).to eq(Ayl::MessageOptions.default_failed_job_handler)
|
64
|
+
expect(mo.failed_job_count).to eq(Ayl::MessageOptions.default_failed_job_count)
|
65
|
+
expect(mo.failed_job_delay).to eq(Ayl::MessageOptions.default_failed_job_delay)
|
56
66
|
end
|
57
67
|
|
58
68
|
it "should respond with the correct defaults when initialized with no parameter" do
|
59
69
|
mo = Ayl::MessageOptions.new()
|
60
70
|
|
61
|
-
mo.priority.
|
62
|
-
mo.fuzz.
|
63
|
-
mo.delay.
|
64
|
-
mo.time_to_run.
|
65
|
-
mo.queue_name.
|
66
|
-
mo.failed_job_handler.
|
71
|
+
expect(mo.priority).to eq(Ayl::MessageOptions.default_priority)
|
72
|
+
expect(mo.fuzz).to eq(Ayl::MessageOptions.default_fuzz)
|
73
|
+
expect(mo.delay).to eq(Ayl::MessageOptions.default_delay)
|
74
|
+
expect(mo.time_to_run).to eq(Ayl::MessageOptions.default_time_to_run)
|
75
|
+
expect(mo.queue_name).to eq(Ayl::MessageOptions.default_queue_name)
|
76
|
+
expect(mo.failed_job_handler).to eq(Ayl::MessageOptions.default_failed_job_handler)
|
77
|
+
expect(mo.failed_job_count).to eq(Ayl::MessageOptions.default_failed_job_count)
|
78
|
+
expect(mo.failed_job_delay).to eq(Ayl::MessageOptions.default_failed_job_delay)
|
67
79
|
end
|
68
80
|
|
69
81
|
it "should respond with the correct values when all are specified in the options" do
|
70
|
-
opts = { :
|
82
|
+
opts = { priority: 22, fuzz: 88, delay: 99, time_to_run: 11, queue_name: 'stub',
|
83
|
+
failed_job_handler: 'decay', failed_job_count: 12, failed_job_delay: 14 }
|
71
84
|
mo = Ayl::MessageOptions.new(opts)
|
72
85
|
|
73
|
-
mo.priority.
|
74
|
-
mo.fuzz.
|
75
|
-
mo.delay.
|
76
|
-
mo.time_to_run.
|
77
|
-
mo.queue_name.
|
78
|
-
mo.failed_job_handler.
|
86
|
+
expect(mo.priority).to eq(opts[:priority])
|
87
|
+
expect(mo.fuzz).to eq(opts[:fuzz])
|
88
|
+
expect(mo.delay).to eq(opts[:delay])
|
89
|
+
expect(mo.time_to_run).to eq(opts[:time_to_run])
|
90
|
+
expect(mo.queue_name).to eq(opts[:queue_name])
|
91
|
+
expect(mo.failed_job_handler).to eq(opts[:failed_job_handler])
|
92
|
+
expect(mo.failed_job_count).to eq(opts[:failed_job_count])
|
93
|
+
expect(mo.failed_job_delay).to eq(opts[:failed_job_delay])
|
79
94
|
end
|
80
95
|
|
81
96
|
it "should respond with the correct values when some values are specified in the options" do
|
82
97
|
opts = { :priority => 22, :fuzz => 88, :delay => 99 }
|
83
98
|
mo = Ayl::MessageOptions.new(opts)
|
84
99
|
|
85
|
-
mo.priority.
|
86
|
-
mo.fuzz.
|
87
|
-
mo.delay.
|
88
|
-
mo.time_to_run.
|
89
|
-
mo.queue_name.
|
90
|
-
mo.failed_job_handler.
|
100
|
+
expect(mo.priority).to eq(opts[:priority])
|
101
|
+
expect(mo.fuzz).to eq(opts[:fuzz])
|
102
|
+
expect(mo.delay).to eq(opts[:delay])
|
103
|
+
expect(mo.time_to_run).to eq(Ayl::MessageOptions.default_time_to_run)
|
104
|
+
expect(mo.queue_name).to eq(Ayl::MessageOptions.default_queue_name)
|
105
|
+
expect(mo.failed_job_handler).to eq(Ayl::MessageOptions.default_failed_job_handler)
|
106
|
+
expect(mo.failed_job_count).to eq(Ayl::MessageOptions.default_failed_job_count)
|
107
|
+
expect(mo.failed_job_delay).to eq(Ayl::MessageOptions.default_failed_job_delay)
|
91
108
|
end
|
92
109
|
|
93
110
|
it "should raise an exception when an invalid option is provided in the hash" do
|
94
|
-
|
111
|
+
expect { Ayl::MessageOptions.new({:bob => 'something' }) }.to raise_error
|
95
112
|
end
|
96
113
|
|
97
114
|
it "should raise an exception when a non-hash is provided as a parameter" do
|
98
|
-
|
115
|
+
expect { Ayl::MessageOptions.new(14) }.to raise_error
|
99
116
|
end
|
100
117
|
|
101
118
|
end
|
data/spec/message_spec.rb
CHANGED
@@ -10,6 +10,8 @@ describe Ayl::Message do
|
|
10
10
|
Ayl::MessageOptions.default_time_to_run = 120
|
11
11
|
Ayl::MessageOptions.default_queue_name = 'default'
|
12
12
|
Ayl::MessageOptions.default_failed_job_handler = 'decay'
|
13
|
+
Ayl::MessageOptions.default_failed_job_count = 3
|
14
|
+
Ayl::MessageOptions.default_failed_job_delay = 60
|
13
15
|
end
|
14
16
|
|
15
17
|
context "Initialization" do
|
@@ -18,20 +20,20 @@ describe Ayl::Message do
|
|
18
20
|
options = Ayl::MessageOptions.new
|
19
21
|
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
20
22
|
|
21
|
-
m.object.
|
22
|
-
m.selector.
|
23
|
-
m.options.
|
24
|
-
m.arguments.
|
23
|
+
expect(m.object).to eq "object"
|
24
|
+
expect(m.selector).to eq :method_name
|
25
|
+
expect(m.options).to eq options
|
26
|
+
expect(m.arguments).to eq [ "arg1", "arg2" ]
|
25
27
|
end
|
26
28
|
|
27
29
|
it "should accept an object, selector options and no arguments" do
|
28
30
|
options = Ayl::MessageOptions.new
|
29
31
|
m = Ayl::Message.new("object", :method_name, options)
|
30
32
|
|
31
|
-
m.object.
|
32
|
-
m.selector.
|
33
|
-
m.options.
|
34
|
-
m.arguments.
|
33
|
+
expect(m.object).to eq "object"
|
34
|
+
expect(m.selector).to eq :method_name
|
35
|
+
expect(m.options).to eq options
|
36
|
+
expect(m.arguments).to eq [ ]
|
35
37
|
end
|
36
38
|
|
37
39
|
end
|
@@ -41,13 +43,13 @@ describe Ayl::Message do
|
|
41
43
|
it "should generate code when arguments are present" do
|
42
44
|
options = Ayl::MessageOptions.new
|
43
45
|
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
44
|
-
m.to_rrepr.
|
46
|
+
expect(m.to_rrepr).to eq "\"object\".method_name(\"arg1\", \"arg2\")"
|
45
47
|
end
|
46
48
|
|
47
49
|
it "should generate code when no arguments are present" do
|
48
50
|
options = Ayl::MessageOptions.new
|
49
51
|
m = Ayl::Message.new("object", :method_name, options)
|
50
|
-
m.to_rrepr.
|
52
|
+
expect(m.to_rrepr).to eq "\"object\".method_name()"
|
51
53
|
end
|
52
54
|
|
53
55
|
end
|
@@ -57,75 +59,81 @@ describe Ayl::Message do
|
|
57
59
|
it "should package up the message into a hash" do
|
58
60
|
options = Ayl::MessageOptions.new
|
59
61
|
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
60
|
-
m.to_hash.
|
62
|
+
expect(m.to_hash).to eq({ :type => :ayl, :failed_job_handler => 'decay', :failed_job_count => 3, :failed_job_delay => 60, :code => "\"object\".method_name(\"arg1\", \"arg2\")" })
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should package up the message into a hash but not with decay" do
|
66
|
+
options = Ayl::MessageOptions.new({failed_job_handler: 'delete'})
|
67
|
+
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
68
|
+
expect(m.to_hash).to eq({ :type => :ayl, :failed_job_handler => 'delete', :code => "\"object\".method_name(\"arg1\", \"arg2\")" })
|
61
69
|
end
|
62
70
|
|
63
71
|
it "should package up the message into a hash when the decay failed job has been set" do
|
64
72
|
options = Ayl::MessageOptions.new
|
65
73
|
options.failed_job_handler = 'decay'
|
66
74
|
m = Ayl::Message.new("object", :method_name, options, "arg1", "arg2")
|
67
|
-
m.to_hash.
|
75
|
+
expect(m.to_hash).to eq({ :type => :ayl, :failed_job_handler => 'decay', :failed_job_count => 3, :failed_job_delay => 60, :code => "\"object\".method_name(\"arg1\", \"arg2\")" })
|
68
76
|
end
|
69
77
|
|
70
78
|
it "should be able to create a message from a hash with code that has arguments" do
|
71
|
-
m_hash = {
|
79
|
+
m_hash = { 'type' => 'ayl', 'code' => "\"object\".method_name(\"arg1\", \"arg2\")" }
|
72
80
|
m = Ayl::Message.from_hash(m_hash)
|
73
|
-
m.options.is_a?(Ayl::MessageOptions).
|
74
|
-
m.to_hash.
|
81
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
82
|
+
expect(m.to_hash).to eq m_hash
|
75
83
|
end
|
76
84
|
|
77
85
|
it "should be able to create a message from a hash with code that has no arguments" do
|
78
|
-
m_hash = {
|
86
|
+
m_hash = { 'type' => 'ayl', 'code' => "\"object\".method_name()" }
|
79
87
|
m = Ayl::Message.from_hash(m_hash)
|
80
|
-
m.options.is_a?(Ayl::MessageOptions).
|
81
|
-
m.to_hash.
|
88
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
89
|
+
expect(m.to_hash).to eq m_hash
|
82
90
|
end
|
83
91
|
|
84
92
|
it "should be able to create a message from a hash with code that has no arguments and no parens" do
|
85
|
-
m_hash = {
|
93
|
+
m_hash = { 'type' => 'ayl', 'code' => "\"object\".method_name" }
|
86
94
|
m = Ayl::Message.from_hash(m_hash)
|
87
|
-
m.options.is_a?(Ayl::MessageOptions).
|
88
|
-
m.to_hash.
|
95
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
96
|
+
expect(m.to_hash).to eq m_hash
|
89
97
|
end
|
90
98
|
|
91
99
|
it "should be able to create a message from a hash with code that has one arguments with multiple parens" do
|
92
|
-
m_hash = {
|
100
|
+
m_hash = { 'type' => 'ayl', 'code' => "\"object\".method_name('string'.length())" }
|
93
101
|
m = Ayl::Message.from_hash(m_hash)
|
94
|
-
m.options.is_a?(Ayl::MessageOptions).
|
95
|
-
m.to_hash.
|
102
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
103
|
+
expect(m.to_hash).to be m_hash
|
96
104
|
end
|
97
105
|
|
98
106
|
# Sample._ayl_after_create(Sample.find(106))
|
99
107
|
it "should be able to create a message from a hash with code that has one arguments with multiple parens" do
|
100
|
-
m_hash = {
|
108
|
+
m_hash = { 'type' => 'ayl', 'code' => "String._ayl_after_create(2.to_s(2))" }
|
101
109
|
m = Ayl::Message.from_hash(m_hash)
|
102
|
-
m.options.is_a?(Ayl::MessageOptions).
|
103
|
-
m.to_hash.
|
110
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
111
|
+
expect(m.to_hash).to be m_hash
|
104
112
|
end
|
105
113
|
|
106
114
|
it "should create a message with decay_failed job set to false if not in the original hash" do
|
107
115
|
Ayl::MessageOptions.default_failed_job_handler = 'delete'
|
108
|
-
m_hash = {
|
116
|
+
m_hash = { 'type' => 'ayl', 'code' => "String._ayl_after_create(2.to_s(2))" }
|
109
117
|
m = Ayl::Message.from_hash(m_hash)
|
110
|
-
m.options.is_a?(Ayl::MessageOptions).
|
111
|
-
m.to_hash.
|
112
|
-
m.options.failed_job_handler.
|
118
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
119
|
+
expect(m.to_hash).to be m_hash
|
120
|
+
expect(m.options.failed_job_handler).to eq 'delete'
|
113
121
|
end
|
114
122
|
|
115
123
|
it "should create a message with decay_failed job set to false if in the original hash as false" do
|
116
|
-
m_hash = {
|
124
|
+
m_hash = { 'type' => 'ayl', 'failed_job_handler' => 'delete', 'code' => "String._ayl_after_create(2.to_s(2))" }
|
117
125
|
m = Ayl::Message.from_hash(m_hash)
|
118
|
-
m.options.is_a?(Ayl::MessageOptions).
|
119
|
-
m.to_hash.
|
120
|
-
m.options.failed_job_handler.
|
126
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
127
|
+
expect(m.to_hash).to be m_hash
|
128
|
+
expect(m.options.failed_job_handler).to eq 'delete'
|
121
129
|
end
|
122
130
|
|
123
131
|
it "should create a message with decay_failed job set to true if in the original hash as true" do
|
124
|
-
m_hash = {
|
132
|
+
m_hash = { 'type' => 'ayl', 'failed_job_handler' => 'decay', 'code' => "String._ayl_after_create(2.to_s(2))" }
|
125
133
|
m = Ayl::Message.from_hash(m_hash)
|
126
|
-
m.options.is_a?(Ayl::MessageOptions).
|
127
|
-
m.to_hash.
|
128
|
-
m.options.failed_job_handler.
|
134
|
+
expect(m.options.is_a?(Ayl::MessageOptions)).to be true
|
135
|
+
expect(m.to_hash).to be m_hash
|
136
|
+
expect(m.options.failed_job_handler).to eq 'decay'
|
129
137
|
end
|
130
138
|
|
131
139
|
|
@@ -136,7 +144,7 @@ describe Ayl::Message do
|
|
136
144
|
it "should evaluate the code associated with the message" do
|
137
145
|
array_of_nums = [ 3, 2, 8, 1 ]
|
138
146
|
m = Ayl::Message.new(array_of_nums, :length, Ayl::MessageOptions.new)
|
139
|
-
m.evaluate(binding).
|
147
|
+
expect(m.evaluate(binding)).to be 4
|
140
148
|
end
|
141
149
|
|
142
150
|
end
|
data/spec/worker_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe Ayl::Worker do
|
|
11
11
|
|
12
12
|
it "should raise an exception if receive is called on an engine that is not asynchronous" do
|
13
13
|
Kernel.stub(:puts)
|
14
|
-
|
14
|
+
expect { @worker.process_messages }.to raise_error(RuntimeError, "synchronous worker cannot receive messages")
|
15
15
|
end
|
16
16
|
|
17
17
|
end
|
metadata
CHANGED
@@ -1,96 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ayl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dave Sieh
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.
|
19
|
+
version: '2.14'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.
|
26
|
+
version: '2.14'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: bundler
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
33
|
+
version: '1.10'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
40
|
+
version: '1.10'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: jeweler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: '2.0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rcov
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
54
|
+
version: '2.0'
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
56
|
name: pry
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
|
-
- -
|
59
|
+
- - "~>"
|
84
60
|
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
61
|
+
version: '0.9'
|
86
62
|
type: :development
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
|
-
- -
|
66
|
+
- - "~>"
|
92
67
|
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version: '0.9'
|
94
69
|
description: Invoke code At Your Leisure. ayl is a small framework that simplifies
|
95
70
|
the process of implementing asynchronous method calls in Ruby.
|
96
71
|
email: j0hnds@gmail.com
|
@@ -100,8 +75,8 @@ extra_rdoc_files:
|
|
100
75
|
- LICENSE.txt
|
101
76
|
- README.rdoc
|
102
77
|
files:
|
103
|
-
- .document
|
104
|
-
- .rspec
|
78
|
+
- ".document"
|
79
|
+
- ".rspec"
|
105
80
|
- Gemfile
|
106
81
|
- Gemfile.lock
|
107
82
|
- LICENSE.txt
|
@@ -130,29 +105,25 @@ files:
|
|
130
105
|
homepage: http://github.com/j0hnds/ayl
|
131
106
|
licenses:
|
132
107
|
- MIT
|
108
|
+
metadata: {}
|
133
109
|
post_install_message:
|
134
110
|
rdoc_options: []
|
135
111
|
require_paths:
|
136
112
|
- lib
|
137
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
114
|
requirements:
|
140
|
-
- -
|
115
|
+
- - ">="
|
141
116
|
- !ruby/object:Gem::Version
|
142
117
|
version: '0'
|
143
|
-
segments:
|
144
|
-
- 0
|
145
|
-
hash: 831016271210020708
|
146
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
119
|
requirements:
|
149
|
-
- -
|
120
|
+
- - ">="
|
150
121
|
- !ruby/object:Gem::Version
|
151
122
|
version: '0'
|
152
123
|
requirements: []
|
153
124
|
rubyforge_project:
|
154
|
-
rubygems_version:
|
125
|
+
rubygems_version: 2.4.6
|
155
126
|
signing_key:
|
156
|
-
specification_version:
|
127
|
+
specification_version: 4
|
157
128
|
summary: Invoke code At Your Leisure
|
158
129
|
test_files: []
|