light-service 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/light-service/context.rb +3 -1
- data/lib/light-service/organizer.rb +7 -1
- data/lib/light-service/version.rb +1 -1
- data/light-service.gemspec +1 -0
- data/spec/context_spec.rb +46 -26
- data/spec/organizer_spec.rb +38 -6
- metadata +4 -9
@@ -10,10 +10,12 @@ module LightService
|
|
10
10
|
def initialize(context={}, outcome=::LightService::Outcomes::SUCCESS, message='')
|
11
11
|
@outcome, @message = outcome, message
|
12
12
|
context.to_hash.each {|k,v| self[k] = v}
|
13
|
+
self
|
13
14
|
end
|
14
15
|
|
15
16
|
def self.make(context={})
|
16
|
-
|
17
|
+
return context if context.is_a?(Context)
|
18
|
+
self.new(context, ::LightService::Outcomes::SUCCESS, '')
|
17
19
|
end
|
18
20
|
|
19
21
|
def add_to_context(values)
|
@@ -15,7 +15,13 @@ module LightService
|
|
15
15
|
self
|
16
16
|
end
|
17
17
|
|
18
|
-
def reduce(actions
|
18
|
+
def reduce(*actions)
|
19
|
+
raise "No action(s) were provided" if actions.empty?
|
20
|
+
|
21
|
+
if actions.is_a? Array
|
22
|
+
actions.flatten!
|
23
|
+
end
|
24
|
+
|
19
25
|
actions.reduce(@context) { |context, action| action.execute(context) }
|
20
26
|
end
|
21
27
|
end
|
data/light-service.gemspec
CHANGED
@@ -7,6 +7,7 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.description = %q{A service skeleton with an emphasis on simplicity}
|
8
8
|
gem.summary = %q{A service skeleton with an emphasis on simplicity}
|
9
9
|
gem.homepage = ""
|
10
|
+
gem.license = "MIT"
|
10
11
|
|
11
12
|
gem.files = `git ls-files`.split($\)
|
12
13
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/spec/context_spec.rb
CHANGED
@@ -6,24 +6,27 @@ module LightService
|
|
6
6
|
|
7
7
|
it "initializes the object with default arguments" do
|
8
8
|
service_result = Context.new({test: 1})
|
9
|
-
|
10
|
-
service_result.
|
11
|
-
service_result
|
9
|
+
|
10
|
+
expect(service_result).to be_success
|
11
|
+
expect(service_result.message).to eq ''
|
12
|
+
expect(service_result[:test]).to eq 1
|
12
13
|
end
|
13
14
|
|
14
15
|
it "initializes the object with the context" do
|
15
|
-
service_result = Context.new.tap { |o| o.add_to_context({:
|
16
|
-
|
17
|
-
service_result.
|
18
|
-
service_result
|
16
|
+
service_result = Context.new.tap { |o| o.add_to_context({test: 1})}
|
17
|
+
|
18
|
+
expect(service_result).to be_success
|
19
|
+
expect(service_result.message).to eq ''
|
20
|
+
expect(service_result[:test]).to eq 1
|
19
21
|
end
|
20
22
|
|
21
23
|
describe ".make" do
|
22
24
|
it "initializes the object with make" do
|
23
|
-
service_result = Context.make({:
|
24
|
-
|
25
|
-
service_result.
|
26
|
-
service_result
|
25
|
+
service_result = Context.make({test: 1})
|
26
|
+
|
27
|
+
expect(service_result).to be_success
|
28
|
+
expect(service_result.message).to eq ""
|
29
|
+
expect(service_result[:test]).to eq 1
|
27
30
|
end
|
28
31
|
|
29
32
|
context "when passing valid parameters" do
|
@@ -45,6 +48,15 @@ module LightService
|
|
45
48
|
let(:invalid_params) { [] }
|
46
49
|
it { should raise_error(NoMethodError) }
|
47
50
|
end
|
51
|
+
|
52
|
+
context "data is a context" do
|
53
|
+
let(:original_context) { Context.new }
|
54
|
+
|
55
|
+
it "returns the same context object" do
|
56
|
+
new_context = Context.make(original_context)
|
57
|
+
expect(new_context.object_id).to eq(original_context.object_id)
|
58
|
+
end
|
59
|
+
end
|
48
60
|
end
|
49
61
|
|
50
62
|
describe "#to_hash" do
|
@@ -59,31 +71,39 @@ module LightService
|
|
59
71
|
end
|
60
72
|
|
61
73
|
it "allows to set success" do
|
62
|
-
subject.set_success!(
|
63
|
-
subject.should be_success
|
64
|
-
subject.message.should == "the success"
|
65
|
-
end
|
74
|
+
subject.set_success!('the success')
|
66
75
|
|
67
|
-
|
68
|
-
subject.
|
69
|
-
subject.
|
76
|
+
expect(subject).to be_success
|
77
|
+
expect(subject).not_to be_failure
|
78
|
+
expect(subject.message) == 'the success'
|
70
79
|
end
|
71
80
|
|
72
81
|
it "allows to set failure" do
|
73
|
-
subject.set_failure!(
|
74
|
-
|
75
|
-
subject.
|
82
|
+
subject.set_failure!('the failure')
|
83
|
+
|
84
|
+
expect(subject).not_to be_success
|
85
|
+
expect(subject).to be_failure
|
86
|
+
expect(subject.message).to eq('the failure')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "allows to set skip_all" do
|
90
|
+
subject.skip_all!('the reason to skip')
|
91
|
+
|
92
|
+
expect(subject).to be_skip_all
|
93
|
+
expect(subject).to be_success
|
94
|
+
expect(subject).not_to be_failure
|
95
|
+
expect(subject.message).to eq('the reason to skip')
|
76
96
|
end
|
77
97
|
|
78
98
|
it "lets setting a group of context values" do
|
79
|
-
subject.to_hash.should include(:
|
99
|
+
subject.to_hash.should include(test: 1)
|
80
100
|
subject.to_hash.keys.length.should == 1
|
81
101
|
|
82
|
-
subject.add_to_context(:
|
102
|
+
subject.add_to_context(test: 1, two: 2)
|
83
103
|
|
84
|
-
subject.to_hash.keys.length.
|
85
|
-
subject.to_hash.
|
86
|
-
subject.to_hash.
|
104
|
+
expect(subject.to_hash.keys.length).to eq(2)
|
105
|
+
expect(subject.to_hash).to include(test: 1)
|
106
|
+
expect(subject.to_hash).to include(two: 2)
|
87
107
|
end
|
88
108
|
end
|
89
109
|
|
data/spec/organizer_spec.rb
CHANGED
@@ -2,21 +2,27 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe LightService::Organizer do
|
4
4
|
class AnAction; end
|
5
|
+
class AnotherAction; end
|
5
6
|
|
6
7
|
class AnOrganizer
|
7
8
|
include LightService::Organizer
|
8
9
|
|
9
10
|
def self.some_method(user)
|
10
|
-
with(user: user).reduce
|
11
|
+
with(user: user).reduce([AnAction, AnotherAction])
|
11
12
|
end
|
12
13
|
|
13
14
|
def self.some_method_with(user)
|
14
|
-
context = LightService::Context.
|
15
|
-
with(context).reduce
|
15
|
+
context = LightService::Context.make(user: user)
|
16
|
+
with(context).reduce(AnAction, AnotherAction)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.some_method_with_no_actions(user)
|
20
|
+
context = LightService::Context.make(user: user)
|
21
|
+
with(context).reduce
|
16
22
|
end
|
17
23
|
end
|
18
24
|
|
19
|
-
let
|
25
|
+
let(:context) { ::LightService::Context.make(user: user) }
|
20
26
|
let(:user) { double(:user) }
|
21
27
|
|
22
28
|
context "when #with is called with hash" do
|
@@ -24,11 +30,37 @@ describe LightService::Organizer do
|
|
24
30
|
AnAction.should_receive(:execute) \
|
25
31
|
.with(context) \
|
26
32
|
.and_return context
|
33
|
+
AnotherAction.should_receive(:execute) \
|
34
|
+
.with(context) \
|
35
|
+
.and_return context
|
27
36
|
end
|
37
|
+
|
28
38
|
it "creates a Context" do
|
29
|
-
|
39
|
+
result = AnOrganizer.some_method(user)
|
40
|
+
expect(result).to eq(context)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when #with is called with Context" do
|
45
|
+
before do
|
46
|
+
AnAction.should_receive(:execute) \
|
47
|
+
.with(context) \
|
48
|
+
.and_return context
|
49
|
+
AnotherAction.should_receive(:execute) \
|
50
|
+
.with(context) \
|
51
|
+
.and_return context
|
52
|
+
end
|
53
|
+
|
54
|
+
it "creates a Context" do
|
55
|
+
result = AnOrganizer.some_method_with(user)
|
56
|
+
expect(result).to eq(context)
|
57
|
+
end
|
58
|
+
end
|
30
59
|
|
31
|
-
|
60
|
+
context "when no Actions are specified" do
|
61
|
+
it "throws a Runtime error" do
|
62
|
+
expect { AnOrganizer.some_method_with_no_actions(user) }.to \
|
63
|
+
raise_error RuntimeError, "No action(s) were provided"
|
32
64
|
end
|
33
65
|
end
|
34
66
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: light-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -95,7 +95,8 @@ files:
|
|
95
95
|
- spec/sample/tax/provides_free_shipping_action.rb
|
96
96
|
- spec/spec_helper.rb
|
97
97
|
homepage: ''
|
98
|
-
licenses:
|
98
|
+
licenses:
|
99
|
+
- MIT
|
99
100
|
post_install_message:
|
100
101
|
rdoc_options: []
|
101
102
|
require_paths:
|
@@ -106,18 +107,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
107
|
- - ! '>='
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '0'
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
hash: -863764600829619710
|
112
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
111
|
none: false
|
114
112
|
requirements:
|
115
113
|
- - ! '>='
|
116
114
|
- !ruby/object:Gem::Version
|
117
115
|
version: '0'
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
hash: -863764600829619710
|
121
116
|
requirements: []
|
122
117
|
rubyforge_project:
|
123
118
|
rubygems_version: 1.8.23
|