forked from amatsuda/active_decorator
/
decorator.rb
37 lines (35 loc) · 910 Bytes
/
decorator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module ActiveDecorator
def self.decorate_if_model(obj)
case obj
when ActiveRecord::Base
ActiveDecorator.decorate obj
when ActiveRecord::Relation
class << obj
def to_a_with_decorator
arr = to_a_without_decorator
ActiveDecorator.decorate_all arr
end
alias_method_chain :to_a, :decorator
end
when Array
obj.each do |r|
ActiveDecorator.decorate_if_model r
end
end
end
def self.decorate_all(models)
return models if models.empty?
decorator_name = "#{models.first.class.name}Decorator"
k = decorator_name.constantize
models.each do |m|
m.extend k unless m.is_a? k
end
rescue NameError
end
def self.decorate(model)
decorator_name = "#{model.class.name}Decorator"
k = decorator_name.constantize
model.extend k unless model.is_a? k
rescue NameError
end
end