states.rb revision 6097dbf238b09e567fd30f7dd8fd2b6974f74259
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen#
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen# states:
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen# * pending
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen# * fetching
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen# * processing
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen# * failed
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen# * done
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen#
1f696b6f364516a2d79f946ca88149bafdc9d5adTimo Sirainenmodule OntologyVersion::States
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen extend ActiveSupport::Concern
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen include StateUpdater
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen TERMINAL_STATES = State::TERMINAL_STATES
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen included do
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen after_save :after_update_state, if: :change_applicable?
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen end
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen def change_applicable?
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen state_changed? &&
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen parent.nil?
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen end
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen def state_message
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen msg = [state]
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen if last_error
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen lines = last_error.split("\n")
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen if (ind=lines.index("*** Error:")) and (out = lines[ind+1]).present?
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen i = ind+2
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen while lines[i] and !lines[i].include?("hets: user error") do
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen out += " "+lines[i]
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen i+=1
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen end
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen msg << out.sub(URI.regexp,"...").sub(/ \/[A-Za-z0-9\/.]*/," ...")
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen elsif last_error.include?("exited with status")
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen msg << last_error[0,50]+" ... "+last_error.match("exited with status.*")[0]
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen else
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen msg << lines.first
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen end
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen end
3281669db44d09a087a203201248abbc81b3cc1aTimo Sirainen msg.join(": ")
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen end
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen protected
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen def after_update_state
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen ontology.state = state
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen ontology.save!
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen if ontology.distributed?
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen ontology.children.update_all(state: ontology.state)
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen end
be6ad6e46ecb8c7126b421819046e7f4857a2babTimo Sirainen end
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainenend
f1ed4fa248aaf6841ba638b9d66b2738d9f7aa18Timo Sirainen