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.
79
80
81
|
# File 'lib/polist/service.rb', line 79
def initialize(params = {})
self.params = params
end
|
Instance Attribute Details
#params ⇒ Object
Returns the value of attribute params.
36
37
38
|
# File 'lib/polist/service.rb', line 36
def params
@params
end
|
Class Method Details
.__clear_middlewares__ ⇒ Object
75
76
77
|
# File 'lib/polist/service.rb', line 75
def self.__clear_middlewares__
@__polist_middlewares__ = []
end
|
.__polist_middlewares__ ⇒ Object
62
63
64
|
# File 'lib/polist/service.rb', line 62
def self.__polist_middlewares__
@__polist_middlewares__ ||= []
end
|
.build(*args) ⇒ Object
44
45
46
|
# File 'lib/polist/service.rb', line 44
def self.build(*args)
new(*args)
end
|
.call(*args, &block) ⇒ Object
48
49
50
|
# File 'lib/polist/service.rb', line 48
def self.call(*args, &block)
build(*args).tap { |service| service.call(&block) }
end
|
.inherited(klass) ⇒ Object
38
39
40
41
42
|
# File 'lib/polist/service.rb', line 38
def self.inherited(klass)
klass.const_set(:Failure, Class.new(klass::Failure))
klass.prepend(MiddlewareCaller)
klass.instance_variable_set(:@__polist_middlewares__, __polist_middlewares__.dup)
end
|
.param(*names) ⇒ Object
56
57
58
59
60
|
# File 'lib/polist/service.rb', line 56
def self.param(*names)
names.each do |name|
define_method(name) { params.fetch(name) }
end
end
|
.register_middleware(klass) ⇒ Object
66
67
68
69
70
71
72
73
|
# File 'lib/polist/service.rb', line 66
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, &block) ⇒ Object
52
53
54
|
# File 'lib/polist/service.rb', line 52
def self.run(*args, &block)
build(*args).tap { |service| service.run(&block) }
end
|
Instance Method Details
#call ⇒ Object
Should be implemented in subclasses
84
|
# File 'lib/polist/service.rb', line 84
def call; end
|
#failure? ⇒ Boolean
97
98
99
|
# File 'lib/polist/service.rb', line 97
def failure?
!!@failure
end
|
#response ⇒ Object
93
94
95
|
# File 'lib/polist/service.rb', line 93
def response
@response
end
|
#run(&block) ⇒ Object
86
87
88
89
90
91
|
# File 'lib/polist/service.rb', line 86
def run(&block)
call(&block)
rescue self.class::Failure => error
@response = error.response
@failure = true
end
|
#success? ⇒ Boolean
101
102
103
|
# File 'lib/polist/service.rb', line 101
def success?
!failure?
end
|
#validate! ⇒ Object
105
106
107
|
# File 'lib/polist/service.rb', line 105
def validate!
error!(form.errors.to_h.values.first) unless form.valid?
end
|