class NewDrgFormGenerator

Public Instance Methods

create_form_file() click to toggle source

Will create output and save it to form filename.

# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 11
def create_form_file
#:TODO: find out how to prevent error when model class is not defined
  @file_name = file_name
  form_name = file_name #if formname.size == 0
  begin
    @model = file_name.classify.constantize
  rescue Exception => e
    msg = ([e.message]+e.backtrace).join($/)
    Rails.logger.error(msg)
    pp msg
    @model = nil
  end
  return (pp "Error loading #{file_name.classify} model! Aborting.") if @model.nil?
#
  yml = top_level_options + index_options + result_set_options + form_top_options + form_fields_options + localize_options
  create_file "app/forms/#{form_name}.yml", yml
end

Private Instance Methods

embedded_form_field(offset) click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 182
def embedded_form_field(offset)
  yml = ''
  field_index = 10
  @model.embedded_relations.keys.each do |embedded_name|
    yml << ' '*offset + "#{field_index}:\n"
    yml << ' '*(offset+2) + "name: #{embedded_name}\n"
    yml << ' '*(offset+2) + "type: embedded\n"
    yml << ' '*(offset+2) + "form_name: #{embedded_name[0,embedded_name.size - 1]}\n"
    yml << '#' + ' '*(offset+2) + "html:\n"
    yml << '#' + ' '*(offset+4) + "height: 500\n"
    field_index += 10      
  end
  yml
end
form_field(field_name, index, offset, field_type) click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 150
def form_field(field_name, index, offset, field_type)
  helper = I18n.t("helpers.label.#{@file_name}.choices4_#{field_name}")
  type, eval = 'select',''
  if helper.class == Hash || helper.match( 'Translation missing' )
    if field_name[-3, 3] == '_id'
      eval = "eval: dc_choices4('#{field_name[0, field_name.size - 3]}', 'description_field_name', 'id')\n"
    elsif field_type.match('Boolean')
      type = 'check_box'
    else
      type = 'text_field'
    end
  end

  yml = ' '*offset
  yml << "#{index}:\n"
  offset += 2

  yml << ' '*offset + "name: #{field_name}\n"
  yml << ' '*offset + "type: #{type}\n"
  yml << ' '*offset + eval if eval.size > 0
  yml << ' '*offset + "size: 50\n" if type == 'text_field'
  if type == 'select'
    yml << ' '*offset + "html:\n"
    offset += 2
    yml << ' '*offset + "include_blank: true\n"
  end 
  yml
end
form_fields_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 200
def form_fields_options
  forbidden = %w[_id created_by updated_by created_at updated_at]
  tab_index = 1
  field_index = 0
  if options.tabs? 
    yml = "  tabs:\n"
    @model.fields.each do |attr_name, field|
      next if forbidden.include?(attr_name)

      if field_index%100 == 0
        yml << "    tab#{tab_index}:\n"
        field_index = 0
        tab_index += 1
      end
      field_index += 10
      yml << form_field(attr_name, field_index, 6, field.options[:type].to_s)
    end
    yml << "    tab#{tab_index}:\n"
    yml << embedded_form_field(6)

  else  
    yml = "  fields:\n"
    @model.fields.each do |attr_name, field|
      next if forbidden.include?(attr_name)

      field_index += 10      
      yml << form_field(attr_name, field_index, 4, field.options[:type].to_s)
    end
    yml << embedded_form_field(4)
  end
  yml
end
form_top_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 115
def form_top_options
  <<EOT
form:
#  height: 600
#  title:
#    field: name
#    edit: Title for edit
#    show: Title for show

  actions: standard
#
#  actions: 
#    1: 
#      type: ajax
#      controller: ppk
#      action: prepare_document
#      method: (get),put,post
#      caption: Prepare document
#    2: 
#      type: script
#      caption: Cancle 
#      js: parent.reload();
#    3:
#      type: submit
#      caption: Send
#      params:
#        before-save: send_mail
#        after-save: return_to parent.reload

EOT
end
index_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 50
def index_options
  <<EOT 
index:
  filter: id as text_field
  actions: standard
  
#  actions:
#    3: 
#      type: link
#      controller: controller_name
#      action: action_name
#      table: table_name
#      form_name: form_name

EOT
end
localize_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 249
def localize_options
  forbidden = %w[_id created_by updated_by created_at updated_at]
  yml =<<EOT
  
#################################################################
# Localization
en:
  helpers:
    label:
      #{file_name}:
        tabletitle: 
        choices4_ : 

EOT
  @model.attribute_names.each do |attr_name|
    next if forbidden.include?(attr_name)
    yml << "        #{attr_name}: \n"
  end
  yml
end
result_set_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 70
def result_set_options
  <<EOT 
result_set:
#  filter: controls_filter
#  actions_width: 100
#  per_page: 10
  
  actions: standard

#  actions: 
#    1:
#      type: link
#      controller: controller_name
#      action: action_name
#      table: table_name
#      form_name: form_name
#      target: target      
#      method: (get),put,post      
# 
# Choose from
# #{@model.attribute_names.join(',')}
  columns:
    10:  
      name: #{@model.attribute_names[1]}
      style: 'color: red'
      width: 10%
      align: right
    20:  
      name: #{@model.attribute_names[2]}
    30: 
      name: created_at
      format: '%d.%m.%Y'
    40: 
      name: created_by
      eval: dc_name4_id,dc_user,name
    50: 
      name: active
      eval: dc_icon4_boolean

EOT
end
top_level_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 33
def top_level_options
  <<EOT 
# Form for #{file_name}
table: #{file_name}
#title: Alternative title
#extend: extend
#controls: controls_file
#readonly: 1
#permissions:
#  can_view: role_name

EOT
end
xform_fields_options() click to toggle source
# File lib/generators/new_drg_form/new_drg_form_generator.rb, line 236
def xform_fields_options
  forbidden = %w[_id created_by updated_by created_at updated_at]
  tab_index = 1
  field_index = 0
  @model.fields.each do |name, field|
    pp [name, field.options[:type].to_s]
    #pp [name, type]
  end
end