Module: RequiresApproval::ClassMethods

Defined in:
lib/requires_approval.rb

Instance Method Summary collapse

Instance Method Details

#prepare_tables_for_requires_approvalObject

adds the correct tables and columns for requires_approval



179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/requires_approval.rb', line 179

def prepare_tables_for_requires_approval
  self.reset_column_information

  # adds is_active to the parent table
  self.add_requires_approval_fields
  self.reset_column_information

  # adds our versions table
  self.drop_versions_table
  self.create_versions_table
  
end

#requires_approval_for(*attrs) ⇒ Object



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/requires_approval.rb', line 192

def requires_approval_for(*attrs)
  self.set_options(attrs.extract_options!)

  # set up our attributes that require approval
  self.class_attribute :fields_requiring_approval
  self.fields_requiring_approval = attrs.collect(&:to_s)

  # set up delegates
  self.set_up_version_delegates

  # create a blank version before create to handle if no
  # attributes were ever set
  self.before_validation(
    :latest_unapproved_version_with_nil_check,
    :on => :create
  )
  
  # create the versions class
  self.create_versions_class
  self.has_many :versions, 
    :class_name => self.versions_class.name,
    :foreign_key => self.versions_foreign_key

  self.has_one :latest_unapproved_version,
    :autosave => true,
    :class_name => self.versions_class.name,
    :foreign_key => self.versions_foreign_key,
    :conditions => [
      "#{self.versions_table_name}.is_approved = ?", false
    ]
end

#unapprovedObject



224
225
226
227
# File 'lib/requires_approval.rb', line 224

def unapproved
  includes(:latest_unapproved_version)
    .where("#{self.versions_table_name}.id IS NOT NULL")
end

#versions_classObject

the class which our versions are



230
231
232
# File 'lib/requires_approval.rb', line 230

def versions_class
  "#{self.name}::#{self.versions_class_name}".constantize
end