Class: FinePrint::Contract
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- FinePrint::Contract
- Defined in:
- app/models/fine_print/contract.rb
Instance Method Summary collapse
- #is_latest? ⇒ Boolean
- #is_published? ⇒ Boolean
- #new_version ⇒ Object
-
#no_signatures ⇒ Object
Validation #.
- #publish ⇒ Object
- #signed_by?(user) ⇒ Boolean
- #unpublish ⇒ Object
Instance Method Details
#is_latest? ⇒ 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
30 31 32 |
# File 'app/models/fine_print/contract.rb', line 30 def is_published? !version.nil? end |
#new_version ⇒ Object
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_signatures ⇒ Object
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 |
#publish ⇒ Object
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
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 |
#unpublish ⇒ Object
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 |