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.
80
81
82
|
# File 'lib/polist/service.rb', line 80
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
76
77
78
|
# File 'lib/polist/service.rb', line 76
def self.__clear_middlewares__
@__polist_middlewares__ = []
end
|
.__polist_middlewares__ ⇒ Object
63
64
65
|
# File 'lib/polist/service.rb', line 63
def self.__polist_middlewares__
@__polist_middlewares__ ||= []
end
|
.build(*args, **options) ⇒ Object
45
46
47
|
# File 'lib/polist/service.rb', line 45
def self.build(*args, **options)
new(*args, **options)
end
|
.call(*args, **options, &block) ⇒ Object
49
50
51
|
# File 'lib/polist/service.rb', line 49
def self.call(*args, **options, &block)
build(*args, **options).tap { |service| service.call(&block) }
end
|
.inherited(klass) ⇒ Object
38
39
40
41
42
43
|
# 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)
super
end
|
.param(*names) ⇒ Object
57
58
59
60
61
|
# File 'lib/polist/service.rb', line 57
def self.param(*names)
names.each do |name|
define_method(name) { params.fetch(name) }
end
end
|
.register_middleware(klass) ⇒ Object
67
68
69
70
71
72
73
74
|
# File 'lib/polist/service.rb', line 67
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, **options, &block) ⇒ Object
53
54
55
|
# File 'lib/polist/service.rb', line 53
def self.run(*args, **options, &block)
build(*args, **options).tap { |service| service.run(&block) }
end
|
Instance Method Details
#call ⇒ Object
Should be implemented in subclasses
85
|
# File 'lib/polist/service.rb', line 85
def call; end
|
#failure? ⇒ Boolean
98
99
100
|
# File 'lib/polist/service.rb', line 98
def failure?
!!@failure
end
|
#response ⇒ Object
94
95
96
|
# File 'lib/polist/service.rb', line 94
def response
@response
end
|
#run(&block) ⇒ Object
87
88
89
90
91
92
|
# File 'lib/polist/service.rb', line 87
def run(&block)
call(&block)
rescue self.class::Failure => error
@response = error.response
@failure = true
end
|
#success? ⇒ Boolean
102
103
104
|
# File 'lib/polist/service.rb', line 102
def success?
!failure?
end
|
#validate! ⇒ Object
106
107
108
109
110
111
|
# File 'lib/polist/service.rb', line 106
def validate!
return if form.valid?
first_error = form.errors.to_hash.values.first
first_error = first_error.first if first_error.is_a?(Array)
error!(first_error)
end
|