Class: Formbuilder::Form

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/formbuilder/form.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#show_admin_onlyObject

Returns the value of attribute show_admin_only.



7
8
9
# File 'app/models/formbuilder/form.rb', line 7

def show_admin_only
  @show_admin_only
end

#show_blindObject

Returns the value of attribute show_blind.



7
8
9
# File 'app/models/formbuilder/form.rb', line 7

def show_blind
  @show_blind
end

Instance Method Details

#copy_response_fields!(other_form) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/models/formbuilder/form.rb', line 17

def copy_response_fields!(other_form)
  other_form.response_fields.each_with_index do |response_field, i|
    self.response_fields.create(
      label: response_field.label,
      type: response_field.type,
      field_options: response_field.field_options,
      sort_order: response_field.sort_order,
      required: response_field.required,
      blind: response_field.blind,
      admin_only: response_field.admin_only
    )
  end
end

#filtered_response_fieldsObject



39
40
41
42
43
44
# File 'app/models/formbuilder/form.rb', line 39

def filtered_response_fields
  query = response_fields
  query = query.reject { |rf| rf.blind? } unless show_blind
  query = query.reject { |rf| rf.admin_only? } unless show_admin_only
  query
end

#input_fieldsObject



9
10
11
# File 'app/models/formbuilder/form.rb', line 9

def input_fields
  response_fields.reject { |rf| !rf.input_field }
end

#multi_page?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'app/models/formbuilder/form.rb', line 31

def multi_page?
  num_pages > 1
end

#num_pagesObject



35
36
37
# File 'app/models/formbuilder/form.rb', line 35

def num_pages
  response_fields_by_page.length
end

#response_fields_by_pageObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/models/formbuilder/form.rb', line 46

def response_fields_by_page
  [].tap do |a|
    a.push []

    page_index = 0
    filtered_response_fields.each do |response_field|
      if response_field.field_type == 'page_break'
        a << []
      else
        a.last << response_field
      end
    end

    a.delete_if { |page| page.empty? }
    a.push([]) if a.empty?
  end
end

#response_fields_for_page(x) ⇒ Object



64
65
66
# File 'app/models/formbuilder/form.rb', line 64

def response_fields_for_page(x)
  response_fields_by_page[x - 1] # 0-indexed
end

#response_fields_jsonObject



13
14
15
# File 'app/models/formbuilder/form.rb', line 13

def response_fields_json
  self.response_fields.to_json(methods: [:field_type, :cid])
end