application_service 0.2.0 → 0.2.2
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/VERSION +1 -1
- data/application_service.gemspec +3 -3
- data/lib/application_service.rb +31 -8
- data/spec/application_service_spec.rb +108 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5098843852847896293de30d2f5c4fecad1b3102
|
4
|
+
data.tar.gz: e0155d8b8a81b6b603446550cdc6828cbddc8d2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f7e81a4f71400cc1439cd684b2332cc847afec95e351fe8b35e050e3424b0d7206a3b3b5581fe5e6637b1f5b4cae287f9337376df79b9fe2564fe36fa393312
|
7
|
+
data.tar.gz: cef7d3d2b4cfc15fe1fe8d396b5921be18a4fc75f1d5330e496594d14ff14c41eb60ca4e8c82540615ed952f7f20ba47cba50df72046becdf9468e22d0522cc7
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/application_service.gemspec
CHANGED
@@ -2,16 +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: application_service 0.2.
|
5
|
+
# stub: application_service 0.2.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "application_service"
|
9
|
-
s.version = "0.2.
|
9
|
+
s.version = "0.2.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Nathan Woodhull"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-11-18"
|
15
15
|
s.description = "A service layer scaffold for rails apps extracted from Agra"
|
16
16
|
s.email = "woodhull@gmail.com"
|
17
17
|
s.extra_rdoc_files = [
|
data/lib/application_service.rb
CHANGED
@@ -15,6 +15,9 @@ class ApplicationService
|
|
15
15
|
|
16
16
|
args.each do |arg|
|
17
17
|
set_callback callback, :before, arg, options
|
18
|
+
if options.fetch(:skip_on_admin_save, false)
|
19
|
+
skip_callback callback, :before, arg, if: -> { @on_admin_save }
|
20
|
+
end
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -23,6 +26,9 @@ class ApplicationService
|
|
23
26
|
|
24
27
|
args.each do |arg|
|
25
28
|
set_callback callback, :after, arg, options
|
29
|
+
if options.fetch(:skip_on_admin_save, false)
|
30
|
+
skip_callback callback, :after, arg, if: -> { @on_admin_save }
|
31
|
+
end
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
@@ -78,29 +84,46 @@ class ApplicationService
|
|
78
84
|
end
|
79
85
|
end
|
80
86
|
|
87
|
+
def admin_save(obj)
|
88
|
+
@obj = obj
|
89
|
+
|
90
|
+
@on_admin_save = true
|
91
|
+
save_method = @obj.respond_to?(:admin_save) ? :admin_save : :save
|
92
|
+
run_callbacks :save do
|
93
|
+
if @obj.new_record?
|
94
|
+
result = create(save_method)
|
95
|
+
else
|
96
|
+
result = update(save_method)
|
97
|
+
end
|
98
|
+
result
|
99
|
+
end
|
100
|
+
ensure
|
101
|
+
@on_admin_save = false
|
102
|
+
end
|
103
|
+
|
81
104
|
private
|
82
105
|
|
83
|
-
def create!
|
106
|
+
def create!(save_method=:save!)
|
84
107
|
run_callbacks :create do
|
85
|
-
@obj.
|
108
|
+
@obj.send(save_method)
|
86
109
|
end
|
87
110
|
end
|
88
111
|
|
89
|
-
def create
|
112
|
+
def create(save_method=:save)
|
90
113
|
run_callbacks :create do
|
91
|
-
@obj.
|
114
|
+
@obj.send(save_method)
|
92
115
|
end
|
93
116
|
end
|
94
117
|
|
95
|
-
def update
|
118
|
+
def update(save_method=:save)
|
96
119
|
run_callbacks :update do
|
97
|
-
@obj.
|
120
|
+
@obj.send(save_method)
|
98
121
|
end
|
99
122
|
end
|
100
123
|
|
101
|
-
def update!
|
124
|
+
def update!(save_method=:save!)
|
102
125
|
run_callbacks :update do
|
103
|
-
@obj.
|
126
|
+
@obj.send(save_method)
|
104
127
|
end
|
105
128
|
end
|
106
129
|
|
@@ -89,6 +89,114 @@ describe ApplicationService do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
describe '#admin_save' do
|
93
|
+
it "should trigger admin_save if defined on object" do
|
94
|
+
obj = double(new_record?: true)
|
95
|
+
expect(obj).to receive(:admin_save)
|
96
|
+
|
97
|
+
subject.admin_save(obj)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should trigger regular save if admin_save not defined on object" do
|
101
|
+
obj = double(new_record?: true)
|
102
|
+
expect(obj).to receive(:save)
|
103
|
+
|
104
|
+
subject.admin_save(obj)
|
105
|
+
end
|
106
|
+
|
107
|
+
describe 'callbacks' do
|
108
|
+
let(:object) { double(new_record?: false, save: true) }
|
109
|
+
|
110
|
+
context 'invoke' do
|
111
|
+
it "should invoke callbacks if skip_on_admin_save is false" do
|
112
|
+
service_klass = Class.new(ApplicationService) do
|
113
|
+
before :save, :before_save_callback, skip_on_admin_save: false
|
114
|
+
after :save, :after_save_callback, skip_on_admin_save: false
|
115
|
+
end
|
116
|
+
|
117
|
+
service = service_klass.new
|
118
|
+
expect(service).to receive(:before_save_callback)
|
119
|
+
expect(service).to receive(:after_save_callback)
|
120
|
+
|
121
|
+
service.admin_save(object)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should invoke callbacks if skip_on_admin_save option missing" do
|
125
|
+
service_klass = Class.new(ApplicationService) do
|
126
|
+
before :save, :before_save_callback
|
127
|
+
after :save, :after_save_callback
|
128
|
+
end
|
129
|
+
|
130
|
+
service = service_klass.new
|
131
|
+
expect(service).to receive(:before_save_callback)
|
132
|
+
expect(service).to receive(:after_save_callback)
|
133
|
+
|
134
|
+
service.admin_save(object)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should invoke callbacks on save even if skip_on_admin_save is true" do
|
138
|
+
service_klass = Class.new(ApplicationService) do
|
139
|
+
before :save, :before_save_callback, skip_on_admin_save: true
|
140
|
+
after :save, :after_save_callback, skip_on_admin_save: true
|
141
|
+
end
|
142
|
+
|
143
|
+
service = service_klass.new
|
144
|
+
expect(service).to receive(:before_save_callback)
|
145
|
+
expect(service).to receive(:after_save_callback)
|
146
|
+
|
147
|
+
service.save(object)
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should invoke callbacks on save even if admin_save raises exception" do
|
151
|
+
service_klass = Class.new(ApplicationService) do
|
152
|
+
before :save, :before_save_callback, skip_on_admin_save: true
|
153
|
+
after :save, :after_save_callback, skip_on_admin_save: true
|
154
|
+
end
|
155
|
+
|
156
|
+
expect(object).to receive(:save).and_raise(StandardError)
|
157
|
+
|
158
|
+
service = service_klass.new
|
159
|
+
expect(service).to receive(:before_save_callback).once
|
160
|
+
expect(service).to receive(:after_save_callback).once
|
161
|
+
|
162
|
+
expect { service.admin_save(object) }.to raise_error
|
163
|
+
|
164
|
+
expect(object).to receive(:save).and_return(true)
|
165
|
+
|
166
|
+
service.save(object)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'skip' do
|
171
|
+
it "should skip callbacks if skip_on_admin_save for create" do
|
172
|
+
service_klass = Class.new(ApplicationService) do
|
173
|
+
before :create, :before_create_callback, skip_on_admin_save: true
|
174
|
+
after :create, :after_create_callback, skip_on_admin_save: true
|
175
|
+
end
|
176
|
+
|
177
|
+
service = service_klass.new
|
178
|
+
expect(service).not_to receive(:before_create_callback)
|
179
|
+
expect(service).not_to receive(:after_create_callback)
|
180
|
+
|
181
|
+
service.admin_save(object)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should skip callbacks if skip_on_admin_save for update" do
|
185
|
+
service_klass = Class.new(ApplicationService) do
|
186
|
+
before :save, :before_save_callback, skip_on_admin_save: true
|
187
|
+
after :save, :after_save_callback, skip_on_admin_save: true
|
188
|
+
end
|
189
|
+
|
190
|
+
service = service_klass.new
|
191
|
+
expect(service).not_to receive(:before_save_callback)
|
192
|
+
expect(service).not_to receive(:after_save_callback)
|
193
|
+
|
194
|
+
service.admin_save(object)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
92
200
|
describe 'callbacks' do
|
93
201
|
let(:object) { double(new_record?: false, save: true) }
|
94
202
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: application_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Woodhull
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|