Class: Edgar::FormDrawer::Base

Inherits:
Object
  • Object
show all
Defined in:
app/helpers/edgar/form_drawer.rb

Overview

Edgar::FormDrawer::Base draws HTML table tag based data entry form. This also provides default methods for SearchFormDrawer search condition entry form.

How to Customize

  1. First, it may be enough to just redefine @options

  2. Next, when draw_ATTR() is defined, it is called. See ModelPermissionControllerHelper for example.

  3. Then, consider to overwrite draw_ATTR() method.

Direct Known Subclasses

Search

Instance Method Summary (collapse)

Constructor Details

- (Base) initialize(template, model, f)

INPUTS

f

FormBuilder



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/helpers/edgar/form_drawer.rb', line 17

def initialize(template, model, f)
  @template = template
  @model    = model
  @f        = f
  
  # define default options for draw_X() method, where X is :flags, :kind,
  # and so on.  @options can be redefined at derived class.
  @options  = {
    :flags      => {},
    :kind       => {},
    :boolean    => {},
    :default    => {
      :date     => {:use_month_numbers=>true},
      :integer  => {:size=>16},
      :text     => {:size=>20},
    }
  }
end

Instance Method Details

- (Object) _draw_2_lane(&block)

flip field to left-lane or right-lane



105
106
107
108
109
110
111
# File 'app/helpers/edgar/form_drawer.rb', line 105

def _draw_2_lane(&block)
  result = @left ? '<tr>' : ''
  result += yield
  result += '</tr>' if !@left
  @left = !@left              # flip it
  result
end

- (Object) _draw_belongs_to_field(parent_model, col)

draw 'belongs_to' field for AR



156
157
158
159
160
# File 'app/helpers/edgar/form_drawer.rb', line 156

def _draw_belongs_to_field(parent_model, col)
  _draw_head(col, @template.draw_belongs_to_label(@f, col.name)){
    @template.draw_belongs_to_field(@f, col.name)
  }
end

- (Object) _draw_field(col)

draw general field



175
176
177
178
179
180
181
182
# File 'app/helpers/edgar/form_drawer.rb', line 175

def _draw_field(col)
  case col.type
  when :boolean
    draw_boolean(col)
  else
    _draw_head(col){ @template.draw_field(@f, col, @options[:default]) }
  end
end

- (Object) _draw_head(col, label = nil, &block)

draw head(label). SearchFormDrawer will overwrite to insert operator.

INPUTS

col

column info

label

if not-nil, label is used rather than human_attribute_name of col.name for field-label

block

wrapped field-drawing logic



120
121
122
123
124
125
126
127
# File 'app/helpers/edgar/form_drawer.rb', line 120

def _draw_head(col, label=nil, &block)
  _draw_2_lane{
    html = @template.(:th, label || @model.class.human_attribute_name(col.name))
    html << @template.(:td, '')
    html << (@template.(:td) do yield end)
    html
  }
end

- (Object) columns



75
76
77
78
# File 'app/helpers/edgar/form_drawer.rb', line 75

def columns
  m = @template.model_class
  m.columns_for(m.view_form_columns)
end

- (Object) draw

draw form

I18n for label is:

  1. usual column uses model.human_attribute_name()

  2. 'belongs_to' column uses:

** I18n.t('activerecord.attributes.MODEL.EXT_ID') ** parent.human_name



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/helpers/edgar/form_drawer.rb', line 44

def draw()
  adrs_field  = {}
  @template.(:table) do
    @left       = true
    html        = ''
    for col in columns do
      draw_method = "draw_#{col.name}"
      html << if self.class.method_defined?(draw_method) then
        send(draw_method, col)
      elsif edgar_address?(col)
        draw_address(col)
      elsif edgar_file?(col)
        draw_file(col)
      elsif (enum = get_enum(col))
        draw_enum(col, enum)
      elsif (bitset = get_bitset(col))
        draw_bitset(col, bitset)
      else
        parent_model = @template.model_class.belongs_to_AR(col)
        if parent_model
          _draw_belongs_to_field(parent_model, col)
        else
          _draw_field(col)
        end
      end
    end
    html << '<td colspan=3></td>'.html_safe if !@left
    html.html_safe
  end
end

- (Object) draw_address(col)

draw address fields



146
147
148
# File 'app/helpers/edgar/form_drawer.rb', line 146

def draw_address(col)
  _draw_head(col){ @template.draw_address(@f, col) }
end

- (Object) draw_bitset(col, bitset)

draw bitset checkboxes field



151
152
153
# File 'app/helpers/edgar/form_drawer.rb', line 151

def draw_bitset(col, bitset)
  _draw_head(col){ @template.draw_bitset(@f, col, bitset, @options[:flags]) }
end

- (Object) draw_boolean(col)



162
163
164
# File 'app/helpers/edgar/form_drawer.rb', line 162

def draw_boolean(col)
  _draw_head(col){ @template.draw_boolean(@f, col, @options[:boolean]) }
end

- (Object) draw_created_at(col)



137
138
139
# File 'app/helpers/edgar/form_drawer.rb', line 137

def draw_created_at(col)
  ''
end

- (Object) draw_enum(col, enum)



170
171
172
# File 'app/helpers/edgar/form_drawer.rb', line 170

def draw_enum(col, enum)
  _draw_head(col){ @template.draw_enum(@f, col, enum) }
end

- (Object) draw_file(col)



166
167
168
# File 'app/helpers/edgar/form_drawer.rb', line 166

def draw_file(col)
  _draw_head(col){ @template.draw_file(@f, col) }
end

- (Object) draw_id(col)



129
130
131
# File 'app/helpers/edgar/form_drawer.rb', line 129

def draw_id(col)
  ''
end

- (Object) draw_type(col)



133
134
135
# File 'app/helpers/edgar/form_drawer.rb', line 133

def draw_type(col)
  ''
end

- (Object) draw_updated_at(col)



141
142
143
# File 'app/helpers/edgar/form_drawer.rb', line 141

def draw_updated_at(col)
  ''
end

- (Boolean) edgar_address?(col)

base method for derived class

Returns:

  • (Boolean)


81
82
83
# File 'app/helpers/edgar/form_drawer.rb', line 81

def edgar_address?(col)
  @model.class.edgar_address?(col)
end

- (Boolean) edgar_file?(col)

base method for derived class

Returns:

  • (Boolean)


86
87
88
# File 'app/helpers/edgar/form_drawer.rb', line 86

def edgar_file?(col)
  @model.class.edgar_file?(col)
end

- (Object) get_bitset(col)

return bitset of the column

Derived class must overwrite to return expected bitset



100
101
102
# File 'app/helpers/edgar/form_drawer.rb', line 100

def get_bitset(col)
  @template.get_bitset(@f.object.class, col)
end

- (Object) get_enum(col)

return enum of the column

Derived class must overwrite to return expected enum



93
94
95
# File 'app/helpers/edgar/form_drawer.rb', line 93

def get_enum(col)
  @template.get_enum(@f.object.class, col)
end