Class: Repor::Serializers::FormFieldSerializer
- Inherits:
-
BaseSerializer
show all
- Includes:
- ActionView::Helpers::FormOptionsHelper, ActionView::Helpers::FormTagHelper
- Defined in:
- lib/repor/serializers/form_field_serializer.rb
Instance Attribute Summary
#report
Class Method Summary
collapse
Instance Method Summary
collapse
#axis_summary, #filter_summary, #human_aggregator_label, #human_aggregator_value_label, #human_category_value_label, #human_dimension_label, #human_dimension_value_label, #human_number_value_label, #human_time_value_label, #initialize, #record_type, #time_formats
Class Method Details
.deep_deblank(hash, depth = 0) ⇒ Object
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 11
def self.deep_deblank(hash, depth = 0)
raise "very deep hash or, more likely, internal error" if depth > 100
hash.delete_if do |key, value|
case value
when Hash then deep_deblank(value, depth + 1)
when Array then value.select!(&:present?)
else value
end.blank?
end
end
|
.sanitize_params(hash) ⇒ Object
7
8
9
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 7
def self.sanitize_params(hash)
deep_deblank(hash.deep_dup)
end
|
Instance Method Details
#aggregator_field ⇒ Object
37
38
39
40
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 37
def aggregator_field
select_tag("#{prefix}[aggregator]",
options_for_select(aggregator_options, report.aggregator_name))
end
|
#aggregator_options ⇒ Object
29
30
31
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 29
def aggregator_options
@agg_opts ||= report.aggregators.map { |name, agg| [human_aggregator_label(agg), name] }
end
|
#axis_fields ⇒ Object
52
53
54
55
56
57
58
59
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 52
def axis_fields
"<div class='#{axis_fields_class}'>
Show me #{aggregator_field}
by #{primary_grouper_field}
and #{secondary_grouper_field}
for
</div>".html_safe
end
|
#axis_fields_class ⇒ Object
119
120
121
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 119
def axis_fields_class
'repor-axis-fields'
end
|
#bin_dimension_field(dimension) ⇒ Object
85
86
87
88
89
90
91
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 85
def bin_dimension_field(dimension)
fields_for(dimension) do
fields = "#{bin_min_field(dimension)} to #{bin_max_field(dimension)}"
fields += " by #{bin_step_field(dimension)}" if dimension.grouping?
fields
end
end
|
#bin_max_field(dimension) ⇒ Object
98
99
100
101
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 98
def bin_max_field(dimension)
text_field_tag("#{prefix_for(dimension)}[only][max]",
dimension.filter_max, placeholder: bin_max_placeholder(dimension))
end
|
#bin_max_placeholder(dimension) ⇒ Object
129
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 129
def bin_max_placeholder(dimension); 'max'; end
|
#bin_min_field(dimension) ⇒ Object
93
94
95
96
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 93
def bin_min_field(dimension)
text_field_tag("#{prefix_for(dimension)}[only][min]",
dimension.filter_min, placeholder: bin_min_placeholder(dimension))
end
|
#bin_min_placeholder(dimension) ⇒ Object
130
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 130
def bin_min_placeholder(dimension); 'min'; end
|
#bin_step_field(dimension) ⇒ Object
103
104
105
106
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 103
def bin_step_field(dimension)
text_field_tag("#{prefix_for(dimension)}[bin_width]",
dimension.params[:bin_width], placeholder: bin_step_placeholder(dimension))
end
|
#bin_step_placeholder(dimension) ⇒ Object
131
132
133
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 131
def bin_step_placeholder(dimension)
dimension.bin_width.inspect
end
|
#category_dimension_field(dimension) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 72
def category_dimension_field(dimension)
options = [[nil, nil]]
dimension.all_values.each do |value|
next if value.nil?
options << [human_dimension_value_label(dimension, value), value]
end
fields_for(dimension) do
select_tag("#{prefix_for(dimension)}[only]",
options_for_select(options, dimension.filter_values.first))
end
end
|
#css_class(s) ⇒ Object
143
144
145
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 143
def css_class(s)
s.to_s.demodulize.underscore.dasherize
end
|
#dimension_fields ⇒ Object
61
62
63
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 61
def dimension_fields
report.dimensions.map { |name, dimension| field_for(dimension) }.compact
end
|
#dimension_fields_class(dimension) ⇒ Object
123
124
125
126
127
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 123
def dimension_fields_class(dimension)
['repor-dimension-fields',
"repor-dimension-fields--#{css_class(dimension.name)}",
"repor-dimension-fields--#{css_class(dimension.class.name)}"].join(' ')
end
|
#dimension_options ⇒ Object
33
34
35
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 33
def dimension_options
@dim_opts ||= report.dimensions.map { |name, dim| [human_dimension_label(dim), name] }
end
|
#field_for(dimension) ⇒ Object
#fields_for(dimension, &block) ⇒ Object
108
109
110
111
112
113
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 108
def fields_for(dimension, &block)
"<fieldset class='#{dimension_fields_class(dimension)}'>
<legend>#{human_dimension_label(dimension)}</legend>
#{yield}
</fieldset>".html_safe
end
|
#html_fields ⇒ Object
22
23
24
25
26
27
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 22
def html_fields
"<div class='#{wrapper_class}'>
#{axis_fields}
#{dimension_fields.join}
</div>".html_safe
end
|
#prefix ⇒ Object
135
136
137
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 135
def prefix
report.class.name.underscore
end
|
#prefix_for(dimension) ⇒ Object
139
140
141
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 139
def prefix_for(dimension)
"#{prefix}[dimensions][#{dimension.name}]"
end
|
#primary_grouper_field ⇒ Object
42
43
44
45
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 42
def primary_grouper_field
select_tag("#{prefix}[groupers][0]",
options_for_select(dimension_options, report.grouper_names[0]))
end
|
#secondary_grouper_field ⇒ Object
47
48
49
50
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 47
def secondary_grouper_field
select_tag("#{prefix}[groupers][1]",
options_for_select([[nil, nil]]+dimension_options, report.grouper_names[1]))
end
|
#wrapper_class ⇒ Object
115
116
117
|
# File 'lib/repor/serializers/form_field_serializer.rb', line 115
def wrapper_class
"repor-fields repor-fields--#{css_class(report.class.name)}"
end
|