ayl 0.3.0 → 0.4.0
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.
- 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: []
|