responsive_service 0.0.3 → 0.1.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 +4 -4
- data/Rakefile +5 -0
- data/lib/responsive_service/response.rb +31 -0
- data/lib/responsive_service/responsive_service.rb +6 -3
- data/lib/responsive_service/version.rb +1 -1
- data/lib/responsive_service.rb +1 -1
- data/spec/lib/responsive_service/response_spec.rb +104 -0
- data/spec/lib/responsive_service/responsive_service_spec.rb +13 -6
- metadata +5 -5
- data/lib/responsive_service/responder.rb +0 -16
- data/spec/lib/responsive_service/responder_spec.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d201035ae2b1931491a0cdefb73867927a105026
|
4
|
+
data.tar.gz: e18b6ce1c12afc5b857985d6d172837970d57d56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c24e42a63f3fe65f9600afb95b700e261aa301c1a1ca7d6463d880cf348b79fec0f4eaee4bdbbec1d9094ece7471c630bd5b20059d2d7ad85a54d686dd950b8
|
7
|
+
data.tar.gz: 725f27ea43686a14e3bd3ab6eb9655e595a90b29f605458543b8b7f261ad7b4597d3872b35c49bc29141be431aaaaabd8734712e4ffa12a2b2c9700184e41475
|
data/Rakefile
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module ResponsiveService
|
2
|
+
class Response
|
3
|
+
attr_reader :type, :message, :context, :valid_states
|
4
|
+
|
5
|
+
def initialize(type, message=nil, context=nil, valid_states=nil)
|
6
|
+
@valid_states = Array(valid_states || self.class.class_valid_states)
|
7
|
+
raise "Invalid type of response: #{type}" unless (@valid_states.empty? || @valid_states.include?(type))
|
8
|
+
@type = type
|
9
|
+
@context = context
|
10
|
+
@message = message
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.valid_states(*args)
|
14
|
+
@class_valid_states = Array(args)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.class_valid_states
|
18
|
+
@class_valid_states
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing(method, *args, &block)
|
22
|
+
if valid_states.empty? || valid_states.include?(method)
|
23
|
+
yield if method == type
|
24
|
+
else
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Responder = Response
|
31
|
+
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
module ResponsiveService
|
2
2
|
class ResponsiveService
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :response_factory
|
4
|
+
|
5
|
+
# Deprecated
|
6
|
+
alias_method :responder_factory, :response_factory
|
4
7
|
|
5
8
|
def initialize(dependencies={})
|
6
|
-
@
|
9
|
+
@response_factory = dependencies[:response_factory] || dependencies.fetch(:responder_factory) { Response }
|
7
10
|
end
|
8
11
|
|
9
12
|
def call(&block)
|
10
|
-
yield
|
13
|
+
yield response_factory.new(:unimplemented, "A ResponsiveService should implement the call method.\nThe call method should perform the relevant work of the service and yield a ResponsiveService::Response object.\n")
|
11
14
|
end
|
12
15
|
end
|
13
16
|
end
|
data/lib/responsive_service.rb
CHANGED
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module ResponsiveService
|
4
|
+
describe Response do
|
5
|
+
subject(:response) { Response.new(type) }
|
6
|
+
let(:type) { :success }
|
7
|
+
before { Response.instance_variable_set :@class_valid_states, nil }
|
8
|
+
|
9
|
+
it 'yields when sent :success with a type of :success' do
|
10
|
+
expect { |b| response.success(&b) }.to yield_control
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'does not yield when sent :failure with a type of :success' do
|
14
|
+
expect { |b| response.failure(&b) }.not_to yield_control
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when initialized with a message' do
|
18
|
+
subject(:response) { Response.new(type, message) }
|
19
|
+
let(:message) { double(:message) }
|
20
|
+
|
21
|
+
specify { expect(response.message).to eq message }
|
22
|
+
|
23
|
+
context 'when additionally initialized with a context' do
|
24
|
+
subject(:response) { Response.new(type, message, context) }
|
25
|
+
let(:context) { double(:context) }
|
26
|
+
|
27
|
+
specify { expect(response.context).to eq context }
|
28
|
+
|
29
|
+
context 'when additionally initiaized with a set of valid states' do
|
30
|
+
subject(:response) { Response.new(type, message, context, valid_states) }
|
31
|
+
let(:valid_states) { [:success, :failure] }
|
32
|
+
|
33
|
+
it 'yields when sent :success with a type of :success' do
|
34
|
+
expect { |b| response.success(&b) }.to yield_control
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does not yield when sent :failure with a type of :success' do
|
38
|
+
expect { |b| response.failure(&b) }.not_to yield_control
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'throws method missing exception if sent a non-valid state' do
|
42
|
+
expect { |b| response.foo(&b) }.to raise_exception
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'reflects the valid_states' do
|
46
|
+
expect(response.valid_states).to eq [:success, :failure]
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when initialized with an invalid type' do
|
50
|
+
let(:type) { :foo }
|
51
|
+
|
52
|
+
it 'raises an exception' do
|
53
|
+
expect { response }.to raise_exception('Invalid type of response: foo')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'backwards compatibility' do
|
61
|
+
it 'sets Responder as an alias for Response' do
|
62
|
+
expect(Responder).to eq Response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '.valid_states' do
|
67
|
+
context 'when set to an array of states' do
|
68
|
+
before { Response.valid_states(:success, :failure) }
|
69
|
+
|
70
|
+
context 'when the response type is :success' do
|
71
|
+
subject(:response) { Response.new(:success) }
|
72
|
+
|
73
|
+
it 'yields when sent :success' do
|
74
|
+
expect { |b| response.success(&b) }.to yield_control
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'does not yield when sent :failure' do
|
78
|
+
expect { |b| response.failure(&b) }.not_to yield_control
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'throws method missing exception if sent a non-valid state' do
|
82
|
+
expect { |b| response.foo(&b) }.to raise_exception
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when initialized with an invalid type' do
|
87
|
+
subject(:response) { Response.new(:foo) }
|
88
|
+
|
89
|
+
it 'raises an exception' do
|
90
|
+
expect { response }.to raise_exception('Invalid type of response: foo')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#valid_states' do
|
95
|
+
subject(:response) { Response.new(:success) }
|
96
|
+
|
97
|
+
it 'reflects the valid_states' do
|
98
|
+
expect(response.valid_states).to eq [:success, :failure]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -3,14 +3,21 @@ require 'spec_helper'
|
|
3
3
|
module ResponsiveService
|
4
4
|
describe ResponsiveService do
|
5
5
|
subject(:service) { ResponsiveService.new(dependencies) }
|
6
|
-
let(:dependencies) { {
|
7
|
-
let(:
|
8
|
-
let(:
|
6
|
+
let(:dependencies) { { response_factory: response_factory } }
|
7
|
+
let(:response_factory) { double :response_factory, new: nil }
|
8
|
+
let(:response) { double :response }
|
9
9
|
|
10
10
|
describe '#call' do
|
11
|
-
before {
|
12
|
-
it 'yields with a
|
13
|
-
expect { |b| service.call(&b) }.to yield_with_args(
|
11
|
+
before { response_factory.stub(:new).with(:unimplemented, "A ResponsiveService should implement the call method.\nThe call method should perform the relevant work of the service and yield a ResponsiveService::Response object.\n").and_return(response) }
|
12
|
+
it 'yields with a response indicating instructions' do
|
13
|
+
expect { |b| service.call(&b) }.to yield_with_args(response)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Deprecated
|
18
|
+
describe '#responder_factory' do
|
19
|
+
it 'is just a pointer to response_factory' do
|
20
|
+
expect(service.responder_factory).to eq service.response_factory
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: responsive_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alexpeachey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,11 +80,11 @@ files:
|
|
80
80
|
- README.md
|
81
81
|
- Rakefile
|
82
82
|
- lib/responsive_service.rb
|
83
|
-
- lib/responsive_service/
|
83
|
+
- lib/responsive_service/response.rb
|
84
84
|
- lib/responsive_service/responsive_service.rb
|
85
85
|
- lib/responsive_service/version.rb
|
86
86
|
- responsive_service.gemspec
|
87
|
-
- spec/lib/responsive_service/
|
87
|
+
- spec/lib/responsive_service/response_spec.rb
|
88
88
|
- spec/lib/responsive_service/responsive_service_spec.rb
|
89
89
|
- spec/spec_helper.rb
|
90
90
|
homepage: http://github.com/alexpeachey/responsive_service
|
@@ -112,6 +112,6 @@ signing_key:
|
|
112
112
|
specification_version: 4
|
113
113
|
summary: Easy to use responsive service pattern
|
114
114
|
test_files:
|
115
|
-
- spec/lib/responsive_service/
|
115
|
+
- spec/lib/responsive_service/response_spec.rb
|
116
116
|
- spec/lib/responsive_service/responsive_service_spec.rb
|
117
117
|
- spec/spec_helper.rb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module ResponsiveService
|
2
|
-
class Responder
|
3
|
-
|
4
|
-
attr_reader :type, :message, :context
|
5
|
-
|
6
|
-
def initialize(type, message=nil, context=nil)
|
7
|
-
@type = type
|
8
|
-
@context = context
|
9
|
-
@message = message
|
10
|
-
end
|
11
|
-
|
12
|
-
def method_missing(method, *args, &block)
|
13
|
-
yield if method == type
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module ResponsiveService
|
4
|
-
describe Responder do
|
5
|
-
subject(:responder) { Responder.new(type) }
|
6
|
-
let(:type) { :success }
|
7
|
-
|
8
|
-
it 'yields when sent :success with a type of :success' do
|
9
|
-
expect { |b| responder.success(&b) }.to yield_control
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'does not yield when sent :failure with a type of :success' do
|
13
|
-
expect { |b| responder.failure(&b) }.to_not yield_control
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'when initialized with a message' do
|
17
|
-
subject(:responder) { Responder.new(type, message) }
|
18
|
-
let(:message) { double(:message) }
|
19
|
-
|
20
|
-
specify { expect(responder.message).to eq message }
|
21
|
-
|
22
|
-
context 'when additionally initialized with a context' do
|
23
|
-
subject(:responder) { Responder.new(type, message, context) }
|
24
|
-
let(:context) { double(:context) }
|
25
|
-
|
26
|
-
specify { expect(responder.context).to eq context }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|