Class: Qe::Element

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

Direct Known Subclasses

Paragraph, Question, QuestionGrid, Section

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.max_label_lengthObject



148
149
150
# File 'app/models/qe/element.rb', line 148

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

Instance Method Details

#all_elementsObject

include nested elements



136
137
138
139
140
141
142
# File 'app/models/qe/element.rb', line 136

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



116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'app/models/qe/element.rb', line 116

def duplicate(page, parent = nil)
  new_element = self.class.new(self.attributes)
  case parent.class.to_s
  when ChoiceField
    new_element.conditional_id = parent.id
  when QuestionGrid, QuestionGridWithTotal
    new_element.question_grid_id = parent.id
  end
  new_element.save(:validate => false)
  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"

def self.human_attrib_name(attr)

HUMANIZED_ATTRIBUTES[attr.to_sym] || super

end

Returns:

  • (Boolean)


80
81
82
# File 'app/models/qe/element.rb', line 80

def has_response?(answer_sheet = nil)
  false
end

#position(page = nil) ⇒ Object



88
89
90
91
92
93
94
# File 'app/models/qe/element.rb', line 88

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)



111
112
113
# File 'app/models/qe/element.rb', line 111

def ptemplate
  self.class.to_s.underscore
end

#question?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'app/models/qe/element.rb', line 106

def question?
  self.kind_of?(Question)
end

#required?(answer_sheet = nil) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'app/models/qe/element.rb', line 84

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

#reuseable?Boolean

Returns:

  • (Boolean)


144
145
146
# File 'app/models/qe/element.rb', line 144

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

#set_position(position, page = nil) ⇒ Object



96
97
98
99
100
101
102
103
104
# File 'app/models/qe/element.rb', line 96

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