Module: Redmineup::ActsAsDraftable::InstanceMethods

Defined in:
lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb

Overview

ClassMethods

Instance Method Summary collapse

Instance Method Details

#clear_draftObject



142
143
144
145
146
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 142

def clear_draft
  if last_draft && last_draft.destroy
    self.draft_id = nil
  end
end

#draftObject



110
111
112
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 110

def draft
  Draft.find_by_id(draft_id)
end

#dump_to_draftObject



129
130
131
132
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 129

def dump_to_draft
  instance_values.default = nil
  Marshal.dump(instance_values)
end

#last_draftObject



120
121
122
123
124
125
126
127
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 120

def last_draft
  @last_draft ||= Redmineup::ActsAsDraftable::Draft.where(
    target_type: self.class.name,
    parent_type: parent_for_draft.try(:class).try(:to_s),
    parent_id:   parent_for_draft.try(:id),
    user_id:     User.current.try(:id)
  ).last
end

#load_from_draft(string) ⇒ Object



134
135
136
137
138
139
140
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 134

def load_from_draft(string)
  values = Marshal.load(string)

  values.each do |name, value|
    instance_variable_set("@#{name}", value)
  end
end

#parent_for_draftObject



114
115
116
117
118
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 114

def parent_for_draft
  return self if id.present?

  self.class.draft_parent.present? ? send(self.class.draft_parent) : self
end

#save_draftObject



89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 89

def save_draft
  return false unless new_record? || changed?

  draft = self.draft || Draft.new
  draft.data = dump_to_draft
  draft.user_id = User.current.try(:id)
  draft.parent = parent_for_draft
  draft.target_type = self.class.name

  result = draft.save
  self.draft_id = draft.id if result
  result
end

#update_draft(attributes) ⇒ Object



103
104
105
106
107
108
# File 'lib/redmineup/acts_as_draftable/up_acts_as_draftable.rb', line 103

def update_draft(attributes)
  with_transaction_returning_status do
    assign_attributes(attributes)
    save_draft
  end
end