Class: FinePrint::Contract

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/fine_print/contract.rb

Instance Method Summary collapse

Instance Method Details

#is_latest?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'app/models/fine_print/contract.rb', line 34

def is_latest?
  is_published? && self == same_name.published.first
end

#is_published?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'app/models/fine_print/contract.rb', line 30

def is_published?
  !version.nil?
end

#new_versionObject



67
68
69
70
# File 'app/models/fine_print/contract.rb', line 67

def new_version
  Contract.where(name: name, version: nil).first || \
    dup.tap{|contract| contract.version = nil}
end

#no_signaturesObject

Validation #



76
77
78
79
80
# File 'app/models/fine_print/contract.rb', line 76

def no_signatures
  return if signatures.empty?
  errors.add(:base, I18n.t('fine_print.contract.errors.already_signed'))
  throw :abort
end

#publishObject



46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/fine_print/contract.rb', line 46

def publish
  errors.add(:base, I18n.t('fine_print.contract.errors.already_published')) \
    if is_published?
  return false unless errors.empty?

  self.version = (same_name.published.first.try(:version) || 0) + 1

  save.tap do |success|
    instance_exec(self, &FinePrint.config.contract_published_proc) if success
  end
end

#signed_by?(user) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
44
# File 'app/models/fine_print/contract.rb', line 38

def signed_by?(user)
  user_class_name = self.class.class_name_for(user)
  signatures.loaded? ?
    signatures.any? do |signature|
      signature.user_id == user.id and signature.user_type == user_class_name
    end : signatures.where(user_id: user.id, user_type: user_class_name).exists?
end

#unpublishObject



58
59
60
61
62
63
64
65
# File 'app/models/fine_print/contract.rb', line 58

def unpublish
  errors.add(:base, I18n.t('fine_print.contract.errors.not_latest')) \
    unless is_latest?
  return false unless errors.empty?

  self.version = nil
  save
end