generated from dxw/rails-template
/
activity_attributes_columns.rb
52 lines (45 loc) · 1.09 KB
/
activity_attributes_columns.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Export::ActivityAttributesColumns
IGNORED_ATTRIBUTES = [
:created_at,
:updated_at,
:id,
:organisation_id,
:form_state,
:extending_organisation_id,
:geography,
:parent_id
]
DYNAMIC_ATTRIBUTES = [
:benefitting_region,
:flow,
:finance,
:tied_status
]
def initialize(activities:, attributes:)
@activities = activities
@attributes = clean_attrbutes(attributes)
end
def headers
@attributes.map { |att| I18n.t("activerecord.attributes.activity.#{att}") }
end
def rows
return [] if @activities.empty?
@activities.map { |activity|
values = @attributes.map { |att|
ActivityCsvPresenter.new(activity).send(att)
}
[activity.id, values]
}.to_h
end
private
def clean_attrbutes(attributes)
attributes.reject do |att|
next if DYNAMIC_ATTRIBUTES.include?(att)
attribute_error(att) unless Activity.has_attribute?(att)
IGNORED_ATTRIBUTES.include?(att)
end
end
def attribute_error(attribute)
raise ActiveRecord::UnknownAttributeError.new(Activity, attribute)
end
end