Class: Edgarj::FormDrawer::Base

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

Overview

Edgarj::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 Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(drawer, record, f) ⇒ Base

INPUTS

drawer

Edgarj::Drawer instance

record

instance of AR

f

FormBuilder



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/helpers/edgarj/form_drawer.rb', line 20

def initialize(drawer, record, f)
  @drawer = drawer
  @vc     = drawer.vc   # just short-cut
  @record = record
  @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 Attribute Details

#fObject

Returns the value of attribute f.



14
15
16
# File 'app/helpers/edgarj/form_drawer.rb', line 14

def f
  @f
end

#vcObject

Returns the value of attribute vc.



14
15
16
# File 'app/helpers/edgarj/form_drawer.rb', line 14

def vc
  @vc
end

Instance Method Details

#_draw_2_lane(&block) ⇒ Object

flip field to left-lane or right-lane



108
109
110
111
112
113
114
# File 'app/helpers/edgarj/form_drawer.rb', line 108

def _draw_2_lane(&block)
  result = @left ? @vc.tag(:tr, nil, true) : ''.html_safe
  result += yield
  result += '</tr>'.html_safe if !@left
  @left = !@left              # flip it
  result
end

#_draw_belongs_to_field(parent_model, col) ⇒ Object

draw ‘belongs_to’ field for AR



159
160
161
162
163
# File 'app/helpers/edgarj/form_drawer.rb', line 159

def _draw_belongs_to_field(parent_model, col)
  _draw_head(col, nil){
    @vc.draw_belongs_to_field(@f, @drawer.popup_path(col), col.name)
  }
end

#_draw_field(col) ⇒ Object

draw general field



178
179
180
181
182
183
184
185
# File 'app/helpers/edgarj/form_drawer.rb', line 178

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

#_draw_head(col, label = nil, &block) ⇒ Object

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



123
124
125
126
127
128
129
130
# File 'app/helpers/edgarj/form_drawer.rb', line 123

def _draw_head(col, label=nil, &block)
  _draw_2_lane{
    html = @vc.(:th, label || @vc.column_label(col))
    html << @vc.(:td, '')
    html << (@vc.(:td) do yield end)
    html
  }
end

#columnsObject



78
79
80
81
# File 'app/helpers/edgarj/form_drawer.rb', line 78

def columns
  drawer = @vc.drawer
  drawer.columns_for(drawer.form_columns, :form)
end

#drawObject

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



48
49
50
51
52
53
54
55
56
57
58
# File 'app/helpers/edgarj/form_drawer.rb', line 48

def draw()
  @vc.(:table) do
    @left       = true
    @vc.capture do
      for col in columns do
        @vc.concat col.field(@record, self)
      end
      @vc.concat('<td colspan=3></td>'.html_safe) if !@left
    end
  end
end

#draw_address(col) ⇒ Object

draw address fields



149
150
151
# File 'app/helpers/edgarj/form_drawer.rb', line 149

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

#draw_bitset(col, bitset) ⇒ Object

draw bitset checkboxes field



154
155
156
# File 'app/helpers/edgarj/form_drawer.rb', line 154

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

#draw_boolean(col) ⇒ Object



165
166
167
# File 'app/helpers/edgarj/form_drawer.rb', line 165

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

#draw_created_at(col) ⇒ Object



140
141
142
# File 'app/helpers/edgarj/form_drawer.rb', line 140

def draw_created_at(col)
  ''
end

#draw_enum(col, enum) ⇒ Object



173
174
175
# File 'app/helpers/edgarj/form_drawer.rb', line 173

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

#draw_field(rec, col) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/helpers/edgarj/form_drawer.rb', line 60

def draw_field(rec, col)
  draw_method = "draw_#{col.name}"
  if self.class.method_defined?(draw_method) then
    send(draw_method, col)
  elsif (enum = get_enum(col))
    draw_enum(col, enum)
  elsif (bitset = get_bitset(col))
    draw_bitset(col, bitset)
  else
    parent_model = @vc.model.belongs_to_AR(col)
    if parent_model
      _draw_belongs_to_field(parent_model, col)
    else
      _draw_field(col)
    end
  end
end

#draw_file(col) ⇒ Object



169
170
171
# File 'app/helpers/edgarj/form_drawer.rb', line 169

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

#draw_id(col) ⇒ Object



132
133
134
# File 'app/helpers/edgarj/form_drawer.rb', line 132

def draw_id(col)
  ''
end

#draw_type(col) ⇒ Object



136
137
138
# File 'app/helpers/edgarj/form_drawer.rb', line 136

def draw_type(col)
  ''
end

#draw_updated_at(col) ⇒ Object



144
145
146
# File 'app/helpers/edgarj/form_drawer.rb', line 144

def draw_updated_at(col)
  ''
end

#edgarj_address?(col) ⇒ Boolean

base method for derived class

Returns:

  • (Boolean)


84
85
86
# File 'app/helpers/edgarj/form_drawer.rb', line 84

def edgarj_address?(col)
  @record.class.edgarj_address?(col)
end

#edgarj_file?(col) ⇒ Boolean

base method for derived class

Returns:

  • (Boolean)


89
90
91
# File 'app/helpers/edgarj/form_drawer.rb', line 89

def edgarj_file?(col)
  @record.class.edgarj_file?(col)
end

#get_bitset(col) ⇒ Object

return bitset of the column

Derived class must overwrite to return expected bitset



103
104
105
# File 'app/helpers/edgarj/form_drawer.rb', line 103

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

#get_enum(col) ⇒ Object

return enum of the column

Derived class must overwrite to return expected enum



96
97
98
# File 'app/helpers/edgarj/form_drawer.rb', line 96

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