Class: Fe::Element

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/fe/element.rb

Direct Known Subclasses

Paragraph, Question, QuestionGrid, Section

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.max_label_lengthObject



130
131
132
# File 'app/models/fe/element.rb', line 130

def self.max_label_length
  @@max_label_length ||= Fe::Element.columns.find{ |c| c.name == "label" }.limit
end

Instance Method Details

#all_elementsObject

include nested elements



118
119
120
121
122
123
124
# File 'app/models/fe/element.rb', line 118

def all_elements
  if respond_to?(:elements)
    (elements + elements.collect(&:all_elements)).flatten
  else
    []
  end
end

#duplicate(page, parent = nil) ⇒ Object

copy an item and all it’s children



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'app/models/fe/element.rb', line 98

def duplicate(page, parent = nil)
  new_element = self.class.new(self.attributes.except('id', 'created_at', 'updated_at'))
  case parent.class.to_s
    when Fe::ChoiceField
      new_element.conditional_id = parent.id
    when Fe::QuestionGrid, Fe::QuestionGridWithTotal
      new_element.question_grid_id = parent.id
  end
  new_element.save(:validate => false)
  Fe::PageElement.create(:element => new_element, :page => page) unless parent

  # duplicate children
  if respond_to?(:elements) && elements.present?
    elements.each {|e| e.duplicate(page, new_element)}
  end

  new_element
end

#has_response?(answer_sheet = nil) ⇒ Boolean

HUMANIZED_ATTRIBUTES =

:slug => "Variable"

changed.include?(‘address1’)

def self.human_attrib_name(attr)

HUMANIZED_ATTRIBUTES[attr.to_sym] || super

end

Returns:

  • (Boolean)


39
40
41
# File 'app/models/fe/element.rb', line 39

def has_response?(answer_sheet = nil)
  false
end

#limit(answer_sheet = nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/models/fe/element.rb', line 43

def limit(answer_sheet = nil)
  if answer_sheet && object_name.present? && attribute_name.present?
    begin
      unless eval("answer_sheet." + self.object_name + ".nil?")
        klass = eval("answer_sheet." + self.object_name + ".class")
        column = klass.columns_hash[self.attribute_name]
        column.limit
      end
    rescue
      nil
    end
  end
end

#page_id(page = nil) ⇒ Object



79
80
81
82
83
84
85
# File 'app/models/fe/element.rb', line 79

def page_id(page = nil)
  if page
    page.id
  else
    pages.first.id
  end
end

#position(page = nil) ⇒ Object



61
62
63
64
65
66
67
# File 'app/models/fe/element.rb', line 61

def position(page = nil)
  if page
    page_elements.where(:page_id => page.id).first.try(:position)
  else
    self[:position]
  end
end

#ptemplateObject

by default the partial for an element matches the class name (override as necessary)



93
94
95
# File 'app/models/fe/element.rb', line 93

def ptemplate
  self.class.to_s.underscore
end

#question?Boolean

Returns:

  • (Boolean)


87
88
89
# File 'app/models/fe/element.rb', line 87

def question?
  self.kind_of?(Question)
end

#required?(answer_sheet = nil) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/fe/element.rb', line 57

def required?(answer_sheet = nil)
  required == true
end

#reuseable?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'app/models/fe/element.rb', line 126

def reuseable?
  (self.is_a?(Question) || self.is_a?(Fe::QuestionGrid) || self.is_a?(Fe::QuestionGridWithTotal))
end

#set_position(position, page = nil) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'app/models/fe/element.rb', line 69

def set_position(position, page = nil)
  if page
    pe = page_elements.where(:page_id => page.id).first
    pe.update_attribute(:position, position) if pe
  else
    self[:position] = position
  end
  position
end