Module: DecoratesBeforeRendering
- Defined in:
- lib/context_exposer/patch/decorates_before_rendering.rb
Defined Under Namespace
Classes: DecoratorError, FindModelError
Instance Method Summary
collapse
Instance Method Details
#__attempt_to_decorate_(obj) ⇒ Object
93
94
95
96
97
98
99
100
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 93
def __attempt_to_decorate_ obj
return obj if obj.respond_to?(:decorate)
if obj
src = __src_for__(obj)
decorator = __normalized_decorator_for__(src)
__do_decoration_ decorator, obj
end
end
|
#__attempt_to_decorate_list_(objs) ⇒ Object
87
88
89
90
91
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 87
def __attempt_to_decorate_list_ objs
[objs].flatten.compact.map do |obj|
__attempt_to_decorate_(obj)
end
end
|
#__auto_decorate_exposed_ones_ ⇒ Object
def render *args
__auto_decorate_exposed_ones_
super(*args)
end
14
15
16
17
18
19
20
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 14
def __auto_decorate_exposed_ones_
__decorate_ivars__
__decorate_exposed_ones_
__decorate_ctx_exposed_ones_
rescue StandardError => e
__handle_decorate_error_(e)
end
|
#__ctx_exposed_ones_ ⇒ Object
42
43
44
45
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 42
def __ctx_exposed_ones_
return [] unless _has_exposure_storage?
@__ctx_exposed_ones_ ||= _cxt_exposed_keys
end
|
#__decorate_ctx_exposed_ones_ ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 71
def __decorate_ctx_exposed_ones_
__ctx_exposed_ones_.each do |name|
ivar_name = "@#{name}"
objs = ctx.send(name)
decorated = case objs
when Array
__attempt_to_decorate_list_ objs
else
__attempt_to_decorate_ objs
end
ctx.send(:instance_variable_set, ivar_name, decorated) end
end
|
#__decorate_error!(decorator) ⇒ Object
117
118
119
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 117
def __decorate_error! decorator
raise DecoratorError, "Decorator: #{decorator} must have a #decorate method"
end
|
#__decorate_exposed_ones_ ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 55
def __decorate_exposed_ones_
__exposed_ones_.each do |name|
ivar_name = "@#{name}"
objs = send(name)
decorated = case objs
when Array
__attempt_to_decorate_list_ objs
else
__attempt_to_decorate_ objs
end
send(:instance_variable_set, ivar_name, decorated) end
end
|
#__decorate_ivars__ ⇒ Object
159
160
161
162
163
164
165
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 159
def __decorate_ivars__
return unless __has_decorates?
__validate_decorates_present_
return if __decorates_blank?
__decorates__ivars
__decorates_collection_ivars__
end
|
#__decorates__ivars ⇒ Object
184
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 184
def __decorates__ivars
if !__decorates__.nil?
__decorate_ivar_names__(__decorates__) do |ivar_name, ivar, options|
decorator = options.key?(:with) ? options.fetch(:with) : __decorator_for__(ivar)
if decorator
decorated = __do_decoration_(decorator, ivar)
instance_variable_set(ivar_name, decorated)
end
end
end
end
|
#__decorates_blank? ⇒ Boolean
171
172
173
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 171
def __decorates_blank?
__decorates__.blank? and __decorates_collection__.blank?
end
|
#__decorates_collection_ivars__ ⇒ Object
175
176
177
178
179
180
181
182
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 175
def __decorates_collection_ivars__
if !__decorates_collection__.nil?
__decorate_ivar_names__(__decorates_collection__) do |ivar_name, ivar, options|
decorated = options.fetch(:with).decorate_collection(ivar)
instance_variable_set(ivar_name, decorated) if decorated
end
end
end
|
#__decorator_for__(obj) ⇒ Object
143
144
145
146
147
148
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 143
def __decorator_for__(obj)
return obj.decorator(self) if obj.respond_to? :decorator
__decorator_name_for__(obj).constantize
rescue FindModelError => e
nil
end
|
#__decorator_name_for__(obj) ⇒ Object
150
151
152
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 150
def __decorator_name_for__(obj)
"#{__model_name_for__(obj)}Decorator"
end
|
#__do_decoration_(decorator, obj) ⇒ Object
102
103
104
105
106
107
108
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 102
def __do_decoration_ decorator, obj
return obj if obj.respond_to?(:decorate)
return if !decorator || !obj
__validate_decorator!(decorator)
decorator.decorate(obj)
end
|
#__exposed_ones_ ⇒ Object
29
30
31
32
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 29
def __exposed_ones_
return [] unless _has_exposures?
@__exposed_ones_ ||= _exposure_keys
end
|
#__handle_decorate_error_(e) ⇒ Object
22
23
24
25
26
27
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 22
def __handle_decorate_error_ e
if defined?(::Rails) && (Rails.respond_to? :logger)
Rails.logger.warn 'decorates_before_render: auto_decorate error: #{e}'
end
end
|
#__has_decorates? ⇒ Boolean
167
168
169
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 167
def __has_decorates?
respond_to?(:__decorates__)
end
|
#__model_name_for__(obj) ⇒ Object
154
155
156
157
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 154
def __model_name_for__(obj)
return obj.model_name if obj.respond_to?(:model_name)
raise FindModelError, "#{obj} does not have an associated model"
end
|
#__normalized_decorator_for__(obj) ⇒ Object
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 130
def __normalized_decorator_for__(obj)
decorator = __decorator_for__(obj)
case decorator
when String
decorator.constantize.new obj
when Class
decorator.new obj
else
decorator
end
end
|
#__src_for__(obj) ⇒ Object
121
122
123
124
125
126
127
128
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 121
def __src_for__ obj
case obj
when Class
obj.class
else
obj
end
end
|
#__validate_decorator!(decorator) ⇒ Object
111
112
113
114
115
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 111
def __validate_decorator! decorator
unless decorator.respond_to? :decorate
raise DecoratorError, "Decorator: #{decorator} must have a #decorate method"
end
end
|
#_cxt_exposed_keys ⇒ Object
47
48
49
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 47
def _cxt_exposed_keys
self.class._exposure_storage.keys
end
|
#_exposure_keys ⇒ Object
34
35
36
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 34
def _exposure_keys
self.class._exposures.keys
end
|
#_has_exposure_storage? ⇒ Boolean
51
52
53
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 51
def _has_exposure_storage?
self.class.respond_to? :_exposure_storage
end
|
#_has_exposures? ⇒ Boolean
38
39
40
|
# File 'lib/context_exposer/patch/decorates_before_rendering.rb', line 38
def _has_exposures?
self.class.respond_to? :_exposures
end
|