Class: Polist::Service
- Inherits:
-
Object
show all
- Defined in:
- lib/polist/service.rb
Defined Under Namespace
Modules: MiddlewareCaller
Classes: Failure, Form, Middleware
Constant Summary
collapse
- MiddlewareError =
Class.new(StandardError)
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(params = {}) ⇒ Service
Returns a new instance of Service.
74
75
76
|
# File 'lib/polist/service.rb', line 74
def initialize(params = {})
self.params = params
end
|
Instance Attribute Details
#params ⇒ Object
Returns the value of attribute params.
32
33
34
|
# File 'lib/polist/service.rb', line 32
def params
@params
end
|
Class Method Details
.__clear_middlewares__ ⇒ Object
70
71
72
|
# File 'lib/polist/service.rb', line 70
def self.__clear_middlewares__
@__polist_middlewares__ = []
end
|
.__polist_middlewares__ ⇒ Object
57
58
59
|
# File 'lib/polist/service.rb', line 57
def self.__polist_middlewares__
@__polist_middlewares__ ||= []
end
|
.build(*args) ⇒ Object
39
40
41
|
# File 'lib/polist/service.rb', line 39
def self.build(*args)
new(*args)
end
|
.call(*args) ⇒ Object
43
44
45
|
# File 'lib/polist/service.rb', line 43
def self.call(*args)
build(*args).tap(&:call)
end
|
.inherited(klass) ⇒ Object
34
35
36
37
|
# File 'lib/polist/service.rb', line 34
def self.inherited(klass)
klass.const_set(:Failure, Class.new(klass::Failure))
klass.prepend MiddlewareCaller
end
|
.param(*names) ⇒ Object
51
52
53
54
55
|
# File 'lib/polist/service.rb', line 51
def self.param(*names)
names.each do |name|
define_method(name) { params.fetch(name) }
end
end
|
.register_middleware(klass) ⇒ Object
61
62
63
64
65
66
67
68
|
# File 'lib/polist/service.rb', line 61
def self.register_middleware(klass)
unless klass < Polist::Service::Middleware
raise MiddlewareError,
"Middleware #{klass} should be a subclass of Polist::Service::Middleware"
end
__polist_middlewares__ << klass
end
|
.run(*args) ⇒ Object
47
48
49
|
# File 'lib/polist/service.rb', line 47
def self.run(*args)
build(*args).tap(&:run)
end
|
Instance Method Details
#call ⇒ Object
Should be implemented in subclasses
79
|
# File 'lib/polist/service.rb', line 79
def call; end
|
#failure? ⇒ Boolean
92
93
94
|
# File 'lib/polist/service.rb', line 92
def failure?
!!@failure
end
|
#response ⇒ Object
88
89
90
|
# File 'lib/polist/service.rb', line 88
def response
@response
end
|
#run ⇒ Object
81
82
83
84
85
86
|
# File 'lib/polist/service.rb', line 81
def run
call
rescue self.class::Failure => error
@response = error.response
@failure = true
end
|
#success? ⇒ Boolean
96
97
98
|
# File 'lib/polist/service.rb', line 96
def success?
!failure?
end
|
#validate! ⇒ Object
100
101
102
|
# File 'lib/polist/service.rb', line 100
def validate!
error!(form.errors.to_h.values.first) unless form.valid?
end
|