Class: ActiveReporter::Serializer::FormField

Inherits:
Base
  • Object
show all
Includes:
ActionView::Helpers::FormOptionsHelper, ActionView::Helpers::FormTagHelper
Defined in:
lib/active_reporter/serializer/form_field.rb

Instance Attribute Summary

Attributes inherited from Base

#report

Instance Method Summary collapse

Methods inherited from Base

#axis_summary, #filter_summary, #human_aggregator_label, #human_aggregator_value_label, #human_category_value_label, #human_dimension_label, #human_dimension_value_label, #human_null_value_label, #human_number_value_label, #human_time_value_label, #initialize, #record_type, #time_formats

Constructor Details

This class inherits a constructor from ActiveReporter::Serializer::Base

Instance Method Details

#aggregator_fieldObject



24
25
26
# File 'lib/active_reporter/serializer/form_field.rb', line 24

def aggregator_field
  select_tag("#{prefix}[aggregator]", options_for_select(aggregator_options, report.aggregators.keys.first))
end

#aggregator_optionsObject



16
17
18
# File 'lib/active_reporter/serializer/form_field.rb', line 16

def aggregator_options
  @aggregator_options ||= report.all_aggregators.map { |name, agg| [human_aggregator_label(name => agg), name] }
end

#axis_fieldsObject



36
37
38
39
40
41
42
43
# File 'lib/active_reporter/serializer/form_field.rb', line 36

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_classObject



99
100
101
# File 'lib/active_reporter/serializer/form_field.rb', line 99

def axis_fields_class
  "active-reporter-axis-fields"
end

#bin_dimension_field(dimension) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/active_reporter/serializer/form_field.rb', line 68

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



80
81
82
# File 'lib/active_reporter/serializer/form_field.rb', line 80

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



111
112
113
# File 'lib/active_reporter/serializer/form_field.rb', line 111

def bin_max_placeholder(dimension)
  "max"
end

#bin_min_field(dimension) ⇒ Object



76
77
78
# File 'lib/active_reporter/serializer/form_field.rb', line 76

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



115
116
117
# File 'lib/active_reporter/serializer/form_field.rb', line 115

def bin_min_placeholder(dimension)
  "min"
end

#bin_step_field(dimension) ⇒ Object



84
85
86
# File 'lib/active_reporter/serializer/form_field.rb', line 84

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



119
120
121
# File 'lib/active_reporter/serializer/form_field.rb', line 119

def bin_step_placeholder(dimension)
  dimension.bin_width.inspect
end

#category_dimension_field(dimension) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/active_reporter/serializer/form_field.rb', line 56

def category_dimension_field(dimension)
  options = [[nil, nil]]

  dimension.all_values.each do |value|
    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(name) ⇒ Object



131
132
133
# File 'lib/active_reporter/serializer/form_field.rb', line 131

def css_class(name)
  name.to_s.demodulize.underscore.dasherize
end

#dimension_fieldsObject



45
46
47
# File 'lib/active_reporter/serializer/form_field.rb', line 45

def dimension_fields
  report.dimensions.map { |name, dimension| field_for(dimension) }.compact
end

#dimension_fields_class(dimension) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/active_reporter/serializer/form_field.rb', line 103

def dimension_fields_class(dimension)
  [
    "active-reporter-dimension-fields",
    "active-reporter-dimension-fields--#{css_class(dimension.name)}",
    "active-reporter-dimension-fields--#{css_class(dimension.class.name)}"
  ].join(" ")
end

#dimension_optionsObject



20
21
22
# File 'lib/active_reporter/serializer/form_field.rb', line 20

def dimension_options
  @dimension_options ||= report.dimensions.map { |name, dim| [human_dimension_label(dim), name] }
end

#field_for(dimension) ⇒ Object



49
50
51
52
53
54
# File 'lib/active_reporter/serializer/form_field.rb', line 49

def field_for(dimension)
  case dimension
  when ActiveReporter::Dimension::Category then category_dimension_field(dimension)
  when ActiveReporter::Dimension::Bin then bin_dimension_field(dimension)
  end
end

#fields_for(dimension, &block) ⇒ Object



88
89
90
91
92
93
# File 'lib/active_reporter/serializer/form_field.rb', line 88

def fields_for(dimension, &block)
  "<fieldset class='#{dimension_fields_class(dimension)}'>
    <legend>#{human_dimension_label(dimension)}</legend>
    #{yield}
  </fieldset>".html_safe
end

#html_fieldsObject



9
10
11
12
13
14
# File 'lib/active_reporter/serializer/form_field.rb', line 9

def html_fields
  "<div class='#{wrapper_class}'>
    #{axis_fields}
    #{dimension_fields.join}
  </div>".html_safe
end

#prefixObject



123
124
125
# File 'lib/active_reporter/serializer/form_field.rb', line 123

def prefix
  report.class.name.underscore
end

#prefix_for(dimension) ⇒ Object



127
128
129
# File 'lib/active_reporter/serializer/form_field.rb', line 127

def prefix_for(dimension)
  "#{prefix}[dimensions][#{dimension.name}]"
end

#primary_grouper_fieldObject



28
29
30
# File 'lib/active_reporter/serializer/form_field.rb', line 28

def primary_grouper_field
  select_tag("#{prefix}[groupers][0]", options_for_select(dimension_options, report.grouper_names[0]))
end

#secondary_grouper_fieldObject



32
33
34
# File 'lib/active_reporter/serializer/form_field.rb', line 32

def secondary_grouper_field
  select_tag("#{prefix}[groupers][1]", options_for_select([[nil, nil]] + dimension_options, report.grouper_names[1]))
end

#wrapper_classObject



95
96
97
# File 'lib/active_reporter/serializer/form_field.rb', line 95

def wrapper_class
  "active-reporter-fields active-reporter-fields--#{css_class(report.class.name)}"
end